Spring AI之RAG入门
目录
1. 什么是RAG
2. RAG典型应用场景
3. RAG核心流程
3.1. 检索阶段
3.2. 生成阶段
4. 使用Spring AI实现RAG
4.1. 创建项目
4.2. 配置application.yml
4.3. 安装ElasticSearch和Kibana
4.3.1. 安装并启动ElasticSearch
4.3.2. 验证ElasticSearch是否启动成功
4.3.3. 安装并启动Kibana
4.3.4. 验证Kibana是否启动成功
4.4. 实现ETL
4.5. 实现相似性检索
4.6. 结合检索结果生成答案
4.7. 创建controller测试接口
4.8. 启动应用并测试
4.8.1. 启动应用后到kibana查看自动创建的index编辑
4.8.2. 调用controller的loadDocuments接口导入数据到ES编辑
4.8.3. 调用controller的rag接口测试rag检索
5. 参考文档
前面的博文《Spring AI介绍及大模型对接》介绍了Spring AI的Models组件及聊天模型对接,本篇文章接着介绍下RAG组件,让我们基于Spring简洁的API和模块化设计快速集成RAG能力,掌握使用Spring AI构建企业级智能问答系统、动态知识引擎等场景应用的开发方法,为打造专业领域的AI解决方案提供可靠技术路径。
1. 什么是RAG
检索增强生成(Retrieval-Augmented Generation,RAG) 是一种结合信息检索与生成式AI的技术,它的核心思想是在生成答案前,先从外部知识库中检索与用户问题相关的信息,并将这些信息作为提示(Prompt)输入模型,从而弥补LLM的静态知识局限。
2. RAG典型应用场景
- 智能问答系统:如企业内部知识库问答,用户可直接提问“公司年假政策是什么?”,系统检索员工手册并生成答案
- 多轮对话增强:结合聊天会话内存(Chat Conversation Memory),支持上下文连贯的交互(如客服场景中的连续追问)
- 文档分析与摘要:从长文本(如法律合同、研究论文)中提取关键信息并生成结构化摘要
3. RAG核心流程
RAG的实现可分为检索和生成两大阶段。
3.1. 检索阶段
- 数据准备
通过ETL流程(提取、转换、加载)处理外部知识库
- 相似性检索
将用户查询向量化,并在数据库中搜索最相关的文档片段(如通过余弦相似度算法)
3.2. 生成阶段
- 上下文注入
将检索结果与用户问题结合,构造提示模板。例如:
以下是相关文档:[检索到的内容]
用户问题:[原始问题]
请基于上述文档生成回答:
- 生成优化
通过调整提示词设计(如指定输出格式、限制回答范围)和模型参数(如温度值、最大生
成长度),控制生成结果的质量与合规性
4. 使用Spring AI实现RAG
理解了上面介绍的RAG核心流程,接下来我们用Spring AI + 智谱AI(语言模型&向量模型) + elasticsearch(向量数据库)去编写代码实现属于我们自己的RAG。
4.1. 创建项目
- 使用idea新建项目
- 选择web和ai相关依赖
(这里因为智谱也能用OpenAI的API对接,所以引入了OpenAI的依赖,当然按照spring ai官方
文档引入spring-ai-starter-model-zhipuai也行)
- 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.6</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springairag</artifactId><version>0.0.1-SNAPSHOT</version><name>springairag</name><description>springairag</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</spring-ai.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.ai&l