目录
最近发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。
写在前面
本文介绍了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官网去申请购买,或者在一些购物软件直接购买现成的用。
共需要配置:
spring.ai.openai.api-key:
这是你的 OpenAI API 密钥,它是用于通过 API 访问 OpenAI 服务的凭证。密钥应该是一个长字符串,用于标识你的账户并授权访问。
spring.ai.openai.chat.options.model
: 这是用于设置对话系统所使用的 OpenAI 模型的选项之一。在这种情况下,模型选择为 GPT-3.5 Turbo,这是 OpenAI 提供的一种强大的自然语言处理模型,适用于生成对话。
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;
-
-
@Autowired
-
public
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组件到这里就结束了。任何问题评论区或私信讨论,欢迎指正。