RAG從入門到放棄 前言
想象一下,你有一個非常聰明但是有點“健忘”的朋友——大型語言模型(LLM),比如 GPT 系列。它能寫詩、能編程、能跟你聊天,聽起來很厲害吧?但是,它所知道的知識都來自于訓(xùn)練它的海量數(shù)據(jù),這些數(shù)據(jù)是有時間范圍的,而且不包含你個人或者特定領(lǐng)域最新的、私有的信息。
當(dāng)你問它一些關(guān)于最近發(fā)生的事情,或者你公司內(nèi)部的知識時,它可能會胡編亂造(我們稱之為“AI幻覺”),或者干脆說不知道。這可就尷尬了。
這個時候,RAG 就派上用場了!它的核心思想很簡單:在 LLM 生成答案之前,先去外部的知識庫里檢索相關(guān)的信息,然后把這些信息“喂”給 LLM,讓它基于檢索到的信息來生成更準(zhǔn)確、更可靠的答案。
你可以把 RAG 想象成給你的“健忘”朋友配備了一個“搜索引擎”和一個“記憶助手”。當(dāng)它需要回答問題時,先去“搜索引擎”里查閱相關(guān)的資料,然后結(jié)合自己的“記憶”來給出答案。

RAG(Retrieval Augmented Generation,檢索增強生成)是一種將大型語言模型(LLM) 與外部數(shù)據(jù)源(例如私有數(shù)據(jù)或最新數(shù)據(jù))連接的通用方法。它允許大型語言模型(LLM)使用外部數(shù)據(jù)來生成其輸出。
RAG 的流程大致 1.構(gòu)建知識庫 (Knowledge Base)
? 首先,你需要準(zhǔn)備好你的知識來源,這可以是各種各樣的文檔、網(wǎng)頁、數(shù)據(jù)庫等等。
? 然后,你需要將這些原始數(shù)據(jù)轉(zhuǎn)換成 LLM 可以理解和處理的格式。一個常見的做法是將文本分割成小的“chunk”(塊),并為每個 chunk 生成對應(yīng)的向量嵌入(embedding)。向量嵌入是一種將文本信息映射到高維空間的技術(shù),語義上相似的文本在向量空間中的距離也會比較近。
? 最后,你需要將這些向量嵌入存儲在一個專門的向量數(shù)據(jù)庫中,以便后續(xù)的快速檢索。常見的向量數(shù)據(jù)庫有 ChromaDB、Pinecone、FAISS 等。
? 當(dāng)用戶提出一個問題時,首先需要將這個問題也轉(zhuǎn)換成對應(yīng)的向量嵌入。
? 然后,利用這個問題的向量嵌入在向量數(shù)據(jù)庫中進行相似性搜索,找到與問題最相關(guān)的若干個知識塊。這個過程就像在圖書館里通過關(guān)鍵詞找到相關(guān)的書籍或文章。
? 將檢索到的相關(guān)知識塊和用戶的問題一起作為上下文(context)輸入給 LLM。
? LLM 基于這些檢索到的信息,結(jié)合自身的知識和理解能力,生成最終的答案。
那么 rag 究竟是什么呢,我想,通過一些架構(gòu)圖來理解是最簡單直觀的,但架構(gòu)圖也需要一定的挑選,這里我選取兩張比較容易看懂容易理解的圖,來輔助理解。
來自 PAI-RAG 地址:https://github.com/aigc-apps/PAI-RAG
整個圖的中心是大語言模型 LLM,RAG 的目標(biāo)就是通過外部檢索到的信息來增強 LLM 的生成能力,最終給出問題回答。整個流程可以分為構(gòu)建知識庫、檢索相關(guān)信息和增強生成答案三個主要階段。

這張圖清晰地展示了 RAG 的核心流程:
首先,將知識庫中的文檔轉(zhuǎn)化為向量并存儲。
然后,當(dāng)用戶提問時,也將其轉(zhuǎn)化為向量,并在向量數(shù)據(jù)庫中檢索出最相關(guān)的知識片段。
最后,將用戶的提問和檢索到的知識片段一起作為上下文輸入給大語言模型,讓模型基于這些信息生成更準(zhǔn)確、更相關(guān)的答案。
RAG應(yīng)用場景
理論上,RAG 在開放域問答、智能客服、專業(yè)文檔查詢等領(lǐng)域有著巨大應(yīng)用潛力。包括但不限于以下應(yīng)用:
**1.智能問答系統(tǒng):**例如企業(yè)內(nèi)部知識庫問答、專業(yè)領(lǐng)域問答、教育和研究等
**2.內(nèi)容創(chuàng)作與增強:**例如輔助寫作、新聞報道和內(nèi)容生成、產(chǎn)品描述和營銷文案生成等
**3.智能助手與聊天機器人:**客服機器人、個人知識助手、會議助手等
**4.信息檢索與知識管理:**企業(yè)知識管理平臺、搜索引擎優(yōu)化
**5.代碼生成與解釋:**代碼輔助生成、代碼解釋等。
6.多模態(tài):圖像、視頻、音頻檢索增強生成: 未來 RAG 不僅限于文本,還可以擴展到處理圖像、視頻、音頻等多種模態(tài)的數(shù)據(jù),例如,用戶可以提問關(guān)于一張圖片的內(nèi)容,RAG 系統(tǒng)可以檢索相關(guān)的文本描述和背景信息進行回答。
如何利用RAG搭建個人知識庫 RAG 的挑戰(zhàn)
當(dāng)你按照開源社區(qū)一些框架給的教程,做出了一個 rag 的 demo 之后,你會發(fā)現(xiàn),所呈現(xiàn)的效果,可能只有真正理想的效果 50%都不到。
那么是什么問題,產(chǎn)生了這一不確定性呢?
檢索質(zhì)量的瓶頸: 如果檢索到的信息與用戶的問題相關(guān)性不高或者質(zhì)量不高,那么即使 LLM 再強大,也無法生成高質(zhì)量的答案。
上下文長度的限制: LLM 的輸入上下文長度是有限制的,如果檢索到的相關(guān)文檔過多,可能會超出這個限制,需要進行有效的上下文壓縮或選擇。
知識庫的維護成本: 構(gòu)建和維護一個高質(zhì)量的知識庫需要持續(xù)的投入,包括數(shù)據(jù)的收集、清洗、更新等。
如何處理不相關(guān)或冗余的檢索結(jié)果: 有時候檢索到的信息可能包含噪聲或者與問題關(guān)聯(lián)不大,如何有效地過濾和利用這些信息是一個挑戰(zhàn)。
復(fù)雜的推理問題: 對于需要復(fù)雜推理的問題,僅僅依靠檢索到的片段信息可能不夠,還需要 LLM 具備更強的推理能力。
RAG 是一種強大的技術(shù),但在實際應(yīng)用中需要仔細考慮其固有的缺點和挑戰(zhàn),并采取相應(yīng)的策略來緩解這些問題,以構(gòu)建更有效、更可靠的知識增強型 LLM 應(yīng)用。
熱門跟貼