
把数据库评分变成RL奖励:ThinkingBox后训练智能体

这是微软与 Hugging Face 联合发布的第二篇 ThinkingBox 博客。上一篇用 ThinkingBox-Bench(507 个任务)发现,很多 Agent 在数据库任务上只是“说做完了”,实际留下的记录是错的:某个模型把工单标记为已解决,但背后的承运商异常仍然开着,九次看似正常的工具调用换来一行错误的数据库记录。ThinkingBox 不看调用过程,而是启动真实后端、给一组 MCP 工具和模拟 LLM 用户,等 Agent 工作完,对数据库最终状态跑可执行检查。
作者随后意识到,这种可执行检查本身可以当奖励函数。他们在 ThinkingBox-Bench 之外构造了同格式的训练任务池,用最终状态的 1/0 结果做奖励,对 Qwen3.8-27B 做了 50 步 GRPO 后训练。在 507 个任务的封闭基准上,pass@1 从 51.70% 升到 60.78%;20 次尝试全部成功的任务数从 38 个(7.50%)升到 107 个(21.10%),几乎翻了三倍。pass@20(至少成功过一次的任务占比)从 89.35% 略降到 87.97%,少了 7 个任务。作者概括为“更可重复,而不是更广”。对比模型也显示口径差异:GPT-5.6 Sol 的 pass@1 为 61.91%,略高于微调后的 Qwen3.8-27B,但 20 次全过任务只有 82 个,低于后者的 107 个。例如企业酒店预订任务要求经理批准后才能降级房间,训练前模型 20 次里有 15 次擅自改单并退款;训练后 20 次全部保留预订与支付状态。
分领域看,pass@1 与 20 次全过率在五个领域都上升,pass@20 则有升有降:auto insurance 覆盖广度降幅最大(−7.0 个百分点),retail 的 20 次全过率增幅最大(+24.5 个百分点)。按上篇的成本公式,整轮 507×20 次评测估算成本从 $925.80 降到 $855.58(−7.6%),每次成功尝试成本从 $0.177 降到 $0.139(−21.4%),每个 20/20 稳定完成任务成本从 $24.36 降到 $8.00(−67.2%),接近 GPT-5.4($6.80)、GPT-6 Astra($7.45)和 Claude Opus 5.5($7.80)。作者注明这些只是对比用的服务指数,不是账单,且不含训练与筛选任务集的探测成本。
训练的关键不是模型或优化器,而是选哪些任务进池。GRPO 对组内对比敏感:8 条轨迹全败或全胜时,居中化后没有任务奖励差异,学不到东西;只有混合结果才提供对比。而每次 rollout 都要起隔离后端、跑真实工具会话、再调一个模型扮演用户,成本很高。作者提出离线策略相对难度:先用基础策略对每个候选任务探测 n 次,记录 k 次成功,用 Jeffreys 后验 Beta(k+½, n−k+½) 估计成功率,再按 0.08、0.40、0.60、0.90 分五档;几乎总失败和几乎总成功的任务丢掉,保留困难、中等、经常成功三档。Qwen3.8-27B 的池子先由 GPT-5.4 做可解性筛选;一个任务基础策略 8 次探测成功 3 次,后验 Beta(3.5,5.5) 有 54.0% 质量落在 Difficult 档,训练时产出 [0,0,0,0,1,1,1,1] 的混合奖励组。最终池子保留 187 个任务,探测只做一次,池子在训练中固定。
实现上,训练和评测共用同一套解释代码(trainer/core/tb_interpret.py),确保 reasoning 提取、工具调用、参数类型、渲染与状态隔离完全一致,否则奖励衡量的 Agent 与评估的 Agent 不是同一个。参考运行是全参数 RL 微调:50 步,每步 18 组×8 条 rollout 共 144 个 episode,跑在 24 张 H100 上;AdamW 学习率 1e-6、零权重衰减;零方差组按 DAPO 风格丢弃重填,后端超时这类系统错误导致的组也重填。训练代码、数据选择、rollout、奖励与 Verl 集成发布在 microsoft/thinkingbox-training。ThinkingBox 代码是 MIT 许可,benchmark 数据是 CDLA-Permissive-2.0,公共 benchmark 任务全部是合成重建,客户不是真实客户。
作者给想自己训练或评测数据库类 Agent 的人三条建议:训练前先探测,看难度分布直方图,实际分布通常比想象中更偏;检查训练/评测解析器的一致性,把同一条模型输出分别重放,确认两边提取出的工具名和参数一样;汇报时同时给覆盖率与可重复率。需要说明,ThinkingBox-Bench 的任务没有进入训练池,领域、数据库和大部分 MCP 工具在 RL 训练中都没见过,属于分布外测试集;但两边共享框架、模拟用户机制和终端状态检查,这一共享限制了迁移结论的强度。论文见 arXiv:2608.19741,代码仓库为 microsoft/thinkingbox-training。


