00:00 / 29:50
连播
清屏
智能
倍速
点赞1248
00:00 / 01:57
连播
清屏
智能
倍速
点赞2578
00:00 / 05:39
连播
清屏
智能
倍速
点赞5094
00:00 / 04:56
连播
清屏
智能
倍速
点赞4
00:00 / 02:57
连播
清屏
智能
倍速
点赞79
00:00 / 42:48
连播
清屏
智能
倍速
点赞209
00:00 / 08:16
连播
清屏
智能
倍速
点赞4603
00:00 / 01:51
连播
清屏
智能
倍速
点赞2
00:00 / 11:02
连播
清屏
智能
倍速
点赞349
00:00 / 07:20
连播
清屏
智能
倍速
点赞13
00:00 / 10:50
连播
清屏
智能
倍速
点赞1436
00:00 / 04:53
连播
清屏
智能
倍速
点赞25
00:00 / 13:28
连播
清屏
智能
倍速
点赞1114
多轮Function Call的SFT数据,别再靠手写了 ⭐ S|Situation 刚开始做多轮Function Call的SFT数据时,我也以为多轮数据就是写几条顺畅的对话就够了。于是我手写了订酒店、查机票、做日程这些常见流程,看起来每一轮都很合理:用户补参数、模型追问、工具成功返回、最后收口。但很快问题就来了,一旦开始扩到几百条,分支开始漏、参数开始对不上、异常场景几乎没有覆盖。 ⭐ T|Task 复盘后我发现,真正的问题不是写得不够多,而是方向偏了:在用手写对话去模拟一个本质上是“状态机+分支覆盖”的系统。多轮Function Call的核心,不是对话好不好看,而是要把所有关键状态、分支选择、异常路径覆盖到位,并且保证每一轮的slot、参数、工具调用和状态迁移一致。如果只靠人工手写,结果一定是写到后面开始躲复杂分支。 ⭐ A|Action 第一步:先写清工具schema 把工具的必填参数、可选参数、错误码、返回结构先定死,让模型生成时有明确边界。 第二步:用规则引擎mock工具返回 显式定义几类返回:成功、空结果、失败(含参数缺失/超时/业务不可用等),并且能强制走某条分支,比如“参数缺失分支”。 第三步:把状态显式管理起来 对每一轮维护slot填充、用户意图变化(改时间/改偏好/反悔)、以及是否允许追问的约束。这样生成“关键参数缺失→追问→用户补充→调工具→失败→异常处理→再次调用”这种链路时,不会出现前后参数断裂。 让大模型在沙盒里自行走完整流程,用模板和约束驱动它生成用户话术、模型回应、何时调用工具、收到返回后如何处理与迁移状态。这样它会自然覆盖到那些人手写永远不想写的脏场景。 ⭐ R|Result 分支覆盖率明显上去,异常路径不再稀缺;同一套规则下换参数就能批量生成多种走法;更关键的是状态一致性稳定了,模型学到的是“该怎么走流程”,而不是“该怎么说漂亮话”。对于多轮Function Call的SFT,别把它当写对话,把它当流程仿真。手写不是累不累的问题,而是天然覆盖不了真实复杂度,也无法规模化保证一致性。要想模型在第 5、6、7 轮还走在正确轨道上,SFT数据就必须来自可控的sandbox+mock+规则驱动的完整流程模拟。 #llm #大模型 #面试题 #functioncall #sft
00:00 / 03:18
连播
清屏
智能
倍速
点赞40