面试题:大模型的FunctionCalling如何训练得到?

发布于 2025-5-8 06:32
浏览
0收藏

主要来说,Function Calling 的训练主要涉及数据构造、模型架构适配、多阶段微调等关键环节。

主要开源方案可以参考Llama3.1或者Qwen-Agent,基本上在Llama3的技术报告( https://arxiv.org/pdf/2407.21783) 中就可以知道FunctionCalling的实现路径。

以下是Llama3的技术报告里面如何用二阶段训练来提升Function Calling的准确性。

面试题:大模型的FunctionCalling如何训练得到?-AI.x社区

一、数据预处理

Llama3设计了一套多阶段数据筛选策略,通过质量评估与内容优化提升训练数据价值:

1. 主题分级体系

  • 构建基于Llama 3 8B的层级分类系统,首先将数据划分为"数学推理"等宏观类别;
  • 在顶层分类下建立细粒度子类别(如"几何与三角学"),形成树状知识结构。

2. 多维质量评估

  • 混合评估模型:结合奖励模型(RM)与Llama质量判别器

通用文本:准确性、指令合规性、表达规范(三级评分)

编程数据:错误识别度、需求匹配度(二级评分)

  • RM筛选:保留评分前25%的高质量样本
  • 智能质量检测:通过Llama 3进行多维度评估
  • 采用联合筛选机制,保留至少一个评估体系认证的高质量样本

3. 难度量化建模

  • 复杂性双因素评估:

意图密度分析(Instag):通过Llama 3 70B标记对话意图数量

难度分级系统:基于三阶难度评分框架(简易/中等/复杂)

  • 生成综合难度指标:意图数量 × 人工难度分级

4. 语义优化处理

  • 特征聚类:采用RoBERTa构建对话语义向量空间
  • 分级去重策略:

按质量×难度综合得分降序排列

动态相似度阈值过滤(余弦相似度<0.85)

贪婪选择算法保留最具代表性的样本

该方案通过质量-难度联合建模与语义空间优化,在保证数据多样性的前提下,显著提升训练数据的有效信息密度。

实证研究表明,该方法可使模型在复杂推理任务上的准确率提升17%,同时减少28%的训练收敛时间。

二、训练流程

构建数据集

主要是将函数名、参数类型、功能说明等以结构化文本输入模型(如JSON格式)。

[
  {"role": "user", "content": "查询北京明天天气"},
  {"role": "assistant", "tool_calls": [{"name": "get_weather", "arguments": {"location": "北京"}}]},
  {"role": "tool", "name": "get_weather", "content": "{\"temperature\": 22}"},
  {"role": "assistant", "content": "北京明天气温22℃"}
]

其中,tool这一层就是给大模型当做参数判断逻辑输入,模拟调度​​获取天气接口​​后返回最终结果。

二阶段训练

  • 预训练阶段:模型在通用语料库上进行基础语言建模训练,未涉及工具调用能力;
  • 后训练微调(Post-Training):

合成数据生成:通过预训练模型生成包含函数调用的对话数据,例如模拟用户提问和对应的工具调用参数;

人工标注迭代:标注员逐步标注复杂场景,例如从单轮工具调用过渡到多轮交互,并加入异常参数处理样本(如无效参数、多工具选择等)。

三、训练方法

  1. 监督微调(SFT)
  • 使用标注数据对模型进行指令微调,强化其对工具调用的格式理解和参数生成能力。(示例:模型输入包含工具定义的Prompt,输出需严格匹配函数名及参数格式。)
  1. 强化学习(RLHF/DPO)
  • 对工具调用的准确性和结果整合能力进行偏好排序,例如标注员对模型的工具调用决策打分,优化模型生成质量。
  1. 多任务学习

同时训练模型完成常规对话和工具调用任务,避免单一任务过拟合。 在报告中,Llama发现 PPO 没有 DPO 好,所以只用了 DPO,在preference data 中,有5.89%是和reasoning以及tool相关的。面试题:大模型的FunctionCalling如何训练得到?-AI.x社区

本文转载自​​沐白AI笔记​​,作者:杨沐白

收藏
回复
举报
回复
相关推荐