首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >重磅拆解:【理论篇】Claude Code的动态工作流,一个while循环凭什么干掉状态机

重磅拆解:【理论篇】Claude Code的动态工作流,一个while循环凭什么干掉状态机

作者头像
乐小野
发布2026-06-09 11:29:51
发布2026-06-09 11:29:51
1610
举报

📌 一句话讲明白 Claude Code的核心是一个极简的while循环,调模型、跑工具、把结果喂回去、再调模型。没有状态图、没有任务队列、没有预设pipeline。决策逻辑只占整个代码库的1.6%,剩下98.4%全是「运行时护甲」(权限、压缩、工具、安全)。这套架构跟LangGraph的显式状态图、Devin的计划-执行结构、SWE-Agent的容器隔离走的是完全不同的路线。这篇拆它的循环机制、context管理流水线,以及为什么「少即是多」在agent设计里成立。


按理说,一个能自主读代码、跨文件编辑、跑测试、修bug、提PR的coding agent,底层应该有一套相当复杂的调度系统。状态机、有向无环图、任务规划器、多步推理引擎,总得有几样吧。

Anthropic在今年4月放出了一篇关于Claude Code设计空间的论文(arxiv 2604.14228),里面披露的架构让人相当意外。Claude Code的核心,剥掉所有外围系统之后,就是这样一个东西:

代码语言:javascript
复制


1
2
3
4
5
6

while (true) {
  response = await callModel(context)
  if (response.done) break
  result = await executeTool(response.toolCall)
  context.append(result)
}



一个async generator函数,叫queryLoop(),跑在所有interface上(CLI、SDK、IDE插件、Web端)都是同一个循环。这不是简化后的伪代码,这就是它的实际结构。

整个Claude Code代码库里,决策逻辑(也就是决定「下一步做什么」的代码)只占1.6%。剩下98.4%都是operational harness,权限系统、context压缩、工具执行、安全护栏。

这跟我们对「复杂agent系统」的直觉完全相反。


🧭 一个while循环能做什么

这个循环的运行模式属于ReAct模式(Reasoning + Acting)。模型负责推理和决策,harness负责执行和反馈。每一轮循环:

  1. 1. 模型看到当前context(系统提示 + 对话历史 + 所有工具调用结果)
  2. 2. 模型输出一个决策,是结束,还是调用某个工具
  3. 3. 如果是工具调用,harness执行它,把结果追加到context里
  4. 4. 回到步骤1

这里面没有任何预设的step顺序。模型看到什么context,就决定下一步做什么。读了一个文件发现里面import了另一个模块,就去读那个模块。跑了测试发现失败了,就去分析错误。修了代码再跑测试,通过了就停下来。每一步都是根据上一步的结果动态决定的。

这就是为什么它是一个动态工作流而不是静态流水线。

💡 工程要点 关键区分,在静态工作流里,「下一步做什么」是代码写死的(或者是用户在config里预设的)。在Claude Code的动态工作流里,「下一步做什么」完全由模型在运行时根据当前context推断。这带来了极高的灵活性,代价是每一步都消耗模型推理的token。


⚖️ 最少的脚手架,最厚的护甲

Anthropic在论文里用了一个精确的表述,Minimal Scaffolding, Maximal Operational Harness。

翻译一下就是,不要试图用代码结构去约束模型的决策路径(少搭脚手架),而是给它提供一个尽可能丰富的运行时环境(厚的护甲)让它自己做判断。

跟主流agent框架的对比:

框架

核心调度机制

决策者

复杂度分布

LangGraph

显式状态图,边上有条件分支

图结构 + 模型

重在图定义

Devin

任务规划结构,plan-then-execute

规划器 + 执行器

重在规划层

SWE-Agent

容器隔离 + 受限工具集

模型(在沙箱内)

重在隔离层

Aider

Git-based rollback

模型 + Git

重在版本控制

Claude Code

while循环 + ReAct

模型(几乎完全)

重在运行时护甲

Claude Code把几乎所有决策权都交给了模型。它不告诉模型「你应该先读文件再写代码再跑测试」,它只给模型提供了这些工具,然后说「你自己看着办」。

这背后有一个设计信念,对于一个足够强的模型,显式的调度脚手架不是帮助,而是束缚。当模型的推理能力足够强的时候,让它自己决定下一步比给它预设路径更优。前提是你得给它足够好的工具和足够安全的执行环境。

⚠️ 限制 这个设计有一个隐含前提,模型的推理能力必须够强。如果底层模型不够好,纯while循环会陷入无意义的重复或者走错方向。这也是为什么Claude Code在切换到更弱的模型(比如Haiku)时,往往配合更严格的工具限制和任务边界,给Explore子agent只开读权限就是这个道理。


🧱 五层Context压缩流水线

while循环虽然简单,但有一个硬约束,context window是有限的。每跑一轮循环,context都在增长(模型输出 + 工具结果)。如果不管理,很快就会爆掉。

Anthropic在论文里披露了一个五层顺序执行的压缩流水线,在每次调用模型之前运行:

层级

名称

做什么

触发条件

1

Budget Reduction

对每条消息的工具输出设大小上限

每次调用前

2

Snip

裁剪较早的历史段落

context超阈值

3

Microcompact

基于时间衰减或prompt cache友好性做压缩

context继续超阈值

4

Context Collapse

不修改底层存储,生成一个「只读投影」给模型看

更高压力

5

Auto-compact

调用一次模型做完整摘要

前四层不够时的最后手段

这五层的设计有两个精妙之处:

第一,Layer 4的「Context Collapse」是一个只读投影。它不修改实际的会话存储(JSONL文件),只是给模型「看到」一个压缩后的版本。直接后果是你随时可以rewind到任何checkpoint,因为原始数据还在。

第二,五层是顺序尝试的。只有前一层不够用了才触发下一层。大多数时候跑到Layer 2就够了,Auto-compact(调用模型生成摘要,最贵的操作)只在极端情况下触发。

🎯 真正的takeaway Claude Code对context的理解是「稀缺资源管理」而不是「无限对话框」。这五层流水线就是在做一件事,尽可能延长一个session的有效寿命,同时保持模型能看到最关键的信息。


🔄 动态工作流 vs 静态Pipeline

回到核心问题。为什么Claude Code是「动态工作流」而不是一个更传统的pipeline?

静态Pipeline(比如CI/CD、LangGraph的图、或者Devin的plan-execute):

  • • 步骤是预定义的
  • • 顺序是固定的(或有限的条件分支)
  • • 运行时不改变结构
  • • 可预测,但缺乏应变能力

Claude Code的动态工作流:

  • • 没有预定义步骤
  • • 每一步由模型根据当前状态决定
  • • 可以在运行中完全改变策略
  • • 不可预测,但极强的应变能力

一个具体的例子。假设你给Claude Code一个任务「修复这个auth bug」。

在静态pipeline里,你可能设计成: 读错误日志 → 定位出问题的文件 → 生成fix → 跑测试 → commit。

在Claude Code的动态工作流里,实际执行路径可能是这样的:

  1. 1. 跑测试看报错 → 读auth.ts → 发现import了tokens.ts → 读tokens.ts
  2. 2. 发现tokens.ts里调用了一个deprecated的API → 搜索这个API在哪里被替换了
  3. 3. 找到新API → 但发现新API的签名不一样 → 需要同时改middleware.ts
  4. 4. 改了三个文件 → 跑测试 → 新的测试过了但另一个测试挂了
  5. 5. 读挂掉的测试 → 发现是test fixture过期了 → 更新fixture → 全部通过

这个路径不可能被预先设计出来。它是模型根据每一步的反馈动态生成的。这就是「动态」的核心含义。


🏭 Dynamic Workflows,脚本化的编排层

说到这个,Anthropic在v2.1.154之后引入了一个跟上面同名但层次不同的功能,Dynamic Workflows(大写)。

这是一个更高层的编排能力。你给Claude一个复杂任务,Claude不是自己用while循环一步步跑,而是先写一个JavaScript编排脚本,然后由一个运行时并行执行这个脚本里定义的多个子agent。

跟普通subagent的区别:

维度

Subagents

Dynamic Workflows

编排者

Claude模型(逐turn决策)

JavaScript脚本(代码化的计划)

并行度

每turn几个

最多16个并发,总计1000个agent

中间结果

在Claude的context里

在脚本变量里(不占主session context)

可复用

只有worker定义可复用

整个编排逻辑可保存为命令

适用场景

中等规模委托

大规模审计、迁移、交叉验证研究

Dynamic Workflows的一个精妙设计是对抗性验证。编排脚本可以让一组agent做研究,然后让另一组agent独立审查前一组的结论。因为每个agent有独立context,审查者看不到研究者的推理过程,只看到结果,所以能提供真正独立的second opinion。

一个容易混淆的点,Claude Code「是一个动态工作流」(小写,指它的while循环架构),同时「提供了Dynamic Workflows功能」(大写,指脚本化编排)。前者是底层架构范式,后者是建立在前者之上的一个高级feature。


🆚 跟竞品的架构路线对比

这一段值得专门讲。当前主流的AI coding工具,在架构上走了三条完全不同的路线:

路线一,补全增强(Cursor / GitHub Copilot)

核心模式是「用户主导,AI辅助」。用户在IDE里写代码,AI在旁边提供补全、解释、修改建议。AI不主动做事,不自己跑命令,不自主决策。context基本限制在当前文件和少量相关文件。

这条路线的优势是可控性极强,劣势是无法处理需要多步推理的复杂任务。Cursor后来加了Composer/Agent模式往agentic方向靠,但底层还是IDE优先的架构。

路线二,计划-执行(Devin / Codex)

核心模式是「AI先做计划,确认后执行」。系统有一个显式的规划阶段,生成task list和实施步骤,然后按计划逐步执行。Devin在云端沙箱里跑,Codex也走类似路线。

这条路线的优势是可审查性好(你能在执行前review计划),劣势是计划一旦定下来,应变能力有限。实际中agent经常遇到计划里没预料到的情况(文件结构不符预期、API变了、测试暴露了新问题),rigid的计划会成为负担。

路线三,反应式循环(Claude Code)

核心模式是「模型自主决策,harness提供环境」。没有预设计划,没有固定步骤,模型根据每一步的反馈实时决定下一步。planning不是一个独立阶段,而是融入每一步的推理中。

这条路线的优势是应变能力极强(能处理任何unforeseen situation),劣势是不可预测(你不知道它接下来会做什么)、成本不可控(token消耗取决于模型决策路径)。

📅 同期对照 2026年的行业趋势很明确,Cursor在3月加了Background Agent、Devin在提升灵活性、GitHub Copilot推出了Coding Agent。整个行业在从「补全」和「计划-执行」两端往「反应式循环」靠拢。Claude Code跑在前面,因为它从第一天就是这个架构。


🔬 七级权限光谱,动态工作流的安全层

一个纯while循环如果没有安全机制,就是一个可以执行任意命令的脚本。Claude Code的解法不是限制循环能力,而是在循环外面套了一层权限系统。

这套系统有七个权限模式,形成一个「渐进信任光谱」:

模式

约束程度

适用场景

Plan

只读,不能改任何东西

纯调研/代码审查

Default

每次编辑/命令都要确认

新手/敏感项目

Accept Edits

文件编辑自动通过,命令仍需确认

日常开发

Auto

ML分类器自动评估,只拦截高风险

信任度较高时

Don't Ask

自动拒绝需要确认的操作

CI/非交互场景

Bypass Permissions

跳过所有确认

完全信任(慎用)

Ultracode

Auto + xhigh effort + Dynamic Workflows

全力以赴

评估顺序是deny-first,deny规则永远覆盖allow规则。这跟防火墙的逻辑一样,默认拒绝,明确允许。

这套权限系统不改变while循环本身的结构,只是在「执行工具」这个环节插入了一个gate。模型仍然可以决定调用任何工具,但harness有权拦截或需要用户确认。

💡 工程要点 Hooks(PreToolUse/PostToolUse/Stop)就是这个gate的可编程接口。它让你能在模型的工具调用前后插入自定义逻辑,而不改变模型的决策行为。这是「maximal harness」理念的直接体现,不约束模型怎么想,但约束执行环境怎么跑。


❓ 几个还没看清楚的点

  1. 1. while循环的收敛性问题。纯反应式循环没有「步骤上限」的硬约束(除了context window)。如果模型陷入了一个循环(改了A破了B,修B又破了A),目前的机制是context满了自动compact,而不是主动检测循环。社区里有人报告过50轮以上的无效循环。
  2. 2. Dynamic Workflows的成熟度。这个功能目前还是research preview。1000个agent/run的上限和16并发已经很高,但实际生产场景中的稳定性和错误恢复能力还需要更多案例验证。
  3. 3. 1.6%决策逻辑的可解释性。把所有决策交给模型,直接后果是你很难事后解释「它为什么选了这条路径」。对于需要审计trail的企业场景,这是一个潜在的合规挑战。
  4. 4. scale问题。每一步决策都需要调用模型推理,执行速度和成本都受制于模型的latency和token价格。对于那些「步骤确定但文件很多」的任务(批量迁移、格式化),static pipeline反而更高效。Claude Code用Dynamic Workflows部分解决了这个问题,但底层还是在调模型。

✍️ 写在最后

,Claude Code的架构选择是「把决策权完全交给模型,把工程复杂度全部放在运行时环境上」。这跟传统的agent框架(把决策逻辑编码为图/状态机/规划器)是两个完全相反的方向。

这个选择成立的前提是模型够强。当Claude Sonnet/Opus的推理能力足以在每一步做出合理决策时,所有预设的脚手架都变成了多余的约束。1.6%的决策代码不是偷懒,是对模型能力的一次赌注,赌它不需要外部结构来引导,只需要一个安全的、工具齐全的执行环境。

从目前的结果看,这个赌赢了。


References

  1. 1. Anthropic, "Dive into Claude Code: The Design Space of Today's and Future AI Coding Agents", arXiv 2604.14228, April 2025, https://arxiv.org/abs/2604.14228
  2. 2. Anthropic, "How Claude Code works - The agentic loop", 2025, https://code.claude.com/docs/en/how-claude-code-works
  3. 3. Anthropic, "Orchestrate subagents at scale with dynamic workflows", 2025, https://code.claude.com/docs/en/workflows
  4. 4. Anthropic, "Best practices for Claude Code", 2025, https://code.claude.com/docs/en/best-practices
  5. 5. Anthropic, "Explore the context window", 2025, https://code.claude.com/docs/en/context-window
  6. 6. Anthropic, "Create custom subagents", 2025, https://code.claude.com/docs/en/sub-agents
  7. 7. Anthropic, "Hooks - Programmable lifecycle events", 2025, https://code.claude.com/docs/en/hooks
  8. 8. Anthropic, "Permission modes", 2025, https://code.claude.com/docs/en/permission-modes
  9. 9. Anthropic, "Claude Code CLI Reference", 2025, https://code.claude.com/docs/en/cli-reference
  10. 10. Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", ICLR 2023, https://arxiv.org/abs/2210.03629
  11. 11. Diptendud, "Claude Code vs Cursor vs Windsurf: Which Agentic IDE Wins in May 2026", Medium, 2026, https://diptendud.medium.com/claude-code-vs-cursor-vs-windsurf-which-agentic-ide-wins-in-may-2026-bf7ad498e852
  12. 12. Anthropic, "Model configuration and extended context", 2025, https://code.claude.com/docs/en/model-config
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-06-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 石化人工智能 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🧭 一个while循环能做什么
  • ⚖️ 最少的脚手架,最厚的护甲
  • 🧱 五层Context压缩流水线
  • 🔄 动态工作流 vs 静态Pipeline
  • 🏭 Dynamic Workflows,脚本化的编排层
  • 🆚 跟竞品的架构路线对比
  • 🔬 七级权限光谱,动态工作流的安全层
  • ❓ 几个还没看清楚的点
  • ✍️ 写在最后
  • References
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档