← blog AI Agent · 2026-04-09

LLM 中的 Schema

解释 LLM 中的 Schema 机制:对比 Prompt 弱约束与 Schema 强约束,说明「先引导、后校验」的双层机制如何保证结构化输出。

3 min read

在大型语言模型中,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% 保证

Sources

No external sources for this entry.

Related