What is 结构化输出?
语言模型以特定的、机器可解析的格式(如 JSON、XML 或 YAML)生成符合预定义 schema 的响应的能力。
Definition
结构化输出是指语言模型生成符合特定格式和 schema 的响应的能力,产生机器可解析的数据而非自由格式的文本。最常见的格式是 JSON,模型输出一个包含特定字段、类型和值的有效 JSON 对象,如 schema 所定义。这种能力对于将 LLM 集成到软件系统中至关重要,因为下游代码需要以编程方式解析和处理模型的输出。
结构化输出可以通过多种方法实现。基于提示的方法指示模型以特定格式输出并期望模型遵从——简单但不可靠。受约束解码方法修改生成过程以强制执行结构有效性——在每个 token 位置,模型只能从维持有效结构的 token 中选择。基于 schema 的方法(如 OpenAI 的 Structured Outputs)将训练与受约束解码相结合,保证输出符合提供的 JSON schema。
结构化输出的可靠性对于生产应用至关重要。一个 95% 的时间生成有效 JSON 的模型意味着每 20 个请求中就有 1 个会出错——对生产系统来说不可接受。受约束解码通过使模型不可能生成结构无效的输出来完全消除这种失败模式。然而,结构有效性并不保证语义正确性——模型仍然可以在格式正确的字段中放入错误的值。
Why It Matters
大多数生产 LLM 应用需要结构化输出。实体提取、分类、数据转换、API 集成和工具调用都需要模型以代码可以可靠解析的特定格式产生输出。没有结构化输出,每个 LLM 集成都需要脆弱的基于正则表达式的自由文本响应解析,当模型稍微改变响应格式时就会失效。
结构化输出还为 LLM 应用提供了类型安全。通过使用 JSON Schema 或 Pydantic 模型定义输出 schema,开发者可以在类型层面验证模型输出,在 AI 系统和应用逻辑的边界处捕获错误。这使得 LLM 驱动的系统更加稳健且易于调试。
How It Works
受约束解码——最可靠的方法——通过修改生成过程中的 token 采样过程来工作。一个有限状态机或解析自动机跟踪当前的结构状态(例如,「在 JSON 对象内部,期望一个键名」)。在每个生成步骤中,自动机确定在当前状态下哪些 token 在结构上是有效的,并在采样前屏蔽所有其他 token。这保证了每个生成的 token 都保持结构有效性。
对于 JSON schema 合规性,系统将 JSON schema 编译为一组结构约束。必填字段必须出现,字段值必须匹配其指定类型(string、number、boolean、enum),额外字段可能 被禁止。受约束解码器在整个生成过程中强制执行这些约束,使模型不可能产生违反 schema 的输出。Outlines 和 Instructor 等库为开源模型实现了这种方法。
Example Use Case
一个文档处理管道使用 LLM 将发票数据提取为结构化格式:{vendor: string, amount: number, date: string, line_items: [{description: string, quantity: number, price: number}]}。使用受约束解码配合此 JSON schema,模型为每张发票产生格式完美的 JSON,直接流入会计系统而无任何解析失败。在使用结构化输出之前,8% 的提取因 JSON 格式错误而失败,需要人工处理。
Key Takeaways
- 结构化输出使模型能够生成符合定义 schema 的机器可解析数据。
- 受约束解码通过在生成过程中屏蔽无效 token 来保证结构有效性。
- 结构有效性不保证语义正确性——值仍然可能是错误的。
- 可靠的结构化输出对于将 LLM 集成到软件系统中至关重要。
- JSON Schema 和 Pydantic 是定义预期输出结 构的常用方式。
How Ertas Helps
Ertas Studio 可以专门针对结构化输出任务微调模型,训练它们持续产生 JSON 和其他结构化格式。在 Ertas Data Suite 中准备的训练数据可以包含符合 schema 的示例,教会模型特定领域的输出结构。
Related Resources
Ship AI that runs on your users' devices.
Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.