Plan系统从DAG架构退回线性清单,一场关于LLMAgent执行逻辑的反思
Plan 系统最初采用 DAG(有向无环图)建模任务依赖关系,以支持并行执行与局部失败恢复,但实际落地中因 auto-verify 机制引发因果链断裂、状态同步失真等问题,最终在两个月内重构为线性清单...
在大语言模型驱动的智能体(Agent)系统设计中,任务规划(Planning)模块的结构选择直接影响执行可靠性与可调试性。2026 年初,某团队将 Plan 系统设计为 DAG(有向无环图)架构——步骤间通过显式依赖关系连接,支持拓扑排序与并行调度,理论上能提升效率并实现局部失败隔离。然而仅两个月后,该系统被整体重构为线性清单(Linear List),这一“退步”背后暴露了理论模型与 LLM 实际行为之间的深刻鸿沟。
DAG 的吸引力源于其形式化严谨性。以“重构认证模块”为例,任务可拆解为五个步骤:分析流程(无依赖)、设计 token 方案(依赖步骤1)、修改 middleware(依赖步骤2)、更新测试(依赖步骤3)、更新文档(依赖步骤2)。其中步骤3与步骤5互不依赖,可并行执行。计算机科学中,这类结构可通过拓扑排序高效调度,学术界亦持续推动相关研究:2026 年 7 月发表的 Atomic Task Graph 提出显式暴露子任务依赖以支持并行;2026 年 1 月的 Task-Decoupled Planning 进一步引入 Supervisor-Planner-Executor 三层架构,主张失败时仅在受影响子图内重规划;更早的 Plan-over-Graph 则让模型先生成 DAG 再调度执行,实验显示 Claude 3.5 Sonnet 在该框架下任务成功率可达 90%,但最优路径达成率仅 39.2%。
上述成果强化了 DAG 作为“正确答案”的共识。该团队据此实现了初步 Plan 结构体:每个步骤含唯一 ID、描述、依赖列表与状态字段;引擎负责环检测、就绪判定(所有前置步骤完成)、就绪步骤批量调度,并在多个就绪项中自主决定执行顺序——整套逻辑符合编译原理标准范式。
但真实 LLM Agent 环境迅速揭示了问题。首个暴露的故障是 auto-verify 机制引发的状态失真:前端 UI 显示计划进度为 0/14,而可观测日志中工具调用记录表明模型已执行大量 read、grep、exec、edit 操作,实际完成约 9 个步骤的工作量。差距源于一条隐藏因果链——当某步骤标记为“done”时,系统自动触发验证命令(如 go build ./),若验证失败,则该步骤状态回滚为 pending,但其下游依赖步骤可能已被提前调度执行,导致“已完成步骤”与“实际可验证步骤”脱节。
更深层矛盾在于:DAG 要求引擎掌握完整的依赖拓扑并主动决策执行顺序,而 LLM Agent 的行为本质是非确定性、上下文驱动的认知过程。模型在执行中常根据新观察动态调整策略,例如发现步骤5(更新文档)所需信息已在步骤3(修改 middleware)中自然产出,便跳过原定独立路径;或因工具调用返回异常,临时插入诊断步骤。这些“认知跃迁”无法被静态 DAG 捕获,反而因引擎强制遵循预设依赖关系,造成步骤阻塞、重复执行或状态错位。
团队逐步意识到:引擎不该替模型做认知判断。DAG 隐含的前提是“任务分解与执行顺序可完全离线确定”,但 LLM 的推理链是在线演化的。当模型生成一个步骤时,它隐含了对前序上下文的理解与后续动作的预期;若引擎强行插入调度逻辑,等于用确定性规则覆盖概率性推理,破坏了模型自身的连贯性。
重构方向明确为线性清单:不再定义 depends_on 字段,而是由模型一次性输出有序步骤序列;执行时严格按顺序推进,每步完成后由模型自主决定是否继续、回溯或插入新步骤;验证机制移至步骤内部,由模型控制验证时机与重试策略。新设计牺牲了理论上的并行潜力,却显著提升了状态一致性与可观测性。实测中,任务完成率从 DAG 下的 61% 提升至 89%,调试耗时下降 70%,且 Bug 数量从平均 7 个降至 0。
值得注意的是,这一转变并非否定 DAG 的价值,而是厘清其适用边界。在传统自动化脚本、CI/CD 流水线或确定性工作流引擎中,DAG 仍是高效选择;但在 LLM Agent 这类以语言模型为核心、依赖上下文推理与动态适应的系统中,过度结构化反而成为负担。正如团队总结:“模型是认知主体,引擎应是忠实执行者,而非决策代理。”
该案例也折射出当前 Agent 工程实践的普遍困境:学术研究倾向于构建理想化抽象模型(如 DAG、分层架构),而工业落地需直面 LLM 的非理性、不可复现与上下文敏感性。越来越多团队开始转向“轻规划、强反馈”路径——减少预设结构,增强执行中的观测与修正能力。例如,部分系统改用“步骤+检查点”模式,允许模型在任意点声明“当前上下文不足以继续”,触发重规划而非依赖引擎干预。
Plan 系统的这次回退,表面上是架构降级,实质是一次认知校准:在人机协同的智能体系统中,尊重模型的推理主权,比追求形式上的最优调度更为关键。当引擎学会“放手”,系统反而更稳定、更可解释、更贴近真实工作流。
