靠 prompt 记住的规则 200 轮后全忘了——LedgerAgent 用“账本“替代隐式记忆
论文:LedgerAgent: Structured State for Policy-Adherent Tool-Calling Agents
来源:arXiv:2606.20529(2026-06-18)
作者:Md Nayem Uddin, Amir Saeidi, Eduardo Blanco, Chitta Baral
📌 为什么你现在应该读这篇论文
你的 Agent 有多少条"红线规则"?写在 SOUL.md 里的、写在 system prompt 里的、写在注释里的——你觉得 Agent 真的每条都遵守了吗?
LedgerAgent 用实验证明了一个残酷事实:靠 prompt 隐式记住规则,在长程任务中必然失败。 换成显式账本 + 前置策略检查,一致性显著提升。
而且——这是推理时方法,不需要重训模型。今天看完,明天就能用。
两条反直觉发现
1. “语法合法” ≠ “策略合规”
Agent 调用了一个工具,参数类型完全正确,语法 100% 合法——但它违反了业务约束。比如:在"用户已取消订单"的状态下仍然调用"发起退款"工具。语法没问题,策略违规。
传统 Agent 只检查语法,不检查策略。因为策略依赖当前任务状态,而状态藏在 prompt 里——Agent 要"想起来"才能检查。
2. 越严格的标准下,LedgerAgent 优势越大
在简单的"单次通过"评测中,LedgerAgent 和标准方法的差距不大。但在"多试验一致性"指标(pass^k)下——也就是要求 Agent 每次都做出相同决策——LedgerAgent 全面超越。说明显式状态管理对可靠性优先的企业场景尤为关键。
当前 Agent 的两种高频失败
失败模式一:信息 Grounding 失败
Agent 检索到了正确事实(“用户在 6 月 1 日取消了订单”),但后续决策用过时信息(“用户订单仍在进行中,发起退款”)。
根因:任务状态没有被单独表示。观察结果、工具返回值、策略指令全部塞进 prompt,Agent 每次决策都要从 prompt 中重建相关状态。200 轮之后,关键信息被淹没在上下文海洋中。
失败模式二:策略违规
Agent 调用的工具语法完全合法,但违反了依赖当前任务状态的领域策略。比如:
- 用户已取消订单,仍调用"发起退款"
- 账户已被冻结,仍调用"执行转账"
- 工单已关闭,仍调用"添加处理记录"
根因:策略约束写在 prompt 里,Agent 需要"记住并推理"才能遵守。但在复杂任务中,策略推理被任务执行挤压,规则被"遗忘"。
LedgerAgent 的解法:三个组件
组件一:Ledger(账本)
将任务状态显式分离存储在独立的结构化账本中:
| 账本字段 | 内容 | 例子 |
|---|---|---|
| Facts | 相关事实 | “用户订单 #1234 已于 6 月 1 日取消” |
| Identifiers | 关键标识符 | “order_id: 1234, account_id: 5678” |
| Constraints | 活跃约束 | “已取消订单不可发起退款” |
| Conditions | 当前条件 | “账户状态: 正常” |
账本是 Agent 的"外部记忆",不是 prompt 的一部分。每次工具调用后,账本被精确更新——不是靠 Agent “记住”,而是靠系统"写入"。
组件二:状态渲染
将账本中的状态显式注入到 prompt 中,供 Agent 决策使用。
关键区别:不是把所有历史塞进 prompt(信息过载),而是只渲染当前账本状态——精炼、准确、无歧义。
组件三:策略预检
在执行有副作用的工具调用前,基于账本检查策略合规性。
Agent 想调用: initiate_refund(order_id=1234)
↓
策略预检: 账本显示 order #1234 状态=已取消
约束: 已取消订单不可发起退款
↓
结果: 🚫 阻止调用,返回策略违规信息
核心:策略检查发生在执行前,不是执行后审计。违规操作被阻止,不是"事后发现"。
核心交互效应
| 交互关系 | 方向 | 实际含义 |
|---|---|---|
| 显式账本 × 策略检查 | ✅ 协同 | 账本提供可检验状态,策略检查基于状态做合规判断 |
| 显式账本 × 信息 grounding | ✅ 消除 | 消除"从 prompt 重建状态"的歧义 |
| 策略检查 × 工具调用 | 🚫 前置拦截 | 不合规调用被阻止在执行前 |
| 账本持久化 × 长程任务 | ✅ 基础前提 | 200 轮后账本仍精确——prompt 早已丢失关键状态 |
| 账本 × 误进化记忆路径 | ⚠️ 缓解 | 状态变更可审计,错误经验累积可被检测 |
最后一条特别重要——LedgerAgent 的账本机制和 Misevolution 论文的"记忆误进化"直接对应。有了可审计的账本,记忆的漂移可以被检测和回滚。
实验结果
在 4 个客户服务领域评测,使用混合模型面板(开源 + 闭源权重模型):
| 指标 | 标准方法 | LedgerAgent | 提升 |
|---|---|---|---|
| 平均 pass^k(宽松) | 基线 | 优于基线 | 中等 |
| 平均 pass^k(严格多试验一致性) | 基线 | 显著优于 | 最大 |
核心发现:越严格的评估标准,LedgerAgent 优势越大。这说明——
- 显式状态管理提升的是可靠性,不只是能力
- 对于"必须每次都做对"的企业场景,LedgerAgent 的价值最大
- 一次通过的评测掩盖了隐式状态管理的不稳定性
工程实现指南:今天就能做
Step 1:识别你的 Agent 的"策略关键工具"
找出那些有副作用的工具调用——写数据库、发消息、执行交易、修改文件。这些是需要策略预检的入口。
Step 2:为每个工具定义状态依赖的策略
工具: initiate_refund
前置条件: order.status != "cancelled"
状态来源: 账本.order_status
Step 3:实现账本 + 策略检查层
伪代码:
class LedgerAgent:
def __init__(self):
self.ledger = {} # 结构化状态存储
self.policies = [] # 策略规则
def before_tool_call(self, tool_name, params):
# 1. 从账本获取当前状态
state = self.ledger.get_relevant_state(tool_name)
# 2. 检查策略合规性
for policy in self.policies:
if not policy.check(tool_name, params, state):
return PolicyViolation(policy.reason)
return OK
def after_tool_call(self, tool_name, params, result):
# 3. 根据结果更新账本
self.ledger.update(tool_name, params, result)
Step 4:逐步迁移,从最关键的工具开始
不要一次改所有工具——先改最关键的那 3 个(有最高风险策略违规的),验证效果后再扩展。
So What:三类人的行动清单
🔧 工程师
- 把红线从 prompt 搬到代码里——prompt 里的"绝对不能 push"Agent 200 轮后会忘,变成可执行的守卫函数
- 策略预检 > 事后审计——在工具调用前做检查,不是调用后才发现违规
- 明天就能做:列出 Agent 的 3 个最高风险工具调用,写成前置检查函数(2 小时)
📊 技术管理者
- “靠 prompt 守规则”= 没有守规则——如果安全规则只写在 prompt/README 里,那就是最高优先级技术债
- 一致性评测比能力评测重要——单次通过的评测掩盖了不稳定性,引入 pass^k 指标
- 明天就能做:查团队 Agent 项目的安全规则——全靠 prompt 的,排进下个迭代
🚀 创业者/PM
- "每次操作都有策略合规检查"是杀手级卖点——对企业客户来说,"安全可控"比"能力更强"的购买决策权重高 3 倍
- 合规检查不需要训练模型——LedgerAgent 证明推理时方法足够有效,成本几乎为零
- 明天就能做:列出"用户最担心的 3 个失控场景",检查是否全靠 prompt 规则守卫
⚠️ 方法论局限
- 仅在 4 个客户服务领域评测——是否泛化到代码生成、科研探索等开放场景未涉及
- 账本 schema 需要人工定义——不同领域需要不同的账本结构,自动化程度有限
- 论文标注为 “Work in Progress”——详细的各领域分解数据和消融实验需查完整 PDF
- 未覆盖多 Agent 共谋场景——一个 Agent 的策略合规不能防止多个 Agent 协同绕过
- 策略规则的维护成本未量化——随着业务变化,策略规则需要持续更新
延伸阅读
- 📄 论文原文:arXiv:2606.20529
- 📄 互补阅读:Misevolution(自进化的误进化风险)ICLR2026
- 📄 相关方向:Prompt Injection Defense、Tool Use Safety
⏱️ 如果只有 5 分钟:读 Abstract + Figure 1(账本结构 vs 标准方法对比)。5 分钟理解为什么 prompt 记不住规则。
路易乔布斯 © 2026 · AI论文观察 · 论文精读
arXiv:2606.20529 · LedgerAgent · Agent安全
基于开放获取论文研读
更多推荐



所有评论(0)