工具使用与函数调用详解 | AI生成和翻译
让我们来剖析LLM API中工具使用与函数调用的核心区别:
1. 工具使用
- 概念:工具使用是指LLM通过外部能力进行功能扩展的广义概念。它不仅能生成文本,还能通过”使用工具”来获取信息、运行代码、查询数据库或生成图像。
- 实现方式:实践中,”工具”是指在LLM运行时注册的外部API或系统(如搜索API、Python执行环境或日历API)。
- LLM角色:模型自主决定何时调用工具、使用何种参数,并将执行结果无缝融入对话流程。
-
示例:
- 用户提问:”广州天气如何?”
- LLM:调用
weather工具并传入{city: "Guangzhou"}→ 获得28°C,晴 - LLM:回复:”当前28°C,天气晴朗”
可以将工具使用理解为LLM的全局协调框架——它不再局限于文本生成,而是成为连接外部系统的调度中枢。
2. 函数调用
- 概念:函数调用是某些LLM API(如OpenAI、Anthropic等)提供的结构化交互机制。开发者需预定义函数(包含名称、参数、模式描述),LLM将返回规范的JSON参数来触发调用。
- 实现方式:向模型提供描述函数的JSON Schema,模型输出可以是自然语言或结构化的函数调用对象。
- LLM角色:模型不再自行构造API调用,而是为预定义函数输出符合规范的参数结构。
-
示例:
-
预定义函数:
{ "name": "getWeather", "description": "获取当前天气", "parameters": { "type": "object", "properties": { "city": {"type": "string"} }, "required": ["city"] } } - 用户提问:”广州天气如何?”
- LLM:输出 →
{ "name": "getWeather", "arguments": {"city": "Guangzhou"} } - 您的系统执行该函数并返回结果
-
因此函数调用是实现工具使用的一种标准化、安全且模式驱动的具体方案。
3. 核心差异
-
范畴界定:
- 工具使用 = 通用概念(LLM与外部系统增强协作)
- 函数调用 = 面向结构化调用的标准化API设计
-
控制粒度:
- 工具使用更自由(由LLM自主决策和格式组织)
- 函数调用通过严格模式约束,降低歧义与幻觉风险
-
系统兼容:
- 工具使用可接入多样化外部系统(搜索、代码执行、图像生成)
- 函数调用更适用于需要精确参数结构的场景(如API调用或数据库查询)
4. 认知模型
- 函数调用是工具使用的子集
- 如果将工具使用视为战略框架,函数调用就是大多数API提供的标准化战术方案
是否需要通过并行工作流对比示例(如用户输入→LLM输出→执行过程)来更直观地展示两者的操作差异?