Ch15 Agent通信协议修订于 二〇二六年七月一日

结构化输出(深挖)

工具调用演变 讲了 Function Calling 让 AI 能调用外部工具。但有个问题一直没解决:AI 输出的格式不可靠。 你让它返回 JSON,有时候它多一个逗号,有时候少一个引号,程序就崩了。

2024 年 8 月,OpenAI 发布了 Structured Outputs,解决了这个问题 1。

问题:AI 的输出不可靠

之前想让 AI 输出结构化的数据,有两种办法:

JSON Mode(2023 年):告诉 AI “请输出 JSON 格式”。AI 会尽力——但有时候格式不对。{"name": "张三" 少了结尾的 },程序解析失败。

Function Calling(2023 年):让 AI 调用一个虚拟函数,函数的参数就是你想要的数据结构。AI 会把数据填进参数里。这个方法比 JSON Mode 可靠,但偶尔还是会出错——参数类型不对、漏了必填字段。

两种方法都依赖”提示词约束”——你只能靠文字描述告诉 AI 要什么格式。但文字描述是模糊的——“一个用户对象”和”一个带 name、age、email 的用户对象”——AI 理解可能不一致。

Structured Outputs:格式保证

Structured Outputs 的核心变化:格式不再是”文字描述”,而是”代码规则”。

你定义一个 JSON Schema(一种精确描述数据格式的规范),OpenAI 的 API 保证输出一定符合这个 Schema。不是”尽量”——是”保证”。

# 定义输出格式
schema = {
    "type": "json_schema",
    "json_schema": {
        "name": "user_info",
        "schema": {
            "type": "object",
            "properties": {
                "name": {"type": "string"},
                "age": {"type": "integer"},
                "email": {"type": "string"}
            },
            "required": ["name", "age", "email"]
        }
    }
}

response = client.chat.completions.create(
    model="gpt-5.5",  # 2026年推荐
    messages=[{"role": "user", "content": "张三,28岁,邮箱 zhangsan@example.com"}],
    response_format=schema  # 保证输出符合 schema
)
# 输出保证是合法的 JSON,字段类型保证正确

原理:OpenAI 在模型推理的最后一步,强制约束输出 token 的选择——只允许那些能让 JSON 保持合法的 token。如果下一个 token 会破坏 JSON 结构,就跳过它,选下一个合法的。这是”结构性保证”,不是”提示词请求”。

JSON Mode vs Function Calling vs Structured Outputs

JSON ModeFunction CallingStructured Outputs
推出时间20232023.062024.08
格式保证尽力较可靠100%保证
适用场景简单 JSON工具调用任何结构化输出
需要 Schema不需要函数签名需要

2025-2026 年,Function Calling 也在底层升级了——支持 Strict Mode,背后用的就是 Structured Outputs 的技术。你不需要特意选 Structured Outputs vs Function Calling——底层已经统一 2。

为什么重要

在 Structured Outputs 之前,生产系统用 AI 做数据提取一直有”格式风险”——10 次调用可能有 1 次格式错误。那 1 次可能让整个流程崩溃。

Structured Outputs 把格式风险降到了零。AI 可以可靠地输出:

  • 数据库记录
  • API 响应
  • 表单数据
  • 代码 AST

这直接催生了”AI 替代传统解析器”的范式——以前用正则表达式从网页提取数据,现在直接让 AI 输出结构化数据。

跟你有什么关系

你用 AI 工具时可能感受不到 Structured Outputs 的存在——但它在幕后让很多功能变得可靠:

  • AI 帮你整理表格数据(输出了一个合法的 CSV)
  • AI 帮你填写表单(每个字段格式都对)
  • AI 帮你做数据标注(输出的标签列表格式一致)

相关笔记

来源

注释

  1. OpenAI, “Introducing Structured Outputs”, 2024.08, https://openai.com/index/introducing-structured-outputs/ ↩

  2. Vellum, “Function Calling vs Structured Outputs”, 2024.09, https://www.vellum.ai/blog/when-should-i-use-function-calling-structured-outputs ↩

关联5

知识图谱

局部图谱 · 点节点跳转