Function Calling 技术总结
Function Calling 技术总结
1. 定义
Function Calling 是一种机制,允许开发者通过 JSON schema 向大语言模型(LLM)描述可用的外部工具(如 API)。当模型判断需要调用工具来回答用户问题时,它输出结构化的 tool_calls JSON 数据,指明要调用的函数名和参数。宿主程序解析并执行这个调用,将结果返回给模型,模型再生成最终答案。
2. 核心原理与解决的问题
- 本质: “两轮对话 + 中间执行”的闭环。第一轮模型决策并输出工具调用请求;中间代码执行工具;第二轮模型基于执行结果生成最终答案。
- 解决的问题:解决了此前让模型调用工具时,需要依赖不稳定、易出错的自然语言解析(if/else 判断)的问题,通过结构化输出实现了标准化和准确率的提升。
3. 职责分工(类比任务委托)
- 开发者(HR):定义工具,编写描述工具功能、参数等信息的 JSON Schema。
- LLM 模型(经理):理解工具描述,决策是否需要调用、调用哪个工具以及参数是什么,并输出结构化的调用请求(
tool_calls)。模型只做决策和生成文本,不亲自执行代码。 - 执行器/宿主代码(员工):解析模型的
tool_calls请求,真正执行对应的函数或 API 调用,并将结果返回。
4. 工具定义(JSON Schema)
Schema 是工具的“说明书”,关键信息包括:
- name:工具的唯一标识符。
- description:至关重要,模型完全依赖此描述来判断是否调用该工具。描述越清晰准确,模型决策越准。
- parameters:定义工具所需的参数及其类型、描述、约束(如枚举值、是否必需等)。
5. 完整调用流程
文章通过一个查询天气的代码示例,展示了从用户提问、携带工具定义进行首次模型调用、模型返回 tool_calls、代码执行函数、将结果以 role: "tool" 消息塞回对话历史,到最后模型生成最终自然语言答案的全过程。
6. 高级特性 - 并行工具调用
当用户问题需要多个工具协同解答时(例如,同时查询多个城市的天气),模型可以在一次响应中输出包含多个 tool_calls 的列表。宿主代码可以并行执行这些调用,然后将所有结果一并返回给模型进行综合,从而提升效率。
评论
暂无已展示的评论。
发表评论(匿名)