首页 > 其他分享 >Spring AI 更新:支持OpenAI的结构化输出,增强对JSON响应的支持

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

时间:2024-08-10 10:06:34浏览次数:11  
标签:AI Spring required JSON OpenAI type

就在昨晚,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-mini

spring.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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

标签:AI,Spring,required,JSON,OpenAI,type
From: https://www.cnblogs.com/didispace/p/18351981

相关文章

  • 【深入理解SpringCloud微服务】Ribbon源码解析
    【深入理解SpringCloud微服务】Ribbon源码解析Ribbon的原理RestTemplate中的拦截器链Ribbon的拦截器如何将拦截器放入到RestTemplate中Ribbon中的核心类LoadBalancerAutoConfigurationLoadBalancerInterceptorLoadBalancerClientILoadBalancerServerListIRuleIPingRibb......
  • chatgpt这么火,现在AI搜索引擎有哪些呢?
    常用国外的AI搜索引擎:ChatGPT(OpenAI):一个基于自然语言处理的AI助手,能够回答问题、生成文本内容并执行多种语言任务。GoogleBard:Google的AI驱动搜索引擎,集成了自然语言处理技术,旨在提供更加智能和个性化的搜索体验。MicrosoftBing(AI-Powered):微软将OpenAI的GPT模型集成到......
  • Got an error when I tried to use the Openai SDK in Node.js
    题意:尝试在Node.js中使用OpenAISDK时遇到错误问题背景:IamtryingtouseOpenaiapiwithnodejs,IfollowthetutorialandwanttoaddasimplegpttextcompletionfeautureusingtheopenaiSDK,butIgotanerrorsays:/node_modules/openai/core.js:44con......
  • 集成新的 AI 服务时需要考虑的问题
    让我们来谈论最近发生的几个恐怖故事。去年年底,一家雪佛兰经销商在其主页上部署了一个由大型语言模型(LLM)驱动的聊天机器人。该LLM经过雪佛兰汽车详细规格的训练,旨在仅回答有关雪佛兰汽车的问题。然而,用户很快就找到了绕过这些限制的方法:通过一系列越来越超出聊天机器......
  • 学习笔记-图灵完备、图灵机与Brainfuck
    前言本文是近日对图灵完备的学习所做的笔记,如有错误还请指正.本文包含以下内容:1.什么是图灵机?什么是图灵完备?什么是Brianfuck?2.对图灵机的简单模拟.3.使用Brianfuck模拟一个简单的图灵机.图灵机?AlanMathisonTuring在1937年提出了一个通用计算设备的猜想.他猜想所有......
  • OpenCV与AI深度学习 | 手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤 +
    本文来源公众号“OpenCV与AI深度学习”,仅用于学术分享,侵权删,干货满满。原文链接:手把手教你用Python和OpenCV搭建一个半自动标注工具(详细步骤+源码)导 读    本文将手把手教你用Python和OpenCV搭建一个半自动标注工具(包含详细步骤+源码)。背景介绍    样本标......
  • 基于Springboot的仿淘宝系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的仿淘宝系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单。......
  • Datawhale AI夏令营第四期 魔搭-AIGC方向 task01笔记
    DatawhaleAI夏令营第四期魔搭-AIGC方向task01笔记提示词提示词很重要,一般写法:主体描述,细节描述,修饰词,艺术风格,艺术家举个例子【promts】Beautifulandcutegirl,smiling,16yearsold,denimjacket,gradientbackground,softcolors,softlighting,cinematicedge......
  • NuminaMath 是如何荣膺首届 AIMO 进步奖的?
    今年,Numina和HuggingFace合作角逐AI数学奥林匹克(AIMathOlympiad,AIMO)的首届进步奖。此次比赛旨在对开放LLM进行微调,以使其能解决高中难度的国际数学奥林匹克训练题。我们很高兴向大家报告:我们的模型-NuminaMath7BTIR-在比赛中脱颖而出,成功解决了私有测试集5......
  • Kafka整合SpringBoot
    前文Kafka客户端详解引入依赖<properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target>......