7.0
深览指数
科技Bestblogs·tzolov··AI 生成

Spring AI 2.0 中的自纠正结构化输出

Spring AI 2.0 引入两种互补机制以提升从大语言模型(LLM)获取可靠结构化输出的能力:一是通过提供商 API(如 OpenAI、Anthropic)在请求端强制执行 JSON Schema 的 useProviderStructuredOutput(),减少 token 消耗并提高合规性;二是在响应端通过 validateSchema() 实现自纠正重试循环——将验证错误追加到提示词中,给模型具体反馈修正。两者可组合使用,同时支持自定义转换器处理宽松 JSON 与非 JSON 格式。本文适合正在使用 Spring AI 构建生产级 AI 特性的 Java 开发者阅读。原文 ↗

核心观点
  • Spring AI 2.0 通过提供商 API 强制执行与响应端自纠正验证两个互补开关,显著提升 LLM 结构化输出的可靠性。
  1. 01useProviderStructuredOutput() 将模式作为 API 字段而非提示词指令发送,支持的提供商包括 OpenAI、Anthropic、Gemini、Mistral、Ollama,可减少 token 消耗并提供更强的合规保证。
  2. 02validateSchema() 在 LLM 输出未通过模式验证时,将验证错误追加到提示词并重新发起调用(默认最多 3 次),模型能看到具体错误信息,非盲目重试。
  3. 03两个开关可同时启用,提供最大可靠性:提供商强制执行减少格式错误,自纠正验证捕获边缘案例(如 Ollama 推理怪癖)。
  4. 04支持自定义 StructuredOutputConverter 处理宽松 JSON(如去掉 markdown 代码块标记)或非 JSON 格式。泛型支持通过 ParameterizedTypeReference 实现。
  5. 05文章包含代码示例、图示与速查表,并明确指出已知限制:OpenAI 不接受顶级数组、部分 JSON Schema 支持有限。
  6. 06.entity(...) 通过 JSON Schema 生成和类型转换将 LLM 响应转换为 Java 记录,下游代码可将 AI 输出视为类型化的领域对象。
反方 / 局限
  • 作者承认使用时需注意限制:OpenAI 拒绝接收顶级数组(unwrapArrays 选项无效);非所有 JSON Schema 关键字都被提供商支持;部分 AI 模式可能无法与 validateSchema() 兼容。
4 分钟 · 4 卡片 · 12 资料
读原文 →

前置背景

技术原理

平行视角

延伸追问