Spring与AI结合-spring boot3整合AI组件

2024-05-07 11:28

本文主要是介绍Spring与AI结合-spring boot3整合AI组件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

⛰️个人主页:     蒾酒

🔥系列专栏:《spring boot实战》


目录

写在前面

spring ai简介

单独整合al接口

整合Spring AI组件

起步条件

​编辑

进行必要配置

写在最后 


写在前面

本文介绍了springboot开发后端服务中,AI组件(Spring AI)的整合与使用。坚持看完相信对你有帮助。

同时欢迎订阅springboot系列专栏,持续分享spring boot的使用经验。

spring ai简介

先看官网介绍:

翻译:

Spring AI 是 AI 工程的应用框架。其目标是将 Spring 生态系统设计原则(如可移植性和模块化设计)应用于 AI,并推广使用 POJO 作为 AI 领域应用程序的构建块。

翻译:

特征

跨 AI 提供商的可移植 API 支持,适用于聊天、文本到图像和嵌入模型。支持同步和流 API 选项。还支持下拉以访问特定于模型的功能。

在spring-ai组件没发布前,我们在spring boot中对接各种ai接口,由于接口规范格式的不同,我们通常每种接口都得单独去写代码去对接,最后通过实现策略模式来实现灵活切换ai接口源。这样是比较麻烦的。而spring-ai组件就是帮我们做了类似的封装,使得我们对接多种ai接口变得十分方便。

单独整合al接口

我们先来看spring boot简单整合经典的chatGPT 3.5接口

代码如下:

import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;/*** @author mijiu* ClassName:OpenAIAPI.java* date:2024-05-06 16:49* Description:*/public class OpenAIAPI {/*** 聊天端点*/private final static String CHAT_ENDPOINT = "https://api.openai.com/v1/chat/completions";//官网接口地址private final static  String PROXY_ENDPOINT ="https://www.chatgp.fun/v1/chat/completions";//国内代理接口private final static  String API_KEY = "Bearer sk-pbatvlgKeYScAS3kD4820bA1CcE741F996E0BaAb205421D1";/*** 需要代理服务器访问** @param txt 内容* @return {@link String}*/public static String chat(String txt) {Map<String, Object> paramMap = new HashMap<>();paramMap.put("model", "gpt-3.5-turbo");List<Map<String, String>> dataList = new ArrayList<>();dataList.add(new HashMap<String, String>(){{put("role", "user");put("content", txt);}});paramMap.put("messages", dataList);System.out.println(JSONUtil.toJsonStr(paramMap));JSONObject message = null;try {String body = HttpRequest.post(PROXY_ENDPOINT).header("Authorization", API_KEY).header("Content-Type", "application/json").body(JSONUtil.toJsonStr(paramMap)).execute().body();JSONObject jsonObject = JSONUtil.parseObj(body);System.out.println(jsonObject);JSONArray choices = jsonObject.getJSONArray("choices");JSONObject result = choices.get(0, JSONObject.class, Boolean.TRUE);message = result.getJSONObject("message");} catch (Exception e) {return "抱歉,我无法回答你的问题。";}return message.getStr("content");}public static void main(String[] args) {System.out.println(chat("你是?"));}
}

这段代码依赖hutool工具包的http工具包

 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.22</version></dependency>

现在运行测试一下:

可以看到目前整合调用测试成功了。

代码里面的api-key有一定量的token新手可以复制代码运行下试试。言归正传下面开始介绍核心内容。

整合Spring AI组件

起步条件

  • jdk不低于17
  • spring boot 3x

我们直接新建一个demo项目

为何直接新建一个项目的,主要是为了避开一些麻烦。如,阿里云maven镜像没有此依赖,需要到中央仓库下载。

一定要选不低于Java17的jdk

选择这两个依赖就够了

  • Spring Web
  • OpenAI

spring boot的版本不要低于3.0

等待依赖下载完成。

进行必要配置

这个api-key需要你去openal官网去申请购买,或者在一些购物软件直接购买现成的用。

共需要配置:

  1. spring.ai.openai.api-key: 这是你的 OpenAI API 密钥,它是用于通过 API 访问 OpenAI 服务的凭证。密钥应该是一个长字符串,用于标识你的账户并授权访问。

  2. spring.ai.openai.chat.options.model 这是用于设置对话系统所使用的 OpenAI 模型的选项之一。在这种情况下,模型选择为 GPT-3.5 Turbo,这是 OpenAI 提供的一种强大的自然语言处理模型,适用于生成对话。

  3. spring.ai.openai.chat.options.temperature: 这是对话系统生成响应时的温度参数。温度参数控制着生成文本的多样性,值越高,生成文本的多样性越大。在这里,温度设置为 0.7,这意味着对话系统生成的文本会相对保守,但仍具有一定的多样性。

application.properties:

spring.ai.openai.api-key=sk-uVfM7GiD9RIdIKRrF70eT3BlbkyhdHGHGH
spring.ai.openai.chat.options.model=gpt-3.5-turbo
spring.ai.openai.chat.options.temperature=0.7

代码里面的api-key是我随意写的一个,需要换成你自己的且有效的 。

测试控制器

import org.springframework.ai.embedding.EmbeddingClient;
import org.springframework.ai.embedding.EmbeddingResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.Map;/*** @author mijiupro*/
@RestController
public class EmbeddingController {private final EmbeddingClient embeddingClient;@Autowiredpublic EmbeddingController(EmbeddingClient embeddingClient) {this.embeddingClient = embeddingClient;}@GetMapping("/ai/embedding")public Map embed(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {EmbeddingResponse embeddingResponse = this.embeddingClient.embedForResponse(List.of(message));return Map.of("embedding", embeddingResponse);}
}

最后启动项目浏览器地址栏访问测试接口即可。

http://localhost:8080/ai/embedding

写在最后 

spring boot3整合AI组件到这里就结束了。任何问题评论区或私信讨论,欢迎指正。

这篇关于Spring与AI结合-spring boot3整合AI组件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/967222

相关文章

在Ubuntu上部署SpringBoot应用的操作步骤

《在Ubuntu上部署SpringBoot应用的操作步骤》随着云计算和容器化技术的普及,Linux服务器已成为部署Web应用程序的主流平台之一,Java作为一种跨平台的编程语言,具有广泛的应用场景,本... 目录一、部署准备二、安装 Java 环境1. 安装 JDK2. 验证 Java 安装三、安装 mys

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.

Java调用Python代码的几种方法小结

《Java调用Python代码的几种方法小结》Python语言有丰富的系统管理、数据处理、统计类软件包,因此从java应用中调用Python代码的需求很常见、实用,本文介绍几种方法从java调用Pyt... 目录引言Java core使用ProcessBuilder使用Java脚本引擎总结引言python

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

springboot整合 xxl-job及使用步骤

《springboot整合xxl-job及使用步骤》XXL-JOB是一个分布式任务调度平台,用于解决分布式系统中的任务调度和管理问题,文章详细介绍了XXL-JOB的架构,包括调度中心、执行器和Web... 目录一、xxl-job是什么二、使用步骤1. 下载并运行管理端代码2. 访问管理页面,确认是否启动成功

Java中的密码加密方式

《Java中的密码加密方式》文章介绍了Java中使用MD5算法对密码进行加密的方法,以及如何通过加盐和多重加密来提高密码的安全性,MD5是一种不可逆的哈希算法,适合用于存储密码,因为其输出的摘要长度固... 目录Java的密码加密方式密码加密一般的应用方式是总结Java的密码加密方式密码加密【这里采用的

Java中ArrayList的8种浅拷贝方式示例代码

《Java中ArrayList的8种浅拷贝方式示例代码》:本文主要介绍Java中ArrayList的8种浅拷贝方式的相关资料,讲解了Java中ArrayList的浅拷贝概念,并详细分享了八种实现浅... 目录引言什么是浅拷贝?ArrayList 浅拷贝的重要性方法一:使用构造函数方法二:使用 addAll(

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b