RAG - 檢索增強生成

第一部分:RAG 詳解

一、RAG 是什么?

RAG(Retrieval-Augmented Generation,檢索增強生成)是一種將信息檢索(或知識檢索)與大語言模型(LLM)的生成能力相結合的技術框架。

它的核心思想是:在讓大模型回答問題之前,先從外部知識庫中檢索出與問題相關的信息,然后將這些信息作為上下文,連同問題一起交給大模型,讓模型基于這些可靠的上下文來生成答案。

你可以把它想象成一個“開卷考試”:

  • 傳統LLM(閉卷考試):模型只依賴它訓練時學到的、固化在參數中的知識。如果問題超出它的知識范圍或知識過時,它就可能“胡編亂造”(幻覺)。

  • RAG(開卷考試):模型允許在答題前“翻書”(從外部知識庫檢索文檔)。它根據“書上”找到的相關內容來組織答案,因此答案更準確、更可靠,也更能引用最新信息。

二、為什么需要 RAG?它解決了什么問題?

盡管大語言模型能力強大,但它們存在幾個固有缺陷:

  1. 知識滯后/靜態性:模型的訓練數據有截止日期,無法獲取和知曉之后發生的事件或發布的信息。

  2. 事實性錯誤/“幻覺”:模型可能會生成看似合理但實際不準確或完全錯誤的內容。

  3. 對內部/私有知識的無知:模型無法知曉訓練數據之外的、公司內部的私有文檔、數據庫、專業知識等。

  4. 可追溯性與可信度:用戶無法核實模型答案的來源,難以判斷其可信度。

RAG 正是為了解決這些問題而生。它通過引入外部知識源,讓模型能夠:

  • 獲取最新知識:外部知識庫可以隨時更新。

  • 提高答案準確性:基于檢索到的事實生成答案,減少幻覺。

  • 利用私有知識:可以將公司內部的Wiki、PDF、數據庫等作為檢索源。

  • 提供引用來源:答案可以追溯到檢索出的原始文檔,增強可信度。

三、RAG 的工作原理與流程

RAG 的工作流程可以清晰地分為三個核心階段:

第1步:檢索(Retrieval)

  • 輸入:用戶查詢(Query)。

  • 過程

    1. 索引創建(預處理,離線進行):將外部知識庫(如公司文檔、網頁、手冊等)進行分塊(Chunking),然后通過嵌入模型(Embedding Model)將每個文本塊轉換為一個高維向量(Vector),并存入向量數據庫(Vector Database)。

    2. 實時檢索:當用戶提問時,使用同一個嵌入模型將用戶查詢也轉換為向量。

    3. 相似度搜索:在向量數據庫中,尋找與“查詢向量”最相似的“文本塊向量”。通常使用余弦相似度等度量方式。

  • 輸出:一組與用戶查詢最相關的文本片段(Contexts)。

第2步:增強(Augmentation)

  • 過程:將上一步檢索到的相關文本片段(Contexts)和原始的用戶查詢(Query)按照預設的提示模板(Prompt Template)組合成一個新的、增強后的提示(Augmented Prompt)。

  • 示例模板

    “請根據以下提供的信息,回答用戶的問題。如果提供的信息不足以回答問題,請直接說‘根據已知信息無法回答該問題’。

    【提供的信息】:
    {retrieved_contexts}

    【用戶問題】:
    {user_query}

    【回答】:”

第3步:生成(Generation)

  • 輸入:增強后的提示(Augmented Prompt)。

  • 過程:將這個完整的提示輸入給大語言模型(如 GPT-4、Llama 等)。LLM 會基于提供的上下文信息,而不是僅憑內部記憶,來生成最終答案。

  • 輸出:一個準確、有據可依的回答。


第二部分:實際運用

RAG 的應用場景極其廣泛,幾乎所有需要基于特定、最新或私有知識進行問答的場景都可以使用。

一、典型應用場景
  1. 智能客服與問答機器人

    • 場景:代替傳統的關鍵詞匹配FAQ。用戶可以向機器人詢問產品功能、報錯信息、售后服務政策等。

    • 如何運用:將產品手冊、幫助文檔、常見問題解答、最新公告等文檔導入向量數據庫。機器人能基于這些最新、最準確的文件給出精細化的答案,而不是籠統的回復。

  2. 企業知識庫與內部助手

    • 場景:新員工想了解公司政策、報銷流程;程序員想查詢內部API文檔;財務人員想查找某個財務制度。

    • 如何運用:將公司內部的Wiki、Confluence、HR手冊、項目文檔、代碼文檔、會議紀要等全部接入RAG系統。創建一個企業內部版的“ChatGPT”,員工可以隨時提問并獲得精準答案,極大提升信息檢索效率。

  3. 內容分析與研究報告生成

    • 場景:分析師需要快速理解一份冗長的財報或一篇復雜的學術論文;律師需要快速梳理案件卷宗的重點。

    • 如何運用:將目標文檔(如100頁的PDF財報)灌入RAG系統。然后可以提問:“總結一下該公司第三季度的主要財務風險是什么?”或“列出該論文提出的三個主要創新點”。系統能迅速定位到文檔中的關鍵部分并生成摘要。

  4. AI 伴學與教育

    • 場景:學生針對某本特定的教科書或課程材料進行提問。

    • 如何運用:將教科書的內容構建成知識庫。學生可以問:“用書上的例子解釋一下牛頓第一定律”或“第五章的主要知識點有哪些?”。AI的回答將嚴格基于教材內容,避免誤導學生。

  5. 新一代搜索引擎

    • 場景:用戶不僅需要看到網頁鏈接,更需要一個直接、整合的答案。

    • 如何運用:搜索引擎可以先檢索相關網頁,提取關鍵信息,然后通過RAG框架生成一個直接回答用戶問題的摘要片段(就像Google的“AI Overview”和Bing的Copilot所做的那樣)。

二、技術棧與工具

實現一個RAG系統通常涉及以下工具:

  • 文檔加載器LangChain,?LlamaIndex?(用于加載TXT、PDF、PPT、HTML等各種格式的文檔)

  • 文本分塊LangChain,?LlamaIndex?(提供多種分塊策略和算法)

  • 嵌入模型OpenAI的text-embedding-ada-002,?Cohere的Embed模型, 開源的sentence-transformers模型(如all-MiniLM-L6-v2

  • 向量數據庫Chroma(輕量簡單),?Pinecone(云托管,強大),?Weaviate,?Qdrant,?Milvus

  • 大語言模型OpenAI的GPT系列,?Anthropic的Claude系列, 開源的Llama 2/3,?Mistral

  • 框架與編排LangChain?或?LlamaIndex?是首選的框架,它們將以上所有組件無縫地連接起來,簡化開發流程。

三、挑戰與改進方向

雖然RAG強大,但要構建一個生產級的高效系統,仍需考慮以下挑戰:

  • 檢索質量:如果檢索到的文檔不相關,再好的LLM也生成不出好答案。改進方法包括:優化分塊大小、使用更好的嵌入模型、進行重排序(Re-ranking)等。

  • 提示工程:如何設計提示模板,才能讓LLM最好地利用上下文,并遵循指令(如“不知道就說不知道”)。

  • 處理多模態數據:未來的RAG不僅能處理文本,還能處理圖片、表格、音頻等信息。

  • “推理-行動”模式:更復雜的Agent(智能體)可以決定何時調用檢索工具、如何迭代檢索,甚至調用其他API來完成任務。

總結

RAG 通過巧妙地結合檢索系統的精確性和大語言模型的生成能力,有效地彌補了后者的主要缺陷。它已成為當前構建可信、可靠、基于知識的AI應用的最主流和最實用的架構范式。從智能客服到企業知識管理,其應用前景非常廣闊,是將AI技術落地產生實際業務價值的關鍵路徑之一。

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

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

相關文章

大數據畢業設計選題推薦-基于大數據的分化型甲狀腺癌復發數據可視化分析系統-Spark-Hadoop-Bigdata

?作者主頁:IT研究室? 個人簡介:曾從事計算機專業培訓教學,擅長Java、Python、微信小程序、Golang、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦??? Java項目 Python…

Spring Bean掃描

好的,沒有問題。基于我們之前討論的內容,這是一篇關于 Spring Bean 掃描問題的深度解析博客。Spring Bean掃描作者:Gz | 發布時間:2025年9月9日🎯 Spring如何找到你的Bean? 首先要理解原理。Spring的組件掃…

【 運維相關】-- HTTP 壓測/負載發生器之新秀 oha

目錄 oha 項目分析(hatoo/oha) 一、概述 二、安裝 三、快速上手 三、常用參數(摘選) 四、輸出解讀(終端 TUI) 五、與其它工具對比 六、最佳實踐 七、注意事項 八、參考 oha 項目分析(h…

淘寶閃購基于FlinkPaimon的Lakehouse生產實踐:從實時數倉到湖倉一體化的演進之路

摘要:本文整理自淘寶閃購(餓了么)大數據架構師王沛斌老師在 Flink Forward Asia 2025 城市巡回上海站的分享。引言在數字化轉型的浪潮中,企業對實時數據處理的需求日益增長。傳統的實時數倉架構在面對業務快速變化和數據規模爆炸性增長時,逐漸…

Android應用添加日歷提醒功能

功能 在安卓應用里調用系統日歷&#xff0c;直接創建一個帶提醒的日歷事件&#xff0c;甚至不需要跳轉到日歷界面&#xff0c;只需要獲取系統日歷的讀取權限即可。 需要的權限 在AndroidManifest.xml里添加 <uses-permission android:name"android.permission.READ_CAL…

?Git Bisect 二分查找定位錯誤總結

# Git Bisect 二分查找指南## 1. 基本原理&#xff08;ASCII示意圖&#xff09; 假設提交歷史是一條時間線&#xff0c;Ggood&#xff08;正常&#xff09;&#xff0c;Bbad&#xff08;異常&#xff09;&#xff1a;提交順序: G --- G --- G --- B --- B --- B | | | 初始正常…

ThingsKit物聯網平臺 v2.0.0 發布|前端UI重構、底層架構升級

v2.0.0 Release發布日期&#xff1a;2025/08/25 代碼標簽&#xff1a;v2.0.0_Release&#x1f947; 新增功能國標級聯&#xff08;支持上級、下級國標級聯&#xff09;視頻回放、錄像計劃&#xff08;用戶可以通過錄像計劃生成對應的視頻回放并查看&#xff09;Modbus_TCP協…

Lua > Mac Mini M4安裝openresty

Mac Mini M4安裝openresty 主要參考 https://www.cnblogs.com/helios-fz/p/15703260.html brew uninstall nginxbrew update brew install pcre openssl #brew install geoip# brew tap openresty/brew # brew install openresty # brew install openresty/brew/openresty# VER…

【多線程案例】:單例模式

多線程案例8.1 單例模式餓漢模式懶漢模式懶漢模式-單線程版懶漢模式-多線程版懶漢模式-多線程版(改進)8.1 單例模式 單個實例. 在一個 java 進程中, 要求指定的類,只能有唯–個實例。&#xff08;嘗試 new 多個實例的時候, 就會直接編譯報錯&#xff09; 單例模式是校招中最常…

【Python/Pytorch】-- 貝葉斯定理

文章目錄 文章目錄01 貝葉斯定理的理解02 在MRI重建領域應用01 貝葉斯定理的理解 貝葉斯定理的基本公式&#xff1a;P(A|B)P(B|A)*P(A) / P(B) 首先是如何理解這個公式&#xff1f; 在B事件發生的條件下&#xff0c;A發生的概率 P(A|B) 在B事件發生的條件下&#xff0c;A和B同…

子網掩碼的隱形陷阱:為何能ping通卻無法HTTPS訪問

問題現象深度解析在近期企業網絡維護中&#xff0c;運維團隊發現一個具有教學意義的典型案例&#xff1a;某臺部署在10.165.111.0/24網段的業務服務器&#xff08;10.165.111.71&#xff09;可以成功ping通目標中間件主機(10.165.110.11)&#xff0c;但通過HTTPS協議訪問https:…

【ArcGIS】如何編輯圖層的屬性表

GIS按屬性選擇后刪除所選項呈現灰色_arcgis刪除字段灰色-CSDN博客

大數據各組件flume,datax,presto,DolphinScheduler,findBI在大數據數倉架構中的作用和功能。

一、數據倉庫核心價值鋪墊在講具體技術前&#xff0c;先明確數據倉庫&#xff08;Data Warehouse&#xff0c;簡稱數倉&#xff09; 的核心作用&#xff1a; 數據倉庫是 “整合企業多源數據、按業務主題組織、支持決策分析” 的結構化數據存儲體系&#xff0c;核心價值是打破數…

React From表單使用Formik和yup進行校驗

一、Formik的使用 官方文檔地址&#xff1a;https://formik.org/docs/tutorial#validation 首先安裝依賴 yarn add formik2.導入并初始化 import { useFormik } from formik; initialValues&#xff1a;初始化 輸入框的密碼和賬號 onSubmit&#xff1a;當點擊提交按鈕時&am…

netty-scoket.io路徑配置

1、服務端代碼 package com.yh.service.socket;import com.corundumstudio.socketio.SocketIOServer; import com.corundumstudio.socketio.store.RedissonStoreFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory…

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題

20250910榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏閃屏的問題 2025/9/5 15:44緣起&#xff1a;榮品RD-RK3588-MID開發板在Android13系統下解決點卡迪的屏。 按 POWER按鍵 關機之后&#xff0c;2s之內再次短按 POWER按鍵&#xff0c;開機之后屏會抖動。 2s后短按…

正態分布 - 計算 Z-Score 的 無偏估計

正態分布 - 計算 Z-Score 的 無偏估計 flyfish Z-Score公式與計算步驟 1 公式&#xff08;樣本Z-Score&#xff09; 實際應用中&#xff0c;我們幾乎不知道“總體均值/標準差”&#xff0c;所以常用樣本數據計算&#xff1a; zixi?xˉsz_i \frac{x_i - \bar{x}}{s}zi?sxi??…

ai生成文章,流式傳輸(uniapp,微信小程序)

1.環境nutui-uniappvue3tsunocss2.功能源碼包含ai生成邏輯&#xff0c;內容生成實時打字機功能&#xff0c;ai數據處理等<script setup lang"ts"> import {queryAIParams, } from /api/pagesA import { submitFn } from /api/aiimport Navbar from /component…

Linux設備內存不足如何處理

[rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 31208 14317 1280 1551 15610 14657 Swap: 15927 2781 13146 [rootlocalhost ~]#從 free -m 輸出來看&…

中間件八股

文章目錄RedisRedis為什么快&#xff1f;Redis Redis為什么快&#xff1f; 首先它是內存數據庫&#xff0c;所有數據直接操作內存而非磁盤&#xff0c;避免了 I/O 瓶頸&#xff1b;其次采用單線程模型&#xff0c;消除了多線程切換的開銷&#xff0c;同時通過非阻塞 I/O 多路…