第 7 章 一条消息的旅程:OpenClaw 请求处理全流程

🎯 本章特色:从用户按下发送键到收到回复,一条消息在 OpenClaw 内部经历了怎样的旅程?本章以"请记住我的生日"这条真实消息为例,逐帧拆解五个处理阶段,让你看清智能体协作的每一个齿轮。

本章目录:

节 内容 你将学到
1 从一条消息说起 一个具体场景引出全流程概览
2 核心组件与职责 用户、渠道层、Gateway、大模型、工具层各自的边界
3 流程总览:五个阶段 消息接收、思考决策、工具执行、回复生成、消息发送
4 实例解析:"请记住我的生日" 用真实案例逐阶段走完全流程
5 完整时序图与数据流 可视化各组件的交互顺序
6 流程优化与性能调优 减少调用、并行化、缓存、精简提示词
7 总结与进阶 核心知识回顾、课后练习

1. 从一条消息说起

让我们从一个具体的时刻开始。

2026 年 3 月 20 日上午 9 点 55 分,用户在北京西城区的家中打开浏览器,在 OpenClaw 的网页聊天界面中输入了一行文字:

请记住 3 月 10 日是我的生日

按下发送键的那一刻,用户可能认为这只是一个简单的请求,就像对朋友说"帮我记着这件事"一样自然。但在屏幕背后,一场精密的协作正在上演。这条只有十几个汉字的简短消息,将穿越五个处理阶段,经过多个核心组件的接力配合,在不到两秒的时间内完成从接收、理解、执行到回复的整个生命周期。

理解这个流程,是理解 OpenClaw 如何工作的关键。它不仅能帮助开发者诊断问题、优化性能,更能让我们看清智能体与人类协作的本质:不是魔法,而是一系列可预测、可调试、可优化的工程步骤。

在交互式请求处理路径中,Gateway(网关)是唯一与大模型直接交互的组件。渠道层只负责消息的接收和发送,不接触大模型、不执行工具、不管理会话状态。

接下来,我们先认识参与这场"接力赛"的五位选手。


2. 核心组件与职责

在深入流程之前,先认识参与请求处理的核心组件。它们各司其职,通过明确的接口协作,共同完成从用户消息到回复的转换。

2.1 用户(User)

用户是整个流程的起点和终点。从系统架构的角度看,用户通过某种渠道与 OpenClaw 交互,发送消息并接收回复。用户不需要知道系统内部有多少组件、经过多少阶段。用户感知的只是"发送消息,收到回复"这个简单过程。系统复杂度对用户完全透明,这是良好用户体验的关键。

2.2 渠道层(Channel/Provider)

渠道层(Channel/Provider,消息渠道适配器) 是 OpenClaw 与外部世界的接口,负责将不同渠道的消息转换为系统内部统一格式,并将回复转换回渠道私有格式。

渠道层的核心职责包括:

以 webchat 为例,渠道层通过 WebSocket 接收用户消息,提取核心字段(文本内容、发送时间、会话 ID),转换为 OpenClaw 内部格式,转发给 Gateway。收到 Gateway 返回的回复后,再通过 WebSocket 推送给用户。

渠道层不做什么:不接触大模型 API、不执行工具调用、不管理会话状态、不组装上下文。

渠道层与大模型解耦,带来两个关键好处:

好处 说明 示例
新增渠道不影响核心 只需实现渠道插件 添加 WhatsApp 支持,Gateway 和大模型完全不需要改动
更换大模型不影响渠道 只需修改 Gateway 配置 从通义千问切换到 DeepSeek,所有渠道插件继续正常工作

常见的渠道类型包括 webchat(WebSocket)、Telegram(Bot API)、Discord(Gateway API)、WhatsApp(Business API)、Slack(Events API)等。

2.3 Gateway(网关)

Gateway(网关,系统核心调度器) 是 OpenClaw 的核心组件,是整个系统的"大脑"。它负责接收渠道层的消息、组装上下文、调用大模型、执行工具、管理会话状态,并将回复返回给渠道层。

Gateway 的核心职责包括:

几乎所有核心逻辑都集中在 Gateway,这样的设计有三个关键优势:

第一,状态集中管理。 所有会话状态(历史对话、记忆内容、Token 用量)都存储在 Gateway,渠道层无状态。这意味着同一个用户可以通过不同渠道与同一个会话交互,会话状态不会因为渠道切换而丢失。

第二,权限集中控制。 工具调用的权限检查在 Gateway 统一进行,渠道层不需要知道工具的存在。这样可以防止渠道层被恶意利用执行未授权操作。

第三,日志集中记录。 所有工具调用、大模型交互、错误信息都在 Gateway 统一记录,便于后续分析和调试。

2.4 大模型(LLM)

大模型(LLM,Large Language Model,大型语言模型) 是 OpenClaw 的"智能引擎",负责理解用户意图、规划工具调用、生成自然语言回复。

在整个请求处理流程中,Gateway 会与大模型进行多次交互。典型的交互模式如下:

交互轮次 输入内容 输出内容 目的
第 1 轮 系统提示 + 会话历史 + 用户消息 工具调用计划(JSON) 决策要做什么
第 2 轮 系统提示 + 会话历史 + 用户消息 + 工具执行结果 自然语言回复 生成用户可读的回复

如果工具调用需要多轮(比如先查目录再写文件),交互轮次会更多。

大模型有几个明确的边界:不直接访问文件系统、不直接调用网络 API、不直接管理会话状态、不直接发送消息给用户。大模型与外部系统解耦,带来两个关键好处:

2.5 工具层(Tools)

工具层(Tools,工具执行引擎) 是 OpenClaw 的"手脚",负责执行具体的操作,如读写文件、执行命令、控制浏览器、搜索网络等。

工具层的核心职责包括:

工具层不决定调用哪个工具,这个决策由大模型做出。工具层也不直接与大模型通信,而是通过 Gateway 中转。

工具层与大模型解耦,带来两个关键好处:

下面这张表总结了五个组件的边界划分:

组件 核心职责 不做什么
用户 发送消息、接收回复 不关心内部实现
渠道层 消息格式转换、协议适配 不接触大模型、不执行工具
Gateway 上下文组装、调度、状态管理 不直接生成回复内容
大模型 意图理解、工具规划、回复生成 不直接访问文件系统或网络
工具层 执行具体操作 不决定调用哪个工具

五个组件的简要关系如下图:

OpenClaw 系统架构简图

理解了各组件的职责边界,接下来俯瞰整个处理流程。


3. 流程总览

3.1 五个阶段

一条消息从发送到回复,大致经历五个阶段。每个阶段都有明确的目标和参与者:

阶段 名称 主要参与者 做什么
第 1 阶段 消息接收与上下文组装 渠道层 → Gateway 接收消息,组装系统提示、加载历史、搜索记忆
第 2 阶段 大模型思考与决策 Gateway → LLM 理解意图,规划需要调用的工具
第 3 阶段 工具执行 Gateway → 工具层 执行工具调用,收集结果
第 4 阶段 回复生成 Gateway → LLM 整合工具结果,生成自然语言回复
第 5 阶段 消息发送 Gateway → 渠道层 → 用户 将回复推送回用户

用一张消息流程图来直观展示这五个阶段的关系:

一条消息的完整旅程

这五个阶段环环相扣,形成完整的处理链路。任何一个环节出现问题,都可能导致整个流程失败。但设计良好的系统会在每个阶段都设置错误处理机制,确保即使部分环节出错,也能优雅降级而不是完全崩溃。

3.2 完整时序图与数据流

为了帮助读者更直观地理解整个流程,下面是各组件在五个阶段中的交互时序:

OpenClaw 消息时序图

从时序图中可以清楚地看到:

这种清晰的层次结构,使得系统的每个部分都可以独立演进和替换。

下面用一个具体例子来走一遍完整流程。


4. 实例解析:"请记住我的生日"

4.1 第 1 阶段:消息接收与上下文组装

这是整个流程的起点,目标是将用户消息转换为大模型可以理解的完整 Prompt(提示词,发送给大模型的完整输入文本)。

渠道层通过 WebSocket 接收到用户消息,提取核心字段(文本内容、发送时间、会话 ID),转换为 OpenClaw 内部统一格式,转发给 Gateway。

Gateway 收到消息后,开始组装完整的 Prompt。这个过程包含四个步骤:

(1)加载系统提示 => (2)加载会话历史 => (3)搜索相关记忆 => (4) 拼接完整 Prompt

步骤一:加载系统提示。 系统提示告诉大模型"你是谁、能做什么、应该遵循什么规则",内容包括工具定义、可用技能列表、安全规则、工作区信息等。这些信息来自 IDENTITY.md、SOUL.md、AGENTS.md 等文件,总量可能达到数千个 Token。

步骤二:加载会话历史。 系统加载最近若干轮对话(轮数可配置,通常 10 到 50 轮),让大模型能够理解当前对话的上下文。如果用户刚刚聊过天气,大模型就能理解"也帮我记住这个"中的"这个"指什么。

步骤三:搜索相关记忆。 以用户当前消息为查询条件,查找与当前请求相关的记忆片段,底层通常是 RAG(检索增强生成) 或 向量数据库(Vector Database) 技术。然后注入到 Prompt 中。如果用户之前提到过生日,系统会把这些记录找出来。如果没有相关记忆,这一步返回空结果。

步骤四:拼接完整 Prompt。 将系统提示、会话历史、记忆片段、用户消息拼接成一个完整的字符串,准备发送给大模型。

在这一阶段,可能遇到的错误包括:

错误类型 影响 处理方式
渠道连接失败 消息无法到达 Gateway 用户会立即感知,需要重连
系统提示加载失败 大模型缺少行为指引 使用默认系统提示降级
会话历史加载失败 大模型缺少对话上下文 跳过历史,仅保留当前消息
记忆搜索失败 无法注入相关记忆 跳过记忆注入,不影响后续流程

除渠道连接失败外,其他错误对用户是透明的,系统会优雅降级继续处理。

组装完成后,Gateway 将完整 Prompt 发送给大模型,进入下一个阶段。

4.2 第 2 阶段:大模型思考与决策

这是整个流程的"决策中心",目标是大模型理解用户意图并规划需要调用的工具。

大模型收到完整 Prompt 后,开始分析用户意图。"请记住 3 月 10 日是我的生日"这句话中,"请记住"是核心动词,表示需要将信息持久化存储。"3 月 10 日是我的生日"是要存储的具体内容。

大模型回顾系统提示中定义的工具列表,判断需要调用哪些工具来完成这个请求。对于"记住生日"这个请求,最直接的方式是使用 write 工具,将信息写入每日记忆文件。

大模型生成工具调用计划,以 JSON 格式告诉 Gateway 需要执行什么操作、用什么参数:

{
  "tool": "write",
  "arguments": {
    "path": "memory/2026-03-20.md",
    "content": "- 用户告知:3 月 10 日是他的生日"
  }
}

Gateway 收到计划后,验证工具名称是否合法、参数是否完整,准备执行。

可能遇到的错误包括:

错误类型 说明 处理方式
大模型超时 网络延迟或服务端繁忙 自动重试,超时后告知用户
工具计划格式错误 JSON 解析失败 要求大模型重新生成
工具参数不合法 路径越权、参数缺失 拒绝执行,返回错误信息
认证过期 API Key 失效 提示用户更新配置

这些错误都会反馈给用户,需要用户干预或重试。

4.3 第 3 阶段:工具执行

这是整个流程的"执行中心",目标是将大模型的抽象计划转化为具体的系统操作。

Gateway 调用 write 工具,将指定内容写入 memory/2026-03-20.md 文件。文件写入成功后,工具返回执行结果:

Successfully wrote 58 bytes to memory/2026-03-20.md

Gateway 将执行结果返回给大模型,准备生成回复。

如果这个请求需要多个工具协作,Gateway 会根据工具之间的依赖关系决定执行方式:

场景 A:有依赖关系 → 串行执行

  ┌──────────────┐     ┌──────────────┐
  │ 工具 1:检查  │ ──→ │ 工具 2:写入  │
  │ 目录是否存在  │     │ 文件         │
  └──────────────┘     └──────────────┘

场景 B:无依赖关系 → 并行执行

  ┌──────────────────┐
  │ 工具 1:查北京天气 │ ──┐
  └──────────────────┘   │ 同时执行,总耗时 = max(A, B)
  ┌──────────────────┐   │
  │ 工具 2:查上海天气 │ ──┘
  └──────────────────┘

简单来说:有依赖关系的工具串行执行(先检查目录是否存在再写入文件),没有依赖关系的工具可以并行执行(同时查询多个城市的天气),总耗时取决于最慢的那个调用,而不是所有调用的累加。

可能遇到的错误包括:

错误类型 说明 处理方式
文件权限不足 工作区目录只读 返回错误,提示用户检查权限
网络连接超时 外部 API 不可达 自动重试,失败后告知大模型
命令执行失败 Shell 命令返回非零退出码 返回错误输出,由大模型决策
工具不存在 大模型幻觉了工具名 返回错误,要求重新规划

Gateway 会捕获这些错误,根据情况重试或告知用户。

4.4 第 4 阶段:回复生成

这是整个流程的"表达中心",目标是将技术性的工具结果转化为用户能理解的自然语言回复。

大模型收到工具执行结果后,需要完成三件事:

最终生成的回复可能是:

好的,已经记下来了。3 月 10 日是你的生日,以后我会记住的。🎂

从"Successfully wrote 58 bytes"到"好的,已经记下来了",这个转化过程就是大模型的表达能力在发挥作用。

可能遇到的错误包括大模型超时、回复生成失败、回复过长等。系统会自动重试或使用默认回复,确保用户至少能得到一个响应。

4.5 第 5 阶段:消息发送

这是整个流程的"最后一公里",目标是将生成的回复发送给用户。

Gateway 将回复文本转发给渠道层,渠道层根据会话元数据中的渠道信息,选择对应的渠道插件:

渠道 发送方式 特殊处理
webchat WebSocket 推送 支持流式输出(逐字显示)
Telegram Bot API sendMessage 支持 Markdown 格式
Discord Gateway API 消息长度限制 2000 字符,需分段
WhatsApp Business API 不支持 Markdown 表格
Slack Events API 支持 Block Kit 富文本

发送完成后,渠道层将结果返回给 Gateway。Gateway 记录完整的请求处理日志,包括响应时间、Token 消耗、工具调用次数等指标,用于后续的性能分析和成本核算。

可能遇到的错误包括认证过期、网络错误、渠道限流、消息太长等。渠道层会自动重试或截断处理,确保尽可能送达。

至此,一条消息的完整旅程结束。从用户按下发送键到看到回复,整个过程通常在 1 到 3 秒内完成。


5. 流程优化与性能调优

理解流程的最终目的是优化流程。以下是几个常见的优化方向,适用于开发者和高级用户。

5.1 减少工具调用次数

这是最直接的优化手段。很多时候,多个命令可以合并为一个命令执行。

优化前(2 次工具调用):

调用 1:exec("ls skills/")          → 检查目录是否存在
调用 2:exec("mkdir -p skills/new")  → 创建目录

优化后(1 次工具调用):

调用 1:exec("mkdir -p skills/new")  → mkdir -p 自带"不存在则创建"语义

每次工具调用都有固定开销(大模型思考时间 + 网络往返 + 执行时间),减少调用次数可以直接降低响应时间和 Token 消耗。

5.2 并行化独立工具调用

如果多个工具调用之间没有依赖关系,可以同时发起而不是串行等待。

场景:查询三个城市的天气

串行:web_search("北京天气") → web_search("上海天气") → web_search("广州天气")
      总耗时 = T1 + T2 + T3 ≈ 3 秒

并行:web_search("北京天气") ┐
      web_search("上海天气") ├── 同时执行
      web_search("广州天气") ┘
      总耗时 = max(T1, T2, T3) ≈ 1 秒

简单来说:能并行就并行,总耗时取决于最慢的那个调用,而不是所有调用的累加。

5.3 精简系统提示

系统提示中包含大量工具和技能的定义,但很多请求只用其中一小部分。精简系统提示可以减少 Token 消耗:

优化手段 说明 效果
保持 SKILL.md 简洁 建议小于 5000 tokens 减少输入 Token 数量
只加载必要技能 不相关的技能不注入系统提示 降低噪音,提升理解准确度
压缩工具描述 用精炼的语言描述工具用途 减少系统提示体积

5.4 缓存重复读取的内容

如果同一个文件在短时间内被多次读取,可以缓存第一次读取的结果,后续直接返回缓存。

场景:同一轮对话中多次读取 AGENTS.md

第 1 次:read("AGENTS.md")  → 从磁盘读取,结果写入缓存
第 2 次:read("AGENTS.md")  → 直接返回缓存内容,跳过磁盘 I/O

缓存需要设置合理的失效时间,确保数据的一致性。一般来说,单次对话内的缓存是安全的,跨对话则需要更谨慎的策略。

5.5 优化建议总结

优化方向 适用场景 预期收益 注意事项
减少调用次数 多步骤可合并的操作 降低延迟和 Token 消耗 不要牺牲可读性
并行化调用 多个独立查询 显著缩短总耗时 确保工具间无依赖
精简系统提示 Token 消耗过高 降低成本,提升理解 不能删除必要信息
缓存读取结果 重复读取同一文件 减少 I/O 开销 注意缓存失效策略

这些优化手段需要根据实际情况权衡使用。过度优化可能增加系统复杂度,反而降低可靠性。最好的策略是先保证正确性,再根据性能监控数据有针对性地优化瓶颈环节。


6. 总结与进阶

6.1 本章核心知识回顾

本章通过一个具体的案例,详细解析了 OpenClaw 处理用户请求的完整流程。以下是核心要点回顾:

知识模块 核心要点
组件职责 用户是起点和终点;渠道层做格式转换;Gateway 是核心调度器;大模型负责思考和表达;工具层负责执行
架构原则 Gateway 是唯一与大模型交互的组件;渠道层和工具层都与大模型解耦
五阶段流程 消息接收 → 思考决策 → 工具执行 → 回复生成 → 消息发送
大模型交互 至少两轮:第一轮决策(工具调用计划),第二轮表达(自然语言回复)
错误处理 每个阶段都有降级策略,非致命错误对用户透明
性能优化 减少调用、并行化、精简提示、缓存读取

6.2 关键设计理念

回顾本章内容,有三个设计理念贯穿始终:

第一,关注点分离。 每个组件只做自己擅长的事。渠道层不碰大模型,工具层不做决策,大模型不直接操作系统。这种分离使得每个部分都可以独立演进和替换。

第二,中心化调度。 Gateway 作为唯一的调度中心,集中管理状态、权限和日志。这避免了分布式状态同步的复杂性,也让问题排查更加简单。

第三,优雅降级。 系统在每一步都考虑了失败的可能性。记忆搜索失败不影响对话,工具执行失败可以重试,回复生成失败有兜底方案。这种设计确保了系统的鲁棒性。

6.3 课后练习

  1. 基础题:当用户输入“您好”,统计一下OpenClaw所花费的token数量,以及他花在什么地方。

  2. 进阶题:打开 OpenClaw 的日志文件,找到一次完整的请求处理记录,标注出五个阶段分别对应的日志行。观察每个阶段的耗时,哪个阶段最慢?


本章完

本文为《OpenClaw 实战指南》系列第 7 篇。下一章,我们将深入了解 OpenClaw 的定时任务机制。结合本章的流程知识,你可以构建出真正有用的自动化助手。