OutputParser
、BeanOutputParser
、ListOutputParser
和 MapOutputParser
类已被弃用,取而代之的是新的 StructuredOutputConverter
、BeanOutputConverter
、ListOutputConverter
和 MapOutputConverter
实现。
后者是前者的直接替代品,提供相同的功能。更改的原因主要是命名,因为没有进行任何解析,同时也与 Spring org.springframework.core.convert.converter
包保持一致,带来了一些改进的功能。Structured Output Converters
帮助将 LLM 输出转换为结构化格式。
如下图所示,这种方法围绕 LLM 文本完成端点运行:
结构化输出转换器架构
StructuredOutputConverter
是尽最大努力将模型输出转换为结构化输出。
AI 模型不能保证按照请求返回结构化输出。
模型可能不理解提示或无法生成请求的结构化输出。
考虑实现验证机制以确保模型输出符合预期。StructuredOutputConverter
不用于 LLM 工具调用,因为此功能默认提供结构化输出。StructuredOutputConverter
接口允许您获取结构化输出,例如将输出映射到 Java 类或从基于文本的 AI 模型输出中获取值数组。
接口定义如下:
结构化输出 API
FormatProvider
为 AI 模型提供特定的格式指南,使其能够生成可以转换为指定目标类型 T
的文本输出。以下是此类格式指令的示例:
T
的实例。
AbstractConversionServiceOutputConverter
、AbstractMessageOutputConverter
、BeanOutputConverter
、MapOutputConverter
和 ListOutputConverter
实现:
结构化输出类层次结构
AbstractConversionServiceOutputConverter<T>
FormatProvider
实现。AbstractMessageOutputConverter<T>
FormatProvider
实现。BeanOutputConverter<T>
FormatProvider
实现,指导 AI 模型生成符合从指定 Java 类派生的 DRAFT_2020_12
、JSON Schema
的 JSON 响应。随后,它使用 ObjectMapper
将 JSON 输出反序列化为目标类的 Java 对象实例。MapOutputConverter
AbstractMessageOutputConverter
的功能,提供 FormatProvider
实现,指导 AI 模型生成符合 RFC8259 的 JSON 响应。此外,它还包含一个转换器实现,使用提供的 MessageConverter
将 JSON 负载转换为 java.util.Map<String, Object>
实例。ListOutputConverter
AbstractConversionServiceOutputConverter
并包含一个 FormatProvider
实现,专为逗号分隔的列表输出而设计。转换器实现使用提供的 ConversionService
将模型文本输出转换为 java.util.List
。BeanOutputConverter
生成演员的电影作品。
表示演员电影作品的目标记录:
ChatClient
API 应用 BeanOutputConverter 的方法:
ChatModel
API:
BeanOutputConverter
通过 @JsonPropertyOrder
注解支持在生成的 JSON 模式中进行自定义属性排序。
此注解允许您指定属性在模式中出现的确切顺序,无论它们在类或记录中的声明顺序如何。
例如,要确保 ActorsFilms
记录中的属性特定排序:
ParameterizedTypeReference
构造函数指定更复杂的目标类结构。
例如,要表示演员及其电影作品列表:
ChatModel
API:
MapOutputConverter
将模型输出转换为地图中的数字列表。
ChatModel
API:
ListOutputConverter
将模型输出转换为冰淇淋口味列表。
ChatModel API
:
OpenAI
JSON_OBJECT
,它保证模型生成的消息是有效的 JSON,或者选择 JSON_SCHEMA
并提供模式,保证模型将生成与您提供的模式匹配的响应(spring.ai.openai.chat.options.responseFormat
选项)。Azure OpenAI
spring.ai.azure.openai.chat.options.responseFormat
选项,指定模型必须输出的格式。设置为 { "type": "json_object" }
启用 JSON 模式,它保证模型生成的消息是有效的 JSON。Ollama
spring.ai.ollama.chat.options.format
选项来指定返回响应的格式。目前,唯一接受的值是 json
。Mistral AI
spring.ai.mistralai.chat.options.responseFormat
选项来指定返回响应的格式。设置为 { "type": "json_object" }
启用 JSON 模式,它保证模型生成的消息是有效的 JSON。