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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83467.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mysql數據庫實現分庫分表,讀寫分離中間件sharding-sphere

一 概述 1.1 sharding-sphere 作用&#xff1a; 定位關系型數據庫的中間件&#xff0c;合理在分布式環境下使用關系型數據庫操作&#xff0c;目前有三個產品 1.sharding-jdbc&#xff0c;sharding-proxy 1.2 sharding-proxy實現讀寫分離的api版本 4.x版本 5.x版本 1.3 說明…

運維視角下的廣告系統之理解廣告索引級聯

廣告索引中為什么要級聯 這里的“級聯”一般指的是多層索引結構&#xff0c;也叫級聯索引&#xff08;Cascade Index 或 Multi-level Index&#xff09;。 在廣告系統的索引中&#xff0c;級聯設計有重要作用&#xff0c;主要原因如下&#xff1a; 1. 多維特征篩選的需求 廣…

2025年5月24日系統架構設計師考試題目回顧

當前僅僅是個人用于記錄&#xff0c;還未做詳細分析&#xff0c;待更新… 綜合知識 設 x,y 滿足約束條件&#xff1a;x-1>0, x-y<0, x-y-x<0, 則 y/x 的最大值是()。 A. 3 B. 2 C. 4 D. 1 申請軟件著作權登記時應當向中國版本保護中心提交軟件的鑒別材料&#xff…

3D-激光SLAM筆記

目錄 定位方案 編譯tbb ros2humble安裝 命令 colcon commond not found 柵格地圖生成&#xff1a; evo畫軌跡曲線 安裝gtsam4.0.2 安裝ceres-solver1.14.0 定位方案 1 方案一&#xff1a;改動最多 fasterlio 建圖&#xff0c;加閉環優化&#xff0c;參考fast-lio增加關…

貪心算法應用:分數背包問題詳解

貪心算法與分數背包問題 貪心算法&#xff08;Greedy Algorithm&#xff09;是算法設計中一種重要的思想&#xff0c;它在許多經典問題中展現出獨特的優勢。本文將用2萬字篇幅&#xff0c;深入剖析貪心算法在分數背包問題中的應用&#xff0c;從基礎原理到Java實現細節&#x…

PyTorch——非線性激活(5)

非線性激活函數的作用是讓神經網絡能夠理解更復雜的模式和規律。如果沒有非線性激活函數&#xff0c;神經網絡就只能進行簡單的加法和乘法運算&#xff0c;沒法處理復雜的問題。 非線性變化的目的就是給我們的網絡當中引入一些非線性特征 Relu 激活函數 Relu處理圖像 # 導入必…

iOS 電子書聽書功能的實現

在 iOS 應用中實現電子書聽書&#xff08;文本轉語音&#xff09;功能&#xff0c;可以通過系統提供的 AVFoundation 框架實現。以下是詳細實現步驟和代碼示例&#xff1a; 核心步驟&#xff1a; 導入框架創建語音合成器配置語音參數實現播放控制處理后臺播放添加進度跟蹤 完整…

ES中must與filter的區別

在 Elasticsearch 的布爾查詢&#xff08;bool query&#xff09;中&#xff0c;must 和 filter 是兩個核心子句&#xff0c;它們的核心區別在于 是否影響相關性評分&#xff0c;這直接決定了它們在查詢性能、使用場景和結果排序上的差異。以下是詳細對比&#xff1a; 一、核心…

vscode實時預覽編輯markdown

vscode實時預覽編輯markdown 點擊vsode界面&#xff0c;實現快捷鍵如下&#xff1a; 按下快捷鍵 CtrlShiftV&#xff08;Windows/Linux&#xff09;或 CommandShiftV&#xff08;Mac&#xff09;即可在側邊欄打開 Markdown 預覽。 效果如下&#xff1a;

Android第十一次面試flutter篇

Flutter基礎? 在 Flutter 中&#xff0c;?三棵樹&#xff08;Widget Tree、Element Tree、RenderObject Tree&#xff09;?? 是框架的核心設計&#xff0c;它們協同工作以實現高效的 UI 渲染和更新機制。 ?1. Widget Tree&#xff08;Widget 樹&#xff09;?? ?是什么…

多線程編程中的數據競爭與內存可見性問題解析

引言 在多線程編程中&#xff0c;看似簡單的代碼往往隱藏著復雜的并發問題。今天我們來分析一個經典的生產者-消費者場景&#xff0c;看看在多核CPU環境下可能出現的各種"意外"情況。 問題代碼分析 讓我們先看看這段看似正常的C#代碼&#xff1a; using System; u…

Linux 與 Windows:哪個操作系統適合你?

Linux vs Windows:系統選擇的關鍵考量 在數字化轉型浪潮中,操作系統作為底層基礎設施的重要性日益凸顯。Linux與Windows作為主流選擇,其差異不僅體現在技術架構上,更深刻影響著開發效率、運維成本與安全性。本文將從??7個核心維度??展開對比分析,并提供典型應用場景建…

佰力博科技與您探討低溫介電溫譜測試儀的應用領域

低溫介電溫譜測試應用領域有如下&#xff1a; 一、電子材料&#xff1a; 低溫介電溫譜測試儀廣泛應用于電子材料的性能測試&#xff0c;如陶瓷材料、半導體材料、壓電材料等。通過該設備&#xff0c;可以評估材料在高溫或低溫環境下的介電性能&#xff0c;為材料的優化和應用提…

Windows 下徹底刪除 VsCode

徹底刪除 VS Code (Visual Studio Code) 意味著不僅要卸載應用程序本身&#xff0c;還要刪除所有相關的配置文件、用戶數據、插件和緩存。這可以確保你有一個完全干凈的狀態&#xff0c;方便你重新安裝或只是徹底移除它。 重要提示&#xff1a; 在執行以下操作之前&#xff0c…

STM32與GD32標準外設庫深度對比

近年來,隨著全球芯片短缺和市場價格波動,工程師們開始尋求對常用MCU的替代方案。在STM32因產能受限而頻頻漲價的背景下,GD32作為國產替代的重要選項,獲得了越來越多的關注。尤其是GD32F103系列,由于其在硬件封裝、功能特性乃至軟件支持上的“高相似度”,成為STM32F103的熱…

使用Redis的四個常見問題及其解決方案

Redis 緩存穿透 定義&#xff1a;redis查詢一個不存在的數據&#xff0c;導致每次都查詢數據庫 解決方案&#xff1a; 如果查詢的數據為空&#xff0c;在redis對應的key緩存空數據&#xff0c;并設置短TTL。 因為緩存穿透通常是因為被惡意用不存在的查詢參數進行壓測攻擊&…

Java高級 | 【實驗一】Spring Boot安裝及測試 最新

隸屬文章&#xff1a;Java高級 | &#xff08;二十二&#xff09;Java常用類庫-CSDN博客 目錄 一、SpringBoot的特點 二、Spring Boot安裝及測試 &#xff08;一&#xff09;安裝Intellij IDEA &#xff08;二&#xff09;安裝MySQL &#xff08;三&#xff09;安裝postma…

Oracle RMAN自動恢復測試腳本

說明 此恢復測試腳本&#xff0c;基于rman備份腳本文章使用的fullbak.sh做的備份。 數據庫將被恢復到RESTORE_LO參數設置的位置。 在恢復完成后&#xff0c;執行一個測試sql,確認數據庫恢復完成&#xff0c;數據庫備份是好的。恢復測試數據庫的參數&#xff0c;比如SGA大小都…

從Java的JDK源碼中學設計模式之裝飾器模式

裝飾器模式是一種極具彈性的結構型設計模式&#xff0c;它允許我們通過組合的方式動態擴展對象功能而無需修改原有結構。本文將通過JDK源碼中的實際應用和通俗易懂的代碼示例&#xff0c;帶你深入了解這一強大模式的精髓。 裝飾器模式核心原理 裝飾器模式的核心思想&#xff…

調教 DeepSeek - 輸出精致的 HTML MARKDOWN

【序言】 不知道是不是我閑的蛋疼&#xff0c;對百度AI 和 DeepSeek 的回答都不太滿意。 DeepSeek 回答句子的引用鏈接&#xff0c;始終無法準確定位。有時鏈接只是一個域名&#xff0c;有時它給的鏈接是搜索串如: baidu.com/?q"搜索內容"。 百度AI 回答句子的引用…