SpringAI--RAG知識庫

SpringAI–RAG知識庫

RAG概念

什么是RAG?

RAG(Retrieval-Augmented Genreation,檢索增強生成)是一種結合信息檢索技術和AI內容生成的混合架構,可以解決大模型的知識時效性限制和幻覺問題。

RAG在大語言模型生成回答之前,會先從外部知識庫中檢索相關信息,然后將這些檢索到的內容作為額外上下文提供給模型,引導其生成更準確、更相關的回答。

簡單了解傳統AI模型和RAG增強模型區別:

特性傳統AIRAG增強模型
知識失效性受訓練數據截止日期限制可接入最新知識庫
領域專業性泛華知識,專業深度有限可接入專業領域知識庫
響應準確性可能產生幻覺基于檢索的事實依據
可控性依賴原始訓練可通過知識庫定制輸出
資源消耗較高(需要大模型參數)模型可更小,結合外部知識

RAG工作流程

RAG技術實現主要包含以下4個核心步驟:

  • 文檔收集和切割
  • 向量轉換和存儲
  • 文檔過濾和檢索
  • 查詢增強和關聯
文檔收集和切割
  • 文檔收集:從各種來源(網頁、PDF、數據庫等)收集原始文檔。
  • 文檔預處理:清洗、標準化文檔格式(markdown格式、docx格式等)。
  • 文檔切割:將長文檔分割成適當大小的片段(俗稱chunks)。
    • 基于固定大小(如512個token)
    • 基于語義邊界(如段落、章節)
    • 基于遞歸分割策略(如遞歸字符n-gram切割)

向量轉換和存儲
  • 向量轉換:使用Embedding模型將文本塊轉換為高維向量表示,可以捕獲到文檔的語義特征。
  • 向量存儲:將生成的向量和對應文本存儲向量數據庫,支持高效的相似性搜索。

文檔過濾和檢索
  • 查詢處理:將用戶問題也轉換為向量表示。
  • 過濾機制:基于元數據、關鍵詞或自定義規則進行過濾。
  • 相似度搜索:在向量數據庫中查找與問題向量最相似的文檔塊,常用的相似度搜索算法有余弦相似度、歐氏距離等。
  • 上下文組裝:將檢索到的多個文檔塊組裝成連貫的上下文。

查詢增強和關聯
  • 提示詞組裝:將檢索到的相關文檔與用戶問題組合成增強提示。
  • 上下文融合:大模型基于增強提示生成回答。
  • 源引用:在回答中添加信息來源引用。
  • 后處理:格式化、摘要或其他處理以優化最終輸出。

完整工作流程

RAG相關技術

Embedding和Embedding模型

Embedding嵌入是將高維離散數據(如文字、圖片)轉換為低維連續向量的過程。這些向量能在數學空間中表示原始數據的語義特征,使計算機能夠理解數據間的相似性。

Embedding模型是執行這種轉換算法的機器學習模型,如Word2Vec(文本)、ResNet(圖像)等。不同的Embedding模型產生的向量表示和維度數不同,一般維度越高表達能力越強,可以捕獲更豐富的語義信息和更細微的差別,但同樣占用更多存儲空間。

向量數據庫

向量數據庫是專門存儲和檢索向量數據的數據庫系統。通過高效索引算法實現快速相似性搜索,支持K近鄰查詢等操作。

注意,并不是只有向量數據庫才能存儲向量數據,只不過與傳統數據庫不同,向量數據庫優化了高維向量的存儲和檢索。

AI的流行帶火了一波向量數據庫和向量存儲,比如Milvus、Pinecone等,此外,一些傳統數據庫也可以通過安裝插件實現向量存儲和檢索,比如PGVector、Redis Stack的RediSearch等。

召回

召回是信息檢索中的第一階段,目標是從大規模數據集中快速篩選出可能相關的候選項子集。強調速度和廣度,而非精確度

精排和Rank模型

精排(精確排序)是搜索/推薦系統的最后階段,使用計算復雜度更高的算法,考慮更多特征和業務規則,對少量候選項進行更復雜、精細的排序。

Rank模型(排序模型)負責對召回階段篩選出的候選集進行精確排序,考慮多種特征評估相關性。

現代Rank模型通常基于深度學習,如BERT、LambdaMART等,綜合考慮查詢與候選項的相關性、 用戶歷史行為等因素。

混合檢索策略

混合檢索策略結合多種檢索方法的優勢,提高搜索效果。常見組合包括關鍵詞檢索、語義檢索、知識圖譜等。

比如在AI大模型開發平臺Dify中,就為用戶提供了“基于全文檢索的關鍵詞搜索+基于向量檢索的語義檢索”的混合檢索策略,用戶還可以自己設置不同檢索方式的權重。

RAG實戰:SpringAI + 本地知識庫

我們要對自己準備好的知識庫文檔進行處理,然后保存到向量數據庫中。這個過程俗稱ETL(抽取、轉換、加載),SpringAI提供了對ETL的支持。

ETL的3大核心組件,按照順序執行:

  • DocumentReader:讀取文檔,得到文檔列表。
  • DocumentTransformer:轉換文檔,得到處理后的文檔列表。
  • DocumentWriter:將文檔列表保存到存儲中(可以是向量數據庫,也可以是其他存儲)。
文檔準備

demo文檔

文檔讀取

讀取markdown文檔
demo文檔讀取

向量存儲和轉換

為了實現方便,先使用SpringAI內置的基于內存讀寫的向量數據庫SimpleVectorStore來保存文檔。

SimpleVectorStore實現了VectorStore接口,而VectorStore接口集成了DocumentWriter,所以具備文檔寫入能力。

通過下面SimpleVectorStore的源碼可以了解到,在將文檔寫入到數據庫前,會先調用Embedding大模型將文檔轉換為向量,實際保存到數據庫中的是向量類型的數據。

實現初始化向量數據庫并保存文檔的方法:
文檔存入向量數據庫(內存實現)

查詢增強

SpringAI通過Advisor特性提供了開箱即用的RAG功能。主要是QuestionAnswerAdvisor問答攔截器和RetrievalAugmentationAdvisor檢索增強攔截器,前者更簡單易用,后者更靈活強大。

查詢增強

測試

測試本地知識庫

基于PGVector實現向量存儲

多數據源整合

PgVectorStoreConfig.java

/*** 向量檢索* 查詢增強原理:*  向量數據庫存儲著AI模型本身不知道的數據,當用戶問題發送給AI模型時,*  QuestionAnswerAdvisor會查詢向量數據庫,獲取與用戶問題相關的文檔。*  然后從向量數據庫返回的響應會被附加到用戶文本中,為AI模型提供上下文,幫助AI模型生成回答* 存儲在pgVector向量數據庫中*/
public String doChat4RagPgVector(String message, String chatId) {ChatResponse chatResponse = chatClient.prompt().user(message).advisors(spec -> spec.param(CHAT_MEMORY_CONVERSATION_ID_KEY, chatId).param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 5))// QuestionAnswerAdvisor 查詢增強,在調用大模型前會檢索pgVectorStore中的數據,拼接到用戶的Prompt中.advisors(new QuestionAnswerAdvisor(pgVectorStore))// MySQL存儲對話記憶.advisors(new MessageChatMemoryAdvisor(chatMemory)).call().chatResponse();return chatResponse.getResult().getOutput().getText();
}

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

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

相關文章

【PhysUnits】14 二進制數的標準化表示(standardization.rs)

一、源碼 這段代碼主要用于處理二進制數的標準化表示。它定義了兩個特質(trait) IfB0 和 IfB1&#xff0c;以及它們的實現&#xff0c;用于處理二進制數的前導零及前導一的簡化。 use super::basic::{B0, B1, Z0, N1, Integer, NonZero, NonNegOne};/// 處理 B0<H> 類型…

將 ubutun 的網絡模式 從NAT 改到 橋接模式后,無法上網,linux 沒有IP地址 的解決方案

首先要將 ubutun 的網絡模式設置為橋接模式 這里再從 NAT 模式改動成 橋接模式的時候&#xff0c;還出現了一個問題。改成橋接模式后&#xff0c;linux沒有ip地址了。原因是 不知道什么時候 將 虛擬網絡編輯器 中的值改動了 要選擇這個 自動 選項

多模態大語言模型arxiv論文略讀(九十)

Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Diffusion-based Contract Approach ?? 論文標題&#xff1a;Hybrid RAG-empowered Multi-modal LLM for Secure Data Management in Internet of Medical Things: A Di…

電腦主板VGA長亮白燈

電腦主板VGA長亮白燈 起因解決方法注意事項&#xff1a; 起因 搬家沒有拆機整機在車上晃蕩導致顯卡松動接觸不良&#xff08;一般VGA長亮白燈都和顯卡有關&#xff0c;主要排查顯卡&#xff09; 解決方法 將顯卡拆下重新安裝即可 注意事項&#xff1a; 不可直接拔下顯卡&a…

【監控】pushgateway中間服務組件

Pushgateway 是 Prometheus 生態中的一個中間服務組件&#xff0c;以獨立工具形式存在&#xff0c;主要用于解決 Prometheus 無法直接獲取監控指標的場景&#xff0c;彌補其定時拉取&#xff08;pull&#xff09;模式的不足。 其用途如下&#xff1a; 突破網絡限制&#xff1…

打造AI智能旅行規劃器:基于LLM和Crew AI的Agent實踐

引言 今天來學習大佬開發的一個AI驅動的旅行規劃應用程序&#xff0c;它能夠自動處理旅行規劃的復雜性——尋jni找航班、預訂酒店以及優化行程。傳統上&#xff0c;這個過程需要手動搜索多個平臺&#xff0c;常常導致決策效率低下。 通過利用**代理型人工智能&#xff08;Age…

21. 自動化測試框架開發之Excel配置文件的測試用例改造

21. 自動化測試框架開發之Excel配置文件的測試用例改造 一、測試框架核心架構 1.1 組件依賴關系 # 核心庫依賴 import unittest # 單元測試框架 import paramunittest # 參數化測試擴展 from chap3.po import * # 頁面對象模型 from file_reader import E…

如何在電力系統中配置和管理SNTP時間同步?

在電力系統中配置和管理 SNTP 時間同步需結合行業標準&#xff08;如《DL/T 1100.1-2019》&#xff09;和分層架構特點&#xff0c;確保安全性、可靠性和精度適配。以下是具體操作指南&#xff0c;涵蓋架構設計、設備配置、安全管理、運維監控四大核心環節&#xff0c;并附典型…

MTK-關于HW WCN的知識講解

前言: 最近做項目過程中和硬件打交道比較多,現在關于整理下硬件的HW wcn的知識點 一 MTK常見的MT6631 Wi-Fi 2.4GHz 匹配調諧指南 ?拓撲結構選擇? 推薦采用并聯電容拓撲(?shunt cap topology?)代替并聯電感拓撲(?shunt inductor topology?),以減少潛在電路設計…

(1)課堂 1--5,這五節主要講解 mysql 的概念,定義,下載安裝與卸載

&#xff08;1&#xff09;謝謝老師&#xff1a; &#xff08;2&#xff09;安裝 mysql &#xff1a; &#xff08;3&#xff09;鏡像下載 &#xff0c;這個網址很好 &#xff1a; &#xff08;4&#xff09; 另一個虛擬機的是 zhang 123456 &#xff1a; 接著配置…

U-Boot ARMv8 平臺異常處理機制解析

入口點&#xff1a;arch/arm/cpu/armv8/start.S 1. 判斷是否定義了鉤子&#xff0c;如有則執行&#xff0c;否則往下走。執行save_boot_params&#xff0c;本質就是保存一些寄存器的值。 2. 對齊修復位置無關碼的偏移 假設U-Boot鏈接時基址為0x10000&#xff0c;但實際加載到0…

mysql安裝教程--筆記

一、Windows 系統安裝 方法1&#xff1a;使用 MySQL Installer&#xff08;推薦&#xff09; 1. 下載安裝包 訪問 MySQL 官網下載頁面&#xff0c;選擇 MySQL Installer for Windows。 2. 運行安裝程序 雙擊下載的 .msi 文件&#xff0c;選擇安裝類型&#xff1a; ? Developer…

投資策略規劃最優決策分析

目錄 一、投資策略規劃問題詳細 二、存在最優投資策略&#xff1a;每年都將所有錢投入到單一投資產品中 &#xff08;一&#xff09;狀態轉移方程 &#xff08;二&#xff09;初始條件與最優策略 &#xff08;三&#xff09;證明最優策略總是將所有錢投入到單一投資產品中…

NGINX HTTP/3 實驗指南安裝、配置與調優

一、HTTP/3 簡介 基于 QUIC&#xff1a;在 UDP 之上實現的多路復用傳輸&#xff0c;內置擁塞控制與前向糾錯&#xff0c;無需三次握手即可恢復連接。零 RTT 重連&#xff1a;借助 TLS 1.3&#xff0c;實現連接恢復時的 0-RTT 數據發送&#xff08;視底層庫支持&#xff09;。多…

編程日志5.28

string賦值操作 算法: #include<iostream> using namespace std; int main() { //1.字符串常量的賦值 string s1; s1 = "英雄哪里出來"; cout << s1 << endl; //2.字符串變量的賦值 string s2; s2 = s1; cout <…

AE的ai圖層導到Ai

AE的ai圖層導到ai 解決方法: 1、打開ai軟件&#xff0c;不用新建&#xff0c;留在那就行。 2、在AE里選中任意一個ai文件圖層&#xff0c;只需同時按住ctrl和英文字母鍵&#xff0c;圖層就會自動全部導入到ai中 英文字母鍵的詳情可以參考&#xff1a;http://www.yayihouse.co…

【Springboot+LangChain4j】Springboot項目集成LangChain4j(下)

前置條件&#xff1a;根據上篇文章完成springboot初步集成LangChain4j 【SpringbootLangChain4j】根據LangChain4j官方文檔&#xff0c;三分鐘完成Springboot項目集成LangChain4j&#xff08;上&#xff09;-CSDN博客 但是接口方法中&#xff0c;關于大模型的配置都是寫死的&a…

好壞質檢分類實戰(異常數據檢測、降維、KNN模型分類、混淆矩陣進行模型評估)

任務 好壞質檢分類實戰 task: 1、基于 data_class_raw.csv 數據&#xff0c;根據高斯分布概率密度函數&#xff0c;尋找異常點并剔除 2、基于 data_class_processed.csv 數據&#xff0c;進行 PCA 處理&#xff0c;確定重要數據維度及成分 3、完成數據分離&#xff0c;數據分離…

以少學習:通過無標簽數據從大型語言模型進行知識蒸餾

Learning with Less: Knowledge Distillation from Large Language Models via Unlabeled Data 發表&#xff1a;NNACL-Findings 2025 機構&#xff1a;密歇根州立大學 Abstract 在實際的自然語言處理&#xff08;NLP&#xff09;應用中&#xff0c;大型語言模型&#xff08…

EasyExcel使用

EasyExcel 簡介 EasyExcel 是阿里巴巴開源的一個基于 Java 的簡單、省內存的讀寫 Excel 工具。在處理大量數據時&#xff0c;它能極大地減少內存占用&#xff0c;提高性能。下面從依賴配置、模板使用到代碼調用&#xff0c;進行詳細介紹。 添加依賴 若要在項目里使用 EasyEx…