基于本文回答

播面 播面

文图音视,全方位拆解八股文
0
评论

Tool Calling 与 Function Calling 有何区别?

知识点图片

简单来说,Tool Calling(工具调用)是 Function Calling(函数调用)的进化版和超集。

在 OpenAI 的 API 演进过程中,Function Calling 是最早推出的概念,而 Tool Calling 是后来推出的新标准。目前,OpenAI 官方强烈建议使用 Tool Calling,而将 Function Calling 视为“遗留(Legacy)”功能。

以下是两者的核心区别详解:

1. 概念范围与灵活性 (Scope)

  • Function Calling:
    • 单一性: 主要是指模型调用用户自定义的外部函数。
    • 局限: 它主要专注于“执行代码函数”这一件事。
  • Tool Calling:
    • 通用性: “工具”是一个更广泛的容器。目前,functiontool 的一种类型。
    • 扩展性: Tool Calling 不仅支持用户自定义的函数(Function),还支持 OpenAI 内置的工具,如 Code Interpreter(代码解释器)File Search(文件搜索/RAG)

2. 并行执行能力 (Parallelism) —— 这是最大的功能区别

  • Function Calling:
    • 单线程: 在一次对话轮次中,模型通常只能请求调用一个函数。
    • 例子: 如果你问“波士顿和旧金山的天气怎么样?”,旧版的 Function Calling 可能需要往返两次(先问波士顿,得到结果后再问旧金山)。
  • Tool Calling:
    • 多线程(并行): 模型可以在一次回复中同时请求调用多个函数。
    • 例子: 同样问“波士顿和旧金山的天气”,Tool Calling 可以一次性返回两个函数调用请求:get_weather(Boston)get_weather(San Francisco)。这大大减少了 API 的往返次数(Latency)。

3. API 结构 (Syntax)

在代码实现上,参数的名称和结构发生了变化:

  • Function Calling (旧版 API):

    • 参数名:functions
    • 结构:直接传入函数定义的列表。
    • 指定方式:function_call="auto" 或指定具体函数名。
  • Tool Calling (新版 API):

    • 参数名:tools
    • 结构:列表中的每个元素需要包含 type。目前通常是 type: "function",然后把原来的函数定义包裹在 function 字段里。
    • 指定方式:tool_choice="auto" 或指定具体工具。

代码对比示例:

旧版 (Function Calling):

json
{
  "functions": [
    {
      "name": "get_weather",
      "description": "Get the weather",
      "parameters": { ... }
    }
  ]
}

新版 (Tool Calling):

json
{
  "tools": [
    {
      "type": "function", // 明确指定类型
      "function": {
        "name": "get_weather",
        "description": "Get the weather",
        "parameters": { ... }
      }
    }
  ]
}

4. 总结对比表

特性 Function Calling (旧) Tool Calling (新)
状态 已弃用 (Deprecated/Legacy) 推荐标准 (Current Standard)
并行调用 不支持 (通常一次一个) 支持 (一次可调用多个)
支持类型 仅限自定义函数 自定义函数 + 代码解释器 + 文件搜索
API 参数 functions, function_call tools, tool_choice
ID 管理 较简单 每个 Tool Call 都有唯一的 tool_call_id,用于精确匹配结果

结论

如果你正在开发新的 AI 应用:请直接使用 Tool Calling。

它不仅包含了 Function Calling 的所有功能,还解决了并行调用的问题,并且是未来接入更多内置 AI 能力(如联网搜索、绘图等)的标准接口。

00:00
00:00