openclaw学习笔记

0 阅读3分钟

架构图

screenshot-20260403-095408.png

读图要点(和代码对齐)

含义
进线层每条渠道各自收消息,最后都汇到统一的路由 + 上下文格式。
路由决定「这条消息 → 哪个 agent、哪条 session」,配置 bindings 在这里生效。
Gateway进程里跑 HTTP/WSS、渠道生命周期、与 agent 管线共存的控制面(startGatewayServer 一带)。
自动回复管线从「进线上下文」到「发起一轮 getReply」的中间层;队列保证同会话不乱序。
Agent真正「调模型 + 执行 tool」的循环;「模型返回 → 动作」 主要是 tool call 路由,不是单独再画一层「命令解释器」。
出线把最终回复按渠道发回用户。

按你那张架构图,从外到内、先竖切再扩面的顺序最省时间。下面是一条可直接照做的路线(每阶段都有明确「读完能解释什么」)。


阶段 0:固定心智模型(半天)

  • 能默画那张图:渠道 → 路由 → 会话/上下文 → 自动回复 → Agent+模型+Tool → 回渠道;Gateway 是长驻进程,CLI 是控制面。
  • 读:docs/concepts/agent-loop.md(只读「Entry points」+「How it works」两节即可)。

Agent Loop (OpenClaw)

An agentic loop is the full “real” run of an agent: intake → context assembly → model inference → tool execution → streaming replies → persistence. It’s the authoritative path that turns a message into actions and a final reply, while keeping session state consistent.

intake ->输入 context assembly ->上下文组装 model inference->模型推理 tool execution -> 工具调用 streaming replies → 流式回复 persistence -> 持久化


阶段 1:路由与会话(1~2 天)

目标:说清楚「这条消息为什么进这个 agent、为什么是这个 sessionKey」。

  1. src/routing/resolve-route.ts(抓 resolveAgentRoute、buildAgentSessionKey 思路即可)
  1. docs/concepts/session.md(若有)或配置里 bindings 相关文档:docs/gateway/configuration-reference.md 里搜 bindings / session
  1. 插件/SDK 侧对照:src/plugin-sdk/routing.ts(看对外暴露了什么)

阶段 2:进线竖切一条渠道(2~3 天)

目标:从「收到一条消息」跟到「调用 dispatch / getReply」。

  • 任选 一个 你最熟的渠道:
  • 内置:例如 src/telegram 或 src/discord 里搜 resolveAgentRoute / dispatchReply
  • 或挑一个简单扩展:extensions/twitch(之前搜到过典型调用链)
  • 顺藤摸到:src/auto-reply/reply/dispatch-from-config.ts 入口附近(不必通读 800 行,只看「谁调了 getReply」)。

阶段 3:队列与多消息(1 天)

目标:解释「连发多条消息时为什么不会乱」。

  • docs/concepts/queue.md
  • src/process/command-queue.ts(看 enqueue、gatewayDraining、resetAllLanes 注释)
  • 与 agent 衔接:docs/concepts/agent-loop.md 里 Queueing 小节

阶段 4:Agent 与 Tool(3~5 天)

目标:说清楚「模型输出如何变成动作」——主要是 tool call。

  1. docs/concepts/agent-loop.md 全文
  1. 代码:src/agents/pi-embedded.js 一带 + 搜 runEmbeddedPiAgent 的调用栈(从 src/auto-reply/reply/followup-runner.ts 进)
  1. 工具面:docs/tools/index.md + 任选一个内置 tool 实现路径(不必全看完)

阶段 5:Gateway 进程壳(2~3 天)

目标:知道「Gateway 进程起什么、关什么」,不通读 server.impl.ts。

  1. src/cli/gateway-cli/run.ts → run-loop.ts → startGatewayServer 签名与返回的 close
  1. src/gateway/server.impl.ts:只读 createGatewayRuntimeState 调用块附近 + 文件末尾 return { close }
  1. docs/gateway/protocol.md(控制面/RPC 语义)

阶段 6:插件与自定义(并行或压轴,持续)

目标:能自己加能力且不动坏边界。

  1. docs/plugins/architecture.md
  1. docs/plugins/building-plugins.md + docs/plugins/manifest.md
  1. 对照一个最小扩展:extensions/* 里任选一个 openclaw.plugin.json + index.ts
  1. 必读边界:src/plugin-sdk/AGENTS.md、AGENTS.md 里插件/channel 规则

建议节奏

  • 每天只推进一个阶段的主线;卡住就回到阶段 0 那张图,标出「卡在第几条箭头」。
  • server.impl.ts 不要按行啃;需要哪块(HTTP、WS、渠道)再局部搜函数名。
  • 每阶段结束用一句话自检:例如阶段 1 结束应能回答「sessionKey 由哪些输入算出来」。