当前位置: 首页 > news >正文

Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持

就在昨晚,Spring AI发了个比较重要的更新。由于最近OpenAI推出了结构化输出的功能,可确保 AI 生成的响应严格遵守预定义的 JSON 模式。此功能显着提高了人工智能生成内容在现实应用中的可靠性和可用性。Spring AI 紧随其后,现在也可以对OpenAI的结构化输出完美支持了。

下图展示了本次扩展的实现结构,如果对于当前实现还不够满意,需要扩展的可以根据此图来着手理解分析进行下一步扩展工作。

使用样例

通过Spring AI,开发者可以很方便的来构建针对 OpenAI 结构化输出的请求和解析:

String jsonSchema = """{"type": "object","properties": {"steps": {"type": "array","items": {"type": "object","properties": {"explanation": { "type": "string" },"output": { "type": "string" }},"required": ["explanation", "output"],"additionalProperties": false}},"final_answer": { "type": "string" }},"required": ["steps", "final_answer"],"additionalProperties": false}""";Prompt prompt = new Prompt("how can I solve 8x + 7 = -23",
OpenAiChatOptions.builder().withModel(ChatModel.GPT_4_O_MINI).withResponseFormat(new ResponseFormat(ResponseFormat.Type.JSON_SCHEMA, jsonSchema)).build());ChatResponse response = this.openAiChatModel.call(prompt);

通过 OpenAiChatOptions中指定ResponseFormat来让OpenAI返回JSON格式。

Spring AI还提供了BeanOutputConverter来实现将JSON出转换成Java Bean,比如下面这样:

record MathReasoning(@JsonProperty(required = true, value = "steps") Steps steps,@JsonProperty(required = true, value = "final_answer") String finalAnswer) {record Steps(@JsonProperty(required = true, value = "items") Items[] items) {record Items(@JsonProperty(required = true, value = "explanation") String explanation,@JsonProperty(required = true, value = "output") String output) {}}
}var outputConverter = new BeanOutputConverter<>(MathReasoning.class);var jsonSchema = outputConverter.getJsonSchema();Prompt prompt = new Prompt("how can I solve 8x + 7 = -23",
OpenAiChatOptions.builder().withModel(ChatModel.GPT_4_O_MINI).withResponseFormat(new ResponseFormat(ResponseFormat.Type.JSON_SCHEMA, jsonSchema)).build());ChatResponse response = this.openAiChatModel.call(prompt);
String content = response.getResult().getOutput().getContent();MathReasoning mathReasoning = outputConverter.convert(content);

如果你整合了Spring AI针对OpenAI的Spring Boot Starter模块,那么也可以通过下面的方式来自动配置默认的JSON返回格式:

spring.ai.openai.api-key=YOUR_API_KEY
spring.ai.openai.chat.options.model=gpt-4o-minispring.ai.openai.chat.options.response-format.type=JSON_SCHEMA
spring.ai.openai.chat.options.response-format.name=MySchemaName
spring.ai.openai.chat.options.response-format.schema={"type":"object","properties":{"steps":{"type":"array","items":{"type":"object","properties":{"explanation":{"type":"string"},"output":{"type":"string"}},"required":["explanation","output"],"additionalProperties":false}},"final_answer":{"type":"string"}},"required":["steps","final_answer"],"additionalProperties":false}
spring.ai.openai.chat.options.response-format.strict=true

今天的分享就到这里,感谢阅读!码字不易,点赞、关注、收藏支持一下!随便转载,标注下出处链接即可。

如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达!,欢迎收藏与转发支持!

欢迎关注我的公众号:程序猿DD。前沿技术早知道,弯道超车有希望!积累超车资本,从关注DD开始!

http://www.lryc.cn/news/424050.html

相关文章:

  • java.util.ConcurrentModificationException 并发修改异常
  • Flask数据库操作(第四阶段)
  • C语言问答进阶--5、基本表达式和基本语句
  • uniapp3.0实现图片上传公用组件上传uni-file-picker,uni.uploadFile
  • Unity游戏开发002
  • MySQL基础练习题38-每位教师所教授的科目种类的数量
  • haproxy 原理+实战
  • OSPF进阶
  • SuccBI+低代码文档中心 — 可视化分析(仪表板)(下)
  • 前端创作纪念日
  • 丰收季遇科技之光:北斗卫星导航引领现代农业新篇章
  • 解决windows7虚拟机安装不了vmtools问题
  • Microsoft VBA Excel VBA函数学习笔记——数据切分熟练度+1
  • uniapp获取swiper中子组件的内容高度
  • 基于计算机爱心小屋公益机构智慧管理(源码+论文+部署讲解等)
  • 详细学习PyQt5的样式表与界面美化
  • 遥控器android设备键值原理
  • 零基础也想学编程?Java零基础入门学习路线 + Java教程已准备好!
  • Avnet ZUBoard 1CG开发板上手—深度学习新选择
  • C/C++复习 day1
  • 再见Figma!!新的设计,代码协作神器!【送源码】
  • 快速拷贝复制工具软件@拷贝工具@多线程拷贝@robocopy
  • JavaScript 逆向爬取实战
  • Vue 项目中导入文件时如何默认找寻该文件夹下的 index.vue 文件
  • Idea2023.3.3 —— SourceTree与gitee关联
  • 一文HDMI (High-Definition Multimedia Interface)
  • 【HBZ分享】高并发下如何设计缓存来提升系统性能?
  • 【AI 绘画】 文生图图生图(基于diffusers)
  • 已解决HarmonyOS模拟器卡顿问题
  • C++ | 深入理解C++中的特殊类设计和单例模式(懒汉模式、饿汉模式)