返回博客

只用Codex原生功能跑Graph Engineering:新手轻量多Agent工作流

人工智能7833
只用Codex原生功能跑Graph Engineering:新手轻量多Agent工作流

听到 Graph Engineering,很多人的第一反应是又要学习一套框架:画节点、写边、定义状态,再做一个复杂调度器。其实,长期多 Agent 项目最先缺的通常不是编排代码,而是工作关系没有写清楚。谁负责当前阶段?什么证据证明可以前进?失败回到哪里?谁有权决定结束?

这篇文章给出一条新手能照着搭的路线:用一个 Goal 或总包任务记住最终目标,用独立任务承载每个阶段,用进度文档传递状态,再用审核门控制阶段切换。整个流程不需要先开发 Agent 框架,也不要求每个 Worker 继承前面所有聊天记录。先把第一张工作图跑通,再决定是否值得工程化。

一、Graph Engineering 实际在管理什么

这里的 Graph Engineering 可以先理解成“把长期工作拆成有状态、有门禁的工作图”。它不是某个必须安装的产品名称,也不要求所有节点都是模型。

一张最小工作图包含六种元素:

元素在项目里代表什么需要写清的内容
节点一个 Agent、测试程序或人工步骤谁负责、输入是什么、交付什么
阶段完成后的下一条路径通过后去哪里,失败回哪里
状态项目当前进度和已有证据已完成、未完成、阻塞和版本
门禁允许进入下一阶段的条件测试、验收、运行结果和审批
返工审核不通过后的修复路径在原任务修复还是重新开任务
人工介入必须交还给人的决定外部写入、破坏性操作、价值判断

如果一个提示词只有“请把项目做完”,它没有图。它只有一个愿望。加上阶段、状态、门禁和返工路径后,模型才知道下一步不能靠猜。

二、用总包和 Worker 分开上下文

可以安排两类角色。

总包任务 T0 负责长期目标、阶段顺序、进度等待、独立审核和派发下一阶段。它不应该亲自把所有代码和文档都重做一遍,而是检查实际产物和证据。

Worker 任务只负责一个阶段。比如一个桌面产品可以拆成:

text
T1:完成 v1.0.0,迁移桌面入口并通过验收
T2:完成 v1.1.0,处理安装与数据管理
T3:完成 v1.2.0,准备首位外部测试者交付

每个 Worker 有自己的上下文,可以打开自己的任务查看细节。它不需要知道前面所有对话,只需要拿到四类状态:上一阶段已经通过的结论、当前阶段文档、工作区现状和不能破坏的约束。

这会带来一个很实用的好处:某个阶段失败时,你能直接进入对应任务看它做了什么、执行了哪些测试、为什么没有通过、后来怎样修复。状态不靠一条越来越长的聊天记录维持,而是靠进度文档和任务结果交接。

三、先写阶段文档,再开 Agent

多 Agent 不能替你补齐模糊需求。每个阶段至少准备一份文档,包含:

markdown
# v1.0.0 阶段目标

## 范围
- 本阶段要完成什么
- 明确不做什么

## 前置条件
- 已通过的上一阶段
- 环境、权限和依赖

## 交付物
- 文件、功能、报告或可运行结果

## 验收标准
- 自动测试和命令
- 人工可见的成功信号
- 必须保留的证据

## 失败处理
- 失败时回到哪个步骤
- 哪些问题需要人工决定
- 什么操作必须先确认

## 进度记录
- 当前状态
- 最近一次验证
- 阻塞原因
- 下一步

阶段文档的重点不是写得长,而是让“完成”可以被别人检查。比如“完成安装功能”不够具体;“在干净环境安装,启动应用,创建一条数据,重启后数据仍存在,并保存日志”才是可验收的交付。

四、直接创建总包任务

准备好目标和阶段文档后,在 Codex 中创建一个总包任务,粘贴下面的最小模板。路径、阶段名和验收文件换成自己的项目内容。

text
/goal

总目标:完成一个可交付的 Windows 桌面产品
阶段清单:v1.0.0 桌面入口 -> v1.1.0 安装与数据管理 -> v1.2.0 外部测试者交付
阶段文档位置:docs/phases/

你是总包任务 T0,持续管理整个目标,直到所有阶段通过。

按阶段顺序执行:
1. 为当前阶段创建一个独立执行任务;
2. Worker 按阶段文档实施,并运行文档要求的验证;
3. Worker 报告完成后,T0 独立检查实际产物、测试、运行结果和验收条目;
4. 审核不通过,就在原 Worker 任务中追加明确修复项,等待修复后重新审核;
5. 审核通过后,先更新进度文档,再创建下一阶段任务。

每次派发后进入事件等待,不要高频查询。
等待超时不代表阶段失败,也不代表可以跳过审核。
除非我明确要求,不得归档总包或阶段任务。
只有所有阶段通过并完成最终进度更新,目标才算完成。

这个模板有四个关键点。第一,阶段顺序写死,避免 T0 先创建还没有前置条件的任务。第二,审核由 T0 独立执行,Worker 不能用自己的口头结论替代证据。第三,不通过时回到原任务修复,保留问题上下文。第四,进度文档必须在创建下一阶段前更新,避免并行状态和真实状态脱节。

五、总包怎样审核 Worker

Worker 报告“已完成”后,T0 不要只读报告。至少检查四层证据:

text
实际产物:文件、配置、功能和版本是否真的存在
验证记录:测试命令、输出、失败和重试是否可复现
运行结果:应用或流程是否在目标环境完成一次真实操作
验收条目:阶段文档中的每一项是否明确通过、失败或待人工决定

审核结果建议写成结构化记录:

text
阶段:v1.0.0
结论:不通过
发现:干净环境启动失败,缺少数据目录初始化
证据:测试日志第 18 行,启动后返回目录不存在
修复:在安装步骤创建目录,并补充重启后读取测试
下一步:原 T1 任务完成修复后重新提交审核

如果 T1 连续两轮出问题,T0 应该两次都不放行,也不要提前创建 T2。严格串行的价值,就是把“下一阶段依赖已经通过”变成事实,而不是一种乐观推断。修复完成后重新审核,保留第一次失败、修复内容和复审结果,未来才能知道门禁为什么存在。

六、运行中怎样介入

总包任务运行期间,你仍然可以改变尚未开始阶段的约束。例如告诉 T0:“从 T2 开始,新任务使用当前可用的高质量推理配置,并把降级情况写入进度文档。”

这条指令不应该回头改变已经运行的 T1,除非你明确要求重新执行。T0 需要把新约束标记为“后续阶段规则”,在创建 T2 时传入,并在进度文档记录生效点。这样可以避免一个阶段中途换配置,最后无法解释结果差异。

人工介入的边界也要提前写清:外部发布、破坏性操作、购买、修改权限、上传真实数据和最终产品决策,不能因为 Agent 正在持续执行就自动放行。安全的本地读取、编辑范围内文件和非破坏性测试,可以按授权继续。

七、等待与定时唤醒怎么配

派发任务后,T0 不需要每隔几十秒查询。使用事件等待,等 Worker 的状态变化、完成报告或失败消息出现,再进行下一次审核。高频轮询既浪费上下文,也容易让总包在没有新证据时重复下判断。

如果项目只运行几十分钟,事件等待通常足够。如果会跨越几小时或几天,可以在 T0 会话设置定时唤醒,让它按固定间隔回到同一上下文检查进度。定时唤醒的提示只需要说“检查当前阶段状态,若有新证据就审核或继续派工”,不要每次创建新的总包。

定时任务也可能遇到会话过期、权限变化、Worker 失败或外部环境不可用。每次唤醒都要先读进度文档和任务状态,再决定等待、修复、升级还是请求人工。不要因为一次唤醒没有看到变化,就把项目标记为完成。

八、Goal、独立任务和 Subagent 各管一层

这三个概念经常被混在一起,但职责不同:

机制主要作用适合场景
Goal保持长期目标、完成标准和当前约束一个长期但连贯的目标
独立阶段任务管理严格顺序、阶段审核、返工和记录有依赖的产品、论文或课程项目
Subagent在当前任务内部并行做小工作查资料、跑测试、局部审查

Goal 负责“最终要完成什么”,独立任务负责“这一阶段由谁完成和如何验收”,Subagent 负责“当前阶段内部如何加速”。一个复杂 Bug 往往只需要一个 Goal 和一个任务;多个互不依赖的资料检索可以由一个 Worker 派 Subagent 并行完成。

进度文档可以只保留一份简洁状态,而不是复制所有聊天:

text
goal_status: running
current_stage: v1.1.0
passed_stages: v1.0.0
active_task: T2
latest_evidence: 安装包、启动日志、重启后数据测试
blocking_issue: 待确认数据目录权限
next_action: T2 修复后由 T0 复审

状态文件的每一行都应该能指向一个任务或证据。它不是新的长篇日报,而是让总包在等待结束、定时唤醒或新任务打开时迅速恢复判断所需的最小上下文。

每次阶段通过、返工或规则变化时更新它,避免总包只凭旧聊天记忆继续派工。

不要用 Subagent 替代严格依赖的阶段。Subagent 的上下文和生命周期受当前任务影响,适合短小、可汇总的工作;如果它们要分别验收、分别返工、跨越较长时间,就应该提升为独立任务。Agent 越多,成本、文件冲突和共同盲点也会增加。

九、什么时候值得搭这张工作图

适合使用这套轻量 Graph Engineering 的任务,通常有明确阶段和可验证交付:

不适合的情况也很明确:目标仍在探索,阶段边界不断变化,验收标准无法写出,或者每个阶段都需要实时共享同一份不稳定状态。此时先做一个短任务和人工检查,不要为了“看起来像图”而增加总包和多个 Worker。

十、限制与结论

轻量 Graph Engineering 处理的是工作关系:谁负责、凭什么前进、失败回到哪里,以及谁拥有最终决定权。它不是把模型数量越堆越多,也不是用一个提示词假装拥有完整调度器。

新手可以从一张阶段文档、一个 T0 总包和一个 T1 Worker 开始。等第一阶段真的经历一次失败、返工、复审和通过,再决定是否增加 T2、定时唤醒或内部 Subagent。先把状态和门禁跑通,再考虑框架化;否则只是更快地把模糊目标分发给更多 Agent。

标签:CodexGraph Engineering多Agent工作流任务编排

推荐阅读

探索更多前沿洞察与行业干货。