当前位置: 首页 > news >正文

五、使用Spring AI Alibaba实现Rag

五、使用Spring AI Alibaba实现Rag

==================================================================================

==================================================================================

参考资料:

==================================================================================

解决spring-ai报错:Unresolved reference ‘SimpleVectorStore‘_org.springframework.ai.vectorstore.vectorstore' th-CSDN博客

Spring AI与DeepSeek实战三:打造企业知识库 (qq.com)

快速开始-阿里云Spring AI Alibaba官网官网 (java2ai.com)

在LinuxmacOS和Windows上配置APIKey为环境变量-大模型服务平台百炼-阿里云 (aliyun.com)

==================================================================================

集成大语言模型(LLM)落地的两大痛点:

  • 知识局限性:LLM依赖静态训练数据,无法覆盖实时更新或垂直领域的知识;
  • 幻觉:当LLM遇到训练数据外的提问时,可能生成看似合理但错误的内容。

用最低的成本解决以上问题,需要使用 RAG 技术,它是一种结合信息检索技术与 LLM 的框架,通过从外部 知识库 动态检索相关上下文信息,并将其作为 Prompt 融入生成过程,从而提升模型回答的准确性。

向量模型是实现 RAG 的核心组件之一,用于将非结构化数据(如文本、图像、音频)转换为 高维向量(Embedding)的机器学习模型。这些向量能够捕捉数据的语义或结构信息,使计算机能通过数学运算处理复杂关系。

1、准备工作

如果要使用一些大模型的高级功能,比如RAG、文生图、文生音频等,使用SpringAI Alibaba框架开发比较方便,配套的申请使用阿里云百炼上的大模型。

访问阿里云百炼页面并登录账号 https://www.aliyun.com/product/bailian

开通“百炼大模型推理”服务,获取API Key。

2、创建SpringBoot工程

9ffbe191b1f6da224baf258ec8273e51

3657038e73f8d028283088bd94626607

2.1、application.yml

server:port: 8898
spring:application:name: springai_ragai:dashscope:# 阿里百炼 api_keyapi-key: ${BAILIAN_API_KEY}  # 从环境变量读取密钥

2.2、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.12</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springai_rag</artifactId><version>0.0.1-SNAPSHOT</version><name>springai_rag</name><description>springai_rag</description><url/><licenses><license/></licenses><developers><developer/></developers><scm><connection/><developerConnection/><tag/><url/></scm><properties><java.version>17</java.version><spring-ai.version>1.0.0-M6</spring-ai.version><spring-ai-alibaba.version>1.0.0-M6.1</spring-ai-alibaba.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>${spring-ai-alibaba.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><repositories><repository><snapshots><enabled>false</enabled></snapshots><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url></repository><repository><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots><id>sonatype-snapshots</id><name>Sonatype Snapshot Repository</name><url>https://oss.sonatype.org/content/repositories/snapshots</url></repository></repositories><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><annotationProcessorPaths><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></path></annotationProcessorPaths><source>15</source><target>15</target></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build>
</project>

3、创建RAG 知识库

3.1、构建向量数据

创建 resources/rag/data-resources.txt 文件

1. {"type":"api","name":"测试api服务01","topic":"综合政务","industry":"采矿业","remark":"获取采矿明细的API服务"}
2. {"type":"api","name":"新能源车类型","topic":"能源","industry":"制造业","remark":"获取新能源车类型的服务"}
3. {"type":"api","name":"罚款报告","topic":"交通","industry":"制造业","remark":"获取罚款报告的接口"}
4. {"type":"api","name":"光伏发电","topic":"能源","industry":"电力、热力、燃气及水生产和供应业","remark":"获取光伏发电的年度报告"}
5. {"type":"api","name":"协同计算交付测试提供方","topic":"综合政务","industry":"信息传输、软件和信息技术服务业","remark":"协同计算交付测试提供方的数据源信息"}
6. {"type":"api","name":"文件下载-计量测试","topic":"综合政务","industry":"信息传输、软件和信息技术服务业","remark":"文件下载-计量测试"}
7. {"type":"api","name":"收益明细2025","topic":"综合政务","industry":"信息传输、软件和信息技术服务业","remark":"2025年的收益明细信息表"}

3.2、添加配置类

@Configuration
public class VectorStoreConfig {@Beanpublic VectorStore vectorStore(EmbeddingModel embeddingModel, @Value("classpath:rag/data-resources.txt") Resource docs) {VectorStore vectorStore = SimpleVectorStore.builder(embeddingModel).build();vectorStore.write(new TokenTextSplitter().transform(new TextReader(docs).read()));return vectorStore;}
}

4、创建ChatClient和查询接口

@RestController
@RequestMapping("/rag")
public class RagController {private final ChatClient chatClient;public RagController(ChatClient.Builder builder, VectorStore vectorStore) {String sysPrompt = """您是一个智能搜索引擎,负责根据用户输入的内容进行精准匹配、模糊匹配和近义词匹配,以搜索相关的数据记录。您只能搜索指定的内容,不能回复其他内容或添加解释。您可以通过[search_content]标识符来表示需要搜索的具体内容。要求您返回匹配内容的完整记录,以JSON数组格式呈现。如果搜索不到内容,请返回[no_data]。""";this.chatClient = builder.defaultSystem(sysPrompt).defaultAdvisors(new QuestionAnswerAdvisor(vectorStore, new SearchRequest())).defaultOptions(DashScopeChatOptions.builder().withModel("deepseek-r1").build()).build();}@GetMapping(value = "/search")public List<SearchVo> search(@RequestParam String search, HttpServletResponse response) {response.setCharacterEncoding("UTF-8");PromptTemplate promptTemplate = new PromptTemplate("[search_content]: {search}");Prompt prompt = promptTemplate.create(Map.of("search", search));return chatClient.prompt(prompt).call().entity(new ParameterizedTypeReference<List<SearchVo>>() {});}@Setter@Getter@NoArgsConstructor@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)public static class SearchVo {private String type;private String name;private String topic;private String industry;private String remark;}
}

5、测试

0d78c928-d92b-4661-a41f-28f9afdca0de 195555f3-e1f1-4a0b-af19-b64e912b11d7
http://www.rkmt.cn/news/59078.html

相关文章:

  • 降ai率免费网站推荐:实用工具助你高效创作
  • 写给0-1岁的初创公司合伙人(129):副业营销(Side-Project Marketing)——做工具引流,而不是投广告
  • 2025年南京留学机构排名:南京留学,英国留学,香港留学,新加坡留学,澳洲留学,美国留学
  • python的一些文件py/pyc/pyo/pyd/pyi/ipynb
  • 深入解析:JavaScript介绍 | 程序人生
  • 2025年装配式墙板设备源头厂家权威推荐榜单:装配式围墙模具/装配式外墙板设备/装配式围墙设备源头厂家精选
  • 2025 年 11 月智能悬浮门厂家权威推荐榜:铝合金折叠门、别墅段滑门、铝艺折叠门、高铁站悬浮门、码头折叠门、机场折叠门、工业园折叠门、展览馆悬浮门、体育馆折叠门,高端定制与安全耐用之选
  • 推荐一款OOK调制遥控器芯片-DP4335A
  • 2025年国产翻译耳机制造厂权威推荐:蓝牙翻译耳机/智能翻译耳机/同传翻译手表源头厂家精选
  • 2025年11月防火/钢结构/非膨胀型/膨胀型/特种防火涂料生产厂家TOP10综合评测与选购指南:权威推荐榜单揭晓
  • 2025年玻璃钢电缆桥架源头厂家权威推荐:聚氨酯桥架/玻璃钢管箱/玻璃钢电力电缆槽源头厂家精选
  • 质量江湖:那些年我们遇到的“君子”与“小人”
  • 模拟赛Atcoder Beginner Contest 433官方题解(E题)
  • 103_尚硅谷_break课堂练习
  • 2025年北京留学机构哪家好:北京留学,英国留学,香港留学,新加坡留学,澳洲留学,美国留学
  • 2025年上海全铝家居定制品牌综合实力排行榜TOP5
  • 安康PC耐力板厂家实力榜2025
  • 吴恩达深度学习课程二: 改善深层神经网络 第三周:超参数调整,批量标准化和编程框架 课后习题和代码实践
  • 深入解析:【经验】Word/WPS|用邮件合并批量填写表格或教案,单个Word导出成多个文件(包含插入图片的教程)
  • LTE系统资源分配MATLAB实现示例
  • 科研院校选购指南:小型高低温试验箱,哪个厂家精度更高、更靠谱?
  • 2025 年 11 月建筑加固厂家权威推荐榜:碳纤维加固、粘钢加固,专业工艺与持久安全的高效解决方案
  • 数字化转型:小企业反而更有优势?
  • 完整教程:未来之窗昭和仙君(四十一)开发收银系统15k大小——东方仙盟筑基期
  • 办公软件!zRenamer 批量改名工具完全指南:下载、安装与实战使用教程
  • 2025年知名的东莞平板硫化机厂家推荐及选购指南
  • 2025年11月移民美国机构推荐榜:专业服务助力高净值家庭实现身份规划
  • 深入解析:《C++ 继承》三大面向对象编程——继承:派生类构造、多继承、菱形虚拟继承概要
  • 2025年11月移民美国机构推荐榜单及对比分析
  • 2025年评价高的垃圾袋TOP实力厂家推荐榜