随着大语言模型的能力提升,智能体(Agent)已成为自动化任务和复杂流程管理的核心工具。传统推理方式已难满足多轮决策、工具调用和高效自我修复等需求。在人工智能平台PAI中,本文介绍以ReAct轨迹为基础的数据构造与模型蒸馏方案,通过结构化任务和持续挖掘高难度样本,显著提升小模型的Agent能力和实际落地效能。该方案已在Qwen3系列小模型上验证,助力PAI用户以更低成本快速训练和部署高性能Agent模型。

基于 Qwen3 系列底座,PAI 团队推出一套面向 Agent 训练的开源成果,通过数据飞轮,将真实任务与合成任务结合,并从失败样本中持续挖掘并不断合成新的难样本,推动模型能力持续迭代。更多技术细节请点击:智能体时代的数据飞轮:Agentic小模型的迭代进化

核心步骤

Agent数据构造与模型蒸馏解决方案主要涉及如下步骤:

  1. 部署教师模型

    在PAI-Model Gallery选择能力更强的教师大模型并完成部署,获取可调用的推理服务地址(Endpoint/API)。后续数据合成会批量调用该服务生成高质量回复。

  2. 安装EasyDistill算法库

    在用于运行链路的开发/训练环境中安装EasyDistill及依赖,确保具备数据合成与蒸馏训练的统一工具集。

  3. 执行数据合成链路

    将准备好的种子数据作为输入,调用教师模型构建Agent训练数据。

  4. 执行模型蒸馏链路

    使用合成后的蒸馏数据对学生模型进行训练,让学生模型学习教师模型的Agent能力,产出模型并部署到实际应用场景。

  5. 模型在线部署
    使用PAI-EAS将训练后的模型部署至PAI-EAS,从而支持线上业务。

前提条件

在开始执行操作前,请确认您已完成以下准备工作:

部署教师模型

首先需选定一个能力足够强大的“大模型”作为教师(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任务合成

  1. 准备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)。

  2. 配置数据生成流程
    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: 设定三步任务生成流程所需的模型(如 ToolSetGenAgentPolicyTaskAgentFinalTaskAgent),分别负责工具集生成、策略轨迹生成及最终任务合成。

  • 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"
      }
    }
  }
}
  1. 启动数据合成流程

配置完成后,只需一行命令即可自动并行化生成大批高质量轨迹训练数据:

# 使用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/)。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐