目錄
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