尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

五、使用Spring AI Alibaba实现Rag

五、使用Spring AI Alibaba实现Rag
📅 发布时间:2026/6/19 0:04:00

五、使用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

本文来自博客园,作者:老羅,转载请注明原文链接:https://www.cnblogs.com/laoluo2025/p/19260493

相关新闻

  • 降ai率免费网站推荐:实用工具助你高效创作
  • 写给0-1岁的初创公司合伙人(129):副业营销(Side-Project Marketing)——做工具引流,而不是投广告
  • 2025年南京留学机构排名:南京留学,英国留学,香港留学,新加坡留学,澳洲留学,美国留学

最新新闻

  • 微信小程序地址选择器:数据驱动下的省市区三级联动架构解析
  • ComfyUI TTP Toolset未来 roadmap:即将支持的SD3模型与动态切片功能预览
  • S12Z BDC硬件握手协议:非侵入式调试与ACK脉冲机制详解
  • 2026年真空搅拌脱泡一体机深度选型:如何匹配最佳方案 - 速递信息
  • Pwndocker常见问题解决:libc版本兼容性与依赖库问题排查
  • 2026温州放心贵金属回收,CCIC 中检授权收黄金回收铂金回收白银回收持证实体门店 - 中安检金银铂钻回收

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号