三者经常被混为一谈:JSON Mode 只保证「是 JSON」,不保证符合你的 schema;Structured Outputs(strict: true / response_format 带 JSON Schema)保证字段和类型对齐;函数调用是让模型「决定调哪个后端函数」。只要最终数据不要工具动作时,用结构化输出;要查库/下单/发消息时,用函数调用;两者也可叠加。无论哪种,模型给的值仍是不可信输入,业务校验不能省。

适用场景:信息抽取、打标分类、生成可直接渲染的 UI 数据、给下游系统喂参数。

structured-output json-schema response-format validation

操作步骤

  1. 先写 schema/Pydantic 模型:字段、类型、必填、枚举先定死。
  2. 能用 strict/结构化输出的模型就开 strict;不支持的模型退到 JSON Mode + 本地校验 + 一次修正重试。
  3. 校验分两层:格式校验(schema)+ 业务校验(数值范围、ID 是否存在、权限)。
代码示例
  from openai import OpenAI
  from pydantic import BaseModel
  client = OpenAI(base_url="https://tokenbuddy.cc/v1", api_key="{{API_KEY}}")
  class CalendarEvent(BaseModel):
      name: str
      date: str
      participants: list[str]
  # 具体方法名(parse / responses 等)随 SDK 与接口版本变化,以本站支持情况实测为准
接入本站 API:不是每个模型对结构化输出的支持程度都一样——上线前拿本站目标模型跑一组固定测试样本,统计 schema 通过率再定选型,不要听信「都支持」。

注意事项

  • ⚠️ 以为开了 JSON Mode 就不会出格式事故
  • ⚠️ schema 里塞太多可选字段,模型会偷懒全填空——必填和可选要想清楚
  • ⚠️ 把模型抽取的金额/日期不校验直接入账/下单

来源:https://docs.kanaries.net/articles/openai-function-calling