游乐游手机版
首页/AI教程/文章详情

Claude Code动态工作流:while循环为何优于状态机

时间:2026-06-11 17:15
ClaudeCode核心架构为while循环驱动的ReAct模式,决策代码仅占1 6%,其余为运行时护甲。模型自主决策,通过五层上下文压缩流水线管理窗口限制,并配备七级渐进权限系统。这一动态工作流将决策权完全交给模型,依赖强大推理能力实现高度应变,与传统静态规划路线形成鲜明对比。

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

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

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

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

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

这跟我们直觉中对“复杂agent系统”的想象完全相反。


一个while循环能做什么

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

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

\

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

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


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

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

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

跟主流agent框架的对比就很清楚了:

框架核心调度机制决策者复杂度分布
LangGraph显式状态图,边上有条件分支图结构 + 模型重在图定义
Devin任务规划结构,plan-then-execute规划器 + 执行器重在规划层
SWE-Agent容器隔离 + 受限工具集模型(在沙箱内)重在隔离层
AiderGit-based rollback模型 + Git重在版本控制
Claude Codewhile循环 + ReAct模型(几乎完全)重在运行时护甲

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

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


五层Context压缩流水线

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

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

\

层级名称做什么触发条件
1Budget Reduction对每条消息的工具输出设大小上限每次调用前
2Snip裁剪较早的历史段落context超阈值
3Microcompact基于时间衰减或prompt cache友好性做压缩context继续超阈值
4Context Collapse不修改底层存储,生成一个“只读投影”给模型看更高压力
5Auto-compact调用一次模型做完整摘要前四层不够时的最后手段

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

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

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


动态工作流 vs 静态Pipeline

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

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

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

Claude Code的动态工作流则是:

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

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

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

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

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

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


Dynamic Workflows:脚本化的编排层

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

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

\

跟普通subagent的区别就在于:

维度SubagentsDynamic Workflows
编排者Claude模型(逐turn决策)Ja vaScript脚本(代码化的计划)
并行度每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消耗取决于模型决策路径)。


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

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

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

模式约束程度适用场景
Plan只读,不能改任何东西纯调研/代码审查
Default每次编辑/命令都要确认新手/敏感项目
Accept Edits文件编辑自动通过,命令仍需确认日常开发
AutoML分类器自动评估,只拦截高风险信任度较高时
Don"t Ask自动拒绝需要确认的操作CI/非交互场景
Bypass Permissions跳过所有确认完全信任(慎用)
UltracodeAuto + xhigh effort + Dynamic Workflows全力以赴

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

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


几个还没看清楚的点

  1. while循环的收敛性问题。纯反应式循环没有“步骤上限”的硬约束(除了context window)。如果模型陷入了一个循环(改了A破了B,修B又破了A),目前的机制是context满了自动compact,而不是主动检测循环。社区里有人报告过50轮以上的无效循环。

  2. Dynamic Workflows的成熟度。这个功能目前还是research preview。1000个agent/run的上限和16并发已经很高,但实际生产场景中的稳定性和错误恢复能力还需要更多案例验证。

  3. 1.6%决策逻辑的可解释性。把所有决策交给模型,直接后果是你很难事后解释“它为什么选了这条路径”。对于需要审计trail的企业场景,这是一个潜在的合规挑战。

  4. scale问题。每一步决策都需要调用模型推理,执行速度和成本都受制于模型的latency和token价格。对于那些“步骤确定但文件很多”的任务(批量迁移、格式化),static pipeline反而更高效。Claude Code用Dynamic Workflows部分解决了这个问题,但底层还是在调模型。


写在最后

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

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

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


References

  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. Anthropic, "How Claude Code works - The agentic loop", 2025, https://code.claude.com/docs/en/how-claude-code-works
  3. Anthropic, "Orchestrate subagents at scale with dynamic workflows", 2025, https://code.claude.com/docs/en/workflows
  4. Anthropic, "Best practices for Claude Code", 2025, https://code.claude.com/docs/en/best-practices
  5. Anthropic, "Explore the context window", 2025, https://code.claude.com/docs/en/context-window
  6. Anthropic, "Create custom subagents", 2025, https://code.claude.com/docs/en/sub-agents
  7. Anthropic, "Hooks - Programmable lifecycle events", 2025, https://code.claude.com/docs/en/hooks
  8. Anthropic, "Permission modes", 2025, https://code.claude.com/docs/en/permission-modes
  9. Anthropic, "Claude Code CLI Reference", 2025, https://code.claude.com/docs/en/cli-reference
  10. Yao et al., "ReAct: Synergizing Reasoning and Acting in Language Models", ICLR 2023, https://arxiv.org/abs/2210.03629
  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. Anthropic, "Model configuration and extended context", 2025, https://code.claude.com/docs/en/model-config
来源:https://cloud.tencent.com.cn/developer/article/2685109
上一篇提升AI模型引用你内容的实用技巧 下一篇快速构建AI Agent自进化测试技能:失败自动改写Skill入库
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CapCut AI Docker 一键部署:镜像拉取、端口映射与数据目录配置教程
AI教程 · 2026-06-30

CapCut AI Docker 一键部署:镜像拉取、端口映射与数据目录配置教程

CapCutAI容器化部署需先确认镜像来源与授权范围,再完成环境准备、镜像拉取、端口映射、数据目录挂载和启动验证,适合本地试用、团队内网演示与轻量化AI剪辑服务管理。

CapCut AI Windows本地安装配置2026最新版含下载与环境要求
AI教程 · 2026-06-30

CapCut AI Windows本地安装配置2026最新版含下载与环境要求

CapCutAI与剪映AI在Windows端适合短视频、口播、课程和营销素材剪辑,安装前需确认系统、显卡、存储与网络条件,优先选择官方渠道下载,并完成账号、素材目录、硬件加速和导出参数配置。

Veo新手保姆级安装教程:从下载到首次运行
AI教程 · 2026-06-30

Veo新手保姆级安装教程:从下载到首次运行

Veo适合用文字生成短视频,新手应先确认官方入口、准备账号与设备环境,再按网页或应用方式完成启用。首次运行重点在提示词、参数、素材合规与结果保存,避免使用非官方安装包。

Veo本地模型运行下载路径设置与性能优化指南
AI教程 · 2026-06-30

Veo本地模型运行下载路径设置与性能优化指南

Veo本地模型部署需先确认模型来源与硬件条件,再完成下载校验、目录规划、路径配置和推理参数优化。重点关注显存占用、依赖版本、缓存位置、授权范围与常见报错处理。

Veo安装失败解决指南:常见报错与日志排查及升级回滚方案
AI教程 · 2026-06-30

Veo安装失败解决指南:常见报错与日志排查及升级回滚方案

Veo安装失败通常与系统环境、依赖版本、网络源、权限和缓存有关。排查时应先确认版本要求,再查看安装日志,按报错类型处理,并提前备份项目,确保升级与回滚可控。