别再逐步盯 Agent:循环负责做对,图决定哪几步该存在
你会逐步盯 agent,不是因为想盯,是因为没别的东西在盯。循环让它自己变对,图决定哪几个单元存在——剩下的活只剩最后一次审批。
你会逐步检查 agent 干的每一件事,原因不是你想检查,而是没有别的东西在检查。
想从那张椅子上站起来,需要两样东西,而几乎所有人只建了其中一样:循环让一个工作单元在你不在场时自己变对;图决定到底有哪些单元存在。
这篇讲那个分界、几个不显眼的机制,以及你最终只批一件事、而不是批所有事的那一点。
循环的本质:一条能失败的检查
剥掉所有装饰,循环只有四个部件:产出、检查、纠正、重复到绿。
检查就是全部。
如果你手上没有一样东西能在你出门的时候判定这份工作不合格,你拥有的不是循环,是调度器。
这听起来很显然,但几乎没人先写检查。他们的顺序总是:先干活,再在末尾挂一个"评审",而那个评审就是另一个模型被告知"看看这个输出怎么样"。
两个乐观主义者互相点头。
所以先写条件,而且写成程序能判的形式:
- 绿:测试套件退出码 0
- 绿:每条断言都带来源行号
- 绿:diff 只碰计划里列出的文件
- 不是检查:输出看起来不错
- 不是检查:模型说它很有信心
- 不是检查:没有报错
最后那条专门坑细心的人。没有报错不是正确性的证据。 在它上面建一个循环,你得到的系统会自信地把一个错误重复到预算耗尽,一路日志干净漂亮。
没人提醒你的天花板
循环让一个工作单元变好。这是它的全部职责,而它非常擅长。
它没法决定有哪些单元、它们的顺序是什么,也注意不到五个步骤里有两个从来不需要互相等待。
于是你得到一个非常好的 agent,用错的顺序、一个一个地跑错的那三步。每一步都正确,结果照样又慢又形状错,而且调循环修不好它——因为故障不在任何一个单元内部。
那一刻人们开始怪模型。也正是那一刻,下一层开始给自己回本。

图是上面那一层
图是工作的形状:什么跑、什么同时跑、什么等、什么根本不跑、结果回到哪里。
只有两样东西。节点是一个工作单元:一件有边界的事,一个输入进,一个输出出。边是一条依赖:这个节点的输出喂给那个节点的输入。
所有多余的等待都源于同一个错误——把"然后"当成一条边。
"总结这个文件,然后查天气"这两件事之间没有边,天气不消费那份总结。它们是两个独立节点,被一个线性脚本串起来,而串起来的原因只是你打字的顺序。
所以对你现有的每根箭头都跑一遍这个问题:下一步真的读上一步的输出吗? 如果你说不出穿过去的是哪个变量,就没有边,那段等待是纯浪费。
多数链条里有两三根这样的箭头,找出来通常就是当下能拿到的最大一次提速。
四类节点,其中一类不是模型
拆分器、工人、代码节点、闸门。词汇表就这些。
拆分器在最前面,把工作切成单元。它比任何其他节点决定得都多,因为按错的维度切会把下游全部浪费掉。
按文件夹切一个仓库,四个工人会去审同样那三个文件。按爆炸半径切,每个人看到的东西其他人都看不到。
工人各干一个单元,各带一个视角,各自拥有自己的上下文。最后那句经常被跳过。
给四个审计员一个共享窗口,他们会趋同:第一个写出一个发现,其余三个读到它,四份报告全部围着同一件事。你付了四份钱,买了一份意见加三声回声。
代码节点是大家忘了存在的那类:合并、排序、去重、比对前后的每次导出。这些都不是推理,每一个都只有一个正确答案,每一个都是几行代码。把它们塞进模型,就是给一个本来没有成本、没有延迟、没有方差的步骤,加上成本、延迟和方差。
判据:如果你能不用"判断、决定、评估、总结"这几个词描述这个变换,它就是代码。
一张每条边都是 agent 的图,在自己的接线上下租金。
循环到底活在哪
一句话解决全部混乱:循环活在节点之内,图活在节点之间。
单元之内:产出、检查、纠正、重复到绿。 单元之间:拆分、扇出、合并、过闸、退回。第二列没有一件事能在单元内部表达。
所以这不是二选一。一张节点里没有循环的图,会并行地产出未经验证的工作——比串行更糟,因为量更大。一个外面没有图的循环,是队列里一个非常好的步骤,而那个队列没人设计过。
两条回边,所有人都跳过第二条
一张没有回路的图就是条流水线:产出,然后忘记。下周它从同一个地方出发,带着同一个盲点。
能用的图有两条回边,干的是两种活。
纠正边很短。 闸门把一个单元退回给产出它的那一步,修的是你正在跑的这一次。
学习边长。 一个被接受的结果作为约束回到拆分器,修的是之后每一次运行。
几乎所有人都建了第一条,跳过了第二条。症状是:系统很快,而且从来不变聪明。
学习边运的不是输出,是从输出里提炼出来的约束:
- 已接受:utils 切片移植完成,一次通过
- 提炼:适配层必须原样保留关键字参数
- 落到:拆分器给之后每个切片的任务书
注意它落在哪。不是工人的指令里,而是决定工作怎么切的那份任务书里。一个被确认的成因变成一条规则,下一次断裂就从这一次结束的地方开始。
退回单元,别退回整批
这是回边上最贵的错误,值得说直白些。
四个切片移植完,其中一个测试失败。如果整批退回去,三个正确的切片会被重写。它们的新版本是"不一样",不是"更好"——因为它们本来没有任何问题。
接下来你要重新验证四个,而那三个里任何一个都可能因为不相关的原因这次挂掉。你把一次失败变成四个不确定的结果,还为这个特权付了钱。一次运行里干两遍,它就永远收敛不了。
从外面看,这像是模型反复失败。实际上是回边在摧毁正确的工作。
每次退回要带四样东西,每样都在干活:
- 单元:handlers 切片
- 判定:红
- 原因:
test_auth_redirect失败 - 证据:期望 302,实际 200,
handlers/auth.py:88 - 范围:只改这个文件,别碰其它切片
范围那一行比看上去重要。没有它,退回来的单元会膨胀:agent 打开文件,注意到旁边还有两个问题,顺手也修了,你的一次单切片纠正变成一个没人评审过的四文件 diff。
上限三次。 一个单元失败三次纠正,问题在产出它的计划里,而循环看不见计划。
闸门看爆炸半径,不看置信度
大多数写法会做一个置信度分数、设一个阈值,超过就放行。那是错的变量。
置信度是那个决定里最弱的输入,原因很容易漏掉:它是模型唯一能影响的东西。
强变量是"如果这次改错了会怎样"。按撤销错误有多贵来给工作分道:
- 可逆且局部。 一句文案、一个测试、一个带覆盖率的孤立函数。一次坏合并的代价是一次回退,所以这条道可以先开。
- 可逆但面广。 共享工具函数、给 schema 加字段、十几个调用方会碰到的任何东西。闸门看确定性检查加上干净的轨迹。
- 难以逆转。 迁移、删除、任何写生产数据或动钱的东西。这条道不开,不管分数多高。
第三行不是"阈值设得很高",是一条不开的道。这个区别很重要:阈值会被调,关着的道不会。

在开着的道里,闸门按顺序读证据:确定性结果 → 这次运行的轨迹 → 这个节点的产出以前被回退过几次 → 模型自己的评估(放最后)。
从你自己的活开始,怎么落地
挑一件你反复干的事。画出拆分器、车道、合并、一个闸门、一条回边。
先建闸门。 一旦有东西能大声地失败,其他一切都会变简单;而没有闸门的图,只是一条更快地产出未验证结果的路径。
然后是车道。学习边放最后,因为在你还没接受任何结果之前,没法从被接受的结果里提炼约束。
把人放在一步上:后果最大、可逆性最低的那一步。 批合并,决定哪些修复上线。不是评审中间输出,不是确认每一步。
处在一张图中段的人,会成为这张图里最慢的节点——图只能按一个人读东西的速度跑。
三句话
- 量路径,不只量它最后落在的答案。
- 一个不改变下一步跑什么的判定,只是一份报告。
- 任何你没有变成永久约束的失败,你都会再遇到一次。
大多数人会继续调那一个循环,并把它叫系统。在图外面画了一圈的人会开起一支舰队,并且始终不太明白为什么别人跟得这么吃力。
我们的整理
原文里最实用的其实是三张可以直接抄的模板,下面把它们摊平成能填的字段。
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 / 自动化完全指南