Skip to content
🔗 分享本题
查看我的学习进度 →

结构化输出动漫知识图:JSON Mode 保证语法,Schema 约束结构,Function Calling 只提出工具调用,由应用执行

记忆点:JSON 管语法,Schema 管结构,Tool Call 管意图,真正执行仍在应用侧。

💡 答案要点

三者定位不同,渐进式可靠性提升:

特性JSON ModeStructured OutputsFunction Calling
本质约束输出为合法JSON约束JSON符合Schema让模型调用工具
可靠性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
Schema校验❌ 只保证JSON合法✅ 严格校验字段/类型✅ 严格校验参数
适用场景通用JSON输出严格业务结构工具/插件调用

JSON Mode:API层面的简单约束

python
# OpenAI JSON Mode
response = client.chat.completions.create(
    model="gpt-4o",
    response_format={"type": "json_object"},  # 保证输出合法JSON
    messages=[{"role": "system", "content": "始终输出JSON"}]
)
# 不保证字段名、类型、必填,只保证是JSON

Structured Outputs:严格Schema约束

python
from pydantic import BaseModel

class UserInfo(BaseModel):
    name: str
    age: int  # 类型严格
    email: str | None = None  # 可选字段

response = client.chat.completions.create(
    model="gpt-4o",
    response_format={
        "type": "json_object",
        "json_schema": UserInfo.model_json_schema()
    },
    messages=[...]
)
# 100%符合Schema,字段名/类型/必填都有保证

Function Calling:让模型执行动作,而非仅返回数据

python
tools = [{
    "type": "function",
    "function": {
        "name": "search_database",
        "description": "搜索产品数据库",
        "parameters": {
            "type": "object",
            "properties": {
                "product_id": {"type": "string"},
                "include_inventory": {"type": "boolean"}
            },
            "required": ["product_id"]
        }
    }
}]

response = client.chat.completions.create(
    model="gpt-4o",
    tools=tools,
    messages=[...]
)
# 模型输出 tool_calls 而非普通消息
# 可以继续处理:调用search_database → 把结果传回模型 → 生成最终回复

选型决策树:

只需要合法JSON?
  → JSON Mode(简单场景,快速实现)

需要严格字段/类型校验?
  → Structured Outputs(业务系统,支付/订单/风控)

需要模型执行动作(查DB/发邮件/调用API)?
  → Function Calling(Agent工具调用,RAG检索)

面试话术:

"三者层次不同:JSON Mode 通常只约束合法 JSON;Structured Outputs 进一步约束 Schema;Function Calling 表达模型建议调用哪个工具及参数,但真正执行动作的是应用。Schema 合法不等于业务安全,支付等高风险动作还必须做鉴权、金额/对象校验、幂等、审批和审计。"

📚 参考:OpenAI Structured Outputs 指南