《AI Agent原理与实战》2026版 第30课 Function Calling 微调(SFT)

本文收录于专栏 《AI Agent原理与实战》2026版 ------ 专栏系统覆盖 AI Agent 的记忆、工具、插件与实战,点击订阅可跟踪后续更新。
本课定位:进入研究向纵深:当 prompt 优化到头,模型本身能不能更强?本课讲工具调用微调------数据构造三路径、LoRA 全链路(国产基座 Qwen/GLM)、"何时微调 vs 不微调"决策表。动手派可略读,自建模型团队必修。
阶段 6|训练与评估 | 来源:课程自研补充

关键字: Function Calling微调、SFT监督微调、LoRA、训练数据构造、开源基座、工具调用训练、模型微调、Qwen GLM

本节目录

  • [30.1 为什么工具调用需要专门训练](#30.1 为什么工具调用需要专门训练)
  • [30.2 训练数据构造:三条来源路径](#30.2 训练数据构造:三条来源路径)
  • [30.3 微调流程:LoRA 全链路(Windows 优先)](#30.3 微调流程:LoRA 全链路(Windows 优先))
  • [30.4 何时微调 vs 不微调:决策表](#30.4 何时微调 vs 不微调:决策表)

概念讲解

30.1 为什么工具调用需要专门训练

第 7 课讲过工具调用的 API 层机制:把工具的 JSON Schema 告诉模型,模型输出结构化调用请求。这条链路对前沿大模型是"开箱可用"的,但对两个群体始终是短板:

  1. 小模型(7B 级开源基座):没见过足够多工具调用格式的训练数据,输出 JSON 合法率、参数类型遵从率、多轮编排能力都明显掉队。
  2. 前沿模型的多轮场景 :多步工具编排(先查 A,用 A 的结果再调 B,中途发现无关请求要克制不调用)至今远未解决。截至检索日(2026-10),Berkeley Function-Calling Leaderboard(BFCL)v3 的多轮多步类目,榜首 Kimi K2 Thinking 约 50.6%、GPT-5.2 约 43.8%(basedagi 汇总 2026-05-15 快照,非官方渠道,【待核实:以 gorilla.cs.berkeley.edu 官方榜为准】)------一半的多轮工具任务做不对,这就是微调仍有的空间。

SFT(Supervised Fine-Tuning,监督微调)的定位:把"调用格式 + 决策习惯"烧进模型参数,让 7B 小模型在特定工具集上逼近大模型的表现。

30.2 训练数据构造:三条来源路径

路径 成本 质量 代表工作
人工标注 极高(一条多轮对话 30-60 分钟) 最高 只适合做种子集与评测集
强模型蒸馏 中 中(继承幻觉,需过滤) 用 DeepSeek/GLM 等 API 模型批量生成再人工抽检
自动合成管线 低 中高(取决于验证闸门) APIGen(Salesforce)、ToolACE(华为诺亚)、Hammer

合成管线是公开生态的主流,三个标杆(两个国产):

  • APIGen (arXiv:2406.18518,Salesforce):从 3,673 个真实 API 端点 出发,管线三道闸门------查询生成、真实沙箱执行调用验证、答案核对------产出 6 万条可验证样本,即 xLAM 数据集(HuggingFace:Salesforce/xlam-function-calling-60k)。
  • ToolACE(arXiv:2409.00920,华为诺亚方舟实验室等,ICLR 2025):自进化合成出 26,507 个 API 池(真实 + 合成),对话由多 agent 交互生成,双层验证(规则检查 + 模型检查)把关,覆盖单调用、并行调用、依赖调用、不该调用四类情形。ToolACE-8B 在 BFCL 上达到与 GPT-4 系列相当的水平,工具相关性判别 89.17%。
  • Hammer (arXiv:2410.04587,国产端侧函数调用模型系列,【待核实:出品团队归属,一般资料称美团系,引用前请核对论文作者单位】):主攻"鲁棒性"------发现现有模型容易被工具命名误导(换个函数名就乱调),用增强数据集提升对无关函数的敏感度 + **函数遮蔽(function masking)**技术训练,小模型在跨 benchmark 泛化上拿到 SOTA。对端侧 agent(第 27 课场景)有直接参考价值。

数据格式的核心是 chat template + loss masking:工具 Schema 放在 system/工具区,assistant 的 tool_call 段是学习目标,只有 assistant 生成段计算 loss,prompt 侧(含工具定义)不算------否则模型会浪费容量去背工具文档。

数据配比经验:纯工具数据会把模型训成"见问题就想调工具"。ToolACE 论文实测,混入通用指令数据后模型通用基准几乎不降;工程上常用工具:通用 = 1:1 到 1:3,并保留 10-15% 的"不该调用"负样本(对应 BFCL 的 irrelevance 类目)。(配比区间是社区经验值,非某篇论文的精确结论)

30.3 微调流程:LoRA 全链路(Windows 优先)

LoRA(Low-Rank Adaptation)一句话:冻结基座权重,在旁路注入低秩矩阵 A×B 训练;ToolACE 在 LLaMA-3.1-8B 上作用于全部线性层,rank=16、alpha=32。

基座选谁------国内可下载、License 友好的 7B 级开放模型菜单:

基座 出品 特点 LLaMA-Factory 模板
Qwen2.5-7B-Instruct 阿里 工具调用生态最成熟,xLAM/Hammer 多以它为基座 qwen
GLM-4-9B-Chat 智谱 仓库 zai-org/glm-4-9b-chat(128K,原生 function calling)。注意:2025-04 的 0414 版官方说明未做 agent 能力增强(主打翻译批量),工具调用微调建议用原版 chat(2026-10 检索官方 README) glm4(待核实:以 LLaMA-Factory 当前 template 列表为准)
MiMo-7B-SFT 小米 为推理而生(见第 31 课),SFT 检查点已开源 无专用模板(【待核实:需自定义或等社区支持】)
Llama-3.1-8B-Instruct Meta ToolACE 原配基座,文献对照用 llama3
复制代码
选基座 → 数据转换(xLAM→sharegpt) → LoRA训练(单卡24GB, Windows可)
      → 合并权重 → 评测(BFCL 或自建集, before/after)

硬件现实:7-8B 模型 LoRA + bf16 + flash-attention,单张 24GB 消费级 GPU 可训(batch 1-2 + 梯度累积);全参数微调 8B 则需要 4×A100 80GB 级别。

Windows 环境说明(LLaMA-Factory 官方支持 Windows,本课未实测,命令为 2026-10 检索的官方文档口径):

powershell 复制代码
# Windows 10/11 + Miniconda + 单张 24GB NVIDIA 卡
conda create -n llamafactory python=3.10 -y
conda activate llamafactory
git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"
pip install bitsandbytes --upgrade        # Windows 轮子已官方支持
llamafactory-cli webui                    # 浏览器图形界面, 免命令行

Linux/macOS 流程相同(Linux 去掉 bitsandbytes 特殊处理,macOS 无 CUDA 只适合 0.5B-1.5B 教学)。

30.4 何时微调 vs 不微调:决策表

先穷尽便宜手段------按第 8 课 ACI 规范重写工具描述,收益经常大于微调;再加 few-shot 示例;再考虑换更强的 API 模型(DeepSeek/GLM/MiniMax 的 API 都原生支持 function calling,月费远低于一次训练)。都走不通,再看触发器:

微调触发器 说明
本地/边缘部署 延迟、成本、数据不出域(参见第 27 课)
私有 API 格式特殊 内部工具与公开生态差异大,大模型也没见过
格式稳定性 JSON 合法率必须接近 100%,prompt 压不住
高频重复模式 固定工具集 + 固定话术,可压缩进参数

不微调的信号:工具集频繁变更(每次换工具都要重训)、高质量数据积累不足 1000 条、没有评测集(没有 before/after 数字,微调收益无法证明)。隐性成本:基座每次升级要重训、评测集要持续维护、bad case 回归测试。

案例实战 A:数据转换 + LoRA 训练命令【未实测】

目标:把 xLAM 数据的一个子集转成 LLaMA-Factory 格式,对 Qwen2.5-7B-Instruct(或 GLM-4-9B)做工具调用 LoRA 微调。

步骤 1:数据转换(Windows/Linux 通用,纯标准库)

xLAM 每条含 query / answers / tools。这里只取单工具、单轮样本做入门(多轮依赖调用建议直接用 ToolACE 开源数据,其已按调用模式分好类):

python 复制代码
# conv_xlam2lf.py --- xLAM -> LLaMA-Factory sharegpt 格式【未实测】
import json, random

out = []
with open("xlam_60k.jsonl", encoding="utf-8") as f:  # HF datasets 导出的 jsonl
    for line in f:
        d = json.loads(line)
        if isinstance(d["tools"], str):
            d["tools"] = json.loads(d["tools"])
        if len(d["tools"]) != 1:                      # 入门: 只取单工具样本
            continue
        tool = d["tools"][0]
        out.append({
            "conversations": [
                {"from": "human", "value": d["query"]},
                {"from": "function_call",             # LLaMA-Factory 约定角色名
                 "value": json.dumps(
                     {"name": tool["name"],
                      "arguments": d["answers"][0]},
                     ensure_ascii=False)},
            ],
            "tools": json.dumps(d["tools"], ensure_ascii=False),
        })
random.seed(42); random.shuffle(out)
json.dump(out[:10000], open("fc_xlam.json", "w", encoding="utf-8"),
          ensure_ascii=False, indent=1)
print(f"写入 fc_xlam.json: {min(len(out),10000)} 条")

在 LLaMA-Factory 的 data/dataset_info.json 注册:

json 复制代码
"fc_xlam": {"file_name": "fc_xlam.json", "formatting": "sharegpt",
            "columns": {"messages": "conversations", "tools": "tools"}}

步骤 2:LoRA 训练(命令行或 WebUI 等价配置)

bash 复制代码
# LLaMA-Factory >= 0.9【未实测】
llamafactory-cli train \
  --model_name_or_path Qwen/Qwen2.5-7B-Instruct \
  --stage sft --do_train --template qwen \
  --dataset fc_xlam --dataset_dir data \
  --finetuning_type lora --lora_target all \
  --lora_rank 16 --lora_alpha 32 --lora_dropout 0.05 \
  --per_device_train_batch_size 1 --gradient_accumulation_steps 16 \
  --learning_rate 1.0e-4 --num_train_epochs 2 --cutoff_len 4096 \
  --bf16 --output_dir saves/qwen25-7b-fc-lora \
  --logging_steps 10 --save_steps 200

1 万条 × 2 epoch,24GB 卡预计 2-4 小时量级(视样本长度)。GLM-4-9B 只需换 --model_name_or_path zai-org/glm-4-9b-chat --template glm4(模板**【待核实】**,GLM-4-9B-0414 不推荐,见上表注)。训练后 llamafactory-cli export 合并 LoRA 权重。

复现环境说明 :本案例未在本课程环境实测(需 24GB GPU + 数小时训练)。命令为 LLaMA-Factory 与 xLAM 的公开接口;版本变更以两者官方文档为准。LoRA 微调不含 vLLM 依赖,Windows 原生可跑通;若后续要做 RL(第 31 课)再迁 WSL2。

案例实战 B:微调前先跑评测------一个"不该微调"的真实判定【已实测 2026-10】

决策表说"没有评测集就不要微调"。我们用第 32 课案例 B 的实测数据走一遍完整判定:

  • 对象:GLM-4.7-flash(Ollama 本地部署,19GB MoE),8 题工具调用评测 × 3 轮;
  • 实测结果:24/24 全 PASS,mean_reward=1.000(详见第 32 课);
  • 判定 :基线已满分 → 按 §四决策表,微调无必要------任何微调收益上限为零,还会引入通用能力回退的风险。正确动作是把工程精力投到工具描述与多轮编排(第 8/7 课);
  • 反例预告:同一套评测脚本换多轮依赖调用题(先查 A 用结果再调 B)后,前沿模型 pass^1 也会落到 50-60% 区间(BFCL 多轮榜佐证)------那时微调才有发挥空间。

这套"评测先行 → 数据说话 → 再决定训练"的流程,就是第 30-32 课三课的内在主线:SFT(本课)解决"见过",RL(第 31 课)解决"试错",评测(第 32 课)决定"值不值"。

小结

  • 工具调用微调的收益集中在:小模型、私有工具、格式稳定性、边缘部署四个场景;其余情况 prompt 优化优先------GLM-4.7-flash 基线满分的实测就是"不微调"的活例子。
  • 数据是主战场:APIGen(真实 API 沙箱验证)、ToolACE(华为诺亚,自进化合成+双层闸门)、Hammer(函数遮蔽抗误导)三条管线各有侧重。
  • loss masking 只算 assistant 段;工具:通用数据 1:1~1:3 配比,保留 10-15% 不该调用负样本(经验值)。
  • LoRA r=16/α=32 作用于全部线性层是公开可复用的设定;7B 单卡 24GB 可训;LLaMA-Factory Windows 原生支持,基座菜单优先国产(Qwen/GLM-4/MiMo)。
  • 微调前先建评测集,用 before/after 证明收益(参见第 32 课)。

交叉引用:工具调用机制参见第 7 课《工具调用模式》;工具描述优先于微调参见第 8 课《工具设计与 ACI 工程规范》;本地化部署动机参见第 27 课《部署、扩展与本地化运行》;SFT 之后的进阶路线参见第 31 课《Agentic RL》;评测脚本与实测数据参见第 32 课《Agent 评估与未来展望》。

扩展阅读

🌐 网络提示:github.com 需代理(clone 可走 ghproxy 加速、push 优先 SSH);huggingface.co 走镜像:export HF_ENDPOINT=https://hf-mirror.com;学术站 arxiv.org 境内多可直连(慢),其余评测/规范站需代理;pip 安装建议加清华镜像 -i https://pypi.tuna.tsinghua.edu.cn/simple。详见总纲附录《国内网络访问与国产适配指南》。


我的专栏

蛋白 / 抗体 / 多肽 / 核酸 分子模拟 / 动力学 / 对接 药物 / 设计 / 案例 AI / Agent / 大模型
开源蛋白结构预测 分子模拟基础 小分子药物设计案例 AI Agent系列
开源蛋白生成方法实践 分子动力学模拟-Amber 蛋白药物设计案例 化学大模型
开源多肽设计模型 分子动力学模拟-Gromacs 多肽药物设计案例 《AI Agent原理与实战》
开源多肽性质预测 分子动力学模拟-OpenMM 开源小分子生成设计 CADD中的机器学习模型
DNA/RNA药物设计 結合自由能 高效计算配置 《MCP 入门实战》
siRNA药物设计模型 UCSF DOCK系列 我胡师兄说药 《AI入门实战2026》
ASO药物设计模型 rDock系列 LeDock系列 gnina系列 《经典机器学习实战》
相关推荐
承渊政道3 天前
【大模型应用开发:基于GPT-4和ChatGPT】(GPT-4和ChatGPT的高级技巧)
chatgpt·模型微调·大模型应用开发·提示词优化
全栈探索者3 天前
一枚 162MB 的挂件,改写一只猫的画风:LoRA 实战——风格定制与人脸保持
人工智能·macos·lora·aigc·stablediffusion·comfyui
编码追梦人4 天前
ESP-IDF 实战:用 ESP32-C3 打造超低功耗 LoRa 无线传感器节点(深度睡眠 + OTA 全解析)
嵌入式硬件·lora·设计规范·esp-idf·esp32-c3·低功耗设计
XGeFei6 天前
【模型微调(理论篇)】Fine-turning
模型微调
GPU实战笔记7 天前
L40S 云端任务验证:从推理、微调到生成工作流的边界
人工智能·模型微调·gpu租用·nvidia l40s·gpu 云服务器
小易老师AI实战10 天前
大模型微调:全参微调、PEFT系列方法核心区别(重点LoRA)
lora·peft·prefix-tuning·全参微调·p-tuning·大模型微调·大模型面试
goehou10 天前
LoRA 微调实战 - 显存、标签掩码与合并部署的踩坑记录(附清单)
深度学习·lora·大模型·模型微调
是Yu欸11 天前
面向启元 Q1 的手势交互:12 组 MobileNetV3 微调实验与 Skill 接入方案
交互·模型微调·具身智能
我有酒两杯13 天前
从一条样本看懂 Kev:数据、模型、训练与推理
人工智能·深度学习·机器学习·lora·大语言模型