api

工具调用与结构化输出 API

直接答案tools 只让模型提出结构化调用,应用仍需鉴权、校验和执行;strict 结构化输出约束模型响应,但业务数据仍必须再次验证。

更新 · 审核信息

小白:模型提议,应用执行

工具调用不是把服务器权限交给模型。请求中的 tools 描述允许的函数和参数;模型返回工具调用后,应用先验证用户身份、租户权限、工具名和参数,再执行真实操作,并把工具结果送回下一轮。结构化输出则用 JSON Schema 约束最终答案形状,适合抽取、分类和表单生成;两者都不能替代业务规则。

最小工具调用请求

curl "$BASE_URL/v1/responses" \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-5.6-terra",
    "input": "查询订单 A123 的配送状态",
    "tools": [{
      "type": "function",
      "name": "get_order_status",
      "description": "读取当前用户有权查看的订单状态",
      "parameters": {
        "type": "object",
        "properties": {"order_id": {"type": "string"}},
        "required": ["order_id"],
        "additionalProperties": false
      },
      "strict": true
    }]
  }'

响应可能包含函数调用项、调用 ID 和 JSON 参数。应用只接受预注册工具,解析后再次按 schema 校验,并确认订单属于当前用户。工具结果回传必须关联原调用 ID;不要把模型生成的 ID、URL、命令或金额直接视为可信输入。

结构化输出与拒绝分支

对最终 JSON 使用受支持端点的 response_format 或文本格式 schema,并开启 strict。Schema 应设置明确类型、必填字段、枚举、长度和 additionalProperties: false。即使解析成功,也要验证日期范围、金额精度、实体存在和授权。模型可能拒绝请求、被内容策略拦截或达到输出上限;解析器必须把“拒绝、截断、协议错误、有效 JSON”分成不同分支。

{"type":"json_schema","name":"ticket","strict":true,"schema":{"type":"object","properties":{"category":{"type":"string","enum":["billing","technical"]},"summary":{"type":"string"}},"required":["category","summary"],"additionalProperties":false}}

安全执行和幂等

每个工具独立配置权限、超时、输入大小、网络出口和速率限制。数据库操作使用参数化查询;HTTP 工具使用目标允许列表并防 SSRF;代码执行置于最小权限沙箱。写操作要求应用幂等键与人工确认策略,模型重复相同调用 ID 时返回已存在结果,不能再次扣款或下单。工具输出也可能含提示注入,回传模型前应结构化、裁剪并标记为不可信数据。

错误、循环和可观测性

工具错误以结构化 {code,message,retryable} 返回,避免把堆栈和密钥交给模型。限制总步数、每工具次数、总 token、总费用和墙钟时间;检测相同参数循环。日志记录 trace、response ID、调用 ID、工具名、参数哈希、授权决策、耗时、状态和副作用 ID,对敏感参数脱敏。流式响应中函数参数可能分片,必须等完成事件后再解析和执行。

专家:Schema 演进与代理治理

工具和输出 schema 需要版本号;新增可选字段可向后兼容,删除或改语义要发布新版本并灰度。用录制的请求、工具结果和最终答案做回放评测,覆盖越权、重复执行、部分失败、超时、拒绝和模型升级。对高风险写操作采用策略引擎与人审,将“模型决定调用什么”和“系统允许执行什么”彻底分离;故障恢复以持久化状态机为准,而不是依赖模型记住之前发生的副作用。

适用场景

  • 让模型安全调用业务函数
  • 生成符合 JSON Schema 的结构化数据
  • 构建可恢复、可审计的多步代理循环

API 协议

  • /v1/responses
  • /v1/chat/completions

FAQ

模型返回工具调用后,工具会自动执行吗?

不会。模型只生成工具名和参数;应用必须鉴权、按 schema 校验、执行并把结果回传。禁止直接拼接到 shell、SQL 或 URL。

strict=true 就不需要业务校验了吗?

仍然需要。Schema 只能约束形状,不能证明库存、权限、金额、时间范围或业务状态正确。

工具失败后应该让模型无限重试吗?

不应该。设置总步数、单工具次数、截止时间和预算;确定性错误直接返回,临时错误才有限退避重试。

官方来源

  1. OpenAI Function Calling Guide Official
  2. OpenAI Structured Outputs Guide Official
  3. OpenAI Responses API Reference Official