别再逐步盯 Agent:循环负责做对,图决定哪几步该存在

你会逐步盯 agent,不是因为想盯,是因为没别的东西在盯。循环让它自己变对,图决定哪几个单元存在——剩下的活只剩最后一次审批。

分享
别再逐步盯 Agent:循环负责做对,图决定哪几步该存在

你会逐步检查 agent 干的每一件事,原因不是你想检查,而是没有别的东西在检查。

想从那张椅子上站起来,需要两样东西,而几乎所有人只建了其中一样:循环让一个工作单元在你不在场时自己变对;图决定到底有哪些单元存在。

这篇讲那个分界、几个不显眼的机制,以及你最终只批一件事、而不是批所有事的那一点。

循环的本质:一条能失败的检查

剥掉所有装饰,循环只有四个部件:产出、检查、纠正、重复到绿。

检查就是全部。

如果你手上没有一样东西能在你出门的时候判定这份工作不合格,你拥有的不是循环,是调度器。

这听起来很显然,但几乎没人先写检查。他们的顺序总是:先干活,再在末尾挂一个"评审",而那个评审就是另一个模型被告知"看看这个输出怎么样"。

两个乐观主义者互相点头。

所以先写条件,而且写成程序能判的形式:

  • 绿:测试套件退出码 0
  • 绿:每条断言都带来源行号
  • 绿:diff 只碰计划里列出的文件
  • 不是检查:输出看起来不错
  • 不是检查:模型说它很有信心
  • 不是检查:没有报错

最后那条专门坑细心的人。没有报错不是正确性的证据。 在它上面建一个循环,你得到的系统会自信地把一个错误重复到预算耗尽,一路日志干净漂亮。

没人提醒你的天花板

循环让一个工作单元变好。这是它的全部职责,而它非常擅长。

它没法决定有哪些单元、它们的顺序是什么,也注意不到五个步骤里有两个从来不需要互相等待。

于是你得到一个非常好的 agent,用错的顺序、一个一个地跑错的那三步。每一步都正确,结果照样又慢又形状错,而且调循环修不好它——因为故障不在任何一个单元内部。

那一刻人们开始怪模型。也正是那一刻,下一层开始给自己回本。

一个完美的循环,一个错误的形状

图是上面那一层

图是工作的形状:什么跑、什么同时跑、什么等、什么根本不跑、结果回到哪里。

只有两样东西。节点是一个工作单元:一件有边界的事,一个输入进,一个输出出。边是一条依赖:这个节点的输出喂给那个节点的输入。

所有多余的等待都源于同一个错误——把"然后"当成一条边。

"总结这个文件,然后查天气"这两件事之间没有边,天气不消费那份总结。它们是两个独立节点,被一个线性脚本串起来,而串起来的原因只是你打字的顺序。

所以对你现有的每根箭头都跑一遍这个问题:下一步真的读上一步的输出吗? 如果你说不出穿过去的是哪个变量,就没有边,那段等待是纯浪费。

多数链条里有两三根这样的箭头,找出来通常就是当下能拿到的最大一次提速。

四类节点,其中一类不是模型

拆分器、工人、代码节点、闸门。词汇表就这些。

拆分器在最前面,把工作切成单元。它比任何其他节点决定得都多,因为按错的维度切会把下游全部浪费掉。

按文件夹切一个仓库,四个工人会去审同样那三个文件。按爆炸半径切,每个人看到的东西其他人都看不到。

工人各干一个单元,各带一个视角,各自拥有自己的上下文。最后那句经常被跳过。

给四个审计员一个共享窗口,他们会趋同:第一个写出一个发现,其余三个读到它,四份报告全部围着同一件事。你付了四份钱,买了一份意见加三声回声。

代码节点是大家忘了存在的那类:合并、排序、去重、比对前后的每次导出。这些都不是推理,每一个都只有一个正确答案,每一个都是几行代码。把它们塞进模型,就是给一个本来没有成本、没有延迟、没有方差的步骤,加上成本、延迟和方差。

判据:如果你能不用"判断、决定、评估、总结"这几个词描述这个变换,它就是代码。

一张每条边都是 agent 的图,在自己的接线上下租金。

循环到底活在哪

一句话解决全部混乱:循环活在节点之内,图活在节点之间。

单元之内:产出、检查、纠正、重复到绿。 单元之间:拆分、扇出、合并、过闸、退回。第二列没有一件事能在单元内部表达。

所以这不是二选一。一张节点里没有循环的图,会并行地产出未经验证的工作——比串行更糟,因为量更大。一个外面没有图的循环,是队列里一个非常好的步骤,而那个队列没人设计过。

两条回边,所有人都跳过第二条

一张没有回路的图就是条流水线:产出,然后忘记。下周它从同一个地方出发,带着同一个盲点。

能用的图有两条回边,干的是两种活。

纠正边很短。 闸门把一个单元退回给产出它的那一步,修的是你正在跑的这一次。

学习边长。 一个被接受的结果作为约束回到拆分器,修的是之后每一次运行。

几乎所有人都建了第一条,跳过了第二条。症状是:系统很快,而且从来不变聪明。

学习边运的不是输出,是从输出里提炼出来的约束:

  • 已接受:utils 切片移植完成,一次通过
  • 提炼:适配层必须原样保留关键字参数
  • 落到:拆分器给之后每个切片的任务书

注意它落在哪。不是工人的指令里,而是决定工作怎么切的那份任务书里。一个被确认的成因变成一条规则,下一次断裂就从这一次结束的地方开始。

退回单元,别退回整批

这是回边上最贵的错误,值得说直白些。

四个切片移植完,其中一个测试失败。如果整批退回去,三个正确的切片会被重写。它们的新版本是"不一样",不是"更好"——因为它们本来没有任何问题。

接下来你要重新验证四个,而那三个里任何一个都可能因为不相关的原因这次挂掉。你把一次失败变成四个不确定的结果,还为这个特权付了钱。一次运行里干两遍,它就永远收敛不了。

从外面看,这像是模型反复失败。实际上是回边在摧毁正确的工作。

每次退回要带四样东西,每样都在干活:

  • 单元:handlers 切片
  • 判定:红
  • 原因:test_auth_redirect 失败
  • 证据:期望 302,实际 200,handlers/auth.py:88
  • 范围:只改这个文件,别碰其它切片

范围那一行比看上去重要。没有它,退回来的单元会膨胀:agent 打开文件,注意到旁边还有两个问题,顺手也修了,你的一次单切片纠正变成一个没人评审过的四文件 diff。

上限三次。 一个单元失败三次纠正,问题在产出它的计划里,而循环看不见计划。

闸门看爆炸半径,不看置信度

大多数写法会做一个置信度分数、设一个阈值,超过就放行。那是错的变量。

置信度是那个决定里最弱的输入,原因很容易漏掉:它是模型唯一能影响的东西。

强变量是"如果这次改错了会怎样"。按撤销错误有多贵来给工作分道:

  1. 可逆且局部。 一句文案、一个测试、一个带覆盖率的孤立函数。一次坏合并的代价是一次回退,所以这条道可以先开。
  2. 可逆但面广。 共享工具函数、给 schema 加字段、十几个调用方会碰到的任何东西。闸门看确定性检查加上干净的轨迹。
  3. 难以逆转。 迁移、删除、任何写生产数据或动钱的东西。这条道不开,不管分数多高。

第三行不是"阈值设得很高",是一条不开的道。这个区别很重要:阈值会被调,关着的道不会。

闸门看爆炸半径,不看置信度

在开着的道里,闸门按顺序读证据:确定性结果 → 这次运行的轨迹 → 这个节点的产出以前被回退过几次 → 模型自己的评估(放最后)。

从你自己的活开始,怎么落地

挑一件你反复干的事。画出拆分器、车道、合并、一个闸门、一条回边。

先建闸门。 一旦有东西能大声地失败,其他一切都会变简单;而没有闸门的图,只是一条更快地产出未验证结果的路径。

然后是车道。学习边放最后,因为在你还没接受任何结果之前,没法从被接受的结果里提炼约束。

把人放在一步上:后果最大、可逆性最低的那一步。 批合并,决定哪些修复上线。不是评审中间输出,不是确认每一步。

处在一张图中段的人,会成为这张图里最慢的节点——图只能按一个人读东西的速度跑。

三句话

  • 量路径,不只量它最后落在的答案。
  • 一个不改变下一步跑什么的判定,只是一份报告。
  • 任何你没有变成永久约束的失败,你都会再遇到一次。

大多数人会继续调那一个循环,并把它叫系统。在图外面画了一圈的人会开起一支舰队,并且始终不太明白为什么别人跟得这么吃力。

我们的整理

原文里最实用的其实是三张可以直接抄的模板,下面把它们摊平成能填的字段。

GREEN 检查(写检查,不写愿望)

该写 不该写
退出码 0 / 断言通过 没有报错
每条断言带来源行号 模型说没问题
diff 只碰计划内文件 看起来合理
期望值 vs 实际值(含文件:行号) 置信度高

退回单(五格,缺一格就会膨胀)

字段 内容
单元 哪个切片
判定 红/绿
原因 具体哪个测试、哪个检查
证据 期望 X、实际 Y、位置 文件:行号
范围 只改这个文件

车道表(按撤销成本分,不按信心分)

车道 例子 闸门
可逆且局部 文案、测试、孤立函数 确定性检查通过即放行
可逆但面广 共享工具、schema 字段 确定性检查 + 轨迹干净 + 回滚史
难以逆转 迁移、删除、动钱 不开

配套看两篇:形状怎么搭、扇出多大、天花板在哪(Bun 那次 11 天 / 16.5 万美元的账)见一句提示词拉起 1000 个 agent:慢的不是模型,是你把图画成了直线;三层能力谁修谁的问题见你的 Agent 并不自主:你就是它的循环。

来源

  • 原文:Hanako, Loops and Graphs: how to stop babysitting agents and only approve the last step (full course), X,2026-08-23。https://x.com/hanakoxbt/status/2091515787366306154
  • 配图来自原文插图(作者自制示意)与 Unsplash(封面)。

本文由汇智网编译整理,转载请注明出处。

这是「Agent / MCP」专题的一部分。完整地图见:Agent / MCP / 自动化完全指南