Skip to content
Sci&Eng Blog
Go back

从提示词工程、Graph Engineering到未来

Updated:
Edit page

2023年的提示词工程,2005年的上下文工程,到上个月的Loop工程和这个月的Graph Engineering,技术的变迁越来越快。但剥掉 AI 的外壳,前者是在谈论如何交流,后者则在考虑如何组织。这些新概念的其实是一个存在了几十年的老问题 —— 怎么把工作组织得更快、更可靠。

Graph Engineering

Graph Engineering直译为图工程有点怪异,但是姑且先这样。图工程有两个基本元件 —— 节点(Node)和边(Edge)—— 没有任何 AI 成分:

以当前的技术博客的发布为例,可以用将其图工程优化撰写发布的传统流程,也可以用它设计一条 CI/CD 流水线。节点可以是 AI Agent,也可以是人,也可以是一段传统脚本 ——图的结构本身不关心节点里跑的是什么。

但是这如果用AI实现这个发布流程,会引入一组传统工作流没有的特有约束:上下文窗口有上限、自我检查不可靠、不同模型成本差异巨大。比如我们为了省钱来使用本地模型,节点返回了,但是什么也没干成。

所以图工程更准确的定位是:

图工程 = 工作流编排的通用思想 × AI Agent 作为执行节点时的特有约束与解法。

目标是提升单个Agent的推理能力,并把这些Agent组织成一支高效、可靠、不烧钱的资深团队,这似乎是贫穷实验室的一个出路,但不确定,因为执行图的成本还是非常‘昂贵。

图的构建

定义节点后,需要将工作流转换为图。这里最重要的技能是假边测试和标定锚点。

拿出当前的工作流,我们需要对每一步问一个问题: 这一步,真的需要上一步的结果吗?。很明显,如果需要则边是真的,否则砍掉边,两步并行。通过这样,我们就可以把一个线性的工作,简化为图模式。这个过程主要是在做假边测试,在测试的过程,我们不但会明确哪些边是可以被删除的,也可以简化一些节点。但是有些节点是必要的,比如真正的功能测试,真正输出时的安全测试,这些节点必须保留,我们把这些节点成为锚点,肯定不能被有优化掉。

      规划(确定要查什么)
     /        |        \
 Agent 1  Agent 2   Agent 3   ← Fan Out:并行收集
    \        |        /
      去重过滤(纯代码)         ← Reduce:不花token
          |
      独立验证(新鲜上下文)      ← Validate,通不过的丢弃
          |
      汇总写答案(一个Agent)    ← Combine

比如我们开始进入无脑模式,直接让claude code处理一个50个文件的代码优化任务, 单个 Agent 的上下文会过载。Fan out机制可以将复杂任务分解为基于低成本模型的查资料、搜集信息等任务。现有的Claude Code支持显示的Fan out 提示词,内置的Task工具会分析并拆解任务,多用调用具有独立上下文的Sub-agent分别进行读写文件、执行终端命令等工具操作。然后将结果进行规约合并,这就是Reduce过程,我们可以直接通过提示词来进行显示的提示:

当所有子智能体完成审查后,请收集它们的结果进行 Reduce / 合并。 合并要求:

剔除重复的建议。

将所有发现的问题按严重程度排序。

最终输出一份统一的 Markdown 格式审查报告。

如前所述,一般来Fan out 通畅干查资料、搜集信息的采用低成本模型;Reduce完成去重、过滤、排序使用纯代码或工具;Validate进行判断对错、挑错,使用强模型,甚至是人工参与;最后Combine撰写最终报告,使用强模型。

这里我们要注意,AI 检查自己的工作,会漏掉大多数错误。 模型批改自己的作品对自己太宽松了,就像我们用AI写一篇论文去投Science,AI评价一定会中,但是实际上会被秒拒。

所以规则很简单:干活的人,绝不检查自己的活。 在工作流中间放一个独立的验证节点,它唯一的任务就是在结果传下去之前试图推翻它。活下来的通过,通不过的当场淘汰。证者必须有全新的、空白的上下文。如果把干活 Agent 的聊天记录也给验证者看,它就不是在检查了 —— 它相当于用不同的字体点头同意。共享同一上下文的 Agent 图,本质上和循环一样脆弱,只是更晚、更贵地崩溃。

我们现在经常遇到的情况是,理论上非常简单,实践上一塌糊涂。大多数情况,这个锅得是脆弱、昂贵的AI系统来背。比如我们派 1000 个 Agent 并行查资料,然后把 1000 份结果全部倒进最后一步 —— 最后一步还没开始写,就已经超出了上下文窗口。

所以事件中,一般可以使用分层汇总来解决,同时避免工作冲突。比如Bun 团队第一次让多个 Agent 并行干活时,它们共用一个工作区,结果互相覆盖了对方的文件。这又变成了一个管理问题。

什么时候不需要Graph Engineering

图本质上解决的效率问题,但是不能解决判断力的问题,一下情况,单个Agent更快更便宜。

场景原因
任务小而独立(加个功能、修个 bug)协调本身就是开销
人类执行者想审批每一步图的重点是 “跑得宽”,步步审批拖死它
我们自己还不知道自己在找什么探索需要一个可操控的 Agent,不是被固定计划锁死的舰队
步骤确实互相依赖硬把图套在真正顺序的工作上,只加成本不加速

一个示例

基于Graph Engineering的工作流会在后台运行一直到结束。

workflow

目标:检查当前目录中的所有文件,找出冗余的文件,以及功能尚需改进的代码。

fan out:  每个文件一个agent,但是并行不超过3个。
validate: 每个发现由独立检查者用全新上下文验证。
上限:第一次运行只检查20个文件
失败处理:任何没返回结果的文件都要标记,绝不静默跳过
报告:合并成一份"功能与进度"清单

可以看到耗费token量非常大,工作流会一直在后台运行中,直到完成。

总结

所以Graph Engineering的核心不是一个AI方法,而是传统的依赖分析和并行工程, 这是计算机科学和运筹学里存在了几十年的老问题。AI Agent 只是让这个框架的执行单元变得更便宜、更灵活,同时也引入了上下文、可靠性、成本等新约束。

在使用Graph Engineering的时候,不是把所有事情都画成图,而是知道:


Edit page
Share this post:

Previous Post
大尺寸增材制造(LFAM)
Next Post
Predefined color schemes