奖励只在一句话上,锅却要十步来背:IAPO 用"谁影响了谁"给多轮智能体重新分账
上周看一篇新论文的时候,我脑子里一直闪回自己之前调客服 Agent 的场景:一条 15 轮的对话轨迹,最后任务失败了,GRPO 给整条轨迹的所有 token 打上同一个负优势。结果呢?第一步那个把客户 ID 搞错的工具调用,和中间那几步其实没毛病的澄清问答,挨了一样重的板子。下次采样,模型连"做对了的步骤"一起避开——这就是多轮 Agent 强化学习里最让人头疼的信用分配问题。
这篇 arXiv 2608.24588 给出的解法让我挺喜欢的:不引入新奖励、不改 rollout 流程、不动 clipped loss,只是把一个被所有人忽略的东西拿出来用——已经完成的轨迹本身,就记录了信息和错误是怎么在动作之间流动的。谁提供的客户信息被下游用了,谁犯的错误被下游继承了,这些依赖关系就在 transcript 里躺着。IAPO(Influence-Aware Policy Optimization)把每条轨迹建成一张带类型的影响依赖图,再用图结构把轨迹级优势重新路由到各个 action 上。8B 模型在 τ²-Bench 上从 GRPO 的 29.61% 涨到 42.18%,涨了 12.57 个点,而且函数调用能力没掉。
这不是造新奖励的思路,是"同一个奖励,分得更聪明"的思路。值不值得细读?我觉得值——尤其是做 Agent RL 的人。
📖 论文信息
- 标题:IAPO: Influence-Aware Policy Optimization for Credit Assignment in Multi-Turn Service Agents
- 作者:Bo Ren, Yirong Mao, Yi Yang, Wenhui Que
- 链接:https://arxiv.org/abs/2608.24588
- 提交时间:2026 年 8 月 25 日(v1),8 月 26 日修订(v2)
🎯 核心摘要
多轮服务 Agent(客服、订票、银行)的任务信息不是开局就给全的——用户会改需求,工具返回会提供后续决策的依据。最终奖励只有一个标量,根本说不清哪一步立了功、哪一步闯了祸。IAPO 的做法:rollout 完成后,用一个冻结的标注器(Qwen3-32B,temperature 0)提取动作之间的"支撑-使用"和"失败-使用"依赖边,把轨迹建成带符号的影响依赖图,再把 GRPO 的轨迹级优势按图特征有界地重新加权到每个 action token 上。Qwen3-4B/8B 在 τ²-Bench、UserBench、AgentChangeBench 三个服务 Agent 基准上全面超过 GRPO、GiGPO、InfoPO,8B 平均分 34.11 vs GRPO 28.63;BFCL-v4 多轮函数调用不掉点。我的判断:这是对 GRPO 信用分配的一次干净利落的"手术式"改进,工程侵入性极低,理论性质(质量守恒、符号保持)证得很全,是近期 Agent RL 里少见的"改对地方"的工作。
🔍 为什么这个问题难
先把这个场景的结构性问题讲清楚。服务 Agent 的轨迹长这样:
\(a_t\) 是可训练的 assistant 动作(回复或工具调用),\(o_t\) 是观测——用户消息、工具返回、规则反馈。关键设定:观测提供溯源证据,但不拿任何 policy gradient 信用。环境只在最后给一个 terminal reward \(R_\tau\)。
GRPO 怎么处理?采样一组轨迹 \(\mathcal{G}=\{\tau_k\}\),算组相对优势:
然后把这个标量广播给每一个 action token。均匀广播,就是它全部的信用分配机制。
问题出在哪?看下面这张 teaser 图,讲得非常直观:

图1:同一个 rollout group 里两条轨迹。左边成功轨迹中,用户说"退款到卡上"这个信息被后续的 get_order 和 refund(card) 依次消费——IAPO 给这条信息链上的动作更高的正权重,GRPO 则人人均等。右边失败轨迹中,agent 一开始就错误地调了 refund(balance),后续 check_order、"Already refunded" 都是这个错误的级联后果——IAPO 把负信用集中路由到错误源头和它的下游,GRPO 依然平摊。
左边那条成功轨迹:用户先说"退订单 #7",agent 问"退卡还是退余额",用户说"退卡",然后 get_order、refund(card) 依次执行。真正立功的是"问清楚退款方式"和后续正确消费这个信息的动作链。右边那条失败轨迹:agent 上来就自作主张调了 refund(#7, balance),用户恼火"没退到卡上",之后 check_order、再说"已经退过了"——整个失败都可以追溯到第一步的错误,但 GRPO 让中间那些无辜的步骤一起背锅。
说实话,这个问题在领域里不是新发现。近期的办法大致两路:一路靠比较证据,从其他轨迹或重采样的 continuation 里反推哪一步关键;另一路另外构造 step 级学习信号,比如单独训 process reward 或者从环境里挖中间信号。两路都有代价——前者要额外采样,后者要额外模型或环境改造。
IAPO 的观察角度不一样:完成的 rollout 本身就是证据。第 3 步用了第 1 步查到的客户 ID,第 5 步重复了第 2 步的错误——这些依赖不需要额外采样就能看到,它就写在 transcript 和 tool log 里。
🏗️ 方法:把轨迹变成一张带符号的依赖图

图2:IAPO 三步走。(A) 与 GRPO 相同:每个任务采样多条 rollout,用结果奖励打分。(B) 新增:冻结标注器以用户/工具观测为证据,提取可训练动作之间的带符号影响边——绿色实线是 positive-use 边,红色虚线是 failed-use 边,红色节点是出错步骤。(C) 图特征归一化成有界的逐动作权重,替换 GRPO 的均匀优势:左边 GRPO 全 1.0,右边 IAPO 的权重围绕 1.0 上下浮动(均值恒为 1),出错步骤 t2 被压到 0.4。
影响依赖图:节点、边、以及"什么才算依赖"
对轨迹 \(\tau\),顶点集 \(V_\tau=\{a_1,\ldots,a_T\}\) 只放可训练的 assistant 动作。图是 \(G_\tau=(V_\tau, E_\tau^+, E_\tau^-)\),两种边:
- support-use 边 \(i\to^+ j\):\(a_j\) 消费了 \(a_i\) 提供或引出的信息,标注类型为 input 或 success_utilization
- failed-use 边 \(i\to^- j\):\(a_j\) 重复了 \(a_i\) 的可观测错误、用了它的无效输出、或者因为它被迫 fallback,标注类型为 failed_utilization
注意一个细节:边的符号和 \(\hat{A}_\tau\) 的符号是独立的。成功轨迹里也可能有 failed-use 边(犯了错但救回来了),失败轨迹里也有 support 边。
边不是随便连的,必须同时满足三个条件:必要性(删掉 \(a_i\) 提供的信息单元,\(a_j\) 的参数或决策就没有依据)、显式绑定(信息单元要落到具体的工具参数、条件分支或错误恢复动作上,"主题相似"不算数)、来源优先级(多个上游提供重叠信息时保留最全的那个,平手取最早)。这套规则压住了标注器"万物皆相关"的倾向——做 LLM 标注的人都知道,不给硬约束,模型能把所有轮次连成一张完全图。
观测的溯源规则也很讲究:用户回复归属于引出它的那个 assistant 动作,工具返回归属于发起它的工具调用。没有被引出的用户发言只记一个 direct-input 计数 \(u_i^{dir}\)。
从图到特征:错误要"活着"才扣分
定义 \(d_i^+\) 为 \(a_i\) 的下游消费者数,\(d_i^-\) 为下游失败继承数,\(d_i^{in}\) 为上游支撑证据数,\(e_i\in\{0,1\}\) 标记 \(a_i\) 是否承载可观测错误。图特征:
\(\phi^-\) 的设计有个很明确的意图:没有可观测错误,错误分恒为零。用户改需求不算错误,除非他明确拒绝了前一个动作。错误分只在 \(e_i=1\) 时激活,且随下游继承范围和该错误动作消费的支撑证据一起增长——错误传染得越远,扣分越狠。
Advantage routing:有界、守恒、分符号
为什么不直接在 token 优势上加加减减?作者的解释很务实:加性修正可能翻转优势的符号、改变总量。所以 IAPO 用乘性权重。先把特征做长度加权标准化、截断、取指数:
\(c\) 默认 0.25,限制单步最多偏离多远,防止某个 hub 节点独吞整个更新。对 \(\phi^+\) 和 \(\phi^-\) 各算一遍,得到 \(m_i^+\) 和 \(m_i^-\)。
然后按轨迹优势的符号选路由方式:
- 正优势轨迹(\(\hat{A}_\tau>0\)):
其中 \(\psi_i^-\) 是高于均值的错误证据。\(\beta_+\) 默认只有 0.05——成功轨迹里信用主要给支撑结构,但对"带着错误救回来"的步骤轻微降权。
- 负优势轨迹(\(\hat{A}_\tau<0\)):\(w_i^-=m_i^-\)。失败轨迹里只往错误证据上路由,不奖励支撑结构。这个不对称设计挺保守的:失败了就把锅精准扣在错误链上,不去管哪些步骤"其实做得不错"。
最终 token 优势 \(A_{i,\ell}=\hat{A}_\tau\,w_i\),送进和 GRPO 完全相同的 clipped loss。
作者还证了四个性质,都是工程上真正在乎的:质量守恒(一条轨迹的总优势还是 \(L\hat{A}_\tau\),不膨胀不缩水)、均匀回退(图没有信息量时权重全 1,退化成 GRPO)、符号保持(路由乘子恒正,不会把正优势翻成负)、接口保持(奖励、采样、组归一化、loss 全不动)。最后一条对工程最友好:你现有 GRPO 训练栈基本只需插入一个"标注 + 算权重"的旁路,改动量非常小。
实测路由权重的分布:正权重 \(w^+\) 标准差 0.222,范围 0.637–1.505,86.5% 的步骤偏离均匀信用超过 10%;负分支刻意稀疏,只有 27.1% 的步骤超过这个阈值——和 \(\phi^-\) 只在出错时激活的设计一致。
🧪 实验:涨点集中在"状态必须记住"的场景
训练配置:Qwen3-4B/8B(关 thinking),8 张 H20,verl/FSDP GRPO 栈,每个 prompt 采 16 条 rollout、最多 30 轮,训练集只有 τ²-Bench 的 178 个任务(airline/retail/telecom)。评测用 held-out GPT-5.2 用户模拟器,3 个 seed,报最后三个 checkpoint 均值。标注器是 Qwen3-32B temperature 0。
主实验
| 模型 | 方法 | τ²-Bench | UserBench | AgentChangeBench | BFCL-MT | 平均 |
|---|---|---|---|---|---|---|
| GPT-4o-mini | – | 23.75 | 28.30 | 35.50 | 37.00 | 31.14 |
| Qwen3.5-397B | Base w/ think | 84.38 | 73.92 | 43.50 | 64.00 | 66.45 |
| Qwen3-4B | Base w/o | 19.17 | 22.04 | 17.50 | 31.38 | 22.52 |
| GRPO | 34.79 ± 1.05 | 23.27 ± 0.47 | 21.50 ± 1.81 | 31.69 ± 0.13 | 27.81 | |
| GiGPO | 37.22 ± 1.04 | 25.06 ± 0.25 | 24.42 ± 1.13 | 32.42 ± 0.56 | 29.78 | |
| InfoPO | 37.99 ± 1.75 | 20.47 ± 1.10 | 17.56 ± 1.32 | 29.94 ± 0.34 | 26.49 | |
| IAPO | 38.40 ± 1.63 | 26.89 ± 0.61 | 28.06 ± 2.58 | 31.89 ± 0.97 | 31.31 | |
| Qwen3-8B | Base w/o | 24.17 | 18.04 | 27.50 | 39.38 | 27.27 |
| MUA-RL | 35.63 | 17.31 | 30.05 | 24.75 | 26.94 | |
| GRPO | 29.61 ± 3.56 | 19.83 ± 0.19 | 26.03 ± 1.79 | 39.04 ± 0.71 | 28.63 | |
| GiGPO | 35.83 ± 1.04 | 22.77 ± 0.21 | 29.25 ± 0.88 | 40.00 ± 0.44 | 31.96 | |
| InfoPO | 33.29 ± 0.77 | 23.37 ± 0.38 | 28.61 ± 1.44 | 38.01 ± 0.63 | 30.82 | |
| IAPO | 42.18 ± 2.55 | 24.44 ± 0.15 | 30.44 ± 2.20 | 39.36 ± 0.95 | 34.11 |
表1:主实验结果(%),± 为 3 个 seed 标准差。IAPO 在两个模型尺寸的四个基准上几乎全胜,唯一例外是 BFCL-MT 上 GiGPO 略高。
8B 上几个关键提升:τ²-Bench 从 29.61 到 42.18,涨 12.57 个点;UserBench 涨 4.61 个点;AgentChangeBench 涨 4.41 个点。还有个值得说的对比:IAPO 只用了 178 个训练任务,而外部报告的 Fission-GRPO-8B 用了 630 个任务(11 个领域,由 Claude Sonnet 4 设计清洗)才在 τ² 上拿到 41.27——IAPO 用不到三分之一的数据量超了它。
分 split 看更有意思:
| Benchmark | Split | GRPO | IAPO | Δ |
|---|---|---|---|---|
| τ² | Airline | 22.78 | 29.72 | +6.94 |
| τ² | Retail | 44.31 | 56.88 | +12.57 |
| τ² | Telecom | 21.74 | 39.93 | 涨 18.19 个点 |
| AgentChange | Banking | 28.23 | 32.67 | +4.44 |
| AgentChange | Education | 23.82 | 28.22 | +4.40 |
表2:8B 上分域结果。最大提升出现在 telecom 域。
涨得最猛的 telecom 域(+18.19)恰恰是那种"账户/线路状态必须在后续澄清时继续用"的场景——均匀优势最说不清楚的场景。这个分布本身就是对方法动机最好的验证:不是全面平均地涨,而是精准地涨在信用分配最痛的地方。
另外一个反"刷分"的硬指标:工具调用冗余度。4B 上 IAPO 把 macro tool-call redundancy 从 GRPO 的 46.00 降到 29.74。收益来自复用已有状态,而不是靠多调工具撞运气——这说明学到的行为是真的变好了,不是 reward hacking。
函数调用保持性
很多人做交互式 RL 的隐忧是:在对话任务上练完,基础函数调用能力就废了。IAPO 在 BFCL-v4 Multi-Turn 上基本没掉:8B 是 39.36 vs base 的 39.38,4B 甚至略升(31.89 vs 31.38)。对比之下 MUA-RL 直接把 BFCL-MT 打到 24.75——交互训练的代价在它身上体现得很明显。
消融:每个旋钮都拧给你看了
| 消融轴 | 设置 | τ² | UserBench | AgentChange |
|---|---|---|---|---|
| 参照 | GRPO | 29.61 | 19.83 | 26.03 |
| \(\beta_+\) | 0 | 32.50 | 20.92 | 27.58 |
| 0.05(默认) | 42.18 | 24.44 | 30.44 | |
| 0.1 | 33.96 | 25.33 | 30.92 | |
| 0.3 | 31.39 | 24.08 | 28.83 | |
| \(c\) | 0.125 | 32.92 | 19.11 | 30.17 |
| 0.25(默认) | 42.18 | 24.44 | 30.44 | |
| 0.5 | 42.29 | 17.78 | 25.67 | |
| 标注器 | Qwen3-32B(默认) | 42.18 | 24.44 | 30.44 |
| Gemma4-31B | 40.90 | 24.45 | 33.25 |
表3:Qwen3-8B 上的消融实验。
几个值得琢磨的点。\(\beta_+\) 从 0 到 0.05 这一步跳变巨大(32.50 → 42.18),说明"成功轨迹里轻微惩罚带错误步骤"这个小门控是真有用,但拧大了就崩——0.3 时掉回 31.39。\(c=0.5\) 时 τ² 还微涨到 42.29,但 UserBench 直接崩到 17.78:权重分布太宽,域内分数和泛化能力开始打架。换标注器家族(Gemma4-31B)性能基本保持,甚至在 AgentChangeBench 上还更高,说明方法不绑定某个特定标注模型。
标注器稳定性审计也做了:178 个任务、2349 个标注节点上,六个冻结标注器 100% 解析成功率,边类型 F1 均值 0.869,Cohen's κ 均值 0.828,错误侧权重相关系数 ρ(m⁻) 高达 0.983。分歧主要来自"问候语该连到哪一句"这种良性场景,不影响路由乘数。这个审计做得挺扎实的——LLM 标注 pipeline 最怕的就是标注噪声直接变成训练噪声,作者把这件事量化清楚了。
Case study:一张图看懂行为差异

图3:一次目标连续转移三次的 banking 对话(登录 → 查交易 → 锁卡)。左边 GRPO:被工具 schema 里的示例电话带偏,定位到错误客户 Maria Santos,错的状态级联传播,用户纠正后也没回头,最终转人工。右边 IAPO:先用姓名+生日正确定位 Jordan Smith,之后 cust_202 → acc_202 → card_202 的状态链在三次目标转移中始终保留,成功锁卡。
这个案例把两类行为差异隔离得很清楚:状态定位(grounding 到正确的实体)和跨目标状态重用(目标变了,已确认的实体不该丢)。GRPO 的均匀信用恰恰让模型学不到"哪一步的定位决定了后面所有步骤"这件事。
🤔 我的判断
说实话,这篇论文最打动我的不是涨了多少点,而是它踩的位置特别准。Agent RL 的信用分配这两年很热,但很多方案要么加奖励模型、要么加采样预算,工程负担越来越重。IAPO 反着走:rollout 里本来就有依赖结构,把它读出来就行。改动只有 trajectory-to-token 的优势映射这一个环节,其余全部复用 GRPO——这种"手术刀式"的改进,落地成本几乎就是多一次 LLM 离线标注加缓存。
批判性地说几点。第一,整个方法的天花板挂在标注器质量上。作者用跨标注器审计回应了这个担忧,错误侧的 ρ(m⁻) 到 0.983 确实让人放心,但这是在客服类结构化工具场景验证的;换到开放式、长链推理的场景(比如多步 coding agent),"依赖边"的边界会模糊得多,标注一致性能不能保住,论文没回答。第二,评测全部集中在服务 Agent 这一类任务,训练集只有 178 个任务——泛化到更大规模、更多域的训练会是什么曲线,还看不到。第三,τ²-Bench 上 42.18 看着漂亮,但离 Qwen3.5-397B 的 84.38 还差得远,说明信用分配只是瓶颈之一,基座能力仍是硬约束。
还有个我自己没完全想透的地方:负优势分支只往错误证据路由,对那些"轨迹失败但中间有漂亮操作"的情况完全不奖励支撑结构。保守是保守了,但在失败率高的早期训练阶段,会不会丢掉一些本可利用的正向信号?消融里 projected 变体略差算是间接回应了,不过这块我觉得还有探索空间。
跟同期工作比位置的话:GiGPO 靠步级分组、InfoPO 靠信息论信号,都在"另造信号"的路线上;IAPO 是"读取既有结构"的路线,和 GRPO 的兼容性最好。如果你的栈已经是 GRPO/verl,这几乎是零摩擦的升级。
💡 收尾
做 Agent RL 的人最近如果只能挑一篇信用分配的论文细读,我会推荐这篇。不是因为它解决了所有问题,而是它示范了一种我很欣赏的做题方式:先问已有数据里还有什么没被用起来,再去想加新模块。依赖图这个抽象也足够通用,理论上任何"动作之间有信息消费关系"的序列决策任务都能套——coding agent、数据分析 agent,甚至多模态 agent 的工具链,都值得试试这套路由。
真正还没解决的更本质的问题是:当轨迹长到几百步、依赖图变成复杂网络时,基于计数的图特征够不够?也许下一步是把图神经网络或者注意力机制搬到这张依赖图上。那是后话了。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我