前言
大语言模型Agent在复杂任务中展现出卓越能力。相比传统线性推理链(Chain-of-Thought),"交错思维"(Interleaved Thinking)通过"思考→行动→观察→再思考"的闭环机制,有效解决了状态漂移和上下文遗忘问题,显著提升多轮交互的连贯性与策略调整能力。
阿里云 PAI 团队结合交错思维的推理机制,构建了涵盖多轮交互的训练数据集,训练更符合交错思维特性的轻量级 Agent 模型,有效提升性能与响应效率。本文将在 EasyDistill(github.com/modelscope/...,系统阐述面向 Interleaved Thinking 的大模型 Agent 蒸馏实践,涵盖数据集构建和蒸馏算法的开发,并结合实际应用案例,全面展示该技术在智能体模型训练中的潜力与优势。
面向Interleaved Thinking的蒸馏方法
在本节中,我们首先回顾 Interleaved Thinking 的基础范式 ReAct,其次详细介绍面向 Interleaved Thinking 的大模型蒸馏方法,最后对蒸馏模型在 Agent 评测任务上的实际效果进行评测。
ReAct范式回眸
我们首先简要回顾 Interleaved Thinking 的基础推理范式 ReAct。ReAct(Reasoning and Acting)由普林斯顿大学与谷歌研究团队提出,作为一种交互式推理框架,旨在解决传统大语言模型在复杂多轮推理任务中遇到的固有瓶颈与效率问题。传统的 Chain-of-Thought(CoT)推理方法通常采用线性、单向的处理流程,即模型先生成完整的推理链条,随后统一执行行动步骤。这种"先思考后行动"的顺序方法,在面对动态变化、环境不确定或需要多工具交互的任务时,容易导致上下文信息丢失、状态漂移和响应延迟,显著制约了模型的实用性和鲁棒性。
ReAct 范式的核心理念是将推理(Reasoning)与行动(Acting)紧密动态交织,通过"思考→行动→观察→再思考"的闭环交互,构建一个实时反馈驱动的推理体系。在实际运行中,模型在每一步不仅生成推理文本,还会决定是否调用外部工具(如数据库查询、API 调用、代码执行等),并根据工具反馈的结果即时调整推理策略与推理状态。这样,模型能够持续更新工作记忆中的环境状态和推理上下文,有效避免在多轮复杂推理与工具调用过程中出现的意图偏离和信息遗忘,确保推理的连贯性与动作执行的准确性。
技术上,ReAct 框架设计了一套交叉迭代的执行机制,具体流程包括:模型基于当前上下文进行推理,生成下一步的行动指令;系统执行对应工具调用并返回结果;模型根据返回信息更新推理状态,进行下一轮思考和决策。该机制不仅提升了模型对环境的响应敏捷性,也支持条件路径分支和自我纠正能力,使 Agent 能应对高度动态和不确定的任务环境。ReAct 与其他基础范式的对比如下所示:
(上图源自ReAct: Synergizing Reasoning and Acting in Language Models. ICLR 2023)
教师轨迹数据生成
教师轨迹数据的质量直接决定了学生模型推理能力的上限和训练效果的稳定性,因此,高质量轨迹数据的生成是多步推理与工具调用能力训练的关键基础环节。我们可以选用任何具备足够能力的大语言模型作为教师(Teacher),如 Qwen3-Max 等,借助其强大的理解与推理能力,生成高质量的任务执行轨迹。生成的轨迹需符合 ReAct 范式。以求解数学题为例,我们采用 Python 代码解释器作为工具,生成的轨迹数据采用标准的三元组结构 [Thought, Code, Observation],具体对应如下:
- Thought(思考):教师模型以自然语言对问题进行分析和推理,描述拆解思路、逻辑判断和决策依据;
- Code(代码):紧接思考后的工具调用指令,通常为 Python 代码,直接执行具体操作或计算,确保每步推理均具有可执行性与明确、可验证的输出;
- Observation(观察):代码执行后的环境反馈,包含具体结果和状态信息,为后续推理步骤提供实时上下文支持。
这一设计充分模拟了人类在解决复杂问题时"思考→行动→观察→再思考"的思维闭环,保障了推理流程的透明性和过程的可复现性。
以下是一个典型的轨迹示例,展示教师模型如何根据题意动态拆解问题、生成工具调用代码,并根据代码执行的反馈调整后续步骤:
| Question | In how many ways can 6 girls and 2 boys sit in a row if the 2 boys sit next to each other? |
|---|---|
| Thought 1 (Teacher) | First, I need to treat the 2 boys as a single unit, which means I have 7 units to arrange. I will calculate the number of ways. |
| Code 1 (Teacher) | import math ways_wo_boys_together = math.factorial(7) print(ways_wo_boys_together ) |
| Observation 1 | 5040 |
| Thought 2 (Teacher) | The boys can switch places within their unit, I will multiply it by 2. |
| Code 2 (Teacher) | ways = ways_wo_boys_together * 2 print(ways) |
| Observation 2 | 10080 |
| Thought 3 (Teacher) | I will provide the true answer. |
| Code 3 (Teacher) | print("There are 10080 ways.") |
通过构建自动化的数据生成流水线,并结合分布式高性能计算资源,我们能够高效产出大规模、多样化的教师轨迹数据集。整个流程包括任务指令发起、教师模型推理执行、代码运行环境反馈采集以及轨迹结果的验证与筛选等步骤,形成闭环,从而保证数据生成的稳定性与可扩展性。
行为克隆训练
通过模仿教师模型的推理与执行轨迹,行为克隆训练使学生模型逐步学会如何将复杂问题拆解为有序的步骤,并能够基于上下文生成合理的推理思路和可执行代码,从而实现对任务的基本掌控。行为克隆训练采用标准的监督学习框架,其目标是最大化学生模型在训练轨迹数据上生成教师动作的概率。 
经过行为克隆阶段的训练,学生模型表现出以下能力提升:
-
多步逻辑拆解能力:模型能够基于问题描述合理分解步骤,以符合逻辑的自然语言思维指导问题求解;
-
准确代码生成:学生模型生成的代码在语法和功能上表现明显提升,确保行动步骤可执行且输出结果有效;
-
动态反馈适应:模型能够有效利用环境反馈调整推理状态,展现了一定程度的闭环推理能力。
该阶段的训练显著降低了后续训练的难度和复杂度。
教师纠错训练
在完成行为克隆训练后,学生模型已经具备了基本的多步推理与工具调用能力,但在面对未见任务场景时,仍然可能出现推理漏洞或执行错误。为了促进学生模型能力的动态自适应提升,本阶段旨在让学生模型在全新任务中主动进行"思考-执行-观察"的闭环推理,自主尝试解决问题,并结合教师模型的针对性纠错辅导,实现能力的精准匹配与持续优化。
具体而言,在任务环境中,学生模型接收问题输入后,按照 ReAct 范式生成一系列轨迹步骤,每一步均包含自然语言推理(Thought)、对应代码执行(Code)及环境反馈(Observation)。通过让学生模型真实地"自己动手"解题,主动与环境交互生成完整的推理轨迹,我们大大减少了传统行为克隆中由于"模仿分布漂移"带来的训练偏差,使训练数据更加贴近真实推理行为。
例如,针对题目"6个女孩和2个男孩排成一排,要求2个男孩相邻,有多少种排法?",学生模型的思考和执行可能出现如下情况:
| Question | In how many ways can 6 girls and 2 boys sit in a row if the 2 boys sit next to each other? |
|---|---|
| Thought 1 (Student) | First, I need to treat the 2 boys as a single unit, which means I have 7 units to arrange. I will calculate the number of ways. |
| Code 1 (Student) | import math ways_wo_boys_together = math.factorial(7) print(ways_wo_boys_together ) |
| Observation 1 | 5040 |
| Thought 2 (Student) | The boys are a single unit, the ways equal to ways_wo_boys_together |
| Code 2 (Student) | ways = ways_wo_boys_together print(ways) |
| Observation 2 | 5040 |
此处,学生模型在第二步未考虑男孩内部位置的交换,导致结果出现偏差。我们可以采用经过教师纠错和修正的完整轨迹,作为更贴合学生当前能力的训练样本。这样,模型既能学习关键错误的更正过程,又能避免在纯模仿训练中因错误轨迹未加控制而导致的误差快速累计与指数级扩散。技术实现上,本阶段训练时,模型以初始行为克隆阶段的权重为基础,利用教师修正后的轨迹作为训练输入,并沿用第一阶段的交叉熵监督损失。此举能够有效引导模型纠正其局部错误,持续提升推理与工具调用的准确性与鲁棒性。
实验效果评测
为验证面向 Interleaved Thinking 的蒸馏方法在真实 Agent 任务中的优势,我们在多类 Agent 基准任务上对蒸馏模型进行了评测与对比。具体包括以下任务和评测基准:
-
数学推理(需频繁调用 Python 工具):AIME2024、AIME2025、MATH500、OlymMath
- 指标:判断最终答案的正确性
-
事实 / 多跳问答(需搜索工具):HotpotQA、2WikiMultihopQA、MuSiQ、Bamboogle
- 指标:token-level F1
-
Deep Search:GAIA、WebWalker、HLE、xBench
- 指标:使用 LLM-as-a-judge 判定正确性
在工具设置上,数学推理问题采用 Python 解释器,事实问答任务则使用在线搜索 API snippet(不包含浏览器功能),以降低工具调用成本和时延。
实验结果表明,面向 Interleaved Thinking 的蒸馏框架能够显著提升小模型在多步推理与工具调用任务中的稳定性和成功率。具体而言,经过上述模型蒸馏训练,在数学推理和事实 / 多跳问答任务上,7B 模型的效果已超过 32B 模型,并接近 72B 模型的表现;在 Deep Search 任务上,8B 模型的结果也与 72B 模型接近。
| Method | Mathematical Reasoning | Factual Reasoning | Avg. | ||||||
|---|---|---|---|---|---|---|---|---|---|
| AIME24 | AIME25 | MATH500 | OlymM | HQA | 2Wiki | MuSiQ | Bamb | ||
| Qwen2.5-72B-Instruct (大模型 直接调用工具) | 33.3 | 40.0 | 77.4 | 17.0 | 60.5 | 75.5 | 36.8 | 73.2 | 51.7 |
| Qwen2.5-32B-Instruct (大模型 直接调用工具) | 30.0 | 23.3 | 74.0 | 18.0 | 54.9 | 64.9 | 26.9 | 67.8 | 45.0 |
| Qwen2.5-7B-Instruct (AgentKD) | 26.7 | 16.7 | 73.4 | 18.5 | 59.5 | 72.8 | 29.2 | 69.8 | 45.8 |
| Qwen2.5-3B-Instruct (AgentKD) | 20.0 | 13.3 | 67.0 | 12.5 | 55.9 | 71.6 | 27.8 | 67.5 | 41.9 |
| Method | GAIA | HLE | XBench | WebWalker | Avg. | |||
|---|---|---|---|---|---|---|---|---|
| GAIA-1 | GAIA-2 | GAIA-3 | Avg. | |||||
| Qwen2.5-72B-Instruct (大模型直接调用工具) | 30.8 | 36.5 | 16.7 | 32.0 | 7.8 | 31.0 | 38.5 | 27.3 |
| Qwen3-8B (AgentKD) | 35.9 | 26.9 | 8.3 | 28.2 | 10.0 | 22.0 | 41.5 | 25.4 |
EasyDistill应用实践
在 EasyDistill 开源框架中,我们支持了上文提到的面向 Interleaved Thinking 的大模型Agent蒸馏训练。在此,我们给出具体的应用实践示例。
项目主体框架
EasyDistill 的 Agent 蒸馏模块主要基于 langgraph 框架,用于 Agent 推理轨迹生成,以及基于该轨迹的小型 Agent 模型蒸馏训练,其项目主体框架如下所示:
plain
.
├── configs/
│ └── agentkd_local.json # 主配置文件
├── data/
│ └── agent_demo.jsonl # 原始数据源
│ └── agent_demo_labeled.jsonl # 生成的推理轨迹
├── easydistill/agentkd
│ └── infer.py # agent推理轨迹生成
│ └── train.py # 蒸馏训练脚本
实践应用示例
-
首先,我们进行数据准备工作。数据集格式支持.jsonl,我们已经在 data/agent_demo.jsonl 中提供了示例数据。每条数据格式如下:
json{ "id": 0, "question": "TLDR", "solution": "TLDR", "true_answer": "TLDR" } -
接着,我们配置训练所需参数,configs/agentkd_local.json 包含了生成 Agent 轨迹和蒸馏训练所需的全部参数配置信息,如下所示:
json{ "job_type": "agentkd_local", "dataset": { "instruction_path": "data/agent_demo.jsonl", "labeled_path_raw": "data/agent_demo_labeled_raw.jsonl", "labeled_path": "data/agent_demo_labeled.json" }, "models": { "teacher": "Qwen/Qwen2.5-72B-Instruct", "student": "Qwen/Qwen2.5-7B-Instruct" }, "inference":{ ... }, "training": { ... } } -
使用 命令一键生成Agent轨迹数据和拉起训练任务
json
easydistill --config configs/agentkd_local.json
该命令会基于源数据 data/agent_demo.jsonl 生成 原始Agent 推理轨迹,并将其进行格式转换,最终生成直接可用于训练的轨迹数据(实际使用中可根据需要调整推理参数),即 data/agent_demo_labeled.json,示例数据格式如下:
json
[
{
"conversations": [
{
"from": "human",
"value": "A pool has 48 blue tiles and 32 red tiles. If the pool needs 100 tiles to be completed, how many more tiles are needed?"
},
{
"from": "gpt",
"value": "<first_thought>Calculate the total number of tiles currently in the pool, then subtract this number from the total number of tiles needed to find out how many more tiles are required.</first_thought>"
},
{
"from": "human",
"value": "Observation: None"
},
{
"from": "gpt",
"value": "<thought>I need to calculate the total number of tiles currently in the pool and then find out how many more tiles are needed to reach 100 tiles.</thought><code># Calculate the total number of tiles currently in the pool\nblue_tiles = 48\nred_tiles = 32\ntotal_tiles_current = blue_tiles + red_tiles\n\n# Calculate how many more tiles are needed\ntiles_needed = 100 - total_tiles_current\nprint(tiles_needed)</code>"
},
{
"from": "human",
"value": "Observation: 20"
},
{
"from": "gpt",
"value": "<thought>I have already calculated the number of tiles needed to complete the pool, which is 20. Now, I need to format this number as a final answer in LaTeX format.</thought><code>final_answer_print(r\"\boxed{20}\")</code>"
}
]
}
]
基于生成的 Agent 推理轨迹(data/agent_demo_labeled.json),该命令将自动进行最终的蒸馏训练。同样地,在实际使用中可根据需要修改 configs/agentkd_local.json 中的训练参数。
本文小结
本文围绕面向 Interleaved Thinking 的大模型 Agent 蒸馏,系统介绍了基于动态交错推理机制的训练数据构建与蒸馏算法设计方法。通过引入符合交错思维特点的多轮交互数据及专门的蒸馏策略,我们能够训练出轻量、高效且具备强推理能力的 Agent 模型,有效提升模型在复杂任务中的表现和响应速度。这不仅突破了传统 CoT 推理链在多轮交互场景下的局限,也为智能体系统的规模化应用奠定了坚实基础。展望未来,我们将基于 EasyDistill 框架进一步开源更多 Agent 蒸馏相关的算法与模型。欢迎大家加入我们,共同交流大模型蒸馏技术!
参考工作
EasyDistill 系列相关论文
- Wenrui Cai, Chengyu Wang, Junbing Yan, Jun Huang, Xiangzhong Fang. Reasoning with OmniThought: A Large CoT Dataset with Verbosity and Cognitive Difficulty Annotations. arXiv preprint
-
Yuanjie Lyu, Chengyu Wang, Jun Huang, Tong Xu. From Correction to Mastery: Reinforced Distillation of Large Language Model Agents. arXiv preprint
-
Chengyu Wang, Junbing Yan, Wenrui Cai, Yuanhao Yue, Jun Huang. EasyDistill: A Comprehensive Toolkit for Effective Knowledge Distillation of Large Language Models. EMNLP 2025
-
Wenrui Cai, Chengyu Wang, Junbing Yan, Jun Huang, Xiangzhong Fang. Thinking with DistilQwen: A Tale of Four Distilled Reasoning and Reward Model Series. EMNLP 2025
-
Wenrui Cai, Chengyu Wang, Junbing Yan, Jun Huang, Xiangzhong Fang. Enhancing Reasoning Abilities of Small LLMs with Cognitive Alignment. EMNLP 2025
-
Chengyu Wang, Junbing Yan, Yuanhao Yue, Jun Huang. DistilQwen2.5: Industrial Practices of Training Distilled Open Lightweight Language Models. ACL 2025
-
Yuanhao Yue, Chengyu Wang, Jun Huang, Peng Wang. Building a Family of Data Augmentation Models for Low-cost LLM Fine-tuning on the Cloud. COLING 2025
-
Yuanhao Yue, Chengyu Wang, Jun Huang, Peng Wang. Distilling Instruction-following Abilities of Large Language Models with Task-aware Curriculum Planning. EMNLP 2024