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

news2024/9/27 5:43:25

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调用更换即可。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Sun Frame:基于 SpringBoot 的轻量级开发框架(个人开源项目)

文章目录 &#x1f31e; Sun Frame&#xff1a;基于 SpringBoot 的轻量级开发框架&#xff08;个人开源项目&#xff09;&#x1f680; 欢迎使用 Sun Frame&#x1f31f; 项目亮点&#x1f4e6; 模块结构&#x1f310; Sun-Cloud&#x1f4e6; Sun-Common &#x1f4a1; 示例与…

云原生的候选应用

提示 该内容摘自电子书《为 Azure 构建云原生 .NET 应用程序》&#xff0c;可在**.NET Docs**上获取&#xff0c;也可以免费下载 PDF并离线阅读。 考虑一下您的组织需要构建哪些应用程序。然后&#xff0c;看看您投资组合中的现有应用程序。其中有多少需要云原生架构&#xff…

计算机毕业设计选题推荐-租房管理系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

[网鼎杯]2018Unfinish

使用ctf在线靶场https://adworld.xctf.org.cn/home/index。 进入靶场&#xff0c;发现是一个登录页面。 使用awvs进行扫描&#xff0c;发现存在login.php和register.php&#xff0c;并且register.php存在sql注入漏洞。 访问一下register.php试试&#xff0c;发现是一个注册页面…

JBoss未授权访问漏洞 *

JBoss是一个基于J2EE的开放源代码应用服务器&#xff0c;代码遵循LGPL许可&#xff0c;可以在任何商业应用中免费使用&#xff1b;JBoss也是一个管理EJB的容器和服务器&#xff0c;支持EJB 1.1、EJB 2.0和EJB3规范。,默认情况下访问 http://ip:8080/jmx-console 就可以浏览 JBo…

<数据集>COCO2017行人识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;10000张 标注数量(xml文件个数)&#xff1a;10000 标注数量(txt文件个数)&#xff1a;10000 标注类别数&#xff1a;1 标注类别名称&#xff1a; [person] 序号类别名称图片数框数1person1000041131 使用标注工具…

OpenAI: Stream interrupted (client disconnected)

题意&#xff1a;OpenAI: 流被中断&#xff08;客户端已断开连接&#xff09; 问题背景: Im trying OpenAI. 我正在尝试 OpenAI I have prepared the training data, and used fine_tunes.create. Several minutes later, it showed Stream interrupted (client disco…

虚拟试衣系列Magic Clothing: Controllable Garment-Driven Image Synthesis

目标&#xff1a;生成穿着具有多种文本提示的目标服装的模特图片。 创新点&#xff1a;以特定服装为条件的图像生成。服装驱动的图像生成任务旨在生成穿着指定服装的模特图片&#xff0c;并结合给定的文本提示。 与虚拟试穿(Virtual try-on, VTON)任务的不同&#xff1a; VT…

如何组织一场问卷调查

问卷调查是一种常用的数据收集方法&#xff0c;可以用于了解人群的意见、行为、态度等。以下是一些步骤和建议&#xff0c;帮助你组织1场有效的问卷调查。 确定调查目的&#xff1a;在开始设计问卷之前&#xff0c;你需要明确调查的目的。这将帮助你确定需要收集哪些信息&…

SpringBoot发送QQ邮箱

SpringBoot发送QQ邮箱 前言&#xff1a; 因项目有部分功能要发送企业内部邮箱&#xff0c;要用到QQ邮箱测试下网段是否通&#xff0c;用于排查下问题。 发送邮箱 1&#xff0c;导入依赖 <dependency><groupId>org.springframework.boot</groupId><arti…

【数据分享】2024最新安徽省镇级行政区划矢量shp

今天要分享的数据是2024最新安徽省镇级行政区划矢量shp。 数据介绍 安徽建省公元1667年&#xff0c;省名取当时安庆、徽州两府首字合成&#xff0c;因境内有皖山、春秋时期有古皖国而简称皖。它位于中国中东部&#xff0c;是最具活力的长江三角洲组成部分。全省南北长约57…

liunx运行脚本文件sh,和window运行脚本文件命令及注意事项总结

文章目录 linux运行脚本文件window运行脚本文件工具1. 使用WSL&#xff08;Windows Subsystem for Linux&#xff09;2. 使用Git Bash&#xff08;现在用的&#xff09;3. 使用Cygwin4. 使用Windows PowerShell小结 conda使用&#xff0c;环境变换解决方案1. 配置conda初始化对…

解密RCE漏洞:原理剖析、复现与代码审计实战

在网络安全领域&#xff0c;远程代码执行&#xff08;RCE&#xff09;漏洞因其严重性和破坏力而备受关注。RCE漏洞允许攻击者在目标系统上执行任意代码&#xff0c;从而掌控整个系统&#xff0c;带来极大的安全风险。理解RCE漏洞的工作原理&#xff0c;并掌握其复现与代码审计技…

android13内核增加调试接口给上层使用

总纲 android13 rom 开发总纲说明 目录 1.前言 2.处理方法分析 3.代码参考 3.1方法1 3.2方法2 3.3方法3 3.4方法4 4.彩蛋 1.前言 有时候,我们在开机的过程中,adb服务还没有起来,系统奔溃了,不能正常开机,我们没法看到相关的logcat信息,导致我们不能很快的定…

内衣洗衣机哪家品牌好用?力荐五款爆款内衣洗衣机

近两年内衣洗衣机逐渐走入大众的视野&#xff0c;不少人说它可以释放双手&#xff0c;比自己手洗还干净。还具有除菌功能&#xff0c;能够减少衣物上我们看不到的细菌&#xff0c;但也有人说它是智商税&#xff0c;根本没有用&#xff0c;都是心理因素在作怪&#xff0c;在面对…

vue配置electron,使用electron-builder进行打包【完整步骤】

目 录 1. 已知&#xff1a;vue3项目已经创建好 一、配置Electron 1. 安装electron 2. 在根目录创建electron 文件夹&#xff0c;并新建main.js 和preload.js 3.在package.json 中配置添加以下代码&#xff1a; 4. 安装concurrently 5. 安装 nodemon 实现热更新 6…

Java同城达人交友系统源码

打造你的社交新领地&#xff01;同城达人交友系统源码全揭秘 &#x1f308; 开篇&#xff1a;遇见同城&#xff0c;遇见更好的你 在这个快节奏的城市生活中&#xff0c;你是否渴望遇见志同道合的朋友&#xff1f;是否想与身边的达人分享生活的点滴&#xff1f;现在&#xff0…

深入探究Java中的宏替换:从基础到应用的全面解析

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

html+css 实现hover镂空背景按钮

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享htmlcss 绚丽效果&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 文…

weblogic 连接gaussdb测试数据源是否联通

文章目录 1. gaussdb创建远程连接用户和数据库2. weblogic构建GaussDB源数据库3. 测试结果查询注意 weblogic中jar包已经放入lib目录中gaussdb已经创建可以连接登录的用户和数据库1. gaussdb创建远程连接用户和数据库 新建用户和数据库连接客户端Gauss=# create user lily pas…