最近在牛客网上看了一些同学的秋招面经,发现一个非常典型的现象:
大家都知道 Function Call 很重要,但 90% 的人根本不知道它难在哪里,更不知道怎么系统性地把一个模型从“能调用工具”训练到“能连续完成一整个复杂任务”。
面试中如果问到:
“你做过 Function Call 微调吗?难点是什么?”
很多同学只能回答:
- “构造对话数据……”
- “定义 schema……”
- “训练一下就好了……”
这种回答,一看就没有做过真正的 Function Call 项目。
今天这一篇文章,我就带大家把核心逻辑彻底讲清楚,让你在面试中能从容地解释:
一个工业级 Function Call 微调项目,为什么难?难在哪里?我们是怎么解决这些问题的?
一、面试官最爱问的第一句话: Function Call 有什么难的?
不要空讲概念,一句话讲本质即可:
难点不在工具本身,而在“决策”,模型到底什么时候调用、调用哪个、调用顺序是什么、缺信息时要不要追问、多轮对话怎么推进。
举个最简单的例子。
同样一句话:
“帮我订一个上海外滩附近 2000 左右的酒店。”
一个优秀的 Agent 会这样处理:
- 识别意图:这是“酒店查询”
- 判断缺信息:缺日期 → 必须反问
- 追问用户:入住/离店时间是多少?
- 用户回答日期后,开始依次调用:
- recommend_hotels
- get_hotel_reviews(对每家推荐酒店调用)
- 综合酒店信息 + 评价,输出推荐结果
而未经训练的模型会:
- 不问日期,直接调用工具(导致工具报错)
- 或者只调用 recommend_hotels 就回复(导致信息残缺)
- 或者问一堆无关紧要的问题(破坏体验)
- 或者根本不调用工具,只是生成一大段废话(AI 常犯的错误)
Function Call 训练的目标不是让模型“会调用工具”,而是让它“根据业务逻辑正确调用工具”。
这才是难点。
二、为什么一定要做 Function Call 微调?
面试官大概率会补充提问:光靠 prompt 不够吗?
这个面试官特别喜欢问。
你可以从三个角度回答:
1)Prompt 本质是“规则”,无法覆盖分支逻辑
以「旅行规划」为例:
如果缺目的地 → 必须单独反问如果缺日期 → 必须反问如果攻略为空 → 不调用天气工具如果攻略有结果 → 按顺序调用攻略→天气
这些是业务流程,不是自然语言能稳定表达的。
LLM 的大脑并不是一个 if-else 程序,只靠 prompt 无法保证稳定执行分支逻辑。
2)Prompt 不能让模型学习“工具链式调用”
比如完整的链式调用:
query → recommend_hotels → get_hotel_reviews → final answer
prompt 只能告诉模型“请调用工具”, 但无法让模型真正理解工具之间的依赖关系。
3)Prompt 不能让模型学习“追问逻辑”与“信息补全流程”
比如:
“帮我查下希尔顿酒店怎么样?”
模型必须学会:
- 提取酒店名称
- 判断信息是否足够
- 调用 get_hotel_reviews
- 再整理评价输出
而 prompt 很难让模型稳定执行这套流程。
所以必须通过 Function Call 微调,让模型真正学会:
- 如何判断意图
- 什么时候反问
- 什么时候工具调用
- 工具调用顺序
- 工具调用依赖关系
- 工具失败后怎么优雅 fallback
- 多轮对话如何推进
- 如何合成最终回复
这些是意识层面的「技能」,不可能通过 prompt “死报菜名”实现。
三、Function Call 微调的项目到底长什么样?
这里用我们训练营的真实项目来讲:
我们会从 0 做一个旅行助手 Agent,支持:
- 旅行规划(RAG + 天气)
- 问路导航(地图工具)
- 酒店推荐(推荐 + 评价)
- 多轮追问
- 链式调用
- 分支逻辑
- 工具失败 fallback
- 工具结果整合生成自然语言
这个 Agent 的整体逻辑图是这样的:
识别意图 → 分发到 4 个工作流 → 多轮对话 → 工具链调用 → 合成智能回复
四个工作流分别是:
- 旅行规划
- 问路导航
- 酒店查询
- 闲聊/拒答
单看“旅行规划”,你会发现这是一个非常完整的链路:
用户:吴师兄大模型,国庆我想去西安玩 5 天,能帮我规划吗?→ 意图识别:旅行规划→ 信息判断:目的地 + 时间 + 天数齐全→ 按顺序调用 search_travel_guide get_weather_info→ 综合工具结果→ 输出一份完整的旅行计划
下面是其中一个真实工具调用的对话消息结构(简化版):
{ "role": "assistant","tool_calls": [ { "id": "call_xxx", "type": "function", "function": { "name": "search_travel_guide", "arguments": "{\"location\": \"西安\"}" } }, { "id": "call_yyy", "type": "function", "function": { "name": "get_weather_info", "arguments": "{\"location\": \"西安\", \"num_days\": 5}" } } ]}
工具返回后,再格式化成自然语言:
{ "role": "assistant", "content": "根据攻略和天气,为您定制了西安 5 日旅行计划..."}
SFT 微调的目标,就是让模型自动输出上面这样的消息结构。
四、真正的难点:如何构造一套能训练出效果的 SFT 数据?
这部分是 Function Call 项目的灵魂。
很多人失败就是因为:
- 数据太少
- 覆盖不全
- 不会构造多轮对话
- 工具调用不标准
- 工具返回不成体系
- 追问数据乱七八糟
- 意图分类不明确
我们训练营采用的是**“数据沙盒”体系**:
1)定义标签体系(五大工作流 × 分支)
例如:
| 类型 | 数量(训练集) |
|---|---|
| 旅行规划(不需要反问) | 320 |
| 旅行规划(需要反问) | 40 |
| 问路(不需要反问) | 80 |
| 问路(需要反问) | 16 |
| 酒店查询(不需要反问) | 160 |
| 酒店查询(需要反问) | 32 |
| 旅行闲聊 | 80 |
| 拒答 | 80 |
每一类都覆盖“必须会”的分支逻辑。
2)构造 100+ 城市沙盒
城市名称、城市坐标、地标系统、旅行景点库、酒店池、天气模拟……
目的就是让模型能够:
- 处理不同城市
- 不同场景
- 不同日期
- 不同的工具结果
3)构造 40 种随机用户画像
每条数据都附带:
- 用户名
- 城市 ID
- 起点坐标
- 出发日期范围
这些是系统消息必须包含的信息:
{ "role": "system", "content": "## 用户信息\n- 用户名: 吴师兄\n- 当前城市ID: 101010100\n- 出发日期: 2025-09-18\n- 起点坐标: 116.481028,39.989643"}
4)生成 30+ 种模板、多轮追问模板
例如同一个需求:
我想找个上海外滩附近的酒店帮我在魔都找住宿在外滩有什么 2000 左右的酒店
模型必须学会理解各种表达方式。
5)严格模拟工具调用链
例如酒店查询:
用户提问 → 判断是否缺城市 → 判断是否缺日期/预算 → recommend_hotels → get_hotel_reviews → final
必须全部出现。
五、Function Call 微调是怎么跑起来的?
整个项目是完全可复现的,一共 6 步:
① 启动 RAG & 工具模拟服务
python rag-system/rag_api.py
② 生成种子数据集
python generate_dataset.py
③ 转换成 OpenAI Function Call 标准格式
python convert_dataset_final_fixed.py
输出格式符合:
[ {"role": "system", "content": "..."}, {"role": "user", "content": "我要在武汉住酒店"}, {"role": "assistant", "tool_calls": [...]}, {"role": "tool", "content": "..."}, {"role": "assistant", "content": "为您找到了以下酒店..."}]
④ 运行训练脚本(Qwen3-0.6B)
sh run_train_last_assistant.sh
⑤ 检查 loss
python inspect_qwen_dataset.py
⑥ 推理测试
python test_qwen_infer.py
测试模型在真实 query 上能否:
- 正确识别意图
- 正确追问
- 正确按顺序工具调用
- 正确整合结果
- 正确输出最终答案
六、面试官可能继续追问:你做 Function Call 微调,最大的收获是什么?
你可以用这段回答:
最大的收获是我第一次理解“数据工程比模型工程更重要”。Function Call 的难点完全不是训练本身,而是业务逻辑的拆解、工具链的串联、多轮对话场景的覆盖、种子数据集的设计。
再补一句非常高级的:
Function Call 微调不是训练模型,而是训练“业务代理”。模型本质是在学习一套流程、一套规则、一套工作方式。
面试官会非常认可。
最后说一句
真正能拉开差距的,从来不是知识点,而是体系与思考方式。
在过去的几个月中,我们已经有超过 80 个 同学(战绩真实可查)反馈拿到了心仪的 offer ,包含腾讯、阿里、字节、华为、快手、智谱、月之暗面、minimax、小红书等各家大厂以及传统开发 / 0 基础转行的同学在短时间内拿到了各类大中小厂的 offer。
那么,如何系统的去学习大模型LLM?
作为一名深耕行业的资深大模型算法工程师,我经常会收到一些评论和私信,我是小白,学习大模型该从哪里入手呢?我自学没有方向怎么办?这个地方我不会啊。如果你也有类似的经历,一定要继续看下去!这些问题啊,也不是三言两语啊就能讲明白的。
所以我综合了大模型的所有知识点,给大家带来一套全网最全最细的大模型零基础教程。在做这套教程之前呢,我就曾放空大脑,以一个大模型小白的角度去重新解析它,采用基础知识和实战项目相结合的教学方式,历时3个月,终于完成了这样的课程,让你真正体会到什么是每一秒都在疯狂输出知识点。
由于篇幅有限,⚡️ 朋友们如果有需要全套 《2025全新制作的大模型全套资料》,扫码获取~

👉大模型学习指南+路线汇总👈
我们这套大模型资料呢,会从基础篇、进阶篇和项目实战篇等三大方面来讲解。


👉①.基础篇👈
基础篇里面包括了Python快速入门、AI开发环境搭建及提示词工程,带你学习大模型核心原理、prompt使用技巧、Transformer架构和预训练、SFT、RLHF等一些基础概念,用最易懂的方式带你入门大模型。

👉②.进阶篇👈
接下来是进阶篇,你将掌握RAG、Agent、Langchain、大模型微调和私有化部署,学习如何构建外挂知识库并和自己的企业相结合,学习如何使用langchain框架提高开发效率和代码质量、学习如何选择合适的基座模型并进行数据集的收集预处理以及具体的模型微调等等。

👉③.实战篇👈
实战篇会手把手带着大家练习企业级的落地项目(已脱敏),比如RAG医疗问答系统、Agent智能电商客服系统、数字人项目实战、教育行业智能助教等等,从而帮助大家更好的应对大模型时代的挑战。

👉④.福利篇👈
最后呢,会给大家一个小福利,课程视频中的所有素材,有搭建AI开发环境资料包,还有学习计划表,几十上百G素材、电子书和课件等等,只要你能想到的素材,我这里几乎都有。我已经全部上传到优快云,朋友们如果需要可以微信扫描下方优快云官方认证二维码免费领取【保证100%免费】

相信我,这套大模型系统教程将会是全网最齐全 最易懂的小白专用课!!
709

被折叠的 条评论
为什么被折叠?



