技术 · 深入

它每一步都动了,为什么合起来没往前走?

每步都成功,不等于有进展
agent 最贵的一种故障不是报错,是「看起来一直在干活」—— 工具一个个调、文件一个个改、日志一行行刷,你回头看却发现原始目标一步没动。报错会自己亮红灯,这种不会。这一页给你一套显式信念状态的做法:每轮只维护两样东西 —— 一是「现在的世界是什么样」(已确认的事实、可复现的证据),二是「还差什么才算做完」(未完成的需求清单);然后每轮做一次一致性校验(有没有事实被后来的观察推翻、有没有需求从头到尾没被任何动作碰到),并给每个未完成需求记一次进展计数。判据一句话:连续若干轮里,某个需求的进展计数一直是 0,而工具调用数一直在涨 —— 那不是慢,那是原地。识别出来之后要做的不是加步数,而是按陷入模式换一种恢复动作:换信息来源、换拆解粒度,或直接把这一条交回给人。
方法 · 一图看懂
1
每轮只记两张纸:世界是什么样 · 还差什么才算完 —
2
每轮做一次一致性校验,把被推翻的事实划掉 —
3
给每个未完成需求记进展计数,连续 0 就是信号 —
4
命中之后按陷入模式换动作,而不是加步数 —
为什么「有记忆」不等于「有进展」
把交互历史整理成记忆,解决的是「它还记不记得」;它不解决「它对当前世界的认知是不是连贯」。一份记忆库可以同时包含「文件已改完」和「文件还没改」两条观察,模型按相似度召回时,谁先被想起来是运气。真正卡住 agent 的常是这两种状态:一是拿着一份过时的事实继续推(比如某个接口昨天还通,今天已经 502,但它记住的是昨天那条),二是每一步都很顺、合起来却在绕圈(查了 A 得出 B,查了 B 又回到 A)。两者都不会触发报错。
「显式信念状态」长什么样
不要写成一段自由文本的「进展总结」,那会退化成又一个摘要。写成两张有字段的表:① 世界状态 —— 每行 = 一条已确认的事实 + 它是怎么确认的(哪一次工具调用的哪个输出)+ 确认时间;② 需求清单 —— 每行 = 一条未完成的子需求 + 它被哪条事实阻塞 + 最近一次被某个动作碰到是第几轮。两张表都放在上下文之外的固定位置(一个文件或一段被钉住的区块),每轮由 agent 自己更新,而不是由外部摘要器重写。
进展计数怎么记、怎么看
每一轮结束时,对需求清单的每一行问一句:「这一轮有没有任何一个动作,让这条需求更接近完成?」有就 +1 或置为「动过」,没有就累计一次「空转」。当某一行在连续 5 轮里空转、而同期工具调用总数大于 10 时,判定为原地(阈值你自己定,但必须是固定数目,不能凭感觉)。这条判据的价值在于它可核:把两张表贴出来,任何人三十秒就能看出是「慢」还是「原地」。
命中之后换什么:三种恢复动作
检测只是第一步,处置要分模式。① 事实过时型 —— 世界状态里某条事实的时间戳明显早于当前,重新取一次该事实,并把它标为「待复核」直到新证据到位。② 需求拆得过粗型 —— 某条需求反复被碰却没推进,说明它太大,拆成两条可独立验证的小需求。③ 方向本身错型 —— 换了两条路径都空转,停下来把它交回给人,附上两张表和一页「试过什么、结论是什么」。⛔ 唯一不该做的动作是「加最大步数」—— 那只会让空转跑得更久、账单更高。
原理 · 为什么有效
为什么这套做法有效:模型的注意力是一种预算,不是容器。上下文里同时存在「昨天的事实」与「今天的事实」时,它不会自动按时间排序取新 —— 它按相关度取,而相关度对「哪条更真」是盲的。把「当前认定的事实」单独维护成一张有来源、有时间戳的表,等于把「哪条更真」这个判断从模型的临场推理里搬出来,变成一个可检查的账。第二层机制是:「有没有进展」这件事必须由结构回答,不能由叙述回答——一段话总能写得像在推进,而一个一直没被任何动作碰到的需求行不能。
适用场景
适用:跑了几十轮以上的长任务 · 多子需求并行(比如同时改三个仓库、同时查五条资料)· 无人值守或定时触发的运行 · 你已经遇到过「它说做完了但没做」这类事故。不适用:一轮就能出结果的一次性提问 · 目标本身就是探索而非推进(比如随便聊聊找灵感)· 任务短到你一眼能看完全部输出。
自测 · 5 问
我的「世界状态」表里,每一行都能说清它是哪次调用的哪个输出确认的
我的「需求清单」是拆到可独立验证的粒度,而不是一句笼统的目标
进展计数的阈值是固定数目,不是我当场凭感觉判的
命中原地之后,我换的是恢复动作,而不是把最大步数调大
这套两张表的做法,我至少有一次是靠它提前叫停了任务,而不是事后复盘才发现
怎么上手 · 验证步骤
今天就拿一个你手上正在跑的、超过二十轮的 agent 任务试一次。第一步:把它当前认定的事实抄成一张三列表(事实 / 依据 / 时间),你会发现至少有一两条的依据是空的 —— 那条就是风险点,先补一次重新确认。第二步:把它还没做完的子需求拆成可独立验证的行,逐行问「上一轮有没有任何动作碰过它」,碰不到的标 0。第三步:只改一件事 —— 让 agent 每轮结束先更新这两张表再决定下一步。
跑完第一轮之后问自己一句:「如果现在把这两张表交给一个完全没看过这个任务的人,他能不能在三十秒内指出哪一条在空转?」能,说明这套表是有用的;不能,说明它已经退化成一段摘要了,回去把字段拆细。
[C级]bytenote.net 挑技能该有尺子了:两篇 agent 论文的新解法(2026-10-0x · 解读 arXiv:2610.01415 的 PoS 框架与 Belief Trapping 概念) [C级]arXiv:2610.01415 Beyond Memory(Yu Luo 等 · 2026-10-01 · 显式信念状态 = 世界状态估计 + 未完成需求,配一致性校验与进度追踪) [C级]thenextgentechinsider.com Decoupling Agent and Application Lifecycles(2026-10-0x · verification 与 validation 分开 · shadow mode 与窄范围放开 · scratchpad 作局部状态) 同类:它说跑完了,但该做的那件事没做 · 压缩之后,它把做完的又做了一遍
继续往下读
同级:它说跑完了,但该做的那件事没做 随机一篇