OpenClaw全链路调用流程深度拆解
从用户提问到模型响应:OpenClaw全链路调用流程深度拆解
文 | AI编程实践
你在终端敲了一个问题,OpenClaw 背后发生了什么?消息怎么从 Channel 流到 Model Router?Agent Session 什么时候创建?Tool 调用又是怎么注入上下文的?
这篇文章把 OpenClaw 的全链路调用流程拆开——从用户输入到模型返回的每一步,消息怎么构造、参数怎么传递、路由怎么做决策。
一、先看全景:一个请求的 7 段旅程
一个请求从用户输入到模型响应的 7 段旅程:
|
二、逐层拆解:每层做什么、参数怎么传
2.1 Channel 层:消息入口
这是用户和 OpenClaw 交互的”门面”。每个 Channel 负责收消息、格式化,但不做任何业务逻辑。
|
消息统一格式:
|
💡 关键洞察:无论从哪个 Channel 进来,到 Gateway 层的消息格式完全一致。这意味着你可以在 Terminal 里开始一段对话,然后在 Telegram 上无缝继续——因为 sessionId 是全局统一的。
2.2 Gateway 层:核心调度中枢
Gateway 是 OpenClaw 的大脑。它驻留为系统守护进程,监听 127.0.0.1:18789,负责所有请求的调度和组装。
|
Gateway 内部状态机:
|
2.3 Model Router 层:智能路由
这是 OpenClaw 区别于直接用 API 的核心差异。Router 决定”这个问题谁来回答”。
路由策略一:静态规则路由
|
路由策略二:LLM Router(智能路由)
|
路由决策的输入参数:
|
2.4 Agent Session 层:能力注入
确定用哪个模型后,Gateway 给这次请求”装配武器”——注入 System Prompt、挂载 Tool 定义、加载 SKILL。
|
Tool 定义注入示例:
|
2.5 Tool Runtime 层:函数调用中转
当模型返回 finish_reason: "tool_calls" 时,Tool Runtime 接手执行。
|
💡 关键洞察:Tool Runtime 不关心模型具体是谁。它从模型拿到
tool_calls→ 执行函数 → 把结果塞回 messages → 再调模型。这个循环对 Anthropic、OpenAI、Ollama 全部通用——Provider Adapter 负责翻译 API 格式差异。
2.6 Model Provider 层:模型推理
Provider Adapter 把 OpenClaw 的统一格式翻译成各 Provider 的原生 API 格式。
|
Provider Adapter 的核心任务:
|
一次实际调用的参数映射:
|
2.7 Response 回流:逐层返回
模型响应是一条”回头路”,每层都可能做加工。
|
三、一次完整的多轮 Tool Calling 调用示例
用一个实际例子串起全链路。用户问”帮我查北京天气,然后写个简短出行建议”。
第 1 轮:初始请求
|
第 2 轮:携带工具结果的续写
|
四、配置示例:一图看清参数在哪设
|
典型生产配置:
|
五、一张图总结全链路

如果觉得有帮助,欢迎点赞和在看!
夜雨聆风