函数调用

函数有两个来源:请求里的 tools 数组声明客户端函数;控制台配置的托管函数由服务端注入,客户端不需要、也不能在请求里声明。

客户端函数

参数类型约束说明
tools array 三个接口 函数声明。Chat Completions 的 function.name 接受嵌套与扁平两种写法;Responses 支持 namespace 容器装一组函数;三个接口的函数名都不得以 __ 开头,该前缀保留给托管函数的传输层命名
tool_choice string 或 object Chat Completions auto、none、required,或点名一个函数
max_tool_calls integer 三个接口,≥ 1 单次请求最多执行的函数调用数;0 会把执行循环压成零次,静默改变行为,因此下限在边界强制
parallel_tool_calls boolean Chat Completions 与 Responses 是否允许并行函数调用

模型决定调用某个函数后:Chat Completions 在 choices[0].message.tool_calls 返回调用;Responses 返回 function_call 条目;Messages 返回 tool_use 内容块。客户端把结果回传(chat 的 tool 角色、responses 的 function_call_output 条目、messages 的 tool_result 块),模型继续作答。

托管函数

  • 托管函数在控制台定义,按模型授权:请求携带 model 后,网关把这个模型已授权的托管函数注入本次请求的工具表,函数的执行在服务端完成
  • 客户端请求里声明远程 MCP 服务器(messages 的 mcp_servers、responses 的 mcp 工具类型、messages 的 mcp_toolset 条目)会被明确拒绝,函数的定义权在服务端,不接受客户端把远端函数搬进请求

托管函数按调用次数计费,费率在控制台按函数配置,见计费规则。