大模型格式化输出理论梳理

目录

一、什么是格式化输出?

大模型格式化输出(Structured Output)是指通过技术手段约束大语言模型(LLM),使其生成符合特定、预定义格式(如JSON、XML等)的响应,而非自由格式的文本。

二、用来干什么?

使得大模型的输出,能够被后续程序节点解析。

在实际生产中,下游代码需要的不是一段流畅的自然语言,而是可解析的、结构固定的数据。

三、 实现方式

方式一:提示词工程

这是最早期、最朴素的方式------在系统提示或用户提示中直接要求模型"以JSON格式返回"。

python 复制代码
"请以JSON格式返回结果,包含name、age、email三个字段。"

特点与局限

这种方式完全依赖模型的指令遵循能力,模型端在训练和推理阶段均未做任何特殊处理,输出结构并不稳定

方式二:Function Calling / Tool Use ------结构化的过渡方案

Function Calling(函数调用)最初是为"让模型调用外部工具"而设计的,但开发者很快发现它能有效产出结构化数据。

基本原理:

客户端在请求中定义工具的参数JSON Schema,大模型发起工具调用,入参就是格式化数据,工具处理完成得到最终格式化输出

API格式(OpenAI示例):

python 复制代码
from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[{"role": "user", "content": "介绍下阿凡达这个电影"}],
    tools=[{
        "type": "function",
        "function": {
            "name": "return",
            "parameters": {
                "type": "object",
                "properties": {
                    "date": {"type": "string"},
                    "name": {"type": "string"},
                    "desc": {"type": "string"}
                },
                "required": ["date","name"."desc"]
            }
        }
    }],
    tool_choice={"type": "function", "function": {"name": "return"}}
)
# 模型将电影相关信息,放到工具入参中,并返回

模型端的实现:

  1. 训练阶段指令微调,模型在训练阶段经过专门微调,学会了识别函数定义并输出结构化参数。
  2. 推理阶段约束解码,在推理阶段,生成token之前,系统会检查下一个token哪些是合法的,哪些是非法的,将非法的采样概率设为负无穷。能够保证JSON 语法正确(括号配对、无多余逗号)、字段名完全匹配 Schema、字段类型正确、枚举值不超范围、必填字段不缺失。

方式三:JSON Mode ------保证格式有效

JSON Mode是OpenAI在2023年11月发布的功能。通过response_format参数确保模型一定返回有效的JSON对象,但不保证JSON的结构与你的预期一致。

需要辅助提示词说明json结构和字段信息。

API格式(OpenAI示例):

python 复制代码
from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "system", "content": "你是一个数据分析助手"},
        {"role": "user", "content": "分析这段文本的情感"}
    ],
    response_format={"type": "json_object"}  # 启用JSON Mode
)

模型端的实现

  1. 训练阶段:模型经过针对性训练(如通过强化学习 + 模式验证奖励),提升生成有效JSON的能力
  2. 推理阶段:服务端在推理时强制约束输出为合法JSON,但不校验具体结构

其他兼容提供商:

Groq、Together AI、DeepSeek等通过兼容OpenAI API格式支持JSON Mode;Google Gemini通过generationConfig中的responseMimeType = "application/json"实现类似功能。

方式四:JSON Schema / Structured Outputs

同样是OpenAI在2024年8月发布的功能;

是Json mode 方式的升级和补全

API格式(OpenAI示例):

python 复制代码
from openai import OpenAI

client = OpenAI()
response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
        {"role": "user", "content": "创建一个无线游戏耳机的产品信息"}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "product_listing",
            "schema": {
                "type": "object",
                "properties": {
                    "name": {"type": "string"},
                    "brand": {"type": "string"},
                    "price": {"type": "number"},
                    "category": {"type": "string"},
                    "features": {
                        "type": "array",
                        "items": {"type": "string"}
                    }
                },
                "required": ["name", "brand", "price", "category"],
                "additionalProperties": False
            },
            "strict": True  # 启用严格模式,确保100%合规
        }
    }
)

模型端的实现

通过约束解码(Constrained Decoding) 技术,在推理层将你提供的JSON Schema编译为语法规则,在逐token生成时实时过滤------只允许生成符合Schema的token,从根本上杜绝"生成非法JSON"或"结构不符"的可能。

四、各方式对比

方式 保证有效JSON 保证符合Schema 模型端实现机制 可靠性
提示词工程 无特殊处理 ~36%
Function Calling 部分(仅参数层) 指令微调 ~86%
JSON Mode 训练(RL)+推理软约束 有效JSON 100%
Structured Outputs 推理硬约束(约束解码) 100%

五、目前知名厂商模型对各个方式的支持

厂商 JSON Mode (json_object) JSON Schema (json_schema) 实现方式与说明
OpenAI 通过 response_format 参数控制。json_schema + strict: true 启用约束解码,100% Schema 合规
阿里云通义千问 ❌(公开文档未明确) 设置 response_format: {"type": "json_object"},需在 system/user message 中包含 "JSON" 字样。思考模式模型暂不支持结构化输出
DeepSeek 设置 response_format: {"type": "json_object"},需在 prompt 中包含 "json" 字样并提供 JSON 格式样例。不支持 OpenAI 的 json_schema 结构化输出
智谱 GLM 支持 json_object 和 json_schema 两种类型。json_schema 模式下支持 strict 参数(true/false)控制是否严格遵循 Schema。GLM-4.7 及以上版本原生支持结构化输出