不是你想盯,是因为——没有别的东西在检查。
想从那张椅子上起来,需要两样东西。而几乎每个人都只建了其中一样:
让「一个工作单元」在没有你的情况下变得正确。
决定「哪些工作单元存在」,以及它们的顺序。
大多数人只建了 loop,没建 graph。于是他们有一个「很棒的 Agent,却跑着错误的三步、错误的顺序、一次一个」。
这堂课讲清楚:这两者怎么分工、各自看不见的机制,以及——你最终该在哪「只批准一步」。
把一切剥掉,一个循环就四个部分:
没有「一个能在你离开房间时让工作失败」的东西,你就没有循环——你只有一个调度器。
大家都先建工作,最后在结尾「拴」一个审查——而那个审查,是另一个模型去看输出。
这就是「两个乐观主义者互相点头」。
正确做法:先写条件,而且要写得让「一个程序」都能评估它。
「让另一个模型审一眼输出,看有没有问题」
「测试必须通过,且覆盖率 ≥ 80%」
循环的全部职责,就是让一个工作单元变好。它非常擅长这个。
但它不能:
于是你得到一个很棒的 Agent,跑着「错误的三个步骤、错误的顺序、一次一个」。每一步都正确,结果却还是慢、形状还不对——而调循环修不了它,因为毛病不在任何一个单元内部。
那一刻,人们会怪「模型不行」。也是那一刻,下一层开始回本。
下一层,就是 graph。
图是工作的形状:什么跑、什么同时跑、什么等、什么根本不跑、结果回到哪里。
一个有界任务,一个输入进、一个输出出。
这个节点的输出,喂给那个节点的输入。
「总结这个文件,然后查天气」——它们之间没有边。天气不消费总结。
对一条已有 pipeline 里的每一条箭头,问一句:下一步真的读了上一步的输出吗?
如果你说不出「跨过去的是哪个变量」——那里就没有边,那个等待就是纯浪费。
大多数链里都有 2-3 条这样的箭头,找到它们,通常就是你能得到的最大的一笔提速。
「把 10 份报告去重、按影响排序、合并成一份」
「判断这份报告的核心结论是否有说服力」
产出 → 检查 → 修正 → 重复直到绿。
拆分、扇出、合并、闸门、送回。第二张清单,从单个单元内部根本无法表达。
所以你不是「二选一」:
没有「回去的路」的图,是一条 pipeline——产出、然后遗忘。下周从同一个地方、带着同样的盲点重新开始。
几乎所有人都建了第一条,跳过了第二条。症状:一个系统「很快,但永远不变聪明」。
学习边送的不是输出,而是从输出里提炼出来的约束。
注意它落在哪:不是工人的指令里,而是「塑造工作如何被切」的那份 brief(简报)里。
一个被确认的原因,变成一条规则——于是下一次的拆分,从这次结束的地方开始。
这是返回路径上最贵的错误,值得说白:
四片被移植,一片测试挂了。如果整批退回去,三片正确的会被重写——它们的下一版是「不同」,不是「更好」,因为它们本来就没毛病。
现在你要重新验证全部四片,而且这三片这次可能因为不相干的原因挂掉。你把「一个失败」变成了「四个不确定的结果」,还付了钱。一个 run 里来两次,就永远不收敛。
从外面看,这像「模型反复失败」。其实是返回路径在「摧毁正确的活」。
退回时带上:范围(scope)、上下文、尝试次数、原因。
范围线比你想象的更重要——没有它,退回的单元会「长大」:Agent 打开文件、发现旁边两个问题、顺手也修了,你的一次「单切片修正」就变成一份没人审的四文件 diff。
尝试次数封顶三次。一个单元修正三次还失败,问题在「产出它的计划」里——而循环看不到计划。
大多数人建一个置信度分数、设阈值、让超过的放行。这是错的变量。
置信度是那个决策里「最弱」的输入——因为它是模型唯一能影响的变量。真正强的变量是:如果这个改动错了,撤销它有多贵?
第三行不是「把阈值设得非常高」——它是「一条不打开的车道」。区别很重要,因为阈值会被调整,而关闭的车道不会。
在「开着的车道」里,闸门按顺序读证据:确定性结果 → 本次运行的轨迹 → 这个节点的活以前被回滚过多少次 → 最后才是模型自己的评估。
Q1. Loop 和 Graph 的分工是?
Q2. 一个循环,最核心的部分是?
Q3. 「学习边」送回去的是什么?
Q4. 闸门应该按什么变量开?
别再盯每一步了。
建一个「能失败的检查」让单元自己变绿,再画一张图决定哪些单元该存在——然后,你只在最后批准一步。
1️⃣ 测量「路径」,不只是它落在的「答案」。
2️⃣ 一个「不改变下一步跑什么」的裁决,只是一份报告。
3️⃣ 任何你不转成「永久约束」的失败,你会再遇到。
「多数人会一直调一个循环,然后叫它『系统』。画出图的那个人,会跑一支舰队,却永远搞不懂为什么别人追得这么吃力。」
原文:《Loops and Graphs》by Hanako(@hanakoxbt)