ToolPRM: Fine-Grained Inference Scaling of Structured Outputs for Function Calling¶
会议: ACL2026
arXiv: 2510.14703
代码: 待确认
领域: LLM推理 / 工具调用
关键词: 函数调用, 过程奖励模型, 结构化输出, 推理扩展, Beam Search
一句话总结¶
ToolPRM 将函数调用拆成函数名选择、参数名选择、参数值填写等细粒度决策,训练 intra-call 过程奖励模型来指导 beam search,并提出“explore more but retain less”的结构化输出推理扩展原则,在 BFCL 和 ToolAlpaca 上稳定提升 Hammer2.1 系列工具调用模型。
研究背景与动机¶
领域现状:推理时扩展已经在数学、逻辑推理等非结构化生成任务中被广泛使用,例如 self-consistency、Best-of-N、Tree-of-Thought、beam search 或 MCTS。它们通常依赖 outcome reward model 或 process reward model,对多个候选推理路径进行评分和筛选。
现有痛点:函数调用属于结构化输出:模型不仅要生成自然语言,还要选择正确函数名、填对参数名和参数值,并保持 JSON / Python-style 调用格式合法。已有推理扩展方法大多把一次函数调用当作整体候选来打分,粒度太粗,无法在“函数名刚选错”“某个参数值错了”这类早期错误发生时及时剪枝。
核心矛盾:非结构化推理中,早期错误有时可以通过后续反思或修正补回来;但函数调用的结构化输出通常不可恢复,一个错误函数名或错误参数会让整条轨迹失效。也就是说,结构化输出需要更宽的探索来找正确决策,却不能保留太多错误候选继续消耗预算。
本文目标:作者希望构造第一个面向函数调用 intra-call 决策的细粒度过程监督数据集,训练 ToolPRM 对每个局部决策打分,并用它指导搜索,让小工具调用模型在测试时通过额外计算获得更高准确率。
切入角度:论文把一次函数调用拆成状态转移过程:先选择函数名,再逐个选择参数名、填写参数值,最后判断参数和函数调用是否结束。这样 PRM 不必等完整 JSON 生成完才打分,而是能在每个局部动作后判断它是否正确。
核心 idea:用函数 masking 和 rollout 自动收集细粒度正负步骤标签,训练生成式 reward model 输出 “+” 或 “-”,再在 beam search 中扩大每步候选宽度、减少保留 beam 数,从而把计算预算集中在正确结构路径上。
方法详解¶
整体框架¶
ToolPRM 的流程可以分成三步。第一步是构造细粒度监督数据:从 xLAM-function-calling-60k 和 xLAM-irrelevance-7.5k 获取自然语言 query 与目标函数调用,对函数名和参数名做 masking,迫使模型根据描述理解工具,而不是记住名字;再用 Hammer2.1-3B/7B 作为 policy model rollout 出候选函数调用。
第二步是自动标注每个候选轨迹中的局部决策。论文为函数调用定义多种标签:选函数名是否正确、一个参数名-值对是否正确、所有参数是否填完、单个函数调用是否正确、整体 response 是否正确。每个标签都通过与可能 ground truth 精确匹配得到二元正负监督。
第三步是训练 ToolPRM 并用于推理扩展。ToolPRM 本身也是 LLM,输入当前状态和候选动作,输出 “+” 或 “-” 的概率;beam search 每步展开多个候选,用 ToolPRM 分数排序并剪枝。由于结构化输出早期错误不可恢复,作者主张扩大 beam width 来探索更多局部选择,但保留较少 beam,形成“explore more but retain less”的策略。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
A["输入:query + 目标函数调用<br/>(xLAM-60k / irrelevance-7.5k)"]
subgraph DATA["训练数据与监督方案"]
direction TB
B["Intra-call 细粒度分解与标签体系<br/>把一次调用拆成函数名/参数值/结束等可监督动作"]
C["函数 masking + rollout 数据构造<br/>名字换随机串,policy rollout 候选 → exact-match 标正负"]
B --> C
end
A --> B
C --> D["训练 ToolPRM<br/>生成式 RM,输出 +/− label token 概率"]
D --> E["ToolPRM 引导的细粒度 beam search<br/>explore more but retain less:增大 beam width M、保持小 N"]
E --> F["输出:合法函数调用"]
关键设计¶
1. Intra-call 细粒度分解与标签体系:把一次函数调用从「整体 JSON」拆成可逐步监督的局部决策
已有推理扩展方法大多把整次函数调用当成一个候选来打分,粒度太粗——等到完整 JSON 生成完才知道对错,「函数名刚选错」「某个参数值填错」这类早期错误根本来不及剪枝。ToolPRM 把一次调用拆成一连串可监督的局部动作,并为每个动作定义标签:<FUNC_NAME> 判断函数名是否正确、<ARG_VALUE> 判断某个参数名和值是否匹配 ground truth、<TOTAL_FINISH> 判断整个函数调用列表是否完成且正确,此外还有参数结束、函数结束等标签。这样 reward model 不必等 JSON 写完就能在每个局部动作后判断对错,更早发现错误来源。看似冗余的细标签反而有用:论文实验显示保留 <ARG_VALUE> 这类参数级标签反而提高了 trajectory-level 的判断能力,局部监督并没有让模型只盯局部。
2. 函数 masking + rollout 数据构造:逼 reward model 看懂语义,而不是背工具名
如果训练数据里函数名、参数名都是真实可辨识的,reward model 很容易退化成靠记忆工具名来打分,一旦部署时工具命名或 schema 变了就泛化崩盘。ToolPRM 在构造数据时把函数名和参数标识符替换成随机字符串,再给 policy model 一组 masked function candidates 去 rollout 出候选函数调用,最后用 exact match 对每个步骤标注正负,得到 step-level 与 trajectory-level 两种粒度的数据。masking 掉表面名字后,reward model 只能转而关注 query 意图、函数描述、参数语义和已经生成的结构上下文,学到的是真正可迁移的判断能力。
3. ToolPRM 引导的细粒度 beam search:在测试时把额外预算花在「多探索、少保留」上
结构化输出和自由文本推理有个本质差异:数学推理里早期错误还能靠后续反思补回来,函数调用的错误 JSON 分支几乎不可恢复,一个错函数名就让整条轨迹作废。所以正确策略不是保留一大堆候选慢慢修,而是早剪枝、把预算让给正确结构。搜索时 ToolPRM 对每个候选动作输出 “+” 与 “-” 两个 label token 的 logits,算出局部正确性分数
beam search 保留 top-\(N\) 个 beam、每个 beam 展开 \(M\) 个后续候选。作者主张提高 \(M\) 来扩大每一步的横向探索,同时保持较小的 \(N\) 不让错误候选继续占用预算——这就是「explore more but retain less」原则。预算分析印证了它:固定 \(N=4\) 增大 \(M\) 时 ToolAlpaca F1 随预算上升,而固定 \(M=4\) 增大 \(N\) 收益很小甚至下降。
损失函数 / 训练策略¶
ToolPRM 采用生成式过程奖励建模。给定轨迹 \(\mathcal{T}=\{(s_t,a_t,r_t)\}\),其中 \(r_t\in\{+,-\}\),训练目标是最大化正确标签 token 的概率,即最小化 \(-\log p_\theta(r_t|s_t,a_t)\)。作者使用 Hammer2.1-3B 作为 reward model backbone,SFT 训练 5 个 epoch,Adam 优化器,batch size 1024,学习率 \(1e-3\),warmup ratio 0.008,weight decay \(1e-5\)。推理时温度设为 0.8,beam 数 \(N\) 和 beam width \(M\) 从 \(\{1,2,4,8,16\}\) 中选择。
实验关键数据¶
主实验¶
ToolPRM 数据集规模很大,且同时报告 step 与 trajectory 两种粒度。下表摘自论文表 1。
| 样本粒度 / Split | Positive | Negative | Total |
|---|---|---|---|
| Step / Train | 4,380,323 | 731,665 | 5,111,988 |
| Trajectory / Train | 466,786 | 127,648 | 594,434 |
| Step / Test | 488,611 | 81,366 | 569,977 |
| Trajectory / Test | 52,030 | 14,019 | 66,049 |
奖励模型预测准确率显示,监督粒度越细,模型越会判断完整函数调用轨迹。ToolPRM 在 loss、step accuracy、trajectory accuracy 上都优于 outcome-only 和 coarse PRM。
| Reward Model | Loss ↓ | Step Acc ↑ | Trajectory Acc ↑ |
|---|---|---|---|
| ORM | 0.0536 | 98.39% | 98.39% |
| C-PRM | 0.0371 | 98.87% | 99.06% |
| ToolPRM | 0.0286 | 99.11% | 99.38% |
消融实验¶
推理扩展结果表明,ToolPRM 相比 token-level beam search、majority voting 和 Best-of-N 更稳定,尤其对小模型帮助更明显。
| Policy 模型 | 方法 | BFCL Avg. | ToolAlpaca Avg. | 主要结论 |
|---|---|---|---|---|
| Hammer2.1-7B | Base | 88.65 | 72.77 | 强 base 已较高 |
| Hammer2.1-7B | + ToolPRM | 89.52 | 73.36 | 小幅但稳定提升 |
| Hammer2.1-3B | Base | 86.86 | 71.57 | 接近 7B base |
| Hammer2.1-3B | + ToolPRM | 88.88 | 71.96 | BFCL 接近 7B + ToolPRM |
| Hammer2.1-1.5B | Base | 82.79 | 69.30 | 小模型结构错误更多 |
| Hammer2.1-1.5B | + ToolPRM | 85.61 | 72.93 | 提升最明显,接近/超过更大 base |
预算分析进一步验证“explore more but retain less”:固定保留 beam 数 \(N=4\) 并增大 beam width \(M\) 时,ToolAlpaca F1 通常随预算增加而上升;反过来固定 \(M=4\)、增大保留候选数 \(N\) 时收益较小,有时还会下降。这说明结构化输出中保留更多候选并不总是好事,错误候选会把后续预算带偏。
关键发现¶
- 细粒度监督不仅提高 step-level accuracy,也提高 trajectory-level accuracy,说明局部标签并没有让模型只盯局部,而是帮助它更好判断整体正确性。
- ToolPRM 对小模型的边际收益更大。1.5B Hammer 加上 ToolPRM 后,BFCL Avg. 从 82.79 提升到 85.61,ToolAlpaca Avg. 从 69.30 提升到 72.93,接近甚至超过部分更大模型。
- 普通推理扩展方法不稳定。token-level beam search 在多个设置下反而低于 base model,原因正是结构化生成里的早期错误不可恢复。
亮点与洞察¶
- 论文抓住了结构化输出与自由文本推理的本质差异:数学推理可以保留多个中间思路等后续修正,函数调用却更像程序构造,早期 schema 决策错了就很难补救。
- “explore more but retain less” 是一个很实用的推理扩展原则。它比笼统地增加 test-time compute 更具体,指出预算应花在每一步横向探索,而不是保留大量历史错误分支。
- ToolPRM 的数据构造方式也有迁移价值。函数 masking、step-level exact-match 标注、生成式正负标签预测,可以推广到 SQL 生成、工作流编排、机器人动作参数化等结构化输出任务。
局限与展望¶
- ToolPRM 把函数调用离散化为显式状态和标签,但真实模型内部可能有隐式推理和不确定性,未必完全能被这些状态覆盖。
- 当前方法需要额外 reward model、masking 规则和状态定义,工程复杂度高于简单 Best-of-N;不同 API schema 下标签构造质量会直接影响效果。
- “explore more but retain less”的最优 \(M/N\) trade-off 目前靠网格搜索,尚未根据输入复杂度或 ToolPRM 置信度自适应调整。
- 自动标注依赖 exact match ground truth,可能低估语义等价但格式不同的调用,也可能无法覆盖真实工具环境中的副作用、权限和运行时失败。
相关工作与启发¶
- vs ORM / Best-of-N: ORM 只看最终候选,适合完整答案筛选;ToolPRM 能在函数名和参数值阶段提前剪枝,更适合错误不可恢复的结构化输出。
- vs coarse PRM: C-PRM 已经比 ORM 更细,但去掉了
<ARG_VALUE>等参数级标签;ToolPRM 保留最细步骤,带来更高 trajectory accuracy。 - vs 通用 beam search / majority voting: 这些方法增加候选数量,却缺少结构化局部奖励,容易保留错误 JSON 分支。ToolPRM 的价值在于用 process reward 决定哪些分支值得继续。
评分¶
- 新颖性: ⭐⭐⭐⭐☆ 把 PRM 做到函数调用 intra-call 级别并总结结构化推理扩展原则,问题抓得很准。
- 实验充分度: ⭐⭐⭐⭐☆ 数据统计、RM 粒度对比、BFCL/ToolAlpaca 主实验和预算分析都比较完整,但真实多轮工具环境还可加强。
- 写作质量: ⭐⭐⭐⭐☆ 结构清楚,方法图和状态转移解释充分;个别术语和表格排版略有瑕疵。
- 价值: ⭐⭐⭐⭐⭐ 对函数调用和 agent 工程很有实用价值,尤其适合用额外推理预算增强端侧小模型。