CIR
Paper · arXiv 2025 / AAAI-26

Code-Integrated Reasoning:让模型边推理边写代码,先得让训练不崩

让推理模型在中间步骤生成 Python、丢给解释器执行、再把结果接回推理,这条路线的能力已经被 ToRL 等工作证明。 论文指出真正卡住的是训练动力学的不稳定:交互边界靠 stop token 靠不住、工具返回的格式和模型自己的逻辑对不上、固定交互轮数又会让模型只学一种套路。 论文把这些拆成三类故障,逐一配了六项 RL 策略。

Fei Bai, Yingqian Min 等 · 人大高瓴 / BAAI / DataCanvas arXiv 2505.24480 ↗ 代码 RUCAIBox/CIR ↗
TL;DR · 30 秒抓住核心

代码集成推理不是「让模型多调一个工具」,而是把代码本身当成推理步骤的形式化表达。代价是训练轨迹里混进了非推理 token:解释器返回的 output、报错、空行。论文的依据是经验观察(Section 2.3.1),不是形式化证明——三类不稳定分别是边界、分布、同质化。

六项策略的方向并不全是「求稳」:精确匹配代码块、屏蔽工具反馈、熵奖励置零是在削减噪声;去掉 KL 项、clip-higher、交互预算 2→3→4是在主动放大探索空间。它们必须成对使用,单拿出来任何一半,论文都没给对照数据。

最有说服力的数据不在主表:全是「可执行」代码的错误回答占 36.0%,而答对的回答里也有 39.4% 出现过执行失败的代码。代码跑通不代表逻辑正确,跑失败也不等于白写。

52.4%
CIR (Qwen2.5-M7) 五个基准平均
最高纯文本基线 OAT-Zero 39.3,工具 RL 基线 ToRL 50.5
1726
CIR 平均回答长度(token)
DeepSeek-R1-Distill 13831,Qwen3-8B(Think-10K) 9705
39.4%
正确回答中含不可执行代码的比例
错误回答中含全可执行代码的比例为 36.0%
01

推理轨迹里插进一段工具输出,就不再是「模型自己想的」

先弄清 CIR 的轨迹形式和它与普通长篇思考的差别,后面三类故障才有统一的坐标系。

论文把 CIR 形式化成生成与执行的交替。给定问题 q,模型在第 t 步基于当前上下文 ht 生成代码 ct,解释器 I 执行得到结果 rt,结果拼回上下文继续:

ct = fθ(q, ht)   →   rt = I(ct)   →   ht+1 = ht ∪ ct ∪ rt
Eq. 1–3 · 论文 §2.1。t 从 0 到 T,最后基于完整轨迹 hT+1 输出答案 y

和「思考 → 搜索 → 读摘要」这类工具用法相比,CIR 的区别在于:代码是推理步骤本身,不是取回一段外部知识。模型把「324 cosθ − 432 sinθ 的最大值是 √(324² + 432²)」这种推导写成 sp.sqrt(324**2 + 432**2),解释器回一个 540。这打通了自然语言推理与形式化推理(§2.1)。

代价也随之出现。540 这个 token 不是模型采样出来的,它来自一个确定性的外部程序;报错信息则来自 Python 解释器而不是模型的语言习惯。一条轨迹里,哪些位置该算进策略梯度、哪些位置只是外部噪声,成了训练时要回答的问题。

论文的诊断口径

三类故障来自经验观察,优先级不对等

§2.3.1 列出三个来源:交互边界扰动(边界条件靠人工定义,设得不好会拖低整体性能)、分布偏移(工具反馈与模型推理风格不一致,工具用得越多累积越重,最终可能训练崩溃)、响应同质化(固定交互轮数下模型收敛到少数被奖励的行为,即 mode collapse)。

论文没有给出任何一类的量化曲线,三个因素是按「边界 → 分布 → 多样性」的因果链来叙述的:好的边界减少噪声,减少噪声降低分布冲击,才留得住探索。

02

前人已经走到「能训」,本文比的是训得稳不稳、好不好

论文的定位不是提出新范式,而是把 ToRL 一类方法留下的稳定性问题补齐。

路线 A · 推理时临时挂载

Qwen2.5-Math-7B-Instruct-TIR

直接在 Instruct 模型上加一段提示,让它在推理过程中可选地写代码并执行。

表现:Table 1 平均 40.2。比纯文本版 Instruct(27.3)高 12.9 分,说明提示本身就能把工具用起来。

短板:工具使用没有被训练进策略,什么时候写代码、写多长都靠提示约束。

路线 B · 工具增强 RL

ToRL-7B

整个训练过程允许模型动态调用代码,用 RL 学「何时、如何」用工具,是本文最主要的直接对手。

表现:Table 1 平均 50.5,已经是同类最强。作者提到前人工作(如 RAGEN、R1-Searcher++)识别并部分处理过不稳定问题,但缺少系统性方案(§1)。

ToRL 到 CIR 的差在哪,与纯文本 RL 的差在哪

下面三组对比全部来自 Table 1 同一张表,可以同时看清「换范式」的收益和「同一范式内调稳」的收益:

纯文本 RL 内部

OAT-Zero → CIR

MATH500 +7.2(79.2 → 86.4),AIME24 +11.0(31.3 → 42.3),AIME25 +18.8(10.4 → 29.2),OlymMATH +20.3(11.3 → 31.6)。

越难的基准差距越大。

同一范式内

ToRL → CIR

MATH500 +2.6,AMC23 +1.0,AIME24 +4.4,AIME25 持平(29.2),OlymMATH +3.1。平均 50.5 → 52.4,+1.9。

收益稳定但幅度不大。

只加提示

Instruct → Instruct-TIR

平均 27.3 → 40.2,AIME25 5.00 → 18.8,OlymMATH 3.38 → 18.4。

单靠推理时提示,就能吃掉本文 RL 收益的一大半,这点论文没有展开讨论。

03

三类故障,六项策略:一半削噪声,一半放探索

§2.3.2 把它们分成 Stability maintenance 与 Exploration enhancement 两组,一一对应。

稳定性维护 · 三处削噪声

1

精确匹配代码块

不用 ```output 这类 stop token,而是等完整的 ```python … ``` 出现才执行(Figure 1)。

治的是:边界扰动。模型写了代码却没及时发 stop token,会引入噪声甚至漏掉必要的执行。

2

屏蔽工具反馈

算 loss 时把解释器返回的段落在 loss mask 里置 0,不让模型去拟合 44、540、Traceback 这类 token。

治的是:分布偏移。

3

熵奖励置零

不额外加 entropy bonus。

治的是:边界与分布噪声被随机性放大。论文的原话是:熵奖励会让策略熵持续上升,在工具环境里提高随机性就是放大反馈噪声。

探索增强 · 三处放开

4

渐进交互预算

一轮轨迹允许的工具调用次数从 2 增到 3 再增到 4。

治的是:同质化。早期给宽预算,模型不会过早收敛到「预算内高奖励」的窄行为。

5

移除 KL 项

去掉相对 reference policy 的约束。

治的是:早期收敛。交互场景里这个约束会挡住新行为的探索。

6

Clip higher

借鉴 DAPO,把 surrogate loss 的裁剪上界调高,形成非对称裁剪。

治的是:同样是为了保住策略熵,让模型敢往高奖励方向走更远。

论文站在 PPO 的 surrogate 目标上说明改造对象。RO 是旧策略采样、带工具交互的运行轨迹;st(θ) 是 token ot 在新旧策略下概率之比。工具增强 RL 改的是采样分布,不是裁剪公式本身:

ℒ(θ) = 𝔼q∼P(Q), o∼πθold(O|q) [ (1/|o|) Σt min( st(θ)·At, clip(st(θ), 1−ε, 1+ε)·At ) ]
st(θ) = πθ(ot | q, o<t) / πθold(ot | q, o<t)   →   s′t(θ) = πθ(ot | q, o<t; I) / πθold(ot | q, o<t; I)
Eq. 5–7 · 论文 §2.2。带工具后,条件里多了解释器 I:o<t 里混着模型生成与解释器返回的 token。屏蔽反馈 = 这些 token 位置不参与求和;clip higher = 把 1+ε 抬高;移除 KL = 整个 KL 罚项拿掉
规模

实现用 REINFORCE++,不是原始 PPO

§3.1 写明所有训练在 veRL 框架内完成,算法是 REINFORCE++ 叠加 §2.3.2 的策略。也就是说上面的 PPO 公示只是形式化参照,实际跑的是 REINFORCE++ 的 loss 加上同样的裁剪/熵/KL 开关。论文没有给出这些超参的具体数值。

自己动手:给 Figure 1 的轨迹做 loss mask

Figure 1(a) 与 (b) 用一道五进制题对比 stop token 与精确匹配。左边轨迹按原文的格式排好了 tokens:蓝色是模型自己写的推理与代码,橙色是解释器写回的 output。点一下就能切换「不做 mask」和「按反馈屏蔽」两种梯度,看哪些 token 在更新参数。

当前设置
这个示意省略了什么?点开看与论文真实的差异

示意把一段长回答压缩成几个片段区,每项都标注是模型 token(蓝色)还是解释器 token(橙色)。真实实现里,反馈段落在拼接轨迹时就做了 loss mask(§2.3.2 原文:mask the feedback from external tools when calculating the training loss);示意只划分段,不逐 token 计数。

Figure 1 的分发点在精确匹配版:解释器把代码输出包成 ```output … ``` 追加回回答;stop token 版的格式是代码块后直接跟 ```output 作为停止信号,然后才执行。两种格式都包含解释器写回的内容,所以屏蔽策略对两者同样适用。

论文没有报告 mask 与否的对照实验,收益只来自 §2.3.1 的论证,这也是审稿时最容易被追问的点。

04

训练配置极简:3.8 万题、二值奖励、预算 2→4;开销论文只字未提

§3.1 的 Setting 一节比方法部分还短,列出来的每一项都影响可复现性。

项目设置出处
主模型Qwen2.5-Math-7B(Qwen2.5-M7)§3.1
次模型Qwen3-8B 非思考模式(Qwen3-NT8),表中灰色显示、仅供参照§3.1 · §3.2.1
训练数据STILL-3 精选的 38,000 条,难度分布均衡§3.1
算法REINFORCE++,veRL 框架 + §2.3.2 六项策略§3.1 · §2.3.2
奖励二值:答对 +1,否则 −1§3.1
交互预算训练中从 2 逐步增到 4(2 → 3 → 4)§3.1 · §3.2.2
评测采样MATH500 贪心解码;其余四项 AVG@16,temperature = 1.0§3.1
基准规模MATH500 500 题 / AMC23 40 题 / AIME24、25 各 30 题 / OlymMATH 100 题(英文)§3.1
GPU 数量 / 训练步数 / 学习率论文未给出—

二值奖励 +1/−1 属于稀疏奖励:正确性只在答案层面可见,代码执行得好不好不进入奖励。这在 §4.3 的结论里会形成一个悖论——可执行但逻辑错的代码同样拿满分,只要最终答案碰巧对。论文把这类现象定位为「可执行代码可能限制进一步提升」,但没有提出对治方案,只指出代码可执行性不能作为回答质量的可靠信号。

预算提高时,回答反而变短、代码通过率反而下降

Figure 2 和 Figure 4 记录了训练中的两条反直觉曲线:(1) 训练早期回答长度显著下降,说明模型从传统文本推理转向更省 token 的工具调用;后期随着预算扩大,长度再回升,主要原因是交互次数变多。(2) 代码通过率在前 100 步上升,之后持续下降,且交互预算越大降得越明显。在下面两张缩略图上点任一张切换大图,图中的 A / B / C 标出了论文 §3.2.2 / §4.3 提到的三个阶段。

阶段
05

一条轨迹的形状:推理 → 代码块 → 执行 → 接回,预算封顶

默认画的是 Figure 1(b) 的精确匹配版;切到 stop token 版看边界两种定义方式的差别。

图 1:改编自论文 Figure 1 与 §2.1 Eq. 3。蓝色块是模型输出、进入策略梯度;橙色块是解释器返回、在 loss 中被 mask。交互预算 2 → 3 → 4 由 §3.1 给出(不是 Figure 1 原件)。
换一个边界:stop token ▸
  • 精确匹配(论文采用):遇到完整的 ```python … ``` 就执行,模型先暂停推理。执行结果以 ```output … ``` 的形式追加。边界由代码围栏唯一确定,减少了「代码完整但没发停止符」造成的漏执行。
  • Stop token(对照):模型写完代码后必须再吐一个 ```output 作为停止符,检测到才开始执行,执行结果同样追加。论文 Figure 1(a) 指出,模型可能漏发这个停止符,导致噪声或丢掉必要的交互。
  • 怎么接回:解释器结果按 Eq. 3 拼进上下文 ht+1 = ht ∪ ct ∪ rt,模型接着推理,或者直接给出 \boxed{} 最终答案。
  • 预算:一轮回答里最多允许的工具调用次数,训练中从 2 增加到 4。

这张图也解释了为什么「屏蔽反馈」和「精确匹配」必须配合:精确匹配把进入轨迹的外部 token 限制成结构固定的代码结果块,mask 才有一个稳定的边界可以切;反之,stop token 少了或早到了,轨迹里就会混进半截代码或错位的输出,这时无论 mask 怎么切都会切到模型自己的推理上。

06

主表领先 ToRL 1.9 分;真正反直觉的是长度和错误代码

Table 1 看性能,Table 2 看效率,Table 4 看代码失败的价值。

Table 1 · 五个基准

模型代码 MATH500AMC23 AIME24AIME25 OlymMATHAvg ↑
Qwen2.5-Math-7B-Instruct✗75.045.28.125.003.3827.3
Qwen2.5-Math-7B-Instruct-TIR✓78.859.325.818.818.440.2
SimpleRL-Zero-7B✗75.451.118.36.468.7532.0
Eurus-2-7B-Prime✗81.262.818.815.49.9437.6
OAT-Zero-7B✗79.264.231.310.411.339.3
ToRL-7B✓83.873.237.929.228.550.5
CIR (Qwen2.5-M7)✓86.474.242.329.231.652.4
CIR (Qwen3-NT8) · 灰色参照✓93.291.661.546.338.866.3

出处:Table 1。Qwen3-NT8 是 8B 模型,论文注明「不宜与其他非思考模型直接比较,灰色显示仅供参照」。AMC23、AIME24、AIME25、OlymMATH 为 AVG@16 采样,MATH500 为贪心。

Table 2 · 与长 CoT 的准确率 / 长度对照

模型模式 AIME2024AIME2025 OlymMATHAvg
Acc#TokensAcc#TokensAcc#TokensAcc#Tokens
Qwen3-8B (Thinking-10K)LCoT44.6929632.5960421.91021633.09705
Distill-Qwen-7B (R1 蒸馏)LCoT51.31297440.61347942.21504144.713831
CIR (Qwen2.5-M7)CIR42.3160329.2184331.6173334.41726
效率

8.0 倍 token 换来的准确率更高,不是「同等准确」

摘要与 §4.2 的措辞是「comparable accuracy」「nearly 80% of…」「matches…」:平均 34.4 vs 44.7 只能算约 77%;对 Qwen3-8B 是超了(34.4 vs 33.0,1.04 倍),对 R1 蒸馏是低了 10.3 分。

token 口径上,CIR 分别是两者的 12.5% 与 17.8%(1726 / 13831、1726 / 9705)。所以准确的说法是:不到五分之一长度,拿到平均分 77%–104% 的表现。

对照

这张表里只有 CIR 是「从 7B 基座 RL」而来

两个长 CoT 都是已经 RL 过的模型,CIR 从 Qwen2.5-Math-7B 直接起步。论文在 §4.2 结尾也承认这一点,并说明在长 CoT 模型上做同类训练成本更高,留给后续工作。所以「代码集成更简洁」这个结论主要针对从基座出发的推理模型。

Table 4 · 可执行 ≠ 正确,不可执行 ≠ 没用

回答类型平均代码块数全部执行成功至少一段执行失败最后一段执行成功
正确回答(345)1.4760.6%39.4%65.5%
错误回答(615)2.1136.0%64.0%40.2%

出处:Table 4,数据来自 AIME2024 + AIME2025 共 60 题、每题 16 条采样。表头里的「一组执行成功」对应论文的 Full Pass Rate,「至少一段失败」对应 Error Rate,「最后一段执行成功」对应 Final Pass Rate。

三点可以互相印证:

07

几何题几乎不涨,只测过数学与代码解释器

论文自己给的两条边界,以及从它没做的实验里能读出的三条。

边界一

几何题:代码帮不上「先想对图形」

§4.4 在 AIME2024 与 OlymMATH 的四类题(代数 / 几何 / 组合 / 数论)上看,代码集成对前三类提升明显,对几何只有边际收益,且 RL 后依然最小。

Table 5 给了一个典型失败:四面体内切球半径题。模型把四个面的面积当成 KABC + 3KABD 近似,但该式只在三侧面等面积时成立;这种框架级错误照样被写成能运行的 Cayley–Menger 代码,跑出了 2.06039…,模型据此凑出 m + n + p = 20,而正确答案是 14。

边界二

只有数学 × 代码解释器

五个基准全是数学。论文 §5 把「扩展到其他外部工具」列为 future work,没有验证搜索引擎、数据库、API 等场景。

验证器是可执行代码这一属性本身也很关键:代码的成败是确定的,API 报错、检索结果缺失这类「软失败」在轨迹里更难区分成噪声还是信号。

边界三

六项策略没有单独消融

论文没有报告「去掉 mask 会掉几分」「固定预算 vs 渐进预算」之类的对照,你无法从论文里知道哪一项贡献最大。§2.3.1 的三类故障也只是经验描述。

边界四

二值奖励让「假执行」拿满分

答对 +1、否则 −1,执行质量不进奖励。可执行但逻辑错的代码只要最终答案碰巧对,也会被正向强化。

边界五

基座与算力门槛没交代

主结果全部在数学专精的 Qwen2.5-Math-7B 上;论文承认可能是基座本来就见过大量代码。GPU 数、训练步数、学习率均未给出,复现成本未知。

一句话总结:这篇的贡献是把「工具增强 RL 怎么训得稳」的工程认知系统化,并给出一个能复现的参照点(52.4%)。它证明代码集成在数学上有用,但没有证明这些策略在其他工具、其他基座上同样必要。