Agent核心循环为何普遍采用for循环而非DAG架构,行业实践揭示深层设计逻辑

当前主流 Agent 产品如 Claude Code、Cursor Agent Mode、Aider 和 Devin 均采用简单的 for/while 循环作为核心执行结构,而非早期被看好的 DAG ...

人工智能

在 2026 年的智能体(Agent)开发实践中,一个看似反直觉却高度一致的现象正在浮现:最成功的 Agent 产品——包括 Claude Code、Cursor 的 Agent Mode、Aider 以及 Devin——全部采用最朴素的 for 或 while 循环作为其核心执行框架。这与早期社区对 DAG(有向无环图)架构的热捧形成鲜明对比。LangGraph 的 StateGraph 与 Dify Workflow 曾试图以可视化、可追踪的 DAG 作为 Agent 的标准范式,但最终要么引入 Agent 模式回归循环结构,要么将 DAG 降级为特定场景工具。行业用实际部署选择了“简单”,背后是深刻的问题域适配逻辑。

步骤顺序固定,变化在数据与决策

Agent 的典型工作流高度标准化:组装上下文 → 调用大语言模型(LLM)→ 执行工具 → 持久化结果 → 判断是否继续。这一五步循环在每一轮迭代中几乎不变——不会跳过“组装上下文”直接调用 LLM,也不会先执行工具再生成推理。真正变化的是每一步的输入内容与模型输出:LLM 可能在本轮决定“读取文件”,下一轮改为“修改代码”,再下一轮转为“运行测试”。这种“结构恒定、数据流动”的特性,恰好契合 for 循环的设计哲学:循环体固定,每次迭代的数据不同。

DAG 的优势在于描述步骤顺序可变的流程,例如审批流中“财务审核→法务复核→CEO 签字”可能因金额跳过某环节。但在 Agent 场景中,步骤顺序本身并不需要灵活编排;需要灵活的是每步内部的决策逻辑——而这正是 LLM 在运行时动态完成的任务。将路径预定义在编译期的 DAG,在面对 LLM 随机生成的下一步动作时,往往沦为形式主义的“摆设”。正如 arXiv:2604.14228 所指出:“核心是简单的 while 循环调模型、跑工具、重复——但大部分代码在循环周围的系统里。”

其他架构为何未成为主流

除 for 循环外,业界曾探索多种替代架构,但均在通用 Agent 场景中暴露局限:

  • DAG(有向无环图):节点与边需预先定义,路径在编译期固化。当 LLM 返回意料之外的动作(如临时插入“调试日志”步骤),DAG 难以动态适应。Dify 与 LangGraph 后期转向“DAG + Agent 混合”模式,实质是承认 DAG 无法独立支撑完整 Agent 生命周期。

  • 事件驱动:如 Microsoft AutoGen v0.4+ 的 GroupChat,通过发布/订阅机制实现多 Agent 协作。该模型松耦合、易扩展,但调试成本极高——消息流向隐晦,复杂任务中需追溯数十条事件链。GitHub 上关于 GroupChat 调试的讨论超 200 条, 反映出工程落地的现实痛点。

  • 状态机:适用于明确状态边界的传统工作流(如 AWS Step Functions)。但 Agent 的内部状态空间极高维且连续:它“看了哪些文件”“尝试过哪些修复方案”“当前假设是否成立”等变量组合远超人工可枚举范围,显式建模状态转换既不现实也不必要。

  • Actor 模型:强调无共享状态与消息通信,天然适合分布式部署(如 LiveKit Agents)。然而 Agent 的核心需求恰恰是共享上下文——多个工具需协同操作同一份代码库或数据库,无共享状态反而增加同步复杂度。该模型更适合 Agent 间的通信协议层(如 Google A2A),而非单个 Agent 的内部循环。

循环结构的工程优势:轻量、可控、可扩展

for 循环的胜出不仅是理论适配,更源于其工程友好性:

  • 调试直观:每轮迭代的输入、LLM 输出、工具调用、结果反馈清晰可查,无需追踪跨节点依赖。
  • 容错自然:单次迭代失败(如工具报错)可直接重试或回退,不影响整体循环结构;而 DAG 中一个节点失败可能导致整条路径中断。
  • 与现有系统集成简便:循环可无缝嵌入 Python 脚本、CLI 工具链或 CI/CD 流程,无需额外图引擎或调度器。
  • 支持渐进式增强:循环外围可叠加记忆模块、验证层、安全沙箱等组件,而不改变核心逻辑。例如 Claude Code 的“gather context → take action → verify results”三阶段即是在循环基础上封装的语义层。
  • Agent 系统分层架构图:上层为输入、实例化、规划,中层为核心 Thinking-Execute-Observe 循环,下层为各类专用 Agent 与 MCP(Model Control Protocol)接口

    值得注意的是,循环结构并未排斥其他范式。例如,苹果与卡内基梅隆大学近期提出的 SSR(Selection-based Structured Reasoning)框架,将 LLM 的自由形式推理(free-form thinking)替换为从预定义选项库中做选择题,显著降低推理延迟(90%+),同时保持任务成功率。该方法本质是在 for 循环的“调 LLM”环节内部优化决策效率,而非改变循环结构本身——进一步印证了循环作为主干的稳固性。

    实践反思:结构简单不等于设计浅薄

    部分开发者误以为 for 循环代表“工程粗糙”,实则相反。一位资深首席架构师 Carlos Kelkboom 在 2026 年指出:Agent 编程的关键挑战不在生成速度,而在结构可控性。他强调“亲自搭建代码骨架”“禁止主 Agent 直接修改文件”“看不懂就扔掉重来”等原则,核心是防止 Agent 因缺乏全局约束而产生重复代码、上帝对象与隐蔽技术债。这些实践恰恰依赖于清晰、线性的执行流——循环结构为人类工程师提供了可干预、可审查的锚点。

    当 Agent 能快速产出大量可运行代码时,人类的角色正从“编码者”转向“架构守门人”:定义边界条件、校验执行路径、判断方案优劣。for 循环因其透明性与确定性,成为这一人机协作模式的理想载体。它不试图预测 LLM 会做什么,而是为每一次不可预测的决策提供一个稳定、可复现的执行容器。

    结语

    Agent 架构的选择从来不是技术先进性的竞赛,而是对问题本质的诚实回应。DAG 代表工程化的理想图景,for 循环则拥抱了 LLM 驱动任务的不确定性现实。当前行业共识已清晰:在通用 Agent 场景中,循环结构以最小复杂度实现了最高适应性。未来演进方向更可能是在循环框架内深化子模块(如推理压缩、工具调用优化、记忆管理),而非推翻主干另起炉灶。