使用spring-ai快速对接ChatGpt

什么是spring-ai

Spring AI 是一个与 Spring 生态系统紧密集成的项目,旨在简化在基于 Spring 的应用程序中使用人工智能(AI)技术的过程。
简化集成:Spring AI 为开发者提供了方便的工具和接口,使得在 Spring 应用中集成 AI 功能变得更加容易,避免了手动处理底层细节的复杂性。

spring-ai具备什么功能

下面是spring官方文档介绍
Spring AI API 涵盖了广泛的功能。 每个主要功能都在其单独的部分中进行了详细说明。 为了提供概述,提供了以下关键功能:

  • 跨 AI 提供商的可移植 API,用于聊天、文本到图像和嵌入模型。支持同步和流 API 选项。还支持下拉以访问特定于模型的功能。我们支持来自OpenAI,Microsoft,Amazon,Google,Huggingface等的AI模型。
  • 跨 Vector Store 提供程序的可移植 API,包括新颖的类似 SQL 的元数据过滤器 API,该 API 也是可移植的。支持 8 个向量数据库。
  • 函数调用。Spring AI 可以轻松地让 AI 模型调用您的 POJO java.util.Function 对象。
  • AI 模型和矢量存储的 Spring Boot 自动配置和启动器。
  • 用于数据工程的 ETL 框架。这为将数据加载到向量数据库提供了基础,有助于实现检索增强生成模式,使您能够将数据引入 AI 模型以合并到其响应中。

** 总结来说。通过spring-ai的提供的api功能,可以方便的实现大模型相关的相关功能。例如对话,提示,文生图等功能。**
image.png

接入chatGpt

spring-ai官方提供了一个demo
ai-openai-helloworld
这个demo中,可以通过简单的配置实现会话功能,但是没有提供设置代理的功能,国内使用的话会请求超市,无法访问社区也有相关的反馈
image.png
因此我稍微改写了这个demo,提供了设置代理的功能。完善了相关配置

项目介绍

在ai-openai-helloworld基础上进行了一些修改,完善可一些配置文件,增加了代理的配置。国内可以通过配置代理访问openAI。
项目地址spring-ai-chatgpt
实现了3个demo
1、简单回话(全部生成完毕返回)

curl --location 'http://localhost:8080/ai/simple?message=Tell me a joke'

返回完整的生成回话
image.png
2、流式回话

curl --location 'http://localhost:8080/ai/stream?message=Tell me a joke'

image.png
3、消息的模板提示和对gpt相应的结果自动映射到java类

curl --location 'http://localhost:8080/ai/template?author=李白'

例如这个例子中我们像gpt提问请列出关于李白相关的诗词题目,spring-ai可以自动帮我们解析成java对象
image.png

启动项目

需要修改application.yml文件
填写正确的apiKey。与代理服务器的配置,即可启动项目

spring:ai:proxy:host: 127.0.0.1port: 1080openai:api-key: xxxxchat:options:model: gpt-3.5-turbo

接口说明

  /*** 对话接口,回话生成完毕返回* @param message* @return*/@GetMapping("/ai/simple")public Map<String, String> completion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {return Map.of("generation", chatClient.call(message));}/*** 流式对话接口** @param message* @return*/@GetMapping("/ai/stream")public SseEmitter streamCompletion(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {SseEmitter emitter = new SseEmitter(5L * 60 * 1000);Flux<String> stream = chatClient.stream(message);stream.subscribe(it -> {try {System.out.println(it);emitter.send(it, MediaType.TEXT_EVENT_STREAM);} catch (IOException e) {System.out.println("sse发送消息失败");emitter.completeWithError(e);}});stream.doOnError(e -> {System.out.println("流式对话发生异常");emitter.completeWithError(e);});stream.doOnComplete(emitter::complete);return emitter;}/*** 模板对话接口,可以用于提示用户,也可以引导chatGpt的回答* 可以对chat的回答指定格式,轻松转换为java的实体类** @return*/@GetMapping("/ai/template")@ResponseBodypublic AuthorPoems templateCompletion(@RequestParam(value = "author", defaultValue = "李白") String author) {var outputParser = new BeanOutputParser<>(AuthorPoems.class);String message = """请列出关于{author}相关的诗词题目{format}""";PromptTemplate promptTemplate = new PromptTemplate(message, Map.of("author", author, "format", outputParser.getFormat()));Prompt prompt = promptTemplate.create();Generation generation = chatClient.call(prompt).getResult();AuthorPoems authorPoems = outputParser.parse(generation.getOutput().getContent());return authorPoems;}

项目结构

整个项目十分简单,代码很少。主要为了实现设置代理类重写了了openai一些接口
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/619348.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络篇09 | 运输层 udp

网络篇09 | 运输层 udp 01 简介UDP 是面向报文的 02 报文协议 01 简介 UDP 只在 IP 的数据报服务之上增加了一些功能&#xff1a;复用和分用、差错检测 UDP 的主要特点&#xff1a;无连接。发送数据之前不需要建立连接。 使用尽最大努力交付。即不保证可靠交付。 面向报文。…

【c 语言】函数前面的返回类型

&#x1f388;个人主页&#xff1a;豌豆射手^ &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏 &#x1f917;收录专栏&#xff1a;C语言 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共同学习、交流进步&…

【数据结构(六)】队列

❣博主主页: 33的博客❣ ▶️文章专栏分类:数据结构◀️ &#x1f69a;我的代码仓库: 33的代码仓库&#x1f69a; &#x1faf5;&#x1faf5;&#x1faf5;关注我带你学更多数据结构知识 目录 1.前言2.概念3.队列的使用4.循环队列5.双端队列6.经典习题6.1队列实现栈6.2栈实现队…

Windows Edge 兼容性问题修复:提升用户体验的关键步骤

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

【设计模式】聊聊观察者设计模式原理及应用

原理 观察者模式属于行为模式&#xff0c;行为模式主要解决类和对象之间交互问题。 含义&#xff1a;在对象之间定义一个一对多的依赖&#xff0c;当一个对象状态改变时&#xff0c;所有依赖的对象会自动通知。 被依赖的对象被观察者(Observable) &#xff0c;依赖的对象观察…

MCU最小系统的电源模块设计和复位模块的设计

最小操作系统就是一个电路&#xff0c;这个电路里面必须要的东西&#xff08;如人需要喝水吃饭温度等情况&#xff0c;才能或者&#xff09; 现在我们要解决这三个问题 这里V开头的&#xff0c;都是电源管脚 这里解释一下&#xff1a; 这里要注意哪些是电路电压&#xff0c;哪…

API接口京东开放平台item_get-获得京东商品详情API接口根据商品ID查询商品标题价格描述等详情数据

京东商品详情API接口可以提供以下方面的信息&#xff1a; 商品基础信息&#xff1a;包括商品的标题、价格、描述、图片等基本信息&#xff0c;这是构建电商平台的基础数据。商品分类信息&#xff1a;帮助用户更好地了解商品所属的类别&#xff0c;便于商品筛选和查找。商品销售…

YOLOv5目标检测优化点(添加小目标头检测)

文章目录 1、前言2、如何计算参数3、YOLOv5小目标改进-13.1、结构文件3.2、结构图3.3、参数对比3.3.1、yolov5l.yaml 解析表3.3.2、 yolov5l-4P.yaml 解析表 4、YOLOv5小目标改进-24.1、结构文件4.2、结构图 5、YOLOv5小目标改进-35.1、结构文件 6、YOLOv5小目标改进-46.1、结构…

云服务器安装Mysql、MariaDB、Redis、tomcat

前置工作 进入根目录 cd / 进入/user/local文件夹 上传压缩包 rz 压缩包 Mysql 1.下载并安装MySQL官方的 Yum Repository wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-…

[Android]申请成为Google Play个人开发者

1.注册Google邮箱 2.进入play.google.com选择成为“企业”或是“个人”开发者 https://play.google.com/console 3.选择成为个人开发者 这里会提示你申请的所需条件。有告诉我们&#xff0c;后面需要支付$25。 继续的话&#xff0c;要求填写一个开发者名称。 4.创建付款信息…

cannot import name ‘get_host‘ from ‘urllib3.util.url‘

Error in py_module_import(module, convert convert) : ImportError: cannot import name get_host from urllib3.util.url (D:\\url.py) Run reticulate::py_last_error() for details. 这个错误表明在 urllib3 模块的 util.url 子模块中找不到名为 get_host 的函数。这可能…

康耐视visionpro-CogFindCircleTool操作工具详细说明

◆CogFindCircleTool]功能说明: 通过用多个卡尺找到多个点来拟合所要找的圆 ◆CogFindCircleTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogFindCircleTool工具 ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③预期的圆弧:设置预期圆弧的…