ChatGPT API 新版 function calling 功能怎么启用?

文章导读
ChatGPT API 的 function calling 功能不需要在控制台单独开关,而是通过在调用 Chat Completion 接口时构造特定的 tools 参数来启用。该功能仅适用于官方文档列出的支持工具调用的模型版本,使用旧版模型或不带参数请求无法触发。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

ChatGPT API 的 function calling 功能不需要在控制台单独开关,而是通过在调用 Chat Completion 接口时构造特定的 tools 参数来启用。该功能仅适用于官方文档列出的支持工具调用的模型版本,使用旧版模型或不带参数请求无法触发。

先说结论:启用功能依赖 API 请求体中的 tools 字段配置,而非账户设置。

  • 适合:需要将模型输出转化为结构化数据或触发外部 API 的开发场景
  • 先看:确认所选模型版本支持 tool calling 能力
  • 建议:使用 tools 参数替代已弃用的 functions 参数以获得更好兼容性

命令速用版

以下是一个标准的 HTTP 请求体 JSON 示例,包含启用 function calling 所需的最小配置:

{
  "model": "gpt-4o",
  "messages": [{"role": "user", "content": "北京天气怎么样?"}],
  "tools": [{
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "获取指定城市的天气",
      "parameters": {
        "type": "object",
        "properties": {
          "location": {"type": "string", "description": "城市名称"}
        },
        "required": ["location"]
      }
    }
  }]
}

为什么会这样

Function calling 本质是模型根据提供的 schema 生成符合格式的参数,而不是真正直接调用外部函数。

OpenAI 模型需要在提示词上下文中明确知道可用工具的名称、描述和参数结构,才能决定何时输出工具调用请求。API 层面通过 tools 参数传递这些定义,模型返回特定格式的 JSON 片段,开发者需要自行执行实际函数逻辑。

分步处理

第一步:选择支持工具调用的模型。

在 API 请求的 model 字段中指定较新的模型版本,例如 gpt-3.5-turbo-0125 或 gpt-4o 系列。旧版模型如 gpt-3.5-turbo-0301 不支持此功能。

第二步:定义 tools 参数结构。

ChatGPT API 新版 function calling 功能怎么启用?

在请求体中添加 tools 数组,每个元素包含 type 为 function 的对象。内部 function 对象需包含 name、description 和 parameters(遵循 JSON Schema 规范)。

第三步:发送请求并捕获响应。

调用 chat/completions 接口。如果模型决定调用工具,响应消息中会出现 tool_calls 字段,而不是普通的 content 文本。

第四步:执行函数并回传结果。

解析 tool_calls 中的参数,在本地或服务器执行对应逻辑,然后将结果以 role 为 tool 的消息格式再次发送给模型。

怎么验证是否生效

检查 API 响应对象中 choices[0].message.tool_calls 是否存在且不为空。

如果该字段存在,说明模型已识别工具调用意图并生成了参数。同时检查 finish_reason 字段,若为 tool_calls 则表示正常触发。若返回普通 content 文本且无 tool_calls,说明模型认为不需要调用工具或配置未被识别。

常见坑

1. 模型版本不支持:使用过旧的模型版本会导致 tools 参数被忽略,模型仅当作普通文本处理。

ChatGPT API 新版 function calling 功能怎么启用?

2. 参数命名错误:新版 API 推荐使用 tools 参数,旧版 functions 参数虽在某些版本兼容但已不再推荐,混用可能导致行为不一致。

3. JSON Schema 定义过于复杂:parameters 结构如果过于嵌套或描述不清,会降低模型调用准确率,建议保持参数定义简洁明确。

常见问题

哪些模型支持 function calling?

gpt-3.5-turbo-0613 及后续版本、gpt-4-0613 及后续版本、gpt-4o 系列均支持。

使用 function calling 会额外收费吗?

不会单独收费,但计入输入和输出 token 总量,按标准 API 价格计费。

可以一次性调用多个函数吗?

支持并行工具调用,模型可以在单次响应中返回多个 tool_calls 对象。

参考来源

OpenAI API Documentation - Function calling

https://platform.openai.com/docs/guides/function-calling