Research notes · Tool use & reinforcement learning

调用工具之前,
模型想清楚了吗?

看过更多工具调用的模型,为什么在强化学习后反而更少使用工具?我们从调用前的那段推理里,找到了一条线索。

Kaiwen Hu · Hyunin Lee · Joseph Suh · 等 10 位作者

Kaiwen Hu1 · Hyunin Lee1 · Joseph Suh1 · Serina Chang1 · Shuai Shao2 · Yong Zhang2 · Namyong Park2 · Xiaoqiang Luo2 · Luke Simon2 · Somayeh Sojoudi1

1 University of California, Berkeley    2 Meta

研究解读   /   约 10 分钟
01 / 一个算对了的错误答案

Python 没算错,答案却错了

一道图表题问:2024 年,4G 和 5G 的收入合计占总收入的多少?

模型读出了 4G 的收入 540 和 5G 的收入 210,接着调用 Python。下面这一步,它把 540 当成了总收入。

A SMALL EXAMPLE先看看分母发生了什么

4G + 5G,占总收入的多少?

题目中的 2024 年收入 · 示意重排
(540 + 210) / 540
× 100
138.89%超过了 100%
Code 正确执行了计算。但 540 只是 4G 收入,模型在调用前就选错了分母。

点击上方两种分母,可以对照计算结果。该图解依据论文图 3 的两个具体案例整理。

图中的总收入还包括 2G 和 3G,应该是 25 + 40 + 540 + 210 = 815。另一条解题轨迹先理清了这一点,再调用同一个 Code 工具,得到正确答案:92.02%。两条轨迹的差别,在代码开始运行之前就已经出现了。

工具开始工作之前,
模型就已经做出了一个关键判断。

工具能完成计算,模型需要先确定算什么。放大图片也一样:先知道哪块区域值得仔细看,才有机会从放大后的图像里找到有用信息。

这让我们关心一个问题:训练示范有没有把调用之前的判断教清楚,会不会影响模型后来使用工具的方式?

看看论文中的两条完整轨迹
点击图表可放大 ↗
FIG. 3原始 High 把 540 当成总收入;LF50 先确定分母为 815。两条轨迹都调用了 Code。这是具体案例对照,不是只改变推理长度的受控实验。

来源:论文图 3 · 第 9 页 ↗

02 / 一个意外的分岔

示范中调用得更多,后来却更少用了

我们的训练分成两步。先做监督微调(SFT):让模型学习完整的解题示范,包括推理、调用工具、读取返回结果和回答。再做强化学习(RL):让模型自己解题,根据最终答案是否正确来更新。这里,调用几次工具、调用前写多少推理,都没有额外奖励。

从同一个 Qwen2.5-VL-7B-Instruct 模型出发,我们准备了三组 SFT 数据。Low 的工具轨迹只调用一次,Medium 调用两到三次,High 至少调用四次。每组都有 2,000 条轨迹,其中 500 条不用工具的示范完全相同,总 token 预算也尽量匹配。模型可以使用 Zoom 放大图像,用 Code 运行 Python。之后,三组模型接受相同的 RL 训练。

一个自然的预期是:看过更多步工具交互的模型,之后也会更常使用工具。实际训练中,三组模型的答题正确率逐渐接近,工具使用却分开了。Low 越来越常调用工具;Medium 的调用比例整体下降;High 在早期就快速减少调用。

点击图表可放大 ↗
FIG. 1左:训练正确率逐渐接近。中:工具启动率明显分化。右:仍然使用工具时,High 依然有更深的调用链。原论文图 1,展示训练期间的统计。

把训练完成后的模型放到评测集上,三组模型至少调用一次工具的题目比例,差距同样明显。

RL 后,有多少题用到了工具?最终评测集上的工具启动率
Low示范 1 次
75.04%
Medium示范 2–3 次
20.82%
High示范 ≥4 次
5.38%

来源:论文表 1;与上图的训练批次统计不同 ↗

这里数的是一整次解题有没有启动工具。High 剩下的工具轨迹仍然包含较多次调用,所以不能仅凭启动率下降,就说它忘记了多步调用。它主要是更少选择进入这条解题路径了。

示范中的调用次数,显然还不足以解释这些行为。我们于是回头检查示范本身。

03 / 回到调用之前

那段推理,是一条值得追下去的线索

把工具轨迹拆开,会看到一个反复出现的过程:先推理,发出调用,读到结果,再继续推理或调用。我们把每次调用紧邻之前的推理文字称为 pre-call reasoning,也就是调用前推理。

三组数据在这里差别很大。Low 每次调用前平均有 623 个推理 token,Medium 是 302 个,High 只有 161 个。token 可以粗略理解成文本长度的计量单位。在 Code 工具上,这个差距更大:分别是 991、423 和 134 个。

也就是说,在近似的总 token 预算下,High 示范了更多次交互,却给每次调用之前的推理留下了更少文字。再看开头的例子,模型能写对工具调用格式,却没有先弄清楚“总收入”该包括哪些数。

点击图表可放大 ↗
FIG. 2左:High 每次调用前平均包含更少的推理文字。右:RL 后,Medium 和 High 留下的工具轨迹在前三次调用前都有更长的推理。token 是文本长度的计量单位。

我们还检查了 RL 前后的轨迹。在 Medium 和 High 留下来的工具轨迹中,前三次调用前的平均推理长度都增加了。以第一次调用为例,Medium 从 306 增到 391 个 token,High 从 266 增到 385 个。

这些观察指向一个假设:调用前的推理,可能影响工具决策是否有助于答对,也影响这类行为能否在 RL 中保留下来。但长度不等于质量。我们需要继续检验:展示了更多调用前推理的示范,能否给后续训练一个更好的起点?

只奖励最终答对的 RL,
会怎样对待一条容易出错的工具路径?

先想一想 RL 在奖励什么。对同一道题,模型可以用工具作答,也可以直接作答。如果使用工具的路径反而更容易失败,那么只奖励最终正确答案的训练,就可能降低这类路径出现的概率。训练目标里没有一项要求“保住 SFT 学过的调用次数”。

我们用一个简化的概率模型分析了这个过程。在这个理想化模型里,工具启动概率上升还是下降,取决于工具路径的成功率是否高于直接作答的路径。因此,两件事完全可能同时发生:模型更少选择工具,留下来的工具轨迹却更容易答对。

展开看:工具路径如何被选择性保留?

固定一道题,将完整解题轨迹分成使用工具和直接作答两类。记 I 为工具启动概率,C 为工具路径的成功率,D 为同一策略中不调用工具路径的成功率。论文的理想化动态满足:

dI/dt = I(1 − I)(C − D)

当 C > D 时,工具启动概率增加;当 C < D 时,它减少。模型之间在整体正确率和工具路径成功率上的初始优势,也能在这一理想化优化过程中保持。

这不是实际 GRPO 训练的精确方程,也不能直接证明推理长度带来了因果效果。这里的 D 指同一策略内部、不调用工具的轨迹分支,与后文关闭工具接口后的独立评测不同。

来源:论文第 3.4 节 · 定理 1 ↗

04 / 重新分配监督机会

选哪些示范,会改变接下来的训练

我们回到原始 High 数据,给每条工具轨迹算一个分数:每次调用前,平均有多少推理 token。按这个分数排序后,保留排在前面的完整轨迹,内容不作改写。

01给完整轨迹打分

计算每次调用前的平均推理 token 数。

02保留排名靠前的示范

选择整条轨迹,内容不作改写。

03匹配累计监督量

在较小子集上训练更多轮,再做相同的 RL。

两个筛选子集叫 LF50 和 LF25,LF 是 Length-Filtered 的缩写。它们每轮包含的监督 token,约为原始 High 的 50% 和 25%。注意,这个比例说的是 token 量,不是样本条数。

为了近似匹配累计监督 token 量,原始 High 训练一轮,LF50 训练两轮,LF25 训练四轮,优化更新次数也保持一致。之后的 RL 和评测设置不变。我们比较的是同样多的监督机会怎样分配,而不是把训练预算缩减到原来的四分之一。

我们还加入了随机筛选的对照:保留与 LF25 近似相同的监督 token 量,采用相同的重复轮数、批大小、更新次数和后续 RL 设置。两者的区别只在于选了哪些示范。

来源:论文第 4.1 节 ↗ · 附录 C.1 的训练设置 ↗

RL 之后,我们在五个评测集、共 6,431 道题上评估模型。工具开放,由模型自行决定是否使用。

换一组示范,结果如何?

RL 后 · 开放工具 · 正确率 (%)
原始 High
66.24%
随机筛选 25%
66.67%
LF50
67.92%
LF25
69.75%
+3.51个百分点

总体 · LF25 相比原始 High

LF25 相比原始 High 提高了 3.51 个百分点,而且在 V*Bench、ChartQA、MathVista、WeMath 和 CharXiv 五个评测集上都有提升。它也在全部五项评测上超过随机筛选。随机取一小部分数据、多训练几遍,没有复现同样的结果。

查看全部评测数字
论文表 2:RL 后开放工具的正确率(百分比)
方法V*BenchChartQAMathVistaWeMathCharXiv总体
原始 High84.2985.4865.1057.3031.4066.24
随机筛选 25%81.6882.2066.9060.3435.8066.67
LF5084.8285.3667.7058.7937.2067.92
LF2586.9187.7268.9060.5738.4069.75

RL 后开放工具时的正确率(%),原论文表 2。总体为五个评测集共 6,431 道题上的汇总正确率;25% / 50% 指每轮保留的监督 token 量。

来源:论文表 2 · 第 9 页 ↗

05 / 把工具关掉,再比较一次

工具这次帮上忙了吗?

总体正确率提高以后,还需要再问一步:这个改进和工具使用有什么关系?一个直接的检查,是让同一个训练好的模型做两次评测,一次开放工具,一次关闭工具。

原始 HIGH
−2.66个百分点

开放工具后的总体正确率变化

LF25
+1.18个百分点

开放工具后的总体正确率变化

来源:论文表 3:开放工具 − 关闭工具 ↗

原始 High 开放工具时,反而比关闭工具少答对了一些题。换成 LF25,这个差值变成了正数,而且五个评测集上的差值全部为正。两者关闭工具后的总体正确率仍然接近。

工具是否更常被调用,则因任务而异。ChartQA 上,从 High 到 LF25,使用工具的题目比例从 2.2% 降到了 0.6%,开放工具时的正确率却从 85.48% 提高到 87.72%;MathVista 和 WeMath 上,工具启动比例有所增加。

点击图表可放大 ↗
FIG. 4b筛选后,MathVista 与 WeMath 的工具启动率增加,ChartQA 的启动率减少。工具的整体收益改善,并不要求每项任务都更频繁地调用工具。

所以,只数工具被叫了多少次,会漏掉这里最关键的变化。更值得一起检查的是:模型何时选择工具、这些解题轨迹有多容易成功,以及开放工具后最终能多答对多少题。

06 / 回到那道图表题

把调用之前的判断教清楚

两条轨迹都能调用 Python,也都能让代码运行起来。结果出现差别,是因为其中一条先确定了正确的分母。

这项研究让我们更重视 SFT 示范中这一段容易被忽略的内容:为什么需要这次调用,准备交给工具什么问题,又如何利用已经得到的信息继续往下走。在我们的实验里,按调用前推理长度筛选已有示范,就能改善后续 RL 的结果,让工具开放的整体收益由负转正。

长度只是一个容易计算的代理指标。筛选同时改变了模型看到哪些完整示范,因此不能把这些结果归结为“只要把推理写长就有效”。实验也集中在一个基础模型、Zoom 和 Code 两种工具,以及只奖励最终答案正确的 RL 设置。下一步更值得探索的,是如何直接识别那些把调用依据和计算目标讲清楚的示范。

“这里为什么要除以 815?”
是在工具开始工作之前,就需要回答的问题。

准备工具使用数据时,除了检查调用能不能执行,也读一读它前面的那段推理。模型为什么需要这次调用、准备交给工具什么问题,都值得在示范里讲清楚。

THE PAPER BEHIND THIS STORY

Think Twice Before Calling Tools: How Pre-Call Reasoning in SFT Shapes Tool-Use Retention under RL

Kaiwen Hu1 · Hyunin Lee1 · Joseph Suh1 · Serina Chang1 · Shuai Shao2 · Yong Zhang2 · Namyong Park2 · Xiaoqiang Luo2 · Luke Simon2 · Somayeh Sojoudi1

1 University of California, Berkeley    2 Meta

本文依据作者提供的论文版本撰写。所有实验数字和原图均对应此版本;论文中包含完整设置、理论推导和更多分析。

论文原图