ToolPRM: Fine-Grained Inference Scaling of Structured Outputs for Function Calling¶
会议: ACL2026
arXiv: 2510.14703
代码: 待确认
领域: llm_reasoning / 工具调用
关键词: 函数调用, 过程奖励模型, 结构化输出, 推理扩展, 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”的策略。
关键设计¶
-
Intra-call 细粒度分解与标签体系:
- 功能:把函数调用从一个整体 JSON 结果拆成可监督的局部决策步骤。
- 核心思路:每个函数调用包含函数名选择、参数名选择、参数值填写、参数结束、函数结束以及整体完成等标签。比如
<FUNC_NAME>判断函数名是否正确,<ARG_VALUE>判断某个参数名和值是否匹配 ground truth,<TOTAL_FINISH>判断整个函数调用列表是否正确。 - 设计动机:只看最终结果会掩盖错误来源。细粒度标签既能让 reward model 更早发现错误,也能提供冗余层次监督;论文实验证明保留
<ARG_VALUE>这类看似重复的标签,反而提高 trajectory-level 判断能力。
-
函数 masking + rollout 数据构造:
- 功能:构造更鲁棒的 reward model 训练数据,避免模型靠函数名记忆做判断。
- 核心思路:作者把函数名和参数标识符替换为随机字符串,再给 policy model 一组 masked function candidates 生成函数调用 rollout。随后用 exact match 对每个步骤标注正负,形成 step-level 与 trajectory-level 数据。
- 设计动机:真实部署中工具命名和 schema 可能变化,reward model 如果只记住工具名,会泛化很差。masking 迫使它关注 query、函数描述、参数语义和已经生成的结构上下文。
-
ToolPRM 引导的细粒度 beam search:
- 功能:在测试时用额外计算提升结构化函数调用准确率。
- 核心思路:对每个候选动作,ToolPRM 输出 “+” 与 “-” 两个 label token 的 logits,并计算 \(s=e^{s_+}/(e^{s_+}+e^{s_-})\) 作为局部正确性分数。搜索时保留 top-\(N\) beam,每个 beam 展开 \(M\) 个后续候选。作者强调应提高 \(M\) 扩大探索,同时保持较小 \(N\),避免错误早期决策继续占用预算。
- 设计动机:函数调用不像自由文本,错的 JSON 分支很难在后面修好。越早剪掉错误候选,后续参数填写预算越能用在正确结构上。
损失函数 / 训练策略¶
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 工程很有实用价值,尤其适合用额外推理预算增强端侧小模型。