Dive into Claude Code 深度解析:Agent核心循环的9步管线与5种停止条件
【免费下载链接】Dive-into-Claude-CodeA Systematic Analysis and Discussion of Claude Code for Designing Today's and Future AI Agent Systems项目地址: https://gitcode.com/gh_mirrors/di/Dive-into-Claude-Code
Dive into Claude Code 是一个对 Claude Code 进行源码级架构分析的开项目,它拆解了 AI 智能体(Agent)核心循环的每一轮是如何运转的。本文将带你快速看懂贯穿智能体循环的9 步管线与5 种停止条件——你会发现,这套系统 98.4% 都是确定性基础设施,真正负责“思考”的 AI 逻辑只占约 1.6%。
为什么值得读这份解析
大多数人以为“聪明的 Agent”来自更复杂的模型或更花哨的循环,但 Claude Code 给出的答案恰恰相反:
- 核心循环就是一个 while 循环,遵循 ReAct 模式:组装上下文 → 调用模型 → 分派工具 → 检查权限 → 执行 → 重复。
- 复杂度在循环之外:权限门控、上下文管理、工具路由、故障恢复,这些才是让 Agent 稳定可靠的“骨架”。
这个观点来自 README.md 的 TL;DR:“Agent 循环是一个简单的 while 循环;真正的工程复杂度存在于它周围的系统里。”理解了这一点,你就抓住了整个架构的命脉。
系统全景:Agent 核心循环如何嵌入整个系统
Claude Code 由 7 个组件构成:用户 → 接口 → Agent 循环 → 权限系统 → 工具 → 状态与持久化 → 执行环境。其中Agent Loop 是心脏,它向上向工具“提出行动”,由权限系统给出“允许/询问/拒绝”,再把工具结果收集回来,同时负责从状态中读取数据并持久化。
整个系统可以看成5 层、21 个子系统:表层(入口与渲染)、核心层(Agent 循环 + 压缩管道)、安全/行动层(权限、工具、钩子)、状态层(转录、记忆)、后端层(Shell、MCP、沙箱)。这张分层图能帮你定位“核心循环”在其中的位置——它处在核心层,而上下文整形、压缩管道都围绕它服务。
智能体循环的 9 步管线:每一轮都走这条流水线
这是本文的核心。Claude Code 的每一轮(turn)都严格执行一条 9 步管道,无论来自命令行、SDK 还是 IDE,所有入口最终都汇聚到同一个queryLoop:
| 步骤 | 名称 | 做什么 |
|---|---|---|
| 1 | 设置解析(Settings resolution) | 读取并合并配置,确定本轮运行的规则 |
| 2 | 状态初始化(State init) | 初始化本轮的运行状态 |
| 3 | 上下文组装(Context assembly) | 从 9 个有序来源拼装模型能看到的内容 |
| 4 | 条件式上下文管理 | 按压力触发 5 个“调用前整形”阶段 |
| 5 | 模型调用(Model call) | 请求大模型生成下一步动作 |
| 6 | 工具分派(Tool dispatch) | 解析模型返回的工具调用意图 |
| 7 | 权限门控(Permission gate) | 拒绝优先地判断允许 / 询问 / 拒绝 |
| 8 | 工具执行(Tool execution) | 真正运行工具,拿到结果 |
| 9 | 停止条件检查(Stop condition) | 判断是否结束本轮,否则回到第 1 步 |
第 4 步是很多人忽略的关键:在调用模型之前,系统会按顺序检查五个上下文整形阶段(预算缩减 → 裁剪 Snip → 微压缩 Microcompact → 上下文折叠 Context Collapse → 自动压缩 Auto-Compact),每个阶段只在满足自身条件时才真正改动上下文。这样模型始终拿到“刚好够用、又不超载”的信息。
💡 两条执行路径:
StreamingToolExecutor让工具一边流入一边开始执行(降低延迟);后备的runTools则把工具区分为“可并发安全”与“互斥”两类。
5 种停止条件:循环什么时候停
一个 Agent 循环最怕失控——既不能该停不停(无限打转、烧钱),也不能不该停就停(任务没做完)。Claude Code 用恰好 5 种停止条件来控制循环的边界,这也是长任务 Agent 稳定性的关键:
| 停止条件 | 触发时机 | 直觉理解 |
|---|---|---|
| 无工具调用 | 模型这一轮不再请求任何工具 | 活干完了,给出最终回答 |
| 达到最大轮次 | 迭代次数超过设定上限 | 预算护栏,防止无限循环 |
| 上下文溢出 | 上下文窗口撑爆 | 信息太多,触发压缩或终止 |
| 钩子干预 | Stop 钩子介入 | 用户/开发者插入的自定义刹车 |
| 显式中止 | 用户主动叫停 | 人类随时保留控制权 |
这张“停止条件清单”是长任务 Agent 的核心机制:它让系统知道何时该继续、何时该验证、何时该停下来找人,而不是盲目地把 token 花光。
上下文与恢复:循环之外的“隐形护栏”
循环能跑得稳,靠的是两样东西:稳定的上下文,和出错后的恢复。
- 9 个有序上下文来源:系统提示 → 环境信息 → CLAUDE.md 层级 → 路径规则 → 自动记忆 → 工具元数据 → 对话历史 → 工具结果 → 压缩摘要。
- 4 级 CLAUDE.md 记忆:托管级 → 用户级 → 项目级 → 本地级,全部基于文件,可查、可改、可进版本控制。
循环并非“一错就崩”,而内置了多重视恢复机制:
- 输出 token 上限逐级放宽:每轮最多重试 3 次
- 反应式压缩:每轮最多触发一次
- 提示过长降级:上下文折叠溢出 → 反应式压缩 → 终止
- 流式后备 + 备用模型切换:主路径失败时自动兜底
这套“恢复护栏”正是 98.4% 基础设施的核心体现——循环本身很简单,难的是让它在真实世界里不出事。
小结:把这份解析用起来的 3 个要点
- 别把复杂度押在模型上:Agent 的可靠来自循环之外的权限、上下文与恢复系统,这就是“护城河是 harness 而非模型”的含义。
- 给循环装好 9 步管线和 5 种停止条件:明确每一轮做什么、何时停,是长任务 Agent 不打转、不失控的前提。
- 上下文是稀缺资源:先用渐进式压缩“整形”,再交给模型,远比事后截断更稳。
想继续深入,可阅读 docs/architecture.md 的“轮次执行:9 步管道”章节,以及 docs/architecture_zh.md 的中文详解;若你想亲手构建自己的 Agent,docs/build-your-own-agent.md 提供了从设计问题到取舍的完整指南。
【免费下载链接】Dive-into-Claude-CodeA Systematic Analysis and Discussion of Claude Code for Designing Today's and Future AI Agent Systems项目地址: https://gitcode.com/gh_mirrors/di/Dive-into-Claude-Code
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考