给长程智能体一张"实时作战地图":PoS 用显式信念状态替代记忆堆砌

你有没有观察过 Agent 跑长任务时的一种典型死法——它一直在动,动作一个接一个,但就是没有实质进展。开柜子、关门、再开柜子、再关门,循环 50 步,预算耗尽,任务失败。这不是模型笨,是它的"上下文"里塞满了历史证据,却没有一个地方清清楚楚地写着:现在的世界是什么样、目标还差什么、我刚才做的事到底有没有用。

这篇来自南开大学和阿里巴巴的论文(arXiv:2610.01415)给这个问题起了一个很传神的名字——信念陷阱(Belief Trapping),并提出了一套推理时的框架 PoS(Progression of States):不再让 Agent 从越来越长的历史轨迹里"考古",而是持续维护一份显式的、可校验的、可修复的信念状态作为决策上下文。

核心摘要:长程 Agent 的瓶颈不是记不住,而是"不知道自己现在处于什么状态"。PoS 把 POMDP 里的信念状态(belief state)落到工程上——用实体-状态-关系三元组维护当前世界认知,用认知缺口/成就缺口标记"还没学到的"和"还没做成的",再用一个信念哨兵(Belief Sentinel)做一致性校验,配合三信号健康度检测发现 Agent 陷入空转,最后按陷阱类型和缺口类型组合恢复策略。四个基准、三个骨干模型,PoS 全部拿到最高分,ALFWorld 上相对最强 baseline 提升 22.68%,RCA-100 联合准确率提升 37.89%。代价是 token 消耗涨到 5 倍——这是一篇"用推理时计算换可靠性"的硬核工作,值得细读。


📖 论文信息

  • 标题:Beyond Memory: Harnessing Long-Horizon Agents with Explicit Belief States
  • 作者:Yu Luo、Jiamin Jiang、Yimin Zuo、Xidao Wen、Rongchen Gao、Yongqian Sun、Shenglin Zhang、Guiyang Liu、Cheng Zhang、Fang Situ、Qi Zhou、Dan Pei
  • 机构:南开大学、阿里巴巴集团、清华大学(第一作者于阿里巴巴实习期间完成)
  • 时间:2026 年 10 月(arXiv:2610.01415v1)
  • 代码:https://github.com/luoyu100/PoS

🎯 问题动机:记忆不是理解

先说说这篇论文戳中的痛点。

现在的 Agent 框架处理长上下文,主流思路就两类。一类是保留:ReAct 把完整轨迹按时间顺序塞进上下文;另一类是压缩/组织:ACON 做历史压缩,HiAgent 按子目标组织工作记忆,PACE 预测哪些历史对下一步有用再保留。这些都是"记忆作为上下文"(memory as context)的路子。

但问题在于——能访问证据,不等于对世界有一致的当前认知。

论文里举的例子很形象:Agent 的上下文里同时记着"微波炉是开着的"和"微波炉是关着的",两条记录都有证据来源,都是"真实发生过的历史"。但下一步该不该先开门再放杯子?从记忆里读不出来,得靠 Agent 自己在一堆相互矛盾的记录里临场推理。步数一多,这种隐式状态重构必然出错。

说实话,这个观察我在做 Agent 项目时深有体会。上下文窗口给到 256K 也没用——信息都在,但"哪些事实仍然成立、哪些推断还有效、哪些事还没解决",没人维护。模型每次决策都在重新"考古",考着考着就把过时信息当真的用了。

论文把这个上升到理论层面:这其实是个 POMDP 问题。标准 POMDP 里,信念状态 \(b_t(s) = P(s_t = s \mid h_t)\) 是决策的充分统计量,可以递归更新。LLM Agent 缺的就是这个东西——一个可检查、可修订、可校验的当前世界估计。

但光有信念还不够。LLM 自己生成的信念更新有两个坑:

  1. 一致性问题:更新是 LLM 自己写的,可能引入相互冲突的状态或没有证据支持的推断。
  2. 信念陷阱:就算信念一致,Agent 也可能空转——重复无效动作、在访问过的状态间打转、收集对任务没用的信息。动作一直在发生,进展一点没有。

已有的工作怎么处理?T3 在强化学习里检测信念偏移然后直接截断轨迹,CGDP 用耗尽门控终止无效的信息收集。都是"发现不对劲就砍掉",没有在推理过程中恢复进展的机制。这就是 PoS 要补的位。


🧠 方法核心:信念建模 + 哨兵校验 + 陷阱恢复

先看总览图。

PoS 框架总览

图 2:PoS 整体架构。左上:证据(原始轨迹 + 检索记忆)输入信念建模;中间:信念由世界状态、目标、认知缺口、成就缺口组成,任务智能体基于信念和活跃缺口选动作;下方:信念哨兵做一致性校验和进展标注;右侧:陷阱感知恢复模块估计信念健康度、做分解诊断、组合恢复约束。

一句话讲清核心思路:把"当前世界什么样 + 还差什么"从长历史里提炼成一份结构化文档,每一步更新它、校验它,发现空转就按病因开药方。

信念建模:\(B_t = (W_t, G, \Delta_t^E, \Delta_t^A)\)

PoS 的信念状态有四个组件:

  • 世界状态 \(W_t\):用实体-状态-关系(Entity–State–Relation)结构表示。实体是任务中的对象(杯子、微波炉),状态是对实体的自然语言描述("closed"、"hot"),关系是有向连接。每条状态和关系都带置信度和证据来源。之前的工作(如 ARIGraph、ConceptGraphs)也建实体关系图,但只记身份和连接,不记状态变化——而"微波炉现在开没开"恰恰决定下一步动作可不可行。\(W_t\) 只保留影响动作可行性、结果评估或目标满足的记录,不做全量建模。
  • 目标 \(G\):任务目标和完成判据。
  • 认知缺口 \(\Delta_t^E\):还不知道什么(epistemic gaps)——信息未知或证据不足。
  • 成就缺口 \(\Delta_t^A\):还没做成什么(achievement gaps)——当前信念与目标状态的差距,得靠动作消除。

这个二分挺漂亮的:把"要学的"和"要做的"分开。后面会看到,陷阱恢复的药方正好按这个维度开。

信念引导交互:活跃缺口 + 哨兵校验

缺口可能有一堆,平均用力只会让 Agent 在缺口之间跳来跳去。PoS 每步选一个活跃缺口 \(\Delta_t\) 作为当前焦点,动作选择变成:

\[a_t \sim \pi(\cdot \mid B_t, \Delta_t, \mathcal{C}_t)\]

其中 \(\mathcal{C}_t\) 是恢复约束,正常时为空,检测到陷阱时才注入。

执行动作后拿到新观测 \(o_{t+1}\),任务智能体把证据融入信念形成候选 \(\widetilde{B}_{t+1}\)。但注意——这个候选是 LLM 自己生成的,可能带着幻觉和推理错误。所以 PoS 引入信念哨兵(Belief Sentinel)做审计:

\[\widetilde{B}_{t+1} = \mathcal{U}(B_t, a_t, o_{t+1}) \xrightarrow{\text{Belief Sentinel}} B_{t+1}\]

哨兵检查两类不一致:内部不一致(候选信念里同一实体挂着互斥状态,比如微波炉既开又关)和外部不一致(与最新观测或已有证据矛盾)。发现问题就打回,任务智能体结合证据修订后才提交为正式信念。

这个设计让我想到 LongHorizon-Harness 的 Manage-Execute-Audit 循环——但那套方案依赖"可独立验证的中间产物",适合有明确 artifact 的任务;而诊断类任务(比如找故障根因)的进展是不确定推断的演进,没法直接验证,哨兵校验的是信念本身的一致性和证据支持度,适用范围更广。

陷阱感知恢复:三信号健康度 + 分解诊断 + 组合药方

这是我觉得全文最值钱的部分。

第一步,进展标注。 每个校验过的信念迁移 \(B_{t-1} \rightarrow B_t\) 打一个二元标签 \(u_t \in \{0,1\}\)。诊断任务用置信度变化度量:

\[d_t^{\mathrm{diag}} = \frac{1}{2}\sum_x |c_t(x) - c_{t-1}(x)|, \quad u_t = \mathbb{I}[d_t^{\mathrm{diag}} > \epsilon]\]

执行任务则由哨兵判断:活跃缺口缩小了?拿到了解决缺口所需的信息?还是向目标推进了合理路径?是则 1,否则 0。

第二步,窗口级健康度。 单步没进展不算陷阱,PoS 在最近 \(K=8\) 个迁移的窗口上算三个互补信号:

  • 缺口持续性 \(P_X\):窗口开始时的 X 类缺口,有多大比例到现在还没解决;
  • 进展停滞 \(S_t\):窗口内无进展迁移的占比;
  • 信念复发 \(R_t\):与活跃缺口相关的世界状态投影,在不同时间滞后下的最大重复率(用 Jaccard 距离判定"相同")。

合成健康分数:

\[\mathcal{H}_t = 1 - \max_{X \in \{E,A\}} \left[ P_X \max(S_t, R_t) \right]\]

\(\mathcal{H}_t \le \theta_H\)(0.25)时判定陷入信念陷阱。这个乘法设计挺讲究的:缺口一直没解决(\(P_X\) 高)且伴随停滞或复发(\(\max(S_t, R_t)\) 高)才算陷阱——单独一个高不算,避免误伤那些"缺口难但仍在稳步推进"的情形。

第三步,分解诊断。 确认陷阱后沿两个维度定位病因。动作动力学模式分三种,按序判定:

\[\rho_t = \begin{cases} \mathrm{Static}, & d_W(W_t, W_{t-1}) \le \epsilon_W \\ \mathrm{Cycle}, & R_t \ge \theta_R \wedge k_t^* > 1 \\ \mathrm{Drift}, & d_W(W_t^{\Delta}, W_{t-1}^{\Delta}) \le \epsilon_W \end{cases}\]

Static 是世界状态原地不动;Cycle 是周期性回到旧状态;Drift 最微妙——世界状态在变,但与活跃缺口相关的投影没变,就是在"瞎忙活"。另一个维度是被卡住的缺口类型:\(P_E\) 高是认知卡死,\(P_A\) 高是成就卡死。

第四步,组合恢复约束 \(\mathcal{C}_t = \mathcal{C}_{\mathrm{pattern}} \cup \mathcal{C}_{\mathrm{gap}}\):

模式 模式约束(怎么逃) 缺口类型 缺口约束(恢复什么)
Static 抑制无效的"状态-动作"转移 认知型(E) 要求获取有判别力的新证据
Cycle 打破 \(k_t^*\) 标识的循环转移 成就型(A) 要求产生任务相关的状态改变
Drift 把动作选择重新锚定到活跃缺口

恢复期间活跃缺口不变,约束注入动作选择;约束起效(\(\mathcal{H}_t\) 回升超过阈值)就释放,否则更新诊断再来一轮。

看论文 Figure 1 右侧的真实案例就很直观:ALFWorld 里"把热杯子放进柜子",隐式信念的 Agent 反复检查同一个柜子 36 次,50 步后失败;PoS 的信念文档里明确写着"活跃缺口:把 Mug 3 加热",健康分数检测到停滞后触发恢复,17 步完成。

PoS 性能与动机示意

图 1:左半部分是四个基准上 PoS 与各 baseline 的对比(蓝色柱均为 PoS,全部领先);右半部分是一个真实 ALFWorld 案例的对比——隐式信念导致空转失败,显式信念配合健康监测和恢复约束后成功。


📊 实验:四个基准、三个骨干,全面领先

实验设置:四个长程基准分两类——执行任务(ALFWorld 134 个 unseen 环境任务、LOCA-Bench 175 个 case)和诊断任务(RCA-100 微服务故障诊断 103 个 case、ClinDiag 临床诊断)。三个骨干:Qwen3.7-Plus、Kimi-K3、GLM-5.3,全部 temperature 0。Baseline 覆盖 Raw Trajectory、ACON、PACE、HiAgent、LongHorizon-Harness。

主实验

方法 Qwen3.7-Plus (ALF/LOCA/RCA/Clin) Kimi-K3 (ALF/LOCA/RCA/Clin) GLM-5.3 (ALF/LOCA/RCA/Clin)
Raw Trajectory 62.69 / 43.62 / 24.27 / 38.91 81.34 / 69.71 / 36.89 / 49.17 93.28 / 62.86 / 32.04 / 46.85
ACON 66.42 / 49.90 / 27.18 / 39.74 81.34 / 70.86 / 40.78 / 38.58 94.78 / 65.90 / 33.98 / 46.19
PACE 67.91 / 17.33 / 28.16 / 41.89 84.33 / 41.52 / 35.92 / 50.17 94.78 / 38.29 / 37.86 / 43.38
HiAgent 66.42 / 24.57 / 28.16 / 40.07 88.81 / 49.52 / 41.75 / 48.51 94.78 / 45.90 / 40.78 / 44.87
LongHorizon-Harness 72.39 / 52.57 / 26.21 / 40.56 91.79 / 67.62 / 38.83 / 51.82 95.52 / 64.38 / 31.07 / 45.53
PoS(本文) 88.81 / 56.38 / 38.83 / 45.03 94.03 / 74.29 / 51.46 / 54.80 97.01 / 70.86 / 49.51 / 52.15

表 1:主实验结果(ALF/LOCA 为任务成功率,RCA 为联合准确率,Clin 为诊断准确率,单位 %)。12 个格子 PoS 全部第一。

几个值得注意的点。

第一,现有上下文管理方法甚至打不过原始轨迹。PACE 在 LOCA-Bench 上比 Raw Trajectory 低 24.57–28.19 个点;GLM-5.3 上的 ClinDiag,所有上下文管理 baseline 都不如 Raw Trajectory。这个发现挺打脸的——对长上下文能力已经很强的现代 LLM,压缩和组织带来的信息损失可能超过减少冗余的收益。之前大家默认"上下文管理总是有用的",这张表直接挑战了这个假设。

第二,PoS 的增益跨任务类型:相对最强 baseline,ALFWorld 提升 22.68%、LOCA-Bench 7.53%、RCA-100 联合准确率 37.89%、ClinDiag 11.31%。RCA-100 上从 40.78(HiAgent)到 51.46,这个幅度在故障诊断任务上相当能打。

第三,RCA-100 上 LongHorizon-Harness 反而比 Raw Trajectory 差(26.21 vs 24.27 勉强持平、31.07 vs 32.04 还低)——论文解释是诊断进展依赖不确定假设的 refinement,而不是可验证的 artifact,audit 架构派不上用场。baseline 选得算公平,这个观察也侧面支撑了 PoS 的动机。

消融:校验和恢复缺一不可

去掉一致性校验,ALFWorld 掉 14.93 个点、LOCA-Bench 掉 11.81 个点,但 ClinDiag 只掉 0.33–0.66 个点。这个不对称很有意思:执行任务里实体状态变化频繁、相互牵制,信念更新出错的风险天然更高;诊断任务里信念主要是假设的置信度演进,冲突少。

去掉陷阱诊断与恢复,RCA-100 掉 4.85–6.79 个点、ClinDiag 掉 2.65–3.97 个点。构造显式信念只是起点,持续校验它的健康度才是增益的大头——这是消融实验给出的核心结论。

陷阱分析:空转比想象中普遍

Figure 3 的统计显示,陷阱在各设置下都很常见,强骨干模型发生率更低。但有个反直觉的点:RCA-100 上 Kimi-K3 的陷阱率比 GLM-5.3 高(74% vs 53%),最终联合准确率却更高。陷阱率低不代表成绩好——敢探索的模型更容易走进死胡同,关键是能不能爬出来。

陷阱模式还随任务类型变化:ALFWorld 里 Cycle 最常见(具身动作容易重访旧状态),LOCA-Bench 和 RCA-100 里 Drift 占 55.93%(多源证据更新了信念但没推进活跃缺口),ClinDiag 里 Static 占 78.25%(做了一堆没有判别力的检查,诊断信念原地不动)。这个分布反过来验证了分解诊断的必要性——病因不同,药方必须不同。论文还对比了"通用恢复提示"(直接告诉 Agent 你被困住了,想办法恢复),分解恢复在四个基准上全面胜出。

成本与扩展性

成本是 PoS 绕不开的短板。RCA-100 上联合准确率从 24.27% 提到 38.83%,任务智能体本身的 token 反而省了 20.9%(决策上下文更聚焦),但加上信念维护和哨兵审计,总消耗涨到 5.06 倍(1800K vs 356K token/episode)。有意思的是消融的成本结构:去掉一致性校验省 35.6% 总 token 但掉 7.76 个点;去掉陷阱恢复只省 9.2% 还掉 4.85 个点——钱花在校验上最值。

上下文扩展实验里,LOCA-Bench 的环境描述从 8K 长到 256K,所有方法都在跌,但 PoS 从 96K 到 256K 基本平稳,256K 处领先最强 baseline 10.67–16.00 个点。道理不难懂:别人要从越来越长的历史里重构当前状态,PoS 每步只看信念文档,历史再长也不直接影响决策质量。


🤔 我的判断

这篇论文的真实定位是什么?我的看法:不是底层理论突破,而是把 POMDP 信念状态这个经典概念扎扎实实地工程化,并且补上了"维护"这个此前被忽略的半边。

亮点有三个。一是问题定义精准——"信念陷阱"这个概念命名得好,把一类此前被笼统归为"Agent 不够聪明"的失败模式拆成了可检测、可诊断、可恢复的具体模式(Static/Cycle/Drift × 认知/成就)。二是健康度估计的乘法结构 \(P_X \max(S_t, R_t)\) 和分解诊断的规则设计,都是经过思考的,不是拍脑袋。三是实验扎实,三个骨干 × 四个基准 × 完整消融 × 陷阱分布分析,没有明显的水分。

但也有几个让我皱眉的地方。

第一,5 倍 token 成本。论文自己也承认这是主要局限。对很多线上场景,这个开销是致命的。校验和信念维护能不能用小模型做?论文没探索。

第二,整套系统依赖大量 LLM 判断——哨兵审计是 LLM、进展标注是 LLM(执行任务)、信念更新还是 LLM。用 LLM 校验 LLM,校验器本身的错误率没有单独量化。诊断任务用置信度变化 \(\epsilon=0.30\) 做进展阈值,这个数怎么定的、敏感性如何,论文给的讨论不多。

第三,健康度检测窗口 \(K=8\)、恢复最多看 4 个无进展迁移,这些超参在附录里给了但缺少敏感性分析。不同任务的最优窗口可能差很远。

和同期工作比,T3、CGDP 处理的是"发现就砍",PoS 是第一个在推理时做"诊断+恢复"闭环的——这个定位我认为成立,不是硬吹出来的"首个"。

工程上的启发挺直接:如果你在做长程 Agent,与其卷上下文压缩,不如先回答三个问题——当前世界状态是什么、还差什么、上一步有没有用。哪怕不做完整的 PoS,单独把"进展标注 + 停滞检测"加上,大概率就能捞回一部分失败的 episode。


🔗 资源

  • 论文:https://arxiv.org/abs/2610.01415
  • 代码:https://github.com/luoyu100/PoS
  • 项目页:https://luoyu100.github.io/projects/progression-of-states/project/

觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我