核心思路:在 AI Agent 的 Tool Call 实际执行之前插入一个 Reviewer Agent,拦截并修正错误。不是事后恢复,而是事前拦截。实测推理模型作为 Reviewer 达到 3:1 收益风险比(修正 3 个错误,仅引入 1 个新错误)。
目录
问题:State Recovery 困境
传统 Agent 的致命缺陷
Agent 执行 Tool Call → 结果返回上下文 → 发现错了
↓
已经执行了,无法撤回
发了邮件?删了文件?转了账?
↓
需要 State Recovery(状态恢复)
多轮场景下成本指数级增长
核心问题
| 维度 |
说明 |
| 发现时机 |
错误通常在执行之后才被发现 |
| 恢复成本 |
不可逆操作(发邮件、转账、删文件)根本无法恢复 |
| 多轮复杂度 |
替代轨迹指数级增长,上下文成本爆炸 |
| 当前评估 |
事后(post-hoc)评估,与执行循环脱节 |
两种解决路径
路径 A:Anthropic(上下文管理)
假设:Tool Call 失败是因为 LLM 处理的信息太多
方案:减少上下文(Tool Search + Programmatic Calling)
效果:更小的上下文 → 更低成本 → 更少歧义
路径 B:Apple Reinforced Agent(推理时反馈)
假设:Agent 的第一次尝试经常出错
方案:在执行前插入 Reviewer 拦截错误
效果:事前修正 → 避免不可逆后果
✅ 两条路径不冲突,可以组合使用
架构:双 Agent 协作
传统 vs Reinforced Agent
传统 Agent Loop:
┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户请求 │ ──→ │ Agent │ ──→ │ 执行工具 │ ──→ 返回结果
└──────────┘ │ 生成调用 │ │ (可能出错)│
└──────────┘ └──────────┘
↓
发现错误,太晚了
Reinforced Agent Loop:
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐
│ 用户请求 │ ──→ │ Agent │ ──→ │ Reviewer │ ──→ │ 执行工具 │
└──────────┘ │ 生成调用 │ │ 拦截检查 │ └──────────┘
└──────────┘ └──────────┘
↑ │
└── 拒绝 ←────────┘
(重新生成调用)
实例:天气查询
用户:"纽约的天气是多少摄氏度?"
Step 1: Agent 生成 Tool Call
→ get_weather(city="New York", unit="fahrenheit")
Step 2: Reviewer 拦截检查
→ ❌ 拒绝:"用户要求摄氏度,参数错误"
Step 3: Agent 重新生成
→ get_weather(city="New York", unit="celsius")
Step 4: Reviewer 再次检查
→ ✅ 通过,执行 Tool Call
关键设计原则
| 原则 |
说明 |
| 关注点分离 |
执行 Agent 和 Reviewer Agent 独立 |
| 无需重训练 |
基础 Agent 不需要任何修改 |
| 模型可替换 |
Reviewer 可以用不同于基础 Agent 的模型 |
| Reviewer 不编辑 |
只通过反馈让基础 Agent 自己修正 |
三种协作模式
模式对比
| 模式 |
标记 |
流程 |
Token 消耗 |
适用场景 |
| Progressive Feedback |
rN |
生成 → 审查 → 反馈 → 重新生成 → 循环 |
最高(逐轮) |
一般场景 |
| Best-of-N Selection |
sN |
生成 N 个候选 → 选一个最好的 |
中等 |
候选差异大 |
| Best-of-N Grading |
gN |
生成 N 个候选 → 评分 → 阈值过滤 |
中等 |
需要量化标准 |
Progressive Feedback(渐进反馈)
Agent 生成调用 → Reviewer 审查
│
┌─────┴─────┐
│ 拒绝 │ 通过
▼ ▼
反馈给 Agent 执行调用
│
▼
Agent 重新生成
│
▼
Reviewer 再次审查
│
(循环直到通过或达到 N 轮上限)
- 最直接的版本
- Token 消耗最大(每轮都消耗)
- 实验中表现最好
Best-of-N Selection(N 选一)
Agent 生成 N 个候选(不同 temperature)
│
▼
Reviewer 评估所有候选
│
▼
选出最好的一个 → 执行
Best-of-N Grading(N 个评分)
Agent 生成 N 个候选
│
▼
Reviewer 对每个打分 (0.0 - 1.0) + 给出理由
│
▼
最高分 > 阈值 → 执行
最高分 < 阈值 → 不执行
命名规范
4o-r2-5-mini-v3-gepa
4o = 基础模型 GPT-4o
r2 = Progressive Feedback, 最多 2 轮
5-mini = Reviewer 模型 GPT-5 mini
v3 = Prompt 版本
gepa = 使用 GEPA 自动优化 prompt
评估指标:Helpfulness vs Harmfulness
为什么需要新指标
传统评估只看准确率,但 Reviewer 有副作用——它可能把正确的改错。
指标定义
| 指标 |
定义 |
公式 |
| Helpfulness |
基础 Agent 错了 + Reviewer 修正了 |
修正的错误数 / 基础 Agent 总错误数 |
| Harmfulness |
基础 Agent 对了 + Reviewer 改错了 |
引入的新错误数 / 基础 Agent 原本正确的总数 |
| Benefit-to-Risk Ratio |
净收益 |
Helpfulness ÷ Harmfulness |
直觉理解
Helpfulness = "救了多少次"
Harmfulness = "帮了多少倒忙"
Ratio 3:1 = "每救 3 次,帮 1 次倒忙"
实验结果
BFCL(单轮,无状态)
| 配置 |
相关性 |
无关检测 |
Helpfulness |
Harmfulness |
比率 |
| GPT-4o 基线 |
90.9% |
84.9% |
— |
— |
— |
| GPT-4o Reviewer (v1) |
91.4% |
89.6% |
30.2% |
14.2% |
2.1:1 |
| GPT-4o Reviewer (v2) |
91.0% |
90.4% |
34.9% |
12.9% |
2.7:1 |
| o3-mini Reviewer (v2) |
91.8% |
91.0% |
36.8% |
11.7% |
3.1:1 |
| o3-mini + GEPA (v3) |
92.5% |
90.4% |
— |
— |
— |
最佳提升:无关检测 +5.5%(84.9% → 90.4%)
τ²-Bench(多轮,有状态)
| 配置 |
航空 |
零售 |
电信 |
平均 |
| GPT-4o 基线 |
42.0% |
62.9% |
41.2% |
48.7% |
| Progressive Feedback (r5-4o-v1) |
40.7% |
62.6% |
64.0% |
55.8% |
| Best-of-N Selection (s5-v2) |
48.0% |
61.4% |
48.2% |
52.5% |
| Best-of-N Grading (g5-v2) |
46.7% |
65.8% |
48.8% |
53.8% |
最佳提升:平均 +7.1%(48.7% → 55.8%)
错误类型分析
| 错误类型 |
基线 |
有 Reviewer |
改善 |
| 违反策略约束 |
31% |
18% |
-13% |
| 缺乏上下文感知 |
24% |
15% |
-9% |
| 工具选择错误 |
改善明显 |
— |
— |
关键发现
1. 过度怀疑是主要失败模式
Reviewer 会错误地标记正确的 Tool Call 为"不完整"(因为它期望看到执行结果,但审查发生在执行之前)。
解决方案:在 Prompt 中加入关键指导:
[CRITICAL] Tool-only responses are complete. Do not mark tool-only responses
as incomplete for lacking user-facing answers, follow-up explanations, or
final results. Tool calls are standalone steps. Focus on whether the actual
tool calls are correct.
效果:冗余审查循环从 23% 降至 8%
2. 推理模型 > 标准 LLM 作为 Reviewer
| Reviewer 模型 |
Benefit-to-Risk |
说明 |
| o3-mini |
3.1:1 |
推理模型,最低 harmfulness |
| GPT-4o (v2) |
2.7:1 |
标准 LLM |
| GPT-4o (v1) |
2.1:1 |
标准 LLM,初版 prompt |
推理模型的 false positive 更低(不会把正确的改错)
3. Progressive Feedback > Best-of-N
- 无关检测高出 4-5%
- 多轮场景平均高出 3-8%
- Selection 在某些领域甚至低于基线
4. 跨域泛化需要适配
在 BFCL 上优化过的 prompt 直接用在 τ²-Bench 上会引入错误。单轮函数调用和多轮有状态 Agent 存在领域差异。
5. 重要局限:基线模型
论文中所有实验的基线 Agent 都是 GPT-4(非推理模型)。如果用推理模型作为基线,它可能从一开始就不会犯 Reviewer 所修正的那类错误。论文在 limitations 部分提到了这点,但低估了其影响。
成本分析
延迟开销
| 场景 |
延迟倍数 |
说明 |
| 单轮高频应用 |
6.2x |
每个 Tool Call 多一次 LLM 往返 |
| 多轮 Agent |
2.4x |
审查成本分摊到多轮中 |
Token 成本
每个 Tool Call = 2 次 LLM 调用(Agent + Reviewer)
Agent 密集型场景(每 session 多次调用)→ 成本显著增加
三重成本
| 成本类型 |
说明 |
影响程度 |
| 延迟 |
每个 Tool Call 多一轮 LLM 往返 |
对聊天/语音 Agent 致命 |
| Token |
双倍 LLM 调用 |
高频场景累积大 |
| Harmfulness |
3:1 比率意味着仍有 1/4 概率改错 |
高风险操作仍需谨慎 |
适用场景与局限
✅ 最佳适用场景
| 场景 |
原因 |
| 发送邮件 |
不可撤回 |
| 执行支付 |
资金损失 |
| 删除文件 |
数据丢失 |
| 写入生产数据库 |
数据完整性 |
| 任何无法干净回滚的操作 |
状态不可逆 |
✅ 适合组合使用的场景
延迟加载工具(Anthropic Tool Search)
+ 批量调用打包进沙盒 Python 脚本(Programmatic Calling)
+ Reviewer 在执行前检查调用(Apple Reinforced Agent)
❌ 不适合的场景
| 场景 |
原因 |
| 实时聊天机器人 |
6.2x 延迟不可接受 |
| 语音 Agent |
延迟敏感 |
| 高频后台 Agent |
LLM 调用成本累积 |
| 基础模型已经很强 |
收益递减 |
| 沙盒代码执行 |
Reviewer 看不到执行结果 |
Reviewer 的检测边界
能检测:
✅ 工具选择错误
✅ 参数值明显错误
✅ 不应该调用工具(scope recognition)
不能检测:
❌ 微妙的参数错误
❌ 超出 Reviewer 上下文/训练数据的问题
❌ 需要执行结果才能发现的错误
vs 其他方案
| 方案 |
优势 |
劣势 |
| Reviewer Gate |
无需训练数据,推理时即插即用 |
延迟高,成本翻倍 |
| Fine-tuning |
零推理时开销 |
需要数据收集、训练、评估周期,可能过拟合 |
| Tool Search |
减少上下文,降低歧义 |
不处理参数错误 |
| Programmatic Calling |
高效,无 LLM 内循环 |
需要 LLM 写正确代码 |
参考资料
相关笔记