千轮之病的两种药方:一个赌摘要保真,一个赌摘要没有权威
同一周里,我拿着同一个问题去问了两个人。
metacodes 的 wayfind 刚在 #277 里承认了千轮之病,他的药方是 TinyKG 上的任务 DAG,每轮注入“当前任务 + 根到当前节点的路径摘要”。我把问题又丢给 LoopX 作者:层级摘要逐层蒸馏,丢了约束、放松了验收,怎么发现?他回了五条机制,每条都挂着 pin 到具体 commit 的源码链接。
10 月 18 日,#277 关闭:goal 和 swarm 分别在 10 月 17 日随 AgentCore Revision 23(PR #286,SDK 0.10.0-dev)、Revision 24(PR #294,SDK 0.11.0-dev)落地;长程部分被明确拆成独立的设计与评估工作(“a separate design and evaluation effort”),DAG 还没有自己的 issue,更没有 PR。从公开承认到关闭只隔了一天。LoopX 的答案已经在 main 上跑着。
上一篇解剖的是病本身,这篇比药方。两边源码我都读了,读完发现一件预告里没人提的事:两种药方的坑,是同一个。
一、先把病说到机制层
Codex 的 goal 扩展源码(codex-rs/ext/goal,约三千行 Rust)是个清楚的标本。它的自动续跑,本质是每轮重注入一份 <objective> 包裹的目标全文(templates/goals/continuation.md),配一整套审计软约束:标 complete 前要逐条找证据,不许用更窄的方案替代目标。预算则是硬机制:目标存数据库、模型没有“停下”这个选项、token 记账排除缓存命中。
这套设计在百轮内好用,因为它的一切保证本来就以会话为界:目标是锚,会话是锚的绳长。同一个注入物拉到周尺度就出事——顶层目标全文逐轮压进上下文,工作早钻进某个子系统了。绳放尽了,锚不在船边,每一轮注入都在把船往回拽。
二、药方 A:改变注入物的结构
metacodes 的路线:既然全文注入会压顶,就改注入物的结构。TinyKG 把任务逐层分解成 DAG,每轮注入的从“顶层目标全文”换成“当前任务 + 根到当前节点的路径摘要”,模型只看路径上的相关切片。
这个方向不孤独。最接近的现成原型是 Mage(arXiv 2606.06090):两层状态树,顶层在子目标与决策边界生成摘要——几乎就是“当前任务 + 路径摘要”,连摘要触发点都一样。
两个已知的无人区,上一篇写过。
头一个是层级摘要的保真度没有评测方法。Mage、HORMA 这类层次摘要工作都假设摘要是好的,没有失真检测器。DAG 化等于把“每轮注入原文”换成“每轮注入蒸馏产物”,每层蒸馏丢了什么约束,目前没有任何检测手段。
第二个是 replan 语义。父目标变更后,已展开的子树如何失效、如何对账,论文和 Devin 都没有公开解法。
截至写稿,这个 DAG 方案的状态是:病被承认,药方画好,评估也承诺了,但还没开工。这不是批评,是时间戳。
三、药方 B:让摘要不当权威
LoopX 作者的回答,核心在一句话:“摘要承担阅读和理解的作用,权威状态由对应的写入与变更规则维护。”
这不是“把摘要做得更好”,是剥夺摘要的权威:目标、待办、归属、阻塞条件、证据全放在模型上下文之外,每轮注入的是状态内核的当轮读取,摘要只是辅助理解的读物。蒸馏丢了约束,伤的是可读性,不是行动依据。
他给的五条机制,我逐条对着他引用的 commit 105c4bc15 核验过源码。五条都能在仓库里找到对应文件,下面提到的文件都按这个 commit。
状态的寿命要超过当前会话。Goal、待办、工作归属、阻塞条件、证据和后续入口都不在模型上下文里;模型每轮读到的是这些权威事实的当轮读取,摘要只承担阅读和理解。写入与变更规则决定谁能改、改完以什么为准。interaction_contract.ts 把这条写得很直白:先读完整 Goal 意图与选中的 Todo 是前置义务,“A summary cannot replace this read”。
每一轮还要形成能接到下一轮的闭环。当前事实 → 判断可做什么 → 有界执行 → 验证与写回 → 新事实 → 下一轮判断。状态和转换规则一起定义,模型说“完成了”不算数,要经过验证和结算才能成为后续工作的依据。
顶层目标和当前工作的节奏也不能一样。Goal 保存长期方向,Vision 保存当前路线,Todo/frontier 表达眼下可推进的工作;进入子系统后,局部工作可以围绕局部问题持续展开。交付连续性就是这条原则落到代码里的样子:同一任务已有实质进展(previous_delivery_outcome)、仍可执行(actionable + capability_ready)、归属有效(没有被别的 agent 认领)时,后续心跳直接继续它,不必每轮拽回去重过顶层判断。delivery_continuity.ts 有 394 行,heartbeat_receipt 就在 preemption 列表里。
重规划本身也要成为可追溯的状态变化。replan 要说清哪些保留、哪些改变、哪些停止,并连接证据与后续工作;义务跨 replan 存活,恢复须由同一 Agent 的规范终态重建原义务,一次成功结算不能被另一轮复用来跳过验证。1511 行的 replan 契约里,“没有有效变化依据的复盘不能自动解除义务”,这条有代码兜底。
时间接续和层级组合其实是同一套思路。跨轮接续保留本轮结果、未完成责任和下一入口;跨任务、跨 Agent 交接保留输入、归属、依赖、验收和结果返回。三层步幅把这条落到节奏上:Effect stride 是工具反馈边界,Delivery stride 是结算边界,Authority stride 管 scope/acceptance/权限变更;文档还写明“一次 scheduler tick 本身不能制造任何一种语义迁移”。顶层干预本来就不该每轮发生——压顶问题在这一层是被设计排除的,不是被缓解的。
五条之外,我追问“每轮到底注入什么”,他又指了两个更具体的入口。这两个才是“注入什么”的直接答案。
quota_planning_horizon_v0 就是 planning horizon(计划视界):一个有界、只读的上下文,让 agent 在当前选中的 todo 之外,看到它所在的战略链——事实来源、策略决策、准入、验证。协议文档自己写了动机:“只显示那个门禁,会让模型去优化眼前这片叶子”;planning horizon 让这条有界的链可见,但“不悄悄替换掉选中的 todo”。
关键在默认值:把 goal 原文一并带进来的 planning_horizon_goal 选项默认关闭——LoopX 控制面自己的 planning horizon 默认连目标原文都不带,只给当前工作周围一圈有界视界。
这里得把范围说清楚:LoopX 的内层循环仍交给宿主自己的 /goal 跑,宿主那层的续跑提示词照旧注入目标全文,LoopX 不替代它、也关不掉它。准确说法是“控制面不加注,宿主层照旧”,单说“LoopX 不注入目标”是错的。
另一个入口是 replan context。启用 evidence_conditioned_v1(同样默认关闭)后,若历史中存在已被接受、绑定证据的 vision 路线,replan 上下文会返回上次路线决定连同其后的进度证据,因果顺序取自追加位置而非时间戳,“又做一次复盘或只引用一次”不会消耗证据。
这跟 succession advisory 一脉相承:把“上次决定了什么、之后实际做了什么”重建成可读模型交回判断,而不是自动失效。文档把边界写得很清楚——“这些是记录中的观测,不等于执行或收益的证明”。
他最后一段回答同样值得引:“状态格式正确、传递成功,不代表语义一定完整……任意自然语言约束在超长运行中始终不丢失,仍是需要持续验证的目标。”
四、分野的精确定义
两种药方摆在一起,最容易说错的一句话是“一个外置状态一个不外置”——不对,TinyKG 图数据库本身就是外置状态,两家的状态都在模型之外。
真正的分野更窄:每轮注入上下文的,是派生物还是权威本身。

左边押注蒸馏保真,右边押注摘要无权威;两家的失效模式是同一个无人区的两种形态。
metacodes 注入的是派生物——DAG 路径摘要是对图状态的蒸馏计算,模型拿到的行动依据是二手的,路线成败押在蒸馏保真上。LoopX 注入的是权威状态的当轮读取,不过蒸馏层。这一点在 planning horizon 上最清楚:两家都在解决“让当前工作看到自己在路径上的位置”,metacodes 给蒸馏出来的路径摘要,LoopX 给一份权威行的有界只读投影,默认连目标原文都不带。
两家的失效模式也就分开了:metacodes 的坑是蒸馏丢了约束而没有检测器;LoopX 的坑是状态 schema 表达不了的约束无处安放——能被外置状态看守的,只有能被结构化的那部分约束。作者承认的那句“任意自然语言约束不丢失仍未验证”,承认的就是这半边。
两个坑其实是同一个问题——没法被结构化的自然语言约束,怎么证明它还在——只是落在两个格子里,药方也不同,别指望一个指标通吃。
metacodes 这格是丢失检测。约束本来在图里、可结构化,蒸馏通道把它丢了。变异探针、约束注入在原理上直接可测:注入一条已知必须存活的约束,路径摘要后检查它还在不在。
LoopX 这格是无法表达。约束从一开始就进不了 schema,通道再无损也没用。先要解决自然语言约束的发现与归类,检测手段在它之后才有地方挂。
也别把分野读成对立。两条路线不互斥:DAG 节点完全可以持有权威、摘要只做视图,那是兼有两家之长的形态。现在下胜负结论太早——一边还没开工,另一边的验收文化不允许它提前宣布胜利。
五、一枚硬币的两面
读 LoopX 源码时有个发现,单看两条路线都看不到:连续性保护会放大渐进型漂移。
交付连续性让局部工作不被顶层目标拽回,这是治千轮之病的药。硬币的另一面:局部一直“对”,方向慢慢偏,不触发任何单点告警。保护局部连续性的机制越强,渐进漂移的通道越宽。
LoopX 自己知道。仓库里躺着一份 goal-direction-baseline RFC(目标方向基线),状态“已接受、Partial”,M1 候选明确写着“不代表通用运行时启用”。药已落地,解药还是候选。这个时差不是疏漏。长程系统现在就卡在这里:“敢深入”做出来了,“不跑偏”还在图纸上。
这正是我在系列第一篇给 LoopX 提的第二条建议(replan 产出目标 diff、方向性变更挂 operator gate)——我开的药方,仓库里已经有半张,值得盯它什么时候从 Partial 走向默认启用。
跑稳、跑好之外,还有第三件事——记得为什么跑。
六、RSI 的地基,铺了一半
还有一篇和这个病同源的文章。LoopX 作者最近发了《通用长程是 RSI 的先决条件》,主张递归自我改进的瓶颈不在“AI 能不能改自己的代码”,在改进能否累积——目标延续、反馈累积、改进接续。用他自己的话说:“单次智能解决一个问题,长程智能积累解决问题的能力。”前面五节,最后都落到一件事上:让每一轮工作成为下一轮的地基。
他用项目自己的 Git 历史支撑这个主张,切成三段:5 月 31 日首个提交,6 月 1 日就建立了“把自己的项目作为目标”的 meta goal——自举不是项目成熟后贴的金,第一天就长出来了;6 月 21 日更名 LoopX,从个人循环扩展到多 Agent 与社区;9 月 6 日 1.0 发布 Personal Workspace,人正式进入回路。
我最感兴趣的是凌晨提交占比:自举期 40.3%,社区期降到 24.8%,日均提交从 35 涨到 86——占比降、总量升,他自己的读法是“工作能否跨昼夜延续、多人多 Agent 能否形成持续产出”,比占比数字本身更值得看。
不过这个指标有两个没剥离的混淆变量:日均提交可能包含 bot、CI 和批量格式化提交;跨时区协作者加入后,凌晨占比也会被自然摊平——他自己统计里那 209 个带 +04:00/+07:00/+10:00 偏移的提交就是摊平力量的一部分。它只能当旁证,支撑不了“自举强度”的因果断言。
审计之前先复核。他文末附了统计复核命令,我跑了一遍:快照 8,613 总提交、6,848 非合并、三期凌晨数、最近 14 天 1,356 个、单日最高 144,全部精确成立。这里有个方法坑:%cI 保留提交写入时的原始时区偏移,直接取小时会算错,得先换算到北京时间。全库约 209 个提交带着 +04:00/+07:00/+10:00 的偏移,这本身倒是“社区贡献交织”的旁证。
他点名挂出的三个证物我也逐个看了。对 RSI-Harness 的采用审计有 102 行,四档决策表,唯一采用项附了实测:33MB 文件记账峰值内存从 68MB 降到 47KB。落地它的 PR #4984 含 157 行边角回归;外部贡献者还修正了它的 JSONL 分帧 bug,对应 PR #5119。“采用→验证→被社区修正”的链条是真的。
但文章主张和代码对表,落差在同一个地方:RSI 文说“改进接续”已经在发生,代码里对应的 Reward Memory 是默认关闭的实验能力。这套东西约 30 个模块,反馈证据、策略内容与动作 authority 三分,设计严谨;但五个宿主里有三个的自动写回标注为未接入。叙事用完成时,机制用进行时。
同一个时态差还有第二处:他指路让我看的两个机制——planning horizon 的 goal 携带与 replan context——恰好也都是默认关闭的实验开关,文档写明“送达和隔离测试不能证明模型采用及收益”。指路指到实验区。一个把实验默认关闭、把收益标为未证的项目,指路往实验区指,恰恰是诚实。
我读完源码反而更信这篇文章了,只是理由和它自己写的不完全一样:通用长程确实是 RSI 的先决条件,但从代码看,连“目标延续”这块地基,铺得最好的项目也只铺了一半。vision_checkpoint 管路线修订,succession advisory 把对账摆到人面前,direction baseline 还是 RFC。地基在施工,不妨碍方向是对的。但谈递归之前,得先承认我们还在打地基。
七、负面清单更新两格
系列第一篇那份负面清单,这轮更新两格。
第一格是 replan 对账。LoopX 的现实答案是两件套:successor 链接 lineage_only,检测到接续问题强制 authoring_decision_required;replan context 把“上次决定与后续证据”重建成只读模型交回判断。不自动失效、不自动转移,对账决策显式摆回人面前。自动对账语义依然是无人区,但“拒绝自动化”成了一种被实现、且带证据回读的立场。
第二格是新增的:不可结构化约束的存续。蒸馏保真检测(metacodes 的坑)与 schema 外约束看护(LoopX 的坑)是同一个问题下的两格,丢失检测与无法表达。两种药方谁能先填上,取决于各自承诺的那个评估——一边承诺“做完之后严格评估”,一边把“每条规则的反面写成变异测试”当日常。
两种药方都押了可检验的承诺。剩下的,等评估。
相关阅读
- 上一篇:《千轮之病:一个 agent 运行时的 goal 解剖,和它给自己开的药方》
- 上上一篇:《goal:目标与协议》
- LoopX 作者的 RSI 文:《通用长程是 RSI 的先决条件》
- metacodes issue #277 及 closing comment