开篇 · 一个问题

你为什么要「盯」Agent 的每一步?

不是你想盯,是因为——没有别的东西在检查。

想从那张椅子上起来,需要两样东西。而几乎每个人都只建了其中一样:

🔁 Loop(循环)

让「一个工作单元」在没有你的情况下变得正确。

🕸️ Graph(图)

决定「哪些工作单元存在」,以及它们的顺序。

大多数人只建了 loop,没建 graph。于是他们有一个「很棒的 Agent,却跑着错误的三步、错误的顺序、一次一个」。

这堂课讲清楚:这两者怎么分工、各自看不见的机制,以及——你最终该在哪「只批准一步」。

第 1 课 · Loop

循环,是一个「可以失败」的检查

把一切剥掉,一个循环就四个部分:

产出
检查
修正
重复直到绿

「检查」就是全部

没有「一个能在你离开房间时让工作失败」的东西,你就没有循环——你只有一个调度器

👆 点我看「几乎没人先写检查」

🎯 判断:哪个「检查条件」是能用的?

「让另一个模型审一眼输出,看有没有问题」

对。这句专门坑「细心的人」:「没有错误」≠「正确」。要写一个「程序都能评估」的条件。

「测试必须通过,且覆盖率 ≥ 80%」

对。可执行、可失败、不需要「判断」——这才是真正能撑起循环的检查。
第 2 课 · Loop 的天花板

循环让「一个单元」变好,
但决定不了「哪些单元存在」

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

但它不能

  • 决定哪些单元存在
  • 决定它们的顺序
  • 发现「五步里有两步根本不用等彼此」

于是你得到一个很棒的 Agent,跑着「错误的三个步骤、错误的顺序、一次一个」。每一步都正确,结果却还是慢、形状还不对——而调循环修不了它,因为毛病不在任何一个单元内部。

👆 点我看「那一刻人们在怪什么」
第 3 课 · Graph

图 = 工作的「形状」

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

🔵 节点(Node)= 工作单元

一个有界任务,一个输入进、一个输出出。

🔗 边(Edge)= 依赖

这个节点的输出,喂给那个节点的输入。

🎯 每个不必要等待背后的错误:把「然后」当成「边」

「总结这个文件,然后查天气」——它们之间没有边。天气不消费总结。

👆 点我看「那个要问自己的问题」
第 4 课 · 四种节点

四种节点,其中一种「不是模型」

1
拆分器(Splitter)把工作切成单元,坐在最前面。它做的决定比任何节点都多——按错的维度切,下游全浪费。
2
工人(Worker)各做一个单元,用一种视角、在各自的上下文里。
3
代码节点(Code node)合并、排序、去重、对比……这些不是推理,是几行代码。经模型跑 = 给一个本无成本的步骤加上了成本、延迟和方差。
4
闸门(Gate)决定结果能不能往下游放行。

🎯 判断:下面哪个该用「代码」而不是「模型」?

「把 10 份报告去重、按影响排序、合并成一份」

对。合并、排序、去重、对比——每个都有唯一正确答案,不是推理。跑模型 = 加成本+延迟+方差。

「判断这份报告的核心结论是否有说服力」

对。判断标准:如果你描述这个转换时,不需要用到「判断、决定、评估、总结」这几个词,那它才是代码。
👆 点我看「一个提醒」
第 5 课 · 分工

一句话解决所有困惑

循环住在「节点里」。图住在「节点之间」。

在「一个单元」里

产出 → 检查 → 修正 → 重复直到绿。

在「单元之间」

拆分、扇出、合并、闸门、送回。第二张清单,从单个单元内部根本无法表达。

所以你不是「二选一」:

  • 节点里没有循环的图 = 并行地产出「未验证」的活,比串行更糟(因为更多)。
  • 没有图包着的循环 = 一个「没人设计的队列」里的一个很好的步骤。
第 6 课 · 两条返回路径

工作图有两条「回去」的路,
几乎所有人都跳过第二条

没有「回去的路」的图,是一条 pipeline——产出、然后遗忘。下周从同一个地方、带着同样的盲点重新开始。

修正边(correction edge)闸门把一个单元退回给「产出它的那一步」,它修好你「正在跑的这一次」。
学习边(learning edge)一个被接受的结果,作为一个「约束」回到拆分器,它修好「之后的每一次」。

几乎所有人都建了第一条,跳过了第二条。症状:一个系统「很快,但永远不变聪明」。

👆 点我看「学习边送回去的是什么」
第 7 课 · 返回单元 & 闸门

退回「单元」,不是退回「批次」

这是返回路径上最贵的错误,值得说白:

四片被移植,一片测试挂了。如果整批退回去,三片正确的会被重写——它们的下一版是「不同」,不是「更好」,因为它们本来就没毛病。

现在你要重新验证全部四片,而且这三片这次可能因为不相干的原因挂掉。你把「一个失败」变成了「四个不确定的结果」,还付了钱。一个 run 里来两次,就永远不收敛。

从外面看,这像「模型反复失败」。其实是返回路径在「摧毁正确的活」。

👆 点我看「退回时要带上的四样东西」

闸门:按「爆炸半径」开,不按「置信度」开

大多数人建一个置信度分数、设阈值、让超过的放行。这是错的变量。

置信度是那个决策里「最弱」的输入——因为它是模型唯一能影响的变量。真正强的变量是:如果这个改动错了,撤销它有多贵?

🟢 可逆且局部文案改动、一个测试、有覆盖的隔离函数。一次坏 merge 代价 = 一个 revert,所以这条车道可以先开。
🟡 可逆但广共享工具、schema 新增、十几个调用方会碰的东西。闸门用「确定性检查 + 干净轨迹」。
🔴 难以逆转迁移、删除、写生产数据、动钱。这条车道「不开」,无论分数多高。
👆 点我看「第三行为什么不是『阈值设很高』」
结业 · 测一测

你真的懂了吗?

Q1. Loop 和 Graph 的分工是?

对。循环住在节点里,图住在节点之间。

Q2. 一个循环,最核心的部分是?

对。没有能失败的检查,你就没有循环,只有调度器。而且「没有错误」≠「正确」。

Q3. 「学习边」送回去的是什么?

对。它修好「之后的每一次」,而不是「这一次」。落到 brief(如何切工作),不是工人指令。

Q4. 闸门应该按什么变量开?

对。置信度是模型唯一能影响的变量,所以最弱。强的变量是「撤销多贵」。关闭的车道不会被调整。
恭喜
🎓

你抓住了这篇文章的核心

别再盯每一步了。
建一个「能失败的检查」让单元自己变绿,再画一张图决定哪些单元该存在——然后,你只在最后批准一步。

三句话撑起整个纪律

1️⃣ 测量「路径」,不只是它落在的「答案」。

2️⃣ 一个「不改变下一步跑什么」的裁决,只是一份报告。

3️⃣ 任何你不转成「永久约束」的失败,你会再遇到。

「多数人会一直调一个循环,然后叫它『系统』。画出图的那个人,会跑一支舰队,却永远搞不懂为什么别人追得这么吃力。」

原文:《Loops and Graphs》by Hanako(@hanakoxbt)

本页为互动教学演示,基于 Hanako (@hanakoxbt) 的原文 提炼整理,仅供学习。