文章阐述了构建大模型Function Call功能的训练数据方法,强调不能简单手写对话数据,而需构建"数据沙盒"系统。通过定义标签体系和业务变量,系统化组合生成全场景数据,解决手写数据覆盖率低、格式易错、无法学习流程等问题。这种数据工程方法使模型能学习意图判断、信息追问、工具调用顺序和异常处理等能力,形成高质量、一致性强、可扩展的训练数据,显著提升模型Function Call成功率。

一、面试官第一个考点:为什么不能直接手写 SFT 数据?

很多同学构建 FC 数据的方式是:

user: 帮我找一个酒店
assistant: (工具调用)
tool: (工具返回)
assistant: (结果)

但这套方法做不了真正的工程项目,因为它有致命缺陷:

1)覆盖率太低

你写 10 条、100 条、甚至 500 条,都不可能覆盖:

  • 缺目的地 vs 完整信息
  • 缺日期 vs 缺预算
  • 问路 vs 规划
  • 酒店推荐 vs 酒店评价
  • 工具成功 vs 工具为空
  • 多轮追问 vs 单轮完成
  • 旅行相关 vs 非相关拒答

你永远写不全业务真实场景。

2)对话格式很容易错

比如:

  • “tool_calls” 字段格式不标准
  • arguments 没有 JSON encode
  • 多轮对话漏掉 role 切换
  • 工具响应和 tool_call_id 对不上
  • assistant 的行为和系统流程不匹配

SFT 一旦格式错一点点,训练就无意义。

3)模型永远学不到“流程”

功能型 Agent 的本质是流程,而不是内容。

流程是什么?

  • 触发条件
  • 需要补什么信息
  • 工具调用顺序
  • 工具依赖关系
  • 什么时候结束
  • 什么时候 fallback

手写数据容易漏掉逻辑,不可控。

因此必须使用一种方法:

构建一个“沙盒式数据生成系统”,把所有分支、变量、流程在数据层面定义清楚,然后一次性生成全量覆盖的数据集。

二、数据沙盒体系:为什么它能解决 Function Call 的所有难题?

我们以“旅行助手 Agent”为例。

它有 4 个核心工作流:

  1. 旅行规划(RAG + 天气)
  2. 问路导航(地图)
  3. 酒店查询(推荐 + 评价)
  4. 闲聊/拒答

沙盒体系要做到的事情只有一件:

把这四个路由中所有“变”的变量列出来,然后系统化地组合、覆盖,并生成完整的多轮对话 + 工具调用链。

1)首先定义标签体系(这是 Function Call 的灵魂)

下面是我们真实项目的数据标签体系:

标签类型 数量(训练集)
旅行规划(不需要反问) 320
旅行规划(需要反问) 40
问路(不需要反问) 80
问路(需要反问) 16
酒店查询(不需要反问) 160
酒店查询(需要反问) 32
旅行相关(闲聊) 80
拒答(非旅行) 80

你会发现:

每条数据都有明确标签,这就是可控性。

每类数据都有足够量,这就是覆盖性。

2)其次定义业务变量(沙盒中最关键的一步)

四大类变量:

① 用户画像(system prompt 部分)

每条数据都包含:

  • 用户名字(40 个池子)
  • 城市 ID(100 个真实城市)
  • 出发日期(一个日期范围内随机)
  • 起点坐标(真实坐标)

这些数据会注入 system:

{
  "role": "system",
  "content": "## 用户信息\n- 用户名: 吴师兄\n- 当前城市ID: 1012510801\n- 出发日期: 2025-12-02\n- 起点坐标: 100.479921,59.1237401"
}

② query 模板(语义扰动)

以“酒店查询”为例,有 30 种表达方式:

帮我找一家上海外滩附近 2000 左右的酒店
外滩景观好的酒店推荐
我周五去上海,住两晚,预算 2000,能推荐吗
在魔都哪里住方便一点?
…

让模型学会理解用户的多种自然语言表达。

③ 工具结果(真实/模拟)

每个工具都会给定不同的返回:

  • 酒店为空
  • 返回 1 家
  • 返回 3 家
  • 返回 10 家
  • 返回无效评论
  • 返回异常

不同工具结果会训练模型做不同决策。

④ 对话分支(追问 vs 不追问)

例如旅行规划:

  • 缺目的地 → 必须反问
  • 缺日期 → 必须反问
  • 信息完整 → 直接工具链

沙盒会自动生成完整多轮对话。

三、数据是如何从沙盒中“流”出来的?

我们真实项目的数据是两阶段生成的:

第一阶段:生成种子数据(generate_dataset.py)

伪代码如下:

class DatasetGenerator:
    def __init__(self):
        self.names = [...]
        self.cities = {...}
        self.hotel_queries = [...]
        self.travel_queries = [...]
        self.route_queries = [...]

    def generate_travel_plan_no_ask(self):
        return {
            "用户问题": random.choice(self.travel_queries),
            "用户名字": random.choice(self.names),
            "用户所处城市": city_id,
            "出发日期": date,
            "起点坐标": coord,
            "类型": "旅行规划-不需要反问",
            "是否追问": "否"
        }

每个标签都有独立函数,生成不同场景:

旅行规划(不追问)400 条  
旅行规划(追问)50 条  
问路(不追问)100 条 …

最终构成 1010 条种子数据。

第二阶段:转换为真实对话

这是 Function Call 项目的核心步骤。

训练数据格式必须符合 OpenAI 标准:
[
  {
    "role": "system",
    "content": "..."
  },
  {
    "role": "user",
    "content": "我要在武汉住酒店,预算200-300元"
  },
  {
    "role": "assistant",
    "tool_calls": [
      {
        "id": "call_9e45f8c7",
        "type": "function",
        "function": {
          "name": "recommend_hotels",
          "arguments": "{\"requirements\": \"武汉,预算200-300元\"}"
        }
      }
    ]
  },
  {
    "role": "tool",
    "content": "...工具返回...",
    "tool_call_id": "call_9e45f8c7"
  },
  {
    "role": "assistant",
    "content": "已根据您的预算,为您找到以下酒店…"
  }
]

生成过程包含:

  • 根据标签 → 选择工作流
  • 判断是否需要追问
  • 自动生成工具调用链
  • 自动生成工具返回内容
  • 自动生成最终自然语言回复

所有流程都由代码严格执行,不靠人工写对话。

四、模型最终学到了什么?

经过这一套数据工程,模型会学习到:

1)如何判断意图(Router 选择)

用户一句话:

“我想住两晚 2000 元内的酒店”

模型能自动:

  • 判断是“酒店查询”
  • 判断缺少入住/离店日期
  • 选择走“需要反问”分支

2)如何追问用户信息(多轮)

assistant: 请问您的入住和离店日期是什么时候?
user: 下周五入住,住两晚。

模型在追问与理解上下文之间作出正确选择。

3)如何按顺序调用工具

比如酒店查询:

recommend_hotels
→
get_hotel_reviews(对每一家)
→
final answer

或旅行规划:

search_travel_guide
→
get_weather_info
→
整合生成行程

4)如何处理工具为空的情况

沙盒中包含“工具返回空”场景,让模型学会:

抱歉,吴师兄,暂时没有找到符合您需求的酒店。

5)如何拒答非旅行问题

“如何学摄影?”
→ 抱歉,我是旅行助手,只能回答旅行相关问题。

五、面试官最爱问:你的数据是怎么保证覆盖率的?

下面的这段回答直接可用于面试,训练营学员亲测可用:

我首先将业务拆成 5 大工作流,每个工作流继续拆成“需要反问/不需要反问”两个分支,形成 10 类标签体系。

然后我定义所有业务变量(城市、时间、预算、景点、酒店、工具结果等),在沙盒中通过模板、多轮追问、工具返回扰动等方式组合生成全场景数据。

整个过程可控、可复现,并且保证每一个场景都有足够覆盖。

六、面试官更进一步:为什么你们的数据比普通数据更有效?

你可以这样说:

**因为我们不是“写数据”,而是在“定义业务规则”。**所有数据都是规则的组合结果,因此:

  • 质量高
  • 一致性强
  • 可拓展性强
  • 能反映真实业务流程
  • 能显著提升模型的 Function Call 成功率

这句话很加分。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线科技企业深耕十二载,见证过太多因技术卡位而跃迁的案例。那些率先拥抱 AI 的同事,早已在效率与薪资上形成代际优势,我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在大模型的学习中的很多困惑。我们整理出这套 AI 大模型突围资料包

  • ✅ 从零到一的 AI 学习路径图
  • ✅ 大模型调优实战手册(附医疗/金融等大厂真实案例)
  • ✅ 百度/阿里专家闭门录播课
  • ✅ 大模型当下最新行业报告
  • ✅ 真实大厂面试真题
  • ✅ 2025 最新岗位需求图谱

所有资料 ⚡️ ,朋友们如果有需要 《AI大模型入门+进阶学习资源包》下方扫码获取~
在这里插入图片描述

① 全套AI大模型应用开发视频教程

(包含提示工程、RAG、LangChain、Agent、模型微调与部署、DeepSeek等技术点)
在这里插入图片描述

② 大模型系统化学习路线

作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
在这里插入图片描述

③ 大模型学习书籍&文档

学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
在这里插入图片描述

④ AI大模型最新行业报告

2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
在这里插入图片描述

⑤ 大模型项目实战&配套源码

学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
在这里插入图片描述

⑥ 大模型大厂面试真题

面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余

图片

以上资料如何领取?

在这里插入图片描述

为什么大家都在学大模型?

最近科技巨头英特尔宣布裁员2万人,传统岗位不断缩减,但AI相关技术岗疯狂扩招,有3-5年经验,大厂薪资就能给到50K*20薪!

图片

不出1年,“有AI项目经验”将成为投递简历的门槛。

风口之下,与其像“温水煮青蛙”一样坐等被行业淘汰,不如先人一步,掌握AI大模型原理+应用技术+项目实操经验,“顺风”翻盘!
在这里插入图片描述
在这里插入图片描述

这些资料真的有用吗?

这份资料由我和鲁为民博士(北京清华大学学士和美国加州理工学院博士)共同整理,现任上海殷泊信息科技CEO,其创立的MoPaaS云平台获Forrester全球’强劲表现者’认证,服务航天科工、国家电网等1000+企业,以第一作者在IEEE Transactions发表论文50+篇,获NASA JPL火星探测系统强化学习专利等35项中美专利。本套AI大模型课程由清华大学-加州理工双料博士、吴文俊人工智能奖得主鲁为民教授领衔研发。

资料内容涵盖了从入门到进阶的各类视频教程和实战项目,无论你是小白还是有些技术基础的技术人员,这份资料都绝对能帮助你提升薪资待遇,转行大模型岗位。
在这里插入图片描述
在这里插入图片描述

以上全套大模型资料如何领取?

在这里插入图片描述

Logo

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

更多推荐