907 words
5 minutes
LLM 中的 Schema
2026-04-09

LLM 中的 Schema#

在大型语言模型中,Schema 是用于定义模型输出结构的一种机制,让模型返回的数据符合预定义的格式。

核心用途#

当你需要模型输出结构化数据(而非自由文本)时使用,例如:

  • 提取表单数据
  • API 响应格式化
  • 自动化工作流中的数据交换

典型例子:JSON Schema#

{
"name": "string",
"age": "number",
"email": "string"
}

主要实现方式#

方式说明
JSON Schema通过 schema 定义字段类型、格式、约束
Vercel AI SDKgenerateObject() 支持 schema 校验
Anthropic Claude支持 XML/tagged output 限制输出格式
OpenAIresponse_format: { type: "json_schema" }

Schema vs Prompt 约束:核心区别#

Prompt 约束:弱约束#

靠自然语言描述期望输出:

请用JSON格式返回用户信息,包含name, age, email三个字段。
age必须是数字,email必须是邮箱格式。

问题

  • 模型可能不遵循
  • 格式可能不稳定
  • 结构复杂时难以描述清楚
  • 无法保证类型严格性

Schema 约束:强约束#

通过代码层面的 schema 定义:

import { generateObject } from 'ai'
import { z } from 'zod'
const { object } = await generateObject({
model,
schema: z.object({
name: z.string(),
age: z.number(),
email: z.string().email()
}),
prompt: '提取用户信息'
})

优势

  • 类型校验 — 运行时检查,类型错误直接抛异常
  • 确定性 — 模型必须输出匹配 schema 的内容,否则报错
  • 可复用 — 可以在多个地方使用同一个 schema
  • 工具链集成 — 自动生成 TypeScript 类型、文档、测试

本质区别#

维度Prompt 约束Schema 约束
执行位置模型理解(可能出错)代码校验(100% 可靠)
失败处理依赖模型自觉不符合就失败
复杂结构难以描述清晰定义嵌套
类型安全自动类型推导

类比#

  • Prompt 约束 = 口头约定君子协定
  • Schema 约束 = 签合同 + 法律保护

Schema 如何实现强约束#

Schema 的”强约束”并非来自模型本身,而是来自双层机制

第一层:Prompt 层面的引导#

Schema 作为 prompt 的一部分告诉模型”你应该这样输出”:

You must respond in valid JSON matching this schema:
{"type": "object", "properties": {"name": {"type": "string"}}, ...}

这依赖模型的配合——模型尝试遵循 schema。

第二层:验证层面的强制#

这是关键——模型输出后,结果会被校验

LLM Output → JSON Parser → Schema Validator → 通过/拒绝

如果输出不合法,直接报错或重试。

真实执行流程(以 Vercel AI SDK 为例)#

const { object } = await generateObject({
model,
schema: z.object({
name: z.string(),
age: z.number()
}),
prompt: '提取用户信息'
})

实际过程:

  1. 发送请求 — prompt + schema 一起发给模型
  2. 模型生成 — 模型输出文本(尽力符合 schema)
  3. 解析 JSON — 把模型输出当作 JSON 解析
  4. Zod 校验 — 验证解析结果是否符合 schema 定义
  5. 返回结果 — 如果校验失败,抛异常或重试

为什么说”强约束”#

模型可能生成不合规的输出,但这不重要——因为:

不合规输出 → 解析失败 → 抛异常
→ 或触发重试 → 重新生成

Schema 的强大之处不在于”让模型不犯错”,而在于对错误输出零容忍

总结#

Schema = "尽力遵循" + "事后验证"
弱约束:只有第一层
强约束:两层都有,且第二层是决定性的
Prompt 约束Schema 约束
模型生成阶段尽力遵循尽力遵循
校验阶段强制校验,不合格就失败
结果保证依赖模型自觉100% 保证
LLM 中的 Schema
https://sgjki547.top/posts/llm_schema/
Author
SGJki
Published at
2026-04-09
License
CC BY-NC-SA 4.0