Phase 4 / Scale & Orchestration / s12

Putting It Together

完整 agent——12 个机制组合,与 OpenClaw 的真实架构对照

回顾:我们构建了什么

12 个 Session,每次只加一个机制。现在把它们组合在一起:

Session 依赖关系s01 → s12
s01Agent Loops02Tool Systems03System Prompts04Session Mgmts05Context Windows06Workspace Memorys07Sandboxs08Permissionss09Plan Modes10Sub-agentss11Skills & Routings12Full Agent

架构总览

把 12 个机制画在一张架构图上:

Phase 1The Core Loops01 - s03Agent Loops01 · while(tool_call)Tool Systems02 · 注册与分发System Prompts03 · 动态构造Phase 2Memory & Contexts04 - s06Session Mgmts04 · 持久化与隔离Context Windows05 · token 压缩Workspace Memorys06 · AGENTS.mdPhase 3Safety & Controls07 - s09Sandboxs07 · 白名单与隔离Permissionss08 · 风险分级审批Plan Modes09 · TodoWritePhase 4Scale & Orchestrations10 - s12Sub-agentss10 · 隔离 messages[]Skills & Routings11 · 按需加载

与 OpenClaw 源码对照

OpenClaw 是一个完整的开源 TypeScript 项目(references/ground-truth/openclaw/),我们可以直接对比源码结构。以下是我们 12 个机制在 OpenClaw 中的对应模块:

我们的 Agent vs OpenClaw 源码——逐层对照

12 个机制与真实开源实现的映射

python12 sessions 累积
1# Phase 1: Core Loop
2registry = ToolRegistry()
3registry.register(BashTool())
4registry.register(ReadFileTool())
5registry.register(WriteFileTool())
6registry.register(TodoWriteTool(plan_mgr))
7
8context = ContextBuilder(workspace)
9
10# Phase 2: Memory
11sessions = SessionManager(workspace)
12memory = WorkspaceMemory(workspace)
13ctx_window = ContextWindowManager()
14
15# Phase 3: Safety
16policy = SecurityPolicy(workspace)
17perms = PermissionManager(policy)
18
19# Phase 4: Orchestration
20subagents = SubagentManager(provider, workspace, registry)
21
22def run(query, session_key="default"):
23 session = sessions.get_or_create(session_key)
24 system = context.build_system_prompt()
25 system += memory.inject_into_prompt()
26
27 messages = [
28 {"role": "system", "content": system},
29 *session.get_history(),
30 {"role": "user", "content": query},
31 ]
32 while True:
33 if ctx_window.should_compact(messages):
34 messages = ctx_window.compact(messages)
35 response = provider.chat(messages=messages, tools=registry.get_definitions())
36 if response.stop_reason != "tool_use":
37 break
38 for tc in response.tool_calls:
39 ok, reason = perms.check(tc.name, tc.params)
40 if ok:
41 result = registry.execute(tc.name, tc.params)
42 else:
43 result = f"Permission denied: {reason}"
44 messages.append(tool_result(result))
45 sessions.save(session)
typescriptsrc/ 目录结构映射
1// OpenClaw 源码 (开源 TypeScript)
2// github.com/openclaw/openclaw
3
4// Phase 1: Core Loop
5// src/agents/pi-embedded-runner/run.ts
6// while (true) { runEmbeddedAttempt(...) }
7// src/agents/pi-tools.ts
8// createOpenClawCodingTools() -> ToolRegistry
9// src/agents/system-prompt.ts
10// buildSystemPrompt(PromptMode: full|minimal|none)
11
12// Phase 2: Memory
13// src/sessions/ -> SessionManager
14// src/agents/compaction.ts -> ContextCompactor
15// splitMessagesByTokenShare() + generateSummary()
16// src/agents/workspace.ts -> Bootstrap files:
17// AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md,
18// USER.md, MEMORY.md
19
20// Phase 3: Safety
21// src/security/ -> audit.ts, dangerous-tools.ts
22// src/agents/tool-policy.ts
23// allow/deny lists, ownerOnly tools
24// src/agents/tool-policy-pipeline.ts
25
26// Phase 4: Orchestration
27// src/agents/tools/subagents-tool.ts
28// src/agents/tools/sessions-spawn-tool.ts
29// src/agents/skills.ts -> SkillsLoader
30// src/routing/ -> session routing

对照总结

机制我们的实现OpenClaw 源码文件
Agent Loopwhile(tool_call)pi-embedded-runner/run.tswhile (true)
Tool SystemTool 基类 + Registrypi-tools.tscreateOpenClawCodingTools()
System PromptContextBuilder 拼接system-prompt.ts — PromptMode: full/minimal/none
SessionJSONL 文件sessions/ 目录
Context 压缩阈值触发 + LLM 总结compaction.tssplitMessagesByTokenShare()
Workspace MemoryAGENTS.mdworkspace.ts — 6 种 bootstrap 文件
Security白名单 + 路径隔离security/ + tool-policy.ts
Permission风险分类 + 审批tool-policy-pipeline.ts + ownerOnly
Plan ModeTodoWriteTodoWrite tool(工具列表中)
Sub-agents隔离 messages[]subagents-tool.ts — 独立 session + minimal prompt
SkillsSKILL.md 按需加载skills.tsresolveSkillsPromptForRun()

“Most successful implementations use simple, composable patterns.” — Anthropic, Building Effective Agents

本课代码: agents/s12_full_agent.py — 383 行

距离生产:383 行 vs 生产级代码

我们用 383 行 Python 实现了 12 个机制。OpenClaw 的 src/ 目录有数万行 TypeScript。这个差距不是”代码质量”的问题——而是横切关注点的累积

每个机制的生产级复杂度

我们的实现行数OpenClaw 对应增加了什么
agent_loop~20run.ts 1165错误分类、provider failover、stream、retry
ToolRegistry~15pi-tools.ts + tools/参数验证、超时、结果截断、并行执行
ContextBuilder~15system-prompt.ts 689模块化组装、PromptMode、缓存
SessionManager~25sessions/并发锁、序列化修复、过期清理
ContextWindowManager~30compaction.ts 400+分块摘要、安全边距、tool result 净化
SecurityPolicy~30policy.rs 2300+引号感知解析、5 层防御、symlink 防护

第一性原理回顾

回到最根本的问题:一个 agent 到底是什么?

从第一性原理看,agent 就是”一个能使用工具的 LLM 调用循环”。我们在 s01 用 20 行代码证明了这一点。后面的 11 课(s02-s12)全是在这个核心上叠加约束:

每个机制都是对一个真实约束的回应。没有一个是”为了架构优美”而存在的。

这些开源实现是否合理?

批判性地看,当前的开源 agent 生态有几个值得质疑的地方:

过度模块化。一些 agent 框架把简单问题搞复杂了——定义了十几个抽象类和接口,但核心逻辑只有几十行。如果你的 agent 只需要 bash + read_file + write_file 三个工具,用 s03 的 140 行代码就够了,不需要一个”框架”。Anthropic 自己也说:“最成功的实现用的都是简单、可组合的 pattern,而不是复杂框架。”

安全策略的边界。我们分析了 zeroclaw 的 2300 行安全策略,它确实覆盖了很多攻击面。但有一个根本问题:如果 agent 运行在 Docker 容器里,容器本身就是安全边界,那主机层面的命令白名单是否多余?OpenClaw 同时使用了容器沙箱和命令策略——这是”纵深防御”的思路,但每一层都有维护成本。在资源有限的小项目中,选择容器隔离作为唯一防线可能是更务实的选择。

Memory 的缺陷。当前所有开源 agent 的 memory 都是基于文本摘要的——用 LLM 总结旧对话然后注入新 context。这个方法有一个根本缺陷:摘要会丢失细节,而且无法被精确查询。你不能问”上次我们讨论的那个函数的第三个参数是什么”——摘要里可能没有这个细节。这是 agent memory 和人类记忆的共同弱点。一个可能的方向是 RAG(Retrieval Augmented Generation)——把完整历史存入向量数据库,按需检索。OpenClaw 的 memory-tool.ts 已经有 memory_search 的雏形。

产品反思:为什么 OpenClaw 的增长远超 Claude Code

先看数据。截至 2026 年初,OpenClaw 有 199K GitHub stars,Claude Code 有 67K。2026 年 1 月,OpenClaw 在 72 小时内涨了 6 万星。个人 AI Agent 市场从 2025 年的 78 亿美元膨胀到预计 2030 年的 480-520 亿美元(年复合增长率 44%)。

这两个项目不是同一赛道的竞争者。Claude Code 是终端里的编码工具,给开发者用。OpenClaw 是跨平台的个人 AI 助手,给所有人用。但它们共享同一个技术内核——我们在 12 课中构建的那个。它们的差异在内核之上。

为什么 OpenClaw 增长更快?五个维度的分析:

1. 用户规模差异(市场视角)。Claude Code 的用户是开发者——全球大约 2700 万人。OpenClaw 的用户是任何使用 IM 的人——WhatsApp 月活 20 亿,Telegram 月活 9 亿。可触达的用户基数差了两个数量级。即使 OpenClaw 的转化率远低于 Claude Code,绝对数字也能碾压。

2. 从建议到行动的范式转变(产品视角)。2025 年之前,AI 产品的主流形态是聊天机器人——你问它问题,它给你答案,但你自己去执行。OpenClaw 跨过了这条线:它不只告诉你怎么做,它替你做——发邮件、预约会议、管理文件、甚至操作 Discord 群。这是从”advisor”到”executor”的转变。Claude Code 也是 executor(它写代码并运行),但只在编码这一个领域。OpenClaw 在所有领域都是 executor。

3. 本地优先的信任模型(技术视角)。Claude Code 依赖 Anthropic 的云 API——代码和上下文发送到远端服务器。OpenClaw 运行在用户自己的设备上,数据不离开本地。对于企业用户,这不只是隐私偏好——这是合规要求。调研数据显示本地优先是企业采纳的关键驱动力。

4. 开源的飞轮效应(生态视角)。OpenClaw 的 MIT 协议 + Skills 插件架构让社区贡献爆发式增长。每个新 skill 都让 agent 多一种能力,吸引更多用户,进而吸引更多开发者贡献 skill。Claude Code 也是开源的,但它的扩展方式是 MCP server——一个更重的抽象,贡献门槛更高。

5. 渠道即分发(CEO 视角)。OpenClaw 接入了 7 个 IM 平台。这不是功能,这是分发策略。用户不需要安装新应用、学新界面——在 Telegram 里 @openclaw 就行。这就是为什么 src/ 下有 Discord、Telegram、Slack、WhatsApp 等完整集成。技术上这些是”channel adapter”,产品上这是”零摩擦分发”。Claude Code 需要用户打开终端——这本身就是一个筛选器,过滤掉了大部分非开发者用户。

对 learn-openclaw 项目的启示

我们在 12 课中建了 agent 的引擎——agent loop、tool dispatch、session、memory、security、sub-agent。这个引擎是一切的基础:无论是 Claude Code 还是 OpenClaw,内核都是 while(tool_call) → execute → append → repeat

但 OpenClaw 在引擎之上还建了三层:

  1. 渠道层src/channels/src/discord/src/telegram/ 等)——把引擎接入用户已有的 IM 工具
  2. 自动回复管线src/auto-reply/,150+ 文件)——处理消息路由、排队、去重、命令解析、回复分发
  3. 网关与协议层src/gateway/,160+ 文件)——WebSocket 连接、设备认证、多节点协调

这三层是我们的 12 课没有覆盖的。它们不是 agent 的核心机制——它们是产品工程。如果你的目标是理解 agent 怎么工作,12 课足够了。如果你的目标是做一个 OpenClaw 级别的产品,你还需要学习 IM 集成、消息管线、网关设计——这些是另一个维度的知识。

接下来做什么

你现在有两条路径。

**做工具:**从 s01 的 20 行代码开始,接入真实 LLM API,按需叠加 s02-s12 的机制。大多数内部工具用 s01-s05 就够了。

**做产品:**读 references/ground-truth/openclaw/src/auto-reply/src/channels/——你现在有足够的背景知识理解它们。然后决定你要接入哪个渠道、服务哪类用户。记住:OpenClaw 的火爆不是因为引擎比 Claude Code 好,而是因为它把引擎装进了更多人能触达的产品里。