没有标准答案,怎么教智能体?DRACO:不用验证器,反而比用了验证器的方法更强
上周翻到一篇 IBM Research 和 CMU 合作的新 paper,看完实验表我愣了一下。
一个完全不看 ground-truth 成功信号的强化学习方法,在 AppWorld 上居然反超了用 ground-truth 单元测试做奖励的 GRPO,而且反超出 5.3 个点。这有点反直觉——你训练时连"这题到底做没做对"都不看,凭什么比盯着标准答案练的还强?
答案藏在一个被大家忽视的地方:稀疏奖励不是瓶颈,信用分配才是。
一条跨越几十步工具调用的长轨迹,最后塌缩成一个标量奖励,再被 GRPO 均匀地抹到每一步上——成功轨迹里那些冗余的、侥幸的步骤被一并强化,失败轨迹里大量其实做对了的步骤被一并惩罚。信号的方向对了,但分辨率太低。这篇 DRACO(arXiv:2609.04094)干的事,就是把奖励的分辨率做上去。
核心摘要
RLVR 依赖程序化验证器,但客服、开放式研究这类真实智能体场景根本没有标准答案可判。DRACO 在严格更难的 outcome-blind 设定下工作:训练全程不碰任何 ground-truth 信号。它做两件事——训练过程中动态生成逐轨迹的评分细则(rubric),让评估标准跟着策略能力一起进化;再把 judge 对每条轨迹的 rubric 裁决,用一个闭式公式重新分配到被标准"点名"的具体步骤上,在 GRPO 里产生有区分度的逐步优势。结果:AppWorld 上比基座涨 15.9 个点,比用 ground-truth 奖励训练的 GRPO 还高 5.3 个点;零样本迁移到 τ-bench 也涨 5.3 个点。我的评价:这不是底层理论突破,但它精准打中了智能体 RL 训练里一个真实的工程痛点,而且闭式重分配的设计干净漂亮,值得细读。
论文信息
- 标题:DRACO: Fine-Grained Credit Assignment with Dynamic Rubrics for Long-Horizon Agent Training
- 作者:Shubham Gandhi(Carnegie Mellon University)、Saurabh Goyal(IBM Research)、Kiran Kate(IBM Research)、Yara Rizk(IBM Research),前两位 Equal contribution
- arXiv:https://arxiv.org/abs/2609.04094 (2026 年 9 月 3 日提交)
- 代码:https://github.com/IBM/draco
🎯 问题动机:两个叠加的困难
先交代背景。RLVR(Reinforcement Learning from Verifiable Rewards)这两年很火,数学有精确匹配、代码有单元测试、智能体任务有通过检查,程序化验证器给的终端奖励很难被 hack。但这条路线有个隐含假设:存在一个判定对错的程序。
真实世界里的很多智能体场景不满足这个假设。客服对话、开放式研究助手,你很难写一个 checker 来判断"这次服务到不到位"——写一个这样的验证器,难度往往不亚于任务本身。
作者把这个设定叫 outcome-blind:训练信号完全来自过程性标准,训练中任何时刻都不能访问 ground-truth 成功信号或 gold answer。据作者说,这是 AppWorld 上第一个完全不访问其单元测试信号的 RL 训练。
然后第二个困难来了。AppWorld 上一条轨迹横跨数十个相互依赖的工具调用。就算你有奖励,把一个轨迹级标量均匀归因到每一步,统计上是浪费的,甚至可能有害——这就是经典的信用分配问题。我之前在做多轮工具调用训练时就碰到过这个现象:轨迹越长,reward 在涨但行为质量在原地打转,因为梯度被稀释在了一堆无关紧要的步骤上。
已有的 rubric 方案也没解决好这个问题。固定 rubric 是任务分布级别一次性写死的,预见不了长轨迹五花八门的成功和失败方式;逐步 rubric 方法(像 ARCO、RubricEM、SCRIBE 这类)要么每个位置都要调一次 judge,成本高得离谱,要么绑定任务特定的步骤分解;而且几乎所有先前工作的信号最终都锚定在 ground-truth 结果上。
DRACO 的定位就卡在这个交叉点上:没有验证器,还要做细粒度信用分配。
🏗️ 方法:动态 rubric + 闭式信用重分配

图1:DRACO 全流程。上半部分是 rubric 生成——judge 从任务指令提出通用标准(Prompt specific Rubric,如"访问了正确的 Spotify 数据"),再针对每条采样轨迹补充该轨迹特有的标准(Trajectory specific Rubric,如"避开了 query-plus-sort 分页陷阱"),经过去重、丢弃无人失败的标准后计算奖励 \(R_i=(p_i-f_i)/(p_i+f_i)\)。下半部分是策略训练——组内标准化得到轨迹优势 \(A_i\),再按每个标准引用的步骤计算步骤质量 \(Q_j\)、保符号权重 \(w_j\),最后把 \(A_i\) 闭式重分配为步骤优势 \(a_j\)。左下角可视化了三条轨迹上逐步 credit 的差异:红色步骤被抑制、绿色被强化,不再是 GRPO 那种一锅端。
一句话讲清核心思路
让 judge 看着模型当前的真实 rollout 出考题(动态 rubric),考完试不只给总分,还让 judge 指出"这道题错在第几步"(步骤引用),然后把总分按这个指向重新摊到各步——但摊的过程中总量不变、符号不变。
组件一:动态逐轨迹 rubric
每个训练步,对一组 \(G\) 条 rollout 做三阶段生成:
- judge 先只看任务指令,提议一批评分标准;
- 再对每条采样到的 rollout 各扩展一次,加入这条 rollout 揭示的子目标和策略真实的失败姿势;
- 所有提议合并、去重,形成组内共享的标准集合。
两个细节我觉得挺关键。一个是所有生成调用都被要求标准之间 MECE(互斥且完全穷尽)——因为奖励是比率形式,标准重叠会把同一个错误计两次。另一个叫 discriminative dropout:只保留"组内至少有一个成员没过"的标准。全组都过的标准没有区分度,留着只会稀释信号。
打分环节,冻结的外部 judge 逐标准裁决,返回 pass / fail / not applicable 三档(刻意做粗),并附理由和负责任的步骤引用——这个引用是后面信用分配的原料。奖励:
\(p_i\)、\(f_i\) 是适用的通过/失败标准数。注意标准集组内共享,但适用性不共享:一条从没调用过分页接口的轨迹,"分页处理正确"这条标准对它就是 not applicable。\(R_i\) 按实际投出的裁决数归一化,所以不同适用标准数的轨迹在组内仍然可比。
组件二:rubric 条件化的步骤级 credit
这部分是全文最值钱的设计。GRPO 的原始做法是把组内标准化后的 \(A_i\) 赋给轨迹里所有 token,每个决策拿到一模一样的 credit。DRACO 把它换成逐步的 \(a_j\)。
judge 打每条标准时会引用支撑裁决的步骤。设 \(p_j\)、\(f_j\) 为引用步骤 \(j\) 的通过/失败标准数,定义步骤质量:
然后一个保符号的权重规则:\(A_i \ge 0\) 的轨迹(winner),权重取 \(w_j = Q_j\),强化好步骤;\(A_i \lt 0\) 的轨迹(loser),权重取 \(w_j = 1 - Q_j\),抑制坏步骤。credit 只决定推动力落在轨迹内部哪里,不翻转 judge 的轨迹级裁决。还有个挺狠的细节:被引用标准一致同意(全过或全挂)的步骤权重为 0,直接排除在更新外——winner 轨迹里一条每个标准都失败的步骤,不该被强化。
最后是步骤优势公式。设 \(n_j\) 为步骤 \(j\) 的 token 数,\(N=\sum_k n_k\):
这个式子有两个性质值得展开。其一,步骤的总贡献 \(n_j a_j = A_i N w_j / \sum_k w_k\) 只取决于质量权重,与步骤长度无关——步骤因为被判定为好而获得影响力,而不是因为啰嗦。那个 \(1/n_j\) 因子就是把固定总量摊到该步所有 token 上。其二,总量守恒:\(\sum_j n_j a_j = A_i N\),和 baseline GRPO 作用于同样 token 的总量完全一致。重分配从不放大或缩小轨迹的整体影响力,只是把既有影响力搬到应得的步骤上。
附录里还给了这套规则满足的七条形式化性质(总量守恒、无信号时各步均分、保符号、单调性、长度无关、奖励尺度不变、winner/loser 对称),而且全是 exact 的,不是近似。顺带一提,如果 rubric 一个步骤都没引用,就自动回退成 vanilla GRPO——这个 fallback 设计很务实。
整个重分配是闭式的,不引入任何需要额外训练的归因模块。对比那些要训一个 process reward model 的路线,这个方案的工程负担小得多。
🧪 实验:不用标准答案,打赢了用标准答案的
实验设置
| 项目 | 配置 |
|---|---|
| 基座模型 | Qwen3.6-27B(主实验与消融)、Qwen2.5-32B-Instruct |
| Judge | GPT-5.4(temperature 0.1,rubric 生成/打分/credit 全程统一) |
| 训练 | LoRA + GRPO,batch 16、组大小 6,8 张 H100 |
| 数据 | AppWorld 训练集 90 个任务,训 75-100 步 |
| 评测 | AppWorld_TN(168 任务)、AppWorld_TC(417 任务,含未见 app)、τ-bench Banking(97 任务,零样本迁移) |
| 指标 | TGC(任务目标完成率)、SGC(场景目标完成率)、τ-bench SR;3 次运行报 pass^k |
有个实验操守我要点个赞:所有设定共享一套预先承诺的超参,不按 held-out 任务表现挑 checkpoint,取最后三个 epoch checkpoint 的均值——防止隐性监督泄漏。这种细节很多论文是会含糊过去的。
主结果(Table 2,Qwen3.6-27B 区块,\(p^1\) 数值)
| 方法 | TN TGC | TN SGC | TC TGC | TC SGC | τ-bench SR | 平均 |
|---|---|---|---|---|---|---|
| Base | 69.4 | 41.1 | 49.7 | 30.2 | 15.8 | 41.2 |
| Outcome reward(用了验证器) | 80.0 | 59.3 | 59.9 | 38.3 | 17.6 | 51.0 |
| DRACO w/o Dyn. & Cred. | 81.1 | 59.9 | 60.5 | 42.4 | 19.4 | 52.7 |
| DRACO w/o Cred. | 82.1 | 64.9 | 59.3 | 40.6 | 19.7 | 53.3 |
| DRACO 完整版 | 85.3 | 70.6 | 61.5 | 40.7 | 20.4 | 55.7 |
| DRACO(self-judge) | 81.1 | 62.7 | 61.0 | 34.7 | 21.1 | 52.1 |
几个值得停下来看的数:
- TN 上 TGC/SGC 从 69.4/41.1 涨到 85.3/70.6,涨 15.9 和 29.5 个点。SGC 的涨幅远大于 TGC,说明 DRACO 改善的不只是单任务完成,而是跨应用的组合场景。
- 比 outcome reward 基线高 5.3 个 TGC、11.3 个 SGC。再说一遍:DRACO 训练时没看任何验证器,outcome reward 基线是看着单元测试练的。结果盲打反超。
- 一致性越高,优势越大。TN 的 \(p^3\) TGC 是 72.8 对 base 的 47.6,差 25.2 个点;而 pass@3 只涨 3.9。你想想看这个对比的含义:没训练的模型其实"蒙"得出答案(多试几次总能中一次),DRACO 真正改变的是让成功变成可复现的行为,而不是运气。
Qwen2.5-32B-Instruct 上增益更猛:TN TGC/SGC 从 35.7/17.3 拉到 62.9/42.3,涨 27.2 和 25.0 个点,和 outcome-aware 的 SALT(66.2/47.9,用了 ground-truth 奖励且专门为 AppWorld 适配过)的差距基本被抹平。弱基座上信号照样有效,这点打消了我对"是不是只有强基座才玩得转 rubric"的疑虑。
τ-bench 零样本迁移:SR 从 15.8 到 20.4。幅度不算炸裂,但考虑到训练全程只在 AppWorld 的 90 个任务上做、且没有任何 verifier,这个迁移说明学到的不是数据集偏置。

图2:训练集 TGC 随训练步的变化(粗线为平滑后)。Qwen3.6-27B 各设定里,DRACO 完整版(红线,μ=86.7%)和 DRACO w/o Dyn.(紫线,μ=87.2%)收敛到最高区间,仅动态 rubric 无 credit 的设定(绿线,μ=82.6%)明显掉队——和消融表格里"credit 需要配合动态 rubric 才发挥"的结论互相印证。粉色点划线是弱基座 Qwen2.5-32B 的 DRACO,从 15% 左右一路爬到 60% 以上(μ=49.4%),斜率是全图最陡的,说明这套信号对弱模型的提升空间更大。
消融:两个组件谁更关键?
这是全文信息密度最高的一张表,我挑核心结论说。
动态 rubric 和步骤 credit 是互相成就的。 TN 上,给逐轨迹 rubric 加步骤 credit 值 3.2 个 TGC、5.7 个 SGC;两组件合计比纯固定 rubric 值 4.2 个 TGC、10.7 个 SGC。但单独看,任一组件只贡献 0.8 和 1.0 个 TGC——几乎是噪音水平。更说明问题的是 TC 上的符号反转:在固定 rubric 上加步骤 credit,\(p^3\) 反而掉 3.7 个 TGC;而在逐轨迹 rubric 上加,是涨 1.4。
机制上完全说得通:步骤 credit 的前提是标准得具体得足以"点名"具体步骤。固定 rubric 写得泛泛,judge 引用步骤时就是乱指,credit 摊错地方比不摊还糟。这个发现其实是对所有想做细粒度奖励的人的一个警告——归因的精度受限于评估标准的粒度,光改分配规则不改标准生成本身,可能起反作用。
随机奖励对照很有杀伤力:用随机数当奖励训,TN 只有 74.0 TGC / 50.0 SGC,远低于 DRACO 的 85.3 / 70.6。排除了"随便给点梯度就能涨"的怀疑。
Self-judge 变体是我最意外的部分。把 GPT-5.4 judge 换成 policy 模型自评(开 thinking + 每条轨迹打 3 次分、全过才算 pass),judge 成本从 100 步的 1607 美元降到 316 美元,省 5.1 倍。性能呢?TN 上 81.1/62.7,居然还超过 outcome reward 参照的 80.0/59.3;τ-bench 上 21.1 是所有设定里最高的。与 frontier judge 的裁决一致性 89.4%(六万多条标准级 verdict),分歧处偏宽松——把 frontier 判挂的标准的 30.4% 判成了过。
说实话这里我有点拿不准。self-judge 打赢 verifier 训练这个结果,既可能是"自评信号足够好",也可能混入了某种 self-preference 偏差——模型给自己的 rollout 打分,天然倾向于认可自己的解题路径,这种一致性到底是在评估质量还是在强化已有习惯,论文的实验分不清楚。作者自己在局限性里也承认了类似的问题,态度算坦诚。
效率
DRACO 不只是分高,还更省。TN 上把 episode 从 18.7 轮压到 14.7 轮,TC 从 22.9 压到 20.7——用更少轮数解决更多任务,不是靠拉长 rollout 买准确率。评估成本上,TN 一遍跑下来 DRACO 花 8.27 美元拿 85.3 TGC,没训练的模型花 10.77 美元只拿 69.4。最贵的 split 得分最低,这个对比挺扎心的。
🔬 批判性审视
夸完了,说几个让我皱眉的地方。
judge 就是上帝,但没人校验上帝。 全程一个冻结的 GPT-5.4 当 judge,奖励完全由它定义。作者说得很直白:judge "定义目标而非估计目标"。那么问题来了——如果 judge 系统性地错呢?没有独立信号能检查 rubric 是否如实描述了任务,也没报告 judge 与人类标注的一致性。论文的回应是"内部一致的 judge 仍可能系统性地错,我们的实验无法区分这两者"。这句话等于承认:端侧任务表现的提升可能是"学会了讨好 judge"的副产品。τ-bench 的零样本迁移多少缓解了这个担忧(换了个分布还在涨),但不能完全排除。
归因正确性没被直接验证。 DRACO 只用终端任务表现来背书信用分配规则。理论上,把 credit 给到错误步骤的重分配也可能碰巧改善 policy。七条形式化性质保证了分配规则的"形状"合理,但不保证 judge 的步骤引用本身是对的。缺一个人工标注小规模验证归因准确率的实验。
标准集依赖采样组,引入了未测量的方差。 discriminative dropout 让存活标准集成为当次采样组的函数——同一个 prompt 在训练不同时间点可能按不同标准打分。这是动态 rubric 的固有代价,作者承认没测这个方差。我的直觉是这比静态 rubric 的"奖励过早饱和"(静态 rubric 训到 25 步通过率就到 95% 左右,奖励停止区分,而动态设定维持在 67-74%)要好,但"好"和"没有新问题"是两回事。
还有一点想提醒的:基座模型叫 Qwen3.6-27B、judge 叫 GPT-5.4,这些都是较新的模型,方案对强 judge 的依赖在 self-judge 实验里有所缓解但 frontier judge 仍是主设定。预算有限的团队复现时,judge 成本(主设定 100 步约 1600 美元)是要算进账里的。
💡 我的判断
这篇论文我最看重的一句话,其实是社区讨论里被反复引用的那个观点:稀疏奖励不是瓶颈,信用分配才是。
DRACO 的贡献不在于发明了什么新算法范式——GRPO 没变、rubric judge 是现成技术、重分配公式简单到可以手推。它真正的价值是把两件事拼对了:评估标准的粒度决定了信用分配的上限,而闭式重分配把 judge 的裁决无损地翻译成了逐步梯度。打败 verifier 基线这个结果,反过来说明了 ground-truth 稀疏奖励的利用率有多低——这对所有在做"有验证器所以直接用稀疏奖励"的团队都是一个提醒。
工程启发很直接:如果你的智能体训练卡在 reward 涨但行为不涨,别急着改奖励大小,先看看奖励是不是被均匀抹在了几十步上。rubric 粒度不是评估开销,是训练基础设施。
往后看,有两个问题这篇没解决但很值得追:judge 质量的下界在哪里(多弱的 judge 会让这套机制失效),以及这套 outcome-blind 框架能不能迁移到根本没有明确任务指令的开放式场景。代码已开源,想动手的可以直接试。
觉得有启发的话,欢迎点赞、在看、转发。跟进最新AI前沿,关注我