函数调用
函数有两个来源:请求里的 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条目)会被明确拒绝,函数的定义权在服务端,不接受客户端把远端函数搬进请求
托管函数按调用次数计费,费率在控制台按函数配置,见计费规则。