完整题目
请解释大模型中function calling功能是如何解析用户自然语言指令并映射到具体函数调用的技术原理
答案要点
- 理解Function Calling的两阶段流程(意图识别+参数抽取)
- 知道模型通过特殊token或JSON模式约束输出
- 了解schema定义和参数校验机制
- 能说明与普通生成任务的关键区别(结构化输出约束)
- 了解实际部署中的错误处理策略
Function Calling的核心是让模型学会"按格式说话",把自然语言翻译成可执行的结构化指令。技术原理分三层:
1. 训练阶段:注入工具使用能力
- 构造大量
<用户指令, 工具描述, 正确调用>的三元组数据 - 工具用JSON Schema描述(函数名、参数类型、必填字段)
- 模型学习输出固定格式的函数调用表示,通常是:
{"name": "get_weather", "arguments": {"city": "北京", "date": "明天"}}
2. 推理阶段:约束解码输出
- Schema约束:通过logits processor或grammar-based采样,强制输出合法JSON
- 特殊token引导:部分实现用
<function_call>等标记区分普通对话和工具调用 - 两阶段解析:先判断是否需要调用工具(分类),再抽取具体参数(生成/抽取)
3. 执行与反馈循环
- 系统解析模型输出 → 校验参数 → 执行真实函数 → 结果回传给模型
- 模型基于执行结果继续生成回复或进行多轮工具调用
:不是自由文本生成,而是,本质上把"选哪个工具、填什么参数"建模为条件概率最大化问题。