智能摘要
Function Calling 本质是 Next Token Prediction,模型经 SFT 与强化学习掌握自然语言至结构化 JSON 的切换模式,无独立决策模块。特殊 Token 作为开关触发外部系统执行 API 并回注结果,实现 Agent 落地。调用失败多源于工具描述模糊或训练数据覆盖不足,优化核心在于明确参数格式示例与调用边界,而非依赖模型魔法。
— 此摘要由AI生成仅供参考。
Function Calling 没有引入新的推理机制,底层与生成普通文本一致,均基于上下文的 next token prediction。模型通过训练学会在特定情况下将输出从自然语言切换为结构化 JSON 格式,而非存在独立的决策模块。关键在于模型通过大量样本学习输出模式,而非 “读懂”“判断” 或 “决定”。
分为监督微调(SFT)和强化学习两个阶段。SFT 阶段:训练数据包含大量工具调用完整对话链(系统提示工具信息→用户提问→模型输出结构化调用指令→工具返回结果→模型生成自然语言回复),模型从中学习三件事:何时切换输出模式(涉及实时信息 / 外部数据时输出调用指令,闲聊 / 常识问题输出普通文本)、如何写调用指令(JSON 格式、字段名、参数类型从数据模式中学得)、如何处理工具返回结果(将原始数据融入自然语言回复)。强化学习阶段:评估工具调用准确性、参数提取鲁棒性、边界情况处理,通过奖励信号优化调用质量,提升模型能力。
主流实现中,会在词表添加特殊 token(如 to call 开始 / 结束标签)作为开关,模型生成该 token 即意味着接下来输出结构化工具调用指令,直至结束标签。部分开源模型用普通文本标记,未添加新 token。核心作用是给外部系统提供确定性信号,区分指令与自然语言,避免歧义。
用户消息触发模型逐 token 生成回复,词表中包含普通文字 token 和特殊 to call token。多数情况普通文字 token 概率高,模型输出自然语言;当上下文强烈暗示需调用工具(如系统提示工具描述、用户问题需外部数据)时,to call token 概率飙升,模型输出该 token 及后续格式正确的 JSON。模型输出结束标签后暂停,外部程序(orchestrator/runtime/agent framework)监控到 to call 标记,提取 JSON 解析工具名和参数,调用真正 API,将结果包装为 tool response 格式回注模型上下文,模型继续生成最终回复。模型本身不执行函数,仅生成类似函数调用的文本,外部系统负责执行。
- 调用错工具:训练数据类似场景覆盖不足,或工具描述有歧义(功能描述相似导致模型无法区分)。2. 参数填错:工具描述未明确参数格式要求和示例。3. 该调用时未调用:预训练数据中类似问题直接回答模式惯性强,或系统提示信号不足。4. 不该调用时调用:工具描述触发条件宽泛,或训练阶段不该调用的负样本不足。失败成因可从模型侧(训练数据质量、优化策略)和使用侧(工具描述清晰度、系统提示引导、参数格式示例)分析。
核心机制一致(SFT + 强化学习 + 外部执行),细节差异包括:特殊 token 设计(OpenAI、Anthropic、开源模型使用不同标签,如 XML 风格标签、控制符、普通文本系列);工具描述注入方式(部分放 system prompt,部分通过专门 API 字段传入,注入上下文位置可能不同);并行调用支持(部分支持一次生成多个工具调用,部分仅支持一次调用一个);强制 / 禁止调用控制(API 通过采样阶段干预特定 token 概率,强制调用设 to call token 概率最高,禁止调用压至零)。
Function Calling 底层与普通文本生成一致,基于 next token prediction。通过 SFT 和强化学习训练,模型学会:什么上下文触发工具调用、如何输出调用指令、如何基于工具结果生成回复。推理时,模型在特定上下文输出特殊标记 token 触发格式切换,外部系统执行调用并回注结果。可能性取决于模型层(训练数据质量 / 覆盖度、强化学习优化策略)和使用层(工具描述清晰度、参数格式示例、系统提示引导)。开发优化重心在使用层(清晰描述、加格式示例、明确调用边界);微调模型优化重心在训练数据覆盖度。核心是理解机制无魔法,模型仅多学一类特殊输出模式,能准确判断问题出在 prompt 还是模型。
Function Calling 没有引入新的推理机制,底层与生成普通文本一致,均基于上下文的 next token prediction。模型通过训练学会在特定情况下将输出从自然语言切换为结构化 JSON 格式,而非存在独立的决策模块。关键在于模型通过大量样本学习输出模式,而非 “读懂”“判断” 或 “决定”。
分为监督微调(SFT)和强化学习两个阶段。SFT 阶段:训练数据包含大量工具调用完整对话链(系统提示工具信息→用户提问→模型输出结构化调用指令→工具返回结果→模型生成自然语言回复),模型从中学习三件事:何时切换输出模式(涉及实时信息 / 外部数据时输出调用指令,闲聊 / 常识问题输出普通文本)、如何写调用指令(JSON 格式、字段名、参数类型从数据模式中学得)、如何处理工具返回结果(将原始数据融入自然语言回复)。强化学习阶段:评估工具调用准确性、参数提取鲁棒性、边界情况处理,通过奖励信号优化调用质量,提升模型能力。
主流实现中,会在词表添加特殊 token(如 to call 开始 / 结束标签)作为开关,模型生成该 token 即意味着接下来输出结构化工具调用指令,直至结束标签。部分开源模型用普通文本标记,未添加新 token。核心作用是给外部系统提供确定性信号,区分指令与自然语言,避免歧义。
用户消息触发模型逐 token 生成回复,词表中包含普通文字 token 和特殊 to call token。多数情况普通文字 token 概率高,模型输出自然语言;当上下文强烈暗示需调用工具(如系统提示工具描述、用户问题需外部数据)时,to call token 概率飙升,模型输出该 token 及后续格式正确的 JSON。模型输出结束标签后暂停,外部程序(orchestrator/runtime/agent framework)监控到 to call 标记,提取 JSON 解析工具名和参数,调用真正 API,将结果包装为 tool response 格式回注模型上下文,模型继续生成最终回复。模型本身不执行函数,仅生成类似函数调用的文本,外部系统负责执行。
- 调用错工具:训练数据类似场景覆盖不足,或工具描述有歧义(功能描述相似导致模型无法区分)。2. 参数填错:工具描述未明确参数格式要求和示例。3. 该调用时未调用:预训练数据中类似问题直接回答模式惯性强,或系统提示信号不足。4. 不该调用时调用:工具描述触发条件宽泛,或训练阶段不该调用的负样本不足。失败成因可从模型侧(训练数据质量、优化策略)和使用侧(工具描述清晰度、系统提示引导、参数格式示例)分析。
核心机制一致(SFT + 强化学习 + 外部执行),细节差异包括:特殊 token 设计(OpenAI、Anthropic、开源模型使用不同标签,如 XML 风格标签、控制符、普通文本系列);工具描述注入方式(部分放 system prompt,部分通过专门 API 字段传入,注入上下文位置可能不同);并行调用支持(部分支持一次生成多个工具调用,部分仅支持一次调用一个);强制 / 禁止调用控制(API 通过采样阶段干预特定 token 概率,强制调用设 to call token 概率最高,禁止调用压至零)。
Function Calling 底层与普通文本生成一致,基于 next token prediction。通过 SFT 和强化学习训练,模型学会:什么上下文触发工具调用、如何输出调用指令、如何基于工具结果生成回复。推理时,模型在特定上下文输出特殊标记 token 触发格式切换,外部系统执行调用并回注结果。可能性取决于模型层(训练数据质量 / 覆盖度、强化学习优化策略)和使用层(工具描述清晰度、参数格式示例、系统提示引导)。开发优化重心在使用层(清晰描述、加格式示例、明确调用边界);微调模型优化重心在训练数据覆盖度。核心是理解机制无魔法,模型仅多学一类特殊输出模式,能准确判断问题出在 prompt 还是模型。
文章评论