网站首页 > 开源技术 正文
JeecgBoot 如何集成 Spring AI
Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Jeecg Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动,包含 RAG 功能。
(Retrieval Augmented Generation)检索增强生成(RAG)是一种用于将个人未经训练数据与人工智能模型集成的技术。在 RAG 工作流程中,第一步将文档数据加载到矢量数据库(例如 Redis)中。当收到用户查询时,矢量数据库会检索一组与该查询相似的文档。然后,这些文档数据充当用户问题的上下文,并与用户的查询结合使用生成响应(通常通过 LLM 模型)。
先来看一下最终效果,效果分别是 AI 互动以及 RAG 互动。
集成 Spring AI 在 Jeecg-module-demo 模块的 pom.xml 中,添加如下配置
<dependency>
<groupid>org.springframework.ai</groupid>
<artifactid>spring-ai-openai-spring-boot-starter</artifactid>
<version>1.0.0-M1</version>
</dependency>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<releases>
<enabled>false</enabled>
</releases>
</repository>
</repositories>
添加配置 Spring AI 提供的 starter 自动配置完成了大部分工作,引入依赖后,只需要再进入如下配置即可
spring:
ai:
openai:
api-key: open-ai-api-key
base-url: 如非使用代理点,则无需更改
进行以上配置之后,官方默认没有提供 ChatClient 的 bean 注册,所以我们还需要最后一步,注册 ChatClient Bean。
@Bean
public ChatClient chatClient(ChatClient.Builder builder, VectorStore vectorStore) {
return builder.build();
}
到这里,我们已经可以正常使用 ChatClient、ImageModel 等 API 与 OpenAI 进行互动访问了,如下:
文生文:
chatClient.prompt().user(message).call().content();
文生图:
imageModel.call(new ImagePrompt(description,
OpenAiImageOptions.builder().build()));
RAG:
// 向量库查询
List<document> documents = vectorStore.similaritySearch(query);
String info = "";
if (documents.size() > 0) {
info = documents.get(0).getContent();
}
// 构造系统prompt
String systemPrompt = "你的名字叫Jeecg AI助手,你的官网在http://jeecg.com,以友好的方式回应,乐于助人、快乐的态度";
// 构造用户prompt
String userPrompt = """
给你提供一些数据参考: {info},请回答我的问题:{query}
请你跟进数据参考与工具返回结果回复用户的请求。
""";
// 构造提示词
Message systemMessage = new SystemMessage(systemPrompt);
PromptTemplate promptTemplate = new PromptTemplate(userPrompt);
Message userMessage = promptTemplate.createMessage(Map.of("info", info, "query", query));
Prompt prompt = new Prompt(List.of(userMessage, systemMessage));
client.prompt(prompt).stream().content();
与 JeecgBoot 集成
经过以上两段配置,已经可以正常与 Spring AI 支持的各个大模型进行 API 调用了,不过也仅仅是停留在代码层面,使用门槛也限制在开发员人层面。
JeecgBoot 在 3.7 版本提供了 AI 对话的页面,不过现在版本的默认实现并不是通过 Spring AI 进行集成的,但是却已经完成了前后端对话通信的框架,接下来只需要使用 Spring AI 替换掉原有的大模型交互即可。
org.jeecg.modules.demo.gpt.service.impl.ChatServiceImpl 这个类的 sendMessage 方法中,将如下代码进行注释,替换上 Spring AI 的 API 调用代码即可。如下
替换成
Flux<string> contents = client.prompt()
.user(message)
.stream().content().then(“DONE”);
final String id = topicId;
contents.subscribe(p -> {
Map<string, string> result = new HashMap<>();
result.put("content", p);
try {
if ("DONE".equals("p")) {
sseEmitter.send(SseEmitter.event().id("DONE").data(p), MediaType.TEXT_EVENT_STREAM);
} else {
sseEmitter.send(SseEmitter.event()
.id(id)
.data(result)
.reconnectTime(3000));
}
} catch (IOException e) {
throw new RuntimeException(e);
}
});
最终效果如开头所示,如果需要将对话替换成 RAG 对话,只需要将 chatClient 调用更换即可。
- 上一篇: 如何创建属于自己的“猫猫币”或者“兔兔币”?
- 下一篇: vLLM:大模型本地推理库
猜你喜欢
- 2024-12-07 PHP框架之Laravel基础知识最全总结,还不快收藏
- 2024-12-07 Spring Cloud Gateway 数字签名、URL动态加密就该这样设计!
- 2024-12-07 就在刚刚,马斯克 xAI 正式公测 xAI API,每天赠送 25 美元免费积分!
- 2024-12-07 WebSocket数据加密——AES与RSA混合加密
- 2024-12-07 CTF(Capture The Flag)密码学中级
- 2024-12-07 安全架构进阶四之非对称加密算法
- 2024-12-07 ToolJet低代码神器,网站分分钟上线
- 2024-12-07 产品经理需要了解的接口知识
- 2024-12-07 NFC手机加密卡?卡模拟
- 2024-12-07 vLLM:大模型本地推理库
你 发表评论:
欢迎- 07-10公司网站建站选择:人工建站和源码建站分析
- 07-10多用途游戏娱乐新闻网站HTML5模板
- 07-10站长教你搭建属于自己的网站(搭建网站的步骤)
- 07-10php宝塔搭建部署实战响应式塑料封条制品企业网站模板源码
- 07-10自适应响应式汽车配件类网站源码 html5高端大气汽车网站织梦模板
- 07-10网站标签怎么设置?(网站标签怎么设置比较好)
- 07-10PageAdmin企业网站制作中踩过的坑
- 07-10豆包给我输出的html在线象棋源码(有点简单)
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)