JeecgBoot 低代码平台快速集成 Spring AI

简介: Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Jeecg Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动,包含 RAG 功能。

JeecgBoot 是一款基于代码生成器的低代码开发平台!前后端分离架构 SpringBoot2.x 和 3.x,SpringCloud,Ant Design Vue3,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!JeecgBoot 引领新的低代码开发模式 (OnlineCoding-> 代码生成器 -> 手工 MERGE), 帮助解决 Java 项目 70% 的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性!

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() &gt; 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 -&gt; {
            Map<string, string> result = new HashMap&lt;&gt;();
            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 调用更换即可。

目录
相关文章
|
10天前
|
人工智能 数据可视化 JavaScript
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
NodeTool 是一个开源的 AI 工作流可视化构建器,通过拖放节点的方式设计复杂的工作流,无需编码即可快速原型设计和测试。它支持本地 GPU 运行 AI 模型,并与 Hugging Face、OpenAI 等平台集成,提供模型访问能力。
77 14
NodeTool:AI 工作流可视化构建器,通过拖放节点设计复杂的工作流,集成 OpenAI 等多个平台
|
24天前
|
人工智能 自然语言处理 前端开发
Lobe Vidol:AI数字人交互平台,可与虚拟人和3D模型聊天互动
Lobe Vidol是一款开源的AI数字人交互平台,允许用户创建和互动自己的虚拟偶像。该平台提供流畅的对话体验、丰富的动作姿势库、优雅的用户界面设计以及多种技术支持,如文本到语音和语音到文本技术。Lobe Vidol适用于娱乐互动、在线教育、客户服务、品牌营销和社交媒体等多个应用场景。
87 7
Lobe Vidol:AI数字人交互平台,可与虚拟人和3D模型聊天互动
|
5天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
139 0
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
221 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
1月前
|
存储 人工智能 Java
Spring AI Alibaba 配置管理,用 Nacos 就够了
本文通过一些实操案例展示了 Spring AI Alibaba + Nacos 在解决 AI 应用中一系列复杂配置管理挑战的方案,从动态 Prompt 模板的灵活调整、模型参数的即时优化,到敏感信息的安全加密存储。Spring AI Alibaba 简化了对接阿里云通义大模型的流程,内置 Nacos 集成也为开发者提供了无缝衔接云端配置托管的捷径,整体上极大提升了 AI 应用开发的灵活性和响应速度。
233 13
|
1月前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
52 6
|
1月前
|
人工智能 供应链 安全
AI辅助安全测试案例某电商-供应链平台平台安全漏洞
【11月更文挑战第13天】该案例介绍了一家电商供应链平台如何利用AI技术进行全面的安全测试,包括网络、应用和数据安全层面,发现了多个潜在漏洞,并采取了有效的修复措施,提升了平台的整体安全性。
|
1月前
|
人工智能 Cloud Native 算法
|
2月前
|
人工智能 Java API
阿里云开源 AI 应用开发框架:Spring AI Alibaba
近期,阿里云重磅发布了首款面向 Java 开发者的开源 AI 应用开发框架:Spring AI Alibaba(项目 Github 仓库地址:alibaba/spring-ai-alibaba),Spring AI Alibaba 项目基于 Spring AI 构建,是阿里云通义系列模型及服务在 Java AI 应用开发领域的最佳实践,提供高层次的 AI API 抽象与云原生基础设施集成方案,帮助开发者快速构建 AI 应用。本文将详细介绍 Spring AI Alibaba 的核心特性,并通过「智能机票助手」的示例直观的展示 Spring AI Alibaba 开发 AI 应用的便利性。示例源
1461 14
|
1月前
|
存储 人工智能 文字识别
利用AI能力平台实现档案馆纸质文件的智能化数字处理
在传统档案馆中,纸质文件管理面临诸多挑战。AI能力平台利用OCR技术,通过图像扫描、预处理、边界检测、文字与图片分离、文字识别及结果存储等步骤,实现高效数字化转型,大幅提升档案处理效率和准确性。