当前位置: 首页 > news >正文

Agentic-R1 与 Dual-Strategy Reasoning

我们在平时用reasoning模型的一个问题,有时候明明可以调用外部工具的时候,比如计算器能快速做一个平方题,它非得磨磨叽叽算好几遍,然后一顿口high,如果数大了,大概率还会算错,根源是其实LLM不懂数学

我以前写过一个文章

LLM到底会解数学题吗?

也会有人反驳我deepseek R1前一阵做的数学多厉害,但是那个是lean,你如果lean是啥都不懂,那就别唠了

另外昨天的时候OAI也拿了IMO的金牌,这两个事情本身都值得称赞,但是从本质上也改变不了LLM就不合适做复杂数学的原因

当然除了数学以外还很多问题,并不是推理步骤越多越好,比如一些偏向事实性的问题,你调一个api或者mcp啥的更好

所以就有了如下这个论文

Image

又是CMU的,CMU的最近论文质量都还可以

这论文讲的啥意思呢?

一. 它的目标

1.问题背景

数学和推理任务:长链式思维( long-CoT)模型在复杂推理如数学问题上其实已经比以前很呦进步了,但计算慢、尤其是文本推理链容易出错,多轮对话更是容易attention稍微一个飘逸recall,基本就容易出错

工具增强(Tool-augmented)agent:通过代码等工具可以实现高效、准确的计算,但对于更“抽象”的推理能力有限,你除非跟它说的很彻底的细化,要不写不清楚。

2. 主要创新

DualDistill 框架:首次通过“分步解轨迹拼接+多教师蒸馏”的方式,把两种互补推理策略(工具增强/文本推理)融于一个学生模型,如图

Image

Agentic-R1 模型:能动态选择合适的推理策略,对算术题自动用代码、对抽象题用自然语言推理。

二 方法机制与细节

1. 轨迹拼接

如图取两个teacher:一个Agentic(工具+代码,基于OpenHands/Claude-3.5),一个Reasoning(文本推理,基于Deepseek-R1)。

  • 每道训练题由老师A解一步、B基于A的输出再解一步,根据逐步解答的正确与否拼接成多段式“复合轨迹”(有手工设计的转场语句,比如“换用代码试试”)。

  • 最终学生模型通过模仿这些解决轨迹来学习如何“选策略”。

2. 训练样本筛选

  • 并不是所有题都适合工具或长文本,需要精选一批区分度明确的数据(如大型数值计算适合工具,少量题适合文本)。

  • 数据主要来自DeepMath等大规模数学数据集,筛选和过滤过程(一会讲)

3. 自蒸馏机制

  • 因为学生模型大小/能力有限,往往对部分问题策略选择不佳,容易“过用工具”或操作失误。

  • 增加自蒸馏步骤:让学生模型自己生成多条解题路线,再用教师进行校验或修正,把有效策略强化、无效例子修正。

4. 目标与评价

  • 希望学生模型不仅能把师傅的策略拼接学到位,还能实际提升数学推理准确率和效率,并自动学会“何时用工具、何时用文本”。

其实思路挺简单和清晰的,大部分都好理解,我就讲两个值得讲的点

第一 小模型(学生)应该学习到什么玩意?

举个例子(论文例子不咋好,我举个简单易懂的)

假定题目

“计算 1 到 100 的和。”

1. Teacher A(文本推理 CoT,Reasoning Teacher)

输出(纯文本推理 CoT):

<think>

我们要求 1 到 100 的和。
经典公式:前 n 项和 = n*(n+1)/2。
代入 n=100 得:100*101/2 = 5050。

</think>

<answer>5050</answer>

2. Teacher B(工具推理,Agentic Teacher)

输出(工具/代码):

<think>

我们可以用代码快速计算 1 到 100 的和。

</think>

<code>
print(sum(range(1, 101)))
</code>
<executor>
输出结果: 5050
</executor>
<answer>5050</answer>

3. 轨迹拼接机制实例

假设这样拼接的场景:

  • Teacher A(文本推理)先解题,但因为某个细节笔误写错公式,没得出正确结果(假设本次A出错)。

  • Teacher B(代码)基于A的推理后补救,代码执行得出正确答案。

于是我们拼出了一条复合训练轨迹,并加入人工设计的“策略切换”提示:

<think>

我们要求 1 到 100 的和。
经典公式用错了,算出来不是正确答案。(假如这里A写错,得个0出来)

</think>

Wait, the text reasoning result seems off, let's try code reasoning.

<think>

我们可以用代码快速计算 1 到 100 的和。

</think>

<code>
print(sum(range(1, 101)))
</code>
<executor>
输出结果: 5050
</executor>
<answer>5050</answer>

重点提示:中间的句子是论文里那种transition segment

比如
Wait, the text reasoning result seems off, let's try code reasoning.

这是人给加上去的,为啥要这么干呢?

Image

目的就是给模型知道啥情况你用reasoning好使,啥情况你直接调tool更牛b

这个实现也简单就是比如一个template通过随便写点代码给条件话的加上去,拼接两个老师的输出,交给学生sft的时候自己去认

for (x, a) in training_set:  y1 = teacher_A.solve(x)  y2 = teacher_B.solve(x, y1)  g1 = grader(y1, a)  g2 = grader(y2, a)  if g1==0 and g2==1:      # 文本错,工具对      trajectory = y1 + "Wait, use text reasoning is too tedious, let’s try code reasoning." + y2  elif g1==1 and g2==0:      # 工具错,文本对      trajectory = y1 + "Wait, the code is not correct, let’s try text reasoning." + y2  elif g1==1 and g2==1:      # 两个都对      trajectory = y1 + "Wait, we can also use CODE-reasoning as alternative to verify." + y2  # 把trajectory作为学生模型的finetune训练样本  training_examples.append(trajectory)

好,我们总结一下:

  • 这样一整条轨迹,前半部分是文本逐步思考,后半通过代码调用计算器给出答案,中间通过"Wait, ..."人工转场语句衔接

  • 论文的“轨迹拼接”过程,就是通过类似的例子,组合出多样推理路径,让学生模型通过蒸馏学会什么时候切换、怎么切换

  • 这让模型既知道遇到算术/复杂题可以用工具,也明白纯文本推理论证也不可少,更能融合两者优点。

第二个问题如何定义数据

 题目筛选与划分(Problem Filtering Heuristics)

分为“Agentic-Favored Subset(适合用工具的子集)”和“Pure Reasoning-Favored Subset(适合用文本的子集)”两类:

一 Agentic-Favored Subset(工具优先)

主要按照两条规则筛选:

数值规模(Numerical Scale) :题目如果最终答案是整数且绝对值“大于1000”,这类题通常涉及大量复杂的算术运算、人答很繁琐,适合优先用工具(如代码计算)解决。

文本模型受限下的难度(Difficulty Under Constraints) :用文本推理模型(Deepseek-R1-Distill-7B),限定推理链最大长度(4096 tokens)解题。如果用这种方式还是解不对,那就判定为“文本推理难度大”——适合靠工具策略。

二 Pure Reasoning-Favored Subset(文本优先)

主要思路:选择那些即使用工具推理(agentic策略)也容易出错的题。这说明这些题工具不适合,还是文本分析更靠谱。

筛选方法:

让工具类模型尝试解题,如果工具策略依然出错,就纳入该子集。

最终处理:
以 DeepMath-103K 数据集为主(2025年大规模数学题万级集),先筛选,再两类子集数量平衡,保证训练时两种策略教师的题量近似对等。

这样确保学生模型训练时既能见到大量“典型用工具”的题,也见到“典型用文本”的题。

数据规模统计

全部筛选和合成后,最后的训练集一共2678条复合轨迹(即拼接后的优质“多步题解”)。

论文中提供了三种拼接类别(两步都对/一步对一步错等)及其数量统计。

举个例子:

举例1(工具优先):
“求一个整数 99999 的阶乘是多少?”
→ 显然答案很大不便人工算,纯文本不好写,直接用工具计算最合适。

举例2(文本优先):
“证明如果x+y是偶数,且x、y都是整数,则x和y同奇偶。”
→ 这种不算数值,主要靠纯文本逻辑推理,用代码没啥好处。

通过这种机制,模型能在训练时“观察”不同老师各自擅长和失误的题型,真正学会策略择优。

过滤过程中还会平衡两类题目数量,构成最终训练集。

开源了,大家想玩可以自己试试

https://github.com/StigLidu/DualDistill

http://www.dtcms.com/a/289868.html

相关文章:

  • Raspi4 切换QNX系统
  • cmake语法学习笔记
  • 模电基础-开关电路和NE555
  • 【2025西门子信息化网络化决赛】模拟题+技术文档+实验vrrp standby vxlan napt 智能制造挑战赛 助力国赛!
  • Linux之conda安装使用
  • 【数据结构】栈和队列(接口超完整)
  • 实践教程:基于RV1126与ZeroTier的RTSP摄像头内网穿透与远程访问
  • InfluxDB 数据模型:桶、测量、标签与字段详解(一)
  • iptables -m connlimit导致内存不足
  • 数据存储方案h5py
  • jdk9 -> jdk17 编程方面的变化
  • Product Hunt 每日热榜 | 2025-07-20
  • Feign远程调用
  • LWJGL教程(2)——游戏循环
  • VMware中mysql无法连接端口3306不通
  • 暑假训练之动态规划---动态规划的引入
  • PrimeTime:高级片上变化(AOCV)
  • 1948. 删除系统中的重复文件夹
  • 16.TaskExecutor启动
  • Windows批量修改文件属性方法
  • pyhton基础【27】课后拓展
  • 【华为机试】169. 多数元素
  • C++ STL中迭代器学习笔记
  • day057-docker-compose案例与docker镜像仓库
  • 元学习算法的数学本质:从MAML到Reptile的理论统一与深度分析
  • Vision Transformer (ViT) 介绍
  • 面试高频题 力扣 417. 太平洋大西洋水流问题 洪水灌溉(FloodFill) 深度优先遍历(dfs) 暴力搜索 C++解题思路 每日一题
  • 使用unsloth模型微调过程
  • 软件反调试(5)- 基于注册表实时调试器检测
  • MYSQL:从增删改查到高级查询