拆解 OpenClaw 架构(三):4 组件 + 6 级降级,Agent 运行引擎的源码级设计¶
Ch01.1128 拆解 OpenClaw 架构(三):4 组件 + 6 级降级,Agent 运行引擎的源码级设计¶
📊 Level ⭐⭐ | 5.4KB |
entities/拆解-openclaw-架构三4-组件-6-级降级agent-运行引擎的源码级设计.md
拆解 OpenClaw 架构(三):4 组件 + 6 级降级,Agent 运行引擎的源码级设计¶
来源: 科技充电站
发布日期: 2026-02-28
原文链接: https://mp.weixin.qq.com/s/Q2WbVA4w-QsaIaueTvTeAQ
AI 时代,有两种行为:
一种,活在别人的评测里,把模型的强当自己的强,痴人说梦;
另一种,活在真实的实战里,用最顶级的 AI,武装自己。
前者在噪音里坐享"技术平权",后者在 疼痛中完成"自我进化"。
朋友们好,我是行小招。
这是 OpenClaw 深度技术解析系列的第三篇。前两篇我们拆了消息流水线和人格系统,今天聊 Agent Runner,也就是 OpenClaw 最核心的运行引擎。
上篇结尾我留了个问题:430,000+ 行 TypeScript,到底在忙什么?
这个问题的答案,颠覆了我对"AI Agent 框架"的认知。
读 OpenClaw 源码之前,我以为它自己实现了完整的 Agent 运行时:接收用户输入、调用模型、解析输出、执行工具、循环往复。毕竟 430,000+ 行代码摆在那里,什么都能写。
但实际翻开代码,发现一个大多数分析文章都忽略的事实: OpenClaw 不实现自己的 Agentic Loop。
核心的"接收输入 → 调模型 → 解析输出 → 执行工具 → 再调模型"这个循环,由一个叫 Pi Agent 的外部框架处理。OpenClaw 的代码里写得很直白:运行时 "derived from pi-mono"。
那 430,000 行 TypeScript 在做什么?
答案是: 调用周围的一切。
模型解析与 fallback 链、API key 冷却轮转、system prompt 组装(上篇讲过)、上下文窗口监控、压缩失败级联、记忆冲刷、auth profile 切换、session 锁管理、工具策略过滤,这些全是 OpenClaw 自己的代码。Pi Agent 只负责最内层的 loop,外面那一圈又一圈的"基础设施"全是 OpenClaw 构建的。
这跟我做系统架构的经验完全一致。任何一个正经的生产系统,核心业务逻辑可能只有几百行,但错误处理、降级策略、重试机制、监控告警加起来,轻松是核心逻辑的 10 倍。Agent 系统也不例外,LLM 调用本身不难,难的是调用周围的一切。
Pi Agent 嵌入式架构:不造轮子,但造车间¶
OpenClaw 嵌入 Pi Agent 的方式很有讲究。它不是把 Pi 当作一个子进程或远程服务来调用(那样会有进程间通信的开销和复杂度),而是直接嵌入 Pi SDK 的 session 对象到自己的进程中。
具体来说, runEmbeddedPiAgent() 这个函数是整个 Agent 运行的入口。它做了几件事:
通过早期 hooks( before_model_resolve 和 legacy before_agent_start )解析要用哪个 provider 和 model,应用上下文窗口 guards,然后解析 auth profiles 并在失败时自动轮转候选,重试次数跟 profile 数量成正比。
Agent 循环的完整路径是:intake → context assembly → model inference → tool execution → streaming replies → persistence
→ 原文存档
关联¶
- 相关概念: Harness Engineering