基于PAI的Agent数据构造与模型蒸馏解决方案
本文介绍以ReAct轨迹为基础的数据构造与模型蒸馏方案,通过结构化任务和持续挖掘高难度样本,显著提升小模型的Agent能力和实际落地效能。
随着大语言模型的能力提升,智能体(Agent)已成为自动化任务和复杂流程管理的核心工具。传统推理方式已难满足多轮决策、工具调用和高效自我修复等需求。在人工智能平台PAI中,本文介绍以ReAct轨迹为基础的数据构造与模型蒸馏方案,通过结构化任务和持续挖掘高难度样本,显著提升小模型的Agent能力和实际落地效能。该方案已在Qwen3系列小模型上验证,助力PAI用户以更低成本快速训练和部署高性能Agent模型。
基于 Qwen3 系列底座,PAI 团队推出一套面向 Agent 训练的开源成果,通过数据飞轮,将真实任务与合成任务结合,并从失败样本中持续挖掘并不断合成新的难样本,推动模型能力持续迭代。更多技术细节请点击:智能体时代的数据飞轮:Agentic小模型的迭代进化
核心步骤
Agent数据构造与模型蒸馏解决方案主要涉及如下步骤:
-
部署教师模型
在PAI-Model Gallery选择能力更强的教师大模型并完成部署,获取可调用的推理服务地址(Endpoint/API)。后续数据合成会批量调用该服务生成高质量回复。
-
安装EasyDistill算法库
在用于运行链路的开发/训练环境中安装EasyDistill及依赖,确保具备数据合成与蒸馏训练的统一工具集。
-
执行数据合成链路
将准备好的种子数据作为输入,调用教师模型构建Agent训练数据。
-
执行模型蒸馏链路
使用合成后的蒸馏数据对学生模型进行训练,让学生模型学习教师模型的Agent能力,产出模型并部署到实际应用场景。
-
模型在线部署
使用PAI-EAS将训练后的模型部署至PAI-EAS,从而支持线上业务。
前提条件
在开始执行操作前,请确认您已完成以下准备工作:
-
已开通PAI(DSW、DLC、EAS)后付费,并创建默认工作空间,详情请参见开通PAI并创建默认工作空间。
-
已创建OSS存储空间(Bucket),用于存储训练数据和训练获得的模型文件。关于如何创建存储空间,详情请参见控制台创建存储空间。
部署教师模型
首先需选定一个能力足够强大的“大模型”作为教师(Teacher)。在PAI-Model Gallery平台上,已有如DeepSeek-V3.2、GLM-5等多款旗舰大模型可供选择部署。这类模型具备良好的Agent能力,能够高质量完成推理、拆分、工具调用等任务。一般建议参数量100B以上,这样生成的数据才具备足够的复杂性和泛化性。成功部署后,平台会为模型分配可调用的API/Endpoint,后续所有数据合成均依赖该服务。详见:PAI-Model Gallery一键部署DeepSeek-V3.2。
安装EasyDistill算法库
EasyDistill(GitHub地址)是阿里云PAI团队针对大模型蒸馏任务开源的算法套件。其核心优势是支持端到端的多范式蒸馏链路,极大简化了数据合成、链路搭建、实验复现的复杂度。在你的开发环境(如PAI-DSW Notebook)中,克隆EasyDistill代码库,并且安装其依赖:
git clone https://github.com/modelscope/easydistill
执行数据合成链路
在Agent能力训练中,高质量、多样化的任务轨迹数据是蒸馏小模型的关键抓手。EasyDistill提供了完善的虚拟Agent任务数据合成链路,可根据个性化persona设定,自动生成覆盖工具调用、多条决策轨迹、工具策略细化等多维训练样例。
阶段一:Agent任务合成
-
准备Persona种子文件
首先,需要以JSONL(每行一个JSON)格式准备persona 种子。例如:
{"id": "uuid1", "persona": "A passionate fan of Afrikaans music and die-hard supporter of Spoegwolf"} {"id": "uuid2", "persona": "An AI research scientist focused on natural language understanding."}每一行包含唯一id及persona描述。您可以根据业务需要,大量编写或采集不同风格/角色/场景的人设。在EasyDistill框架中,我们也提供了示例Persona种子文件(如
configs/persona_5K.jsonl)。 -
配置数据生成流程
EasyDistill的数据合成链路以配置文件(如configs/agentkd_data_gen.json)驱动。该配置决定了数据来源、目标输出路径、任务生成Agent所采用的大模型、API 接口等信息。主要参数如下:
-
paths.data_file: 指向刚才准备的 persona 输入JSONL路径。 -
logging.task_file_path: 指定生成的虚拟agent任务输出地址(如data/virtual_tool_use_tasks.jsonl)。 -
step_models: 设定三步任务生成流程所需的模型(如ToolSetGenAgent、PolicyTaskAgent、FinalTaskAgent),分别负责工具集生成、策略轨迹生成及最终任务合成。 -
api_configs: 配置各环节调用的教师模型API和密钥,比如将DeepSeek、GLM等大模型的API填入。 -
processing: 数据合成的参数,例如max_workers为任务并发数,max_tasks为最大生成的Agent任务数。
一个典型的配置片段示例如下:
{
"job_type": "agentkd_data_gen",
"inference": {
"step_models": {
"ToolSetGenAgent": {
"model_name": "deepseek-v3.2",
"max_tokens": 40960,
"temperature": 0.9
},
"PolicyTaskAgent": {
"model_name": "deepseek-v3.2",
"max_tokens": 40960,
"temperature": 0.9
},
"FinalTaskAgent": {
"model_name": "deepseek-v3.2",
"max_tokens": 40960,
"temperature": 0.9
}
},
"processing": {
"max_workers": 8,
"max_tasks": 100
},
"logging": {
"task_file_path": "data/virtual_tool_use_tasks.jsonl"
},
"paths": {
"data_file": "configs/persona_5K.jsonl"
},
"api_configs": {
"deepseek-v3.2": {
"api_base": "YOUR_DEEPSEEK_API_BASE",
"api_key_env": "YOUR_DEEPSEEK_API_KEY"
},
"default": {
"api_base": "http://localhost:8000/v1",
"api_key_env": "EMPTY"
}
}
}
}
- 启动数据合成流程
配置完成后,只需一行命令即可自动并行化生成大批高质量轨迹训练数据:
# 使用python拉起任务
python easydistill/agentkd/data_gen.py --config configs/agentkd_data_gen.json
# 使用easydistill拉起任务
easydistill --config configs/agentkd_data_gen.json
EasyDistill会自动读取persona种子,借助部署的LLM教师模型,产出经过persona增广的训练样本。输出的data/virtual_tool_use_tasks.jsonl即为后续链路的直接输入。其中,输出的data/virtual_tool_use_tasks.jsonl每条样本都描述合成的候选Agent任务集,以及对应的工具,示例如下:
{
"id": "62a623c3-55cc-48c0-a03b-250711d486e7",
"checked_tools": [
{
"name": "get_deployment_status",
"description": "Queries the current status of a service deployment by service name.",
"parameters": {
"type": "object",
"properties": {
"service_name": {
"type": "string",
"description": "Name of the deployed service (e.g., 'api-gateway')"
}
},
"required": [
"service_name"
]
},
"outputs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Current status: 'active', 'failed', 'rolled_back', 'not_found'"
},
"deployed_version": {
"type": "string",
"description": "Version tag currently deployed"
},
"last_updated": {
"type": "string",
"description": "Timestamp of last deployment (ISO format)"
}
}
}
},
...
],
"policy": "...",
"tasks_and_backgrounds": [
{
"task": "We need to respond to the recent outage in the API gateway by rolling back the deployment, fixing the issue, and notifying the leads.",
"tool_return_expected": {
"normal_path": [
{
"tool_name": "get_deployment_status",
"input": {
"service_name": "api-gateway"
},
"expected_output": {
"status": "active",
"deployed_version": "v2.5.1",
"last_updated": "2024-04-05T08:32:10Z"
}
},
...
],
"hack_path": []
},
"user_background": "I'm a project manager overseeing incident response for a critical production system...",
"hack_success_user_background": "",
"additional_parameters": "",
"test_policy": "This test case does not violate any policy",
"user_escape_strategy": "This test case does not violate any policy",
"evaluation": "The task is completed only if: ..."
},
...
]
}
阶段二:Agent任务求解
在完成虚拟 Agent 任务数据合成后,下一步需要让强大的教师大模型对这些任务进行求解,模拟完整的Agent问题求解过程。这一阶段不仅能进一步丰富训练样本的决策轨迹与工具交互信息,同时为后续的模型蒸馏提供更真实、更贴近应用场景的参考数据。
任务求解同样通过EasyDistill配置(如configs/agentkd_solve_task.json)实现,示例如下:
{
"job_type": "agentkd_solve_task",
"inference": {
"step_models": {
"SolveAgent": {
"model_name": "deepseek-v3.2",
"max_tokens": 10240,
"temperature": 0.9
},
"MockToolAgent": {
"model_name": "deepseek-v3.2",
"max_tokens": 10240,
"temperature": 0.9
}
},
"processing": {
"max_workers": 8,
"max_tasks": 100
},
"logging": {
"repeat_times": 1,
"already_processed_path": "logs/solved_tasks.jsonl",
"solve_path": "logs/solve_output/"
},
"paths": {
"data_file": "data/virtual_tool_use_tasks.jsonl"
},
"api_configs": {
"deepseek-v3.2": {
"api_base": "YOUR_DEEPSEEK_API_BASE",
"api_key_env": "YOUR_DEEPSEEK_API_KEY"
},
"default": {
"api_base": "http://localhost:8000/v1",
"api_key_env": "EMPTY"
}
}
}
}
配置就绪后,在命令行中执行:
# 使用python拉起任务
python easydistill/agentkd/solve_task.py --config configs/agentkd_solve_task.json
# 使用easydistill拉起任务
easydistill --config configs/agentkd_solve_task.json
EasyDistill会自动读取虚拟任务文件,依次分配至部署的大语言模型进行求解。每个任务处理完毕后,会在制定目录下输出包含完整推理过程和工具交互明细的结构化JSON文件(如logging.solve_path)。
阶段三:Rubrics评价与样本过滤
在合成的Agent任务被教师大模型求解后,实际用于学生模型训练的数据还需进一步质控。这一阶段利用Rubrics评价器,对生成的每条解决轨迹进行自动化打分和挑选,确保流入训练集的都是高质量、合规、可解释的Agent轨迹。这样可以有效剔除因模型误判、异常流程生成的不合理“噪声解”,保证教学数据干净、精准。
Rubrics筛选功能由EasyDistill 的agentkd_rubrics_filter实现,相应配置文件(如configs/agentkd_rubrics_filter.json)主要参数:
-
inference.paths.solution_path:需指定任务求解输出根目录(步骤二的输出),如data/solve_output/ -
dataset.labeled_path:筛选后符合训练入集标准数据的输出路径,例如data/filtered_train.jsonl -
inference.step_models.RubricsAgent:执行评分与过滤的评价大模型Agent配置
配置示例:
{
"job_type": "agentkd_rubrics_filter",
"dataset": {
"labeled_path": "data/tool_use_training_data.json"
},
"inference": {
"step_models": {
"RubricsAgent": {
"model_name": "deepseek-v3.2",
"max_tokens": 10240,
"temperature": 0.3,
"solution_top_k": 3
}
},
"processing": {
"max_workers": 8,
"max_tasks": null
},
"logging": {
"already_processed_path": "logs/rubrics_processed.jsonl"
},
"paths": {
"solution_path": "logs/solve_output/"
},
"api_configs": {
"deepseek-v3.2": {
"api_base": "YOUR_DEEPSEEK_API_BASE",
"api_key_env": "YOUR_DEEPSEEK_API_KEY"
},
"default": {
"api_base": "http://localhost:8000/v1",
"api_key_env": "EMPTY"
}
}
}
}
Rubrics评价流程同样支持一键启动:
# 使用python拉起任务
python easydistill/agentkd/rubrics.py --config configs/agentkd_rubrics_filter.json
# 使用easydistill拉起任务
easydistill --config configs/agentkd_rubrics_filter.json
系统会自动对每个任务的所有大模型求解逐一用Rubrics评价(如根据预设的成功标准、行动链路完整性、工具调用有效性等),得出PASS/FAIL判定,自动筛选表现最佳的PASS方案,并转换成训练数据格式。
经过该环节后,便形成了高度可靠、严格把控的Agent任务对话训练集,有力支撑后续的高质量蒸馏与小模型能力进化。其数据格式为:
[
{
"conversations": [
{ "from": "system", "value": "..." },
{ "from": "human", "value": "..." },
{ "from": "gpt", "value": "..." },
...
]
}
]
执行模型蒸馏链路
在经过严密的Rubrics评价与过滤后,高质量的Agent任务轨迹数据已准备就绪。最后一步是利用这些数据,对目标学生小模型进行监督微调(SFT, Supervised Fine-Tuning)式的蒸馏训练,让小模型充分学习到教师大模型在思考-行动-工具使用全流程上的能力,从而大幅提升实际Agent行为效能。
蒸馏训练同样通过配置文件(如 configs/agentkd_distill.json)控制,主要参数有:
-
dataset.labeled_path:由Rubrics阶段输出的合格训练集路径。 -
models.student:设定待蒸馏的学生模型(如某小型LLM权重)。 -
training:详细的训练超参数,包括输出目录(output_dir)、训练轮次(num_train_epochs)、学习率(learning_rate)、批次大小等。
配置片段典型示例:
{
"job_type": "agentkd_distill",
"dataset": {
"labeled_path": "data/tool_use_training_data.json"
},
"models": {
"student": "Qwen/Qwen2.5-7B-Instruct",
"trust_remote_code": true
},
"training": {
"output": {
"output_dir": "output/tool_use_sft",
"logging_steps": 10,
"save_steps": 500,
"overwrite_output_dir": true
},
"dataset": {
"cutoff_len": 8192,
"dataloader_num_workers": 4
},
"num_train_epochs": 3,
"per_device_train_batch_size": 1,
"gradient_accumulation_steps": 8,
"gradient_checkpointing": true,
"bf16": true,
"learning_rate": 1e-5,
"warmup_ratio": 0.1
}
}
准备好配置文件后,只需一条命令即可启动端到端学生模型蒸馏:
# 使用python拉起任务
python easydistill/agentkd/train.py --config configs/agentkd_distill.json
# 使用easydistill拉起任务
easydistill --config configs/agentkd_distill.json
此时,EasyDistill将自动读取过滤后的数据,按照SFT蒸馏范式进行模型训练。过程中,学生模型会最大程度拟合同类型大模型的ReAct推理链路、工具交互行为及策略分解等能力。值得说明的是,以上EasyDistill配置提供了标准的trl算法库训练脚本,您也可以自行选用其他框架进行模型训练,例如ms-swift、LlamaFactory等。
至此,一套完整的基于高质量Agent任务轨迹的训练方案就全部跑通。你可以将新模型直接在PAI-EAS等环境上线应用,持续赋能真实业务流程;或进一步拓展到更大规模的任务挖掘、高难度场景覆盖,为企业级Agent产品提供坚实模型基础。
模型在线部署
PAI-EAS提供了一站式大模型部署解决方案,可一键部署训练后的大模型模型,免去手动部署时复杂的环境配置、性能调优和成本管理。您可以参考PAI-EAS部署开源模型的解决方案完成部署(https://help.aliyun.com/zh/pai/user-guide/deploy-an-llm/)。
更多推荐


所有评论(0)