RAG(檢索增強(qiáng))當(dāng)前主要的問(wèn)題以及評(píng)估方法
RAG(檢索增強(qiáng)生成)雖然極大地提升了大型模型(LLM)回答問(wèn)題的準(zhǔn)確性和時(shí)效性,但在實(shí)際落地過(guò)程中,它遠(yuǎn)非一個(gè)完美的解決方案。下面,我們將詳細(xì)梳理當(dāng)前 RAG 系統(tǒng)遇到的主要問(wèn)題,以及業(yè)界為解決這些問(wèn)題而探索出的先進(jìn)解決實(shí)踐和涌現(xiàn)出的優(yōu)秀開(kāi)源產(chǎn)品。
一、 當(dāng)前 RAG 系統(tǒng)面臨的核心問(wèn)題
RAG 的問(wèn)題可以歸結(jié)為一句話:“垃圾進(jìn),垃圾出”(Garbage In, Garbage Out)。這個(gè)“垃圾”可能產(chǎn)生在流程的任何一個(gè)環(huán)節(jié)。
1. 檢索端 (Retrieval) 的問(wèn)題——“沒(méi)找到”或“找錯(cuò)了”
這是最常見(jiàn)、最致命的問(wèn)題來(lái)源。
- 低質(zhì)量的數(shù)據(jù)源: 知識(shí)庫(kù)本身就充滿了過(guò)時(shí)、重復(fù)、矛盾甚至錯(cuò)誤的信息。RAG 無(wú)法檢索到不存在或錯(cuò)誤的信息。
- 糟糕的文本切分 (Chunking):
上下文割裂: 簡(jiǎn)單的按固定長(zhǎng)度切分,很容易把一個(gè)完整的語(yǔ)義段落(如一個(gè)問(wèn)題的答案)從中間切斷,導(dǎo)致檢索到的文本塊信息不完整。
丟失結(jié)構(gòu)信息: 將復(fù)雜的文檔(如帶有表格、標(biāo)題、列表的PDF)粗暴地轉(zhuǎn)為純文本,會(huì)丟失寶貴的結(jié)構(gòu)化信息。
- 低效的嵌入模型 (Embeddings): 用于將文本轉(zhuǎn)換為向量的嵌入模型,可能無(wú)法很好地理解特定領(lǐng)域的專(zhuān)業(yè)術(shù)語(yǔ),導(dǎo)致語(yǔ)義相似性搜索出現(xiàn)偏差。
- 檢索不精準(zhǔn): 用戶的提問(wèn)通常是模糊的,而簡(jiǎn)單的向量搜索可能只召回了包含相同關(guān)鍵詞、但實(shí)際并不回答問(wèn)題的文檔片段。
2. 增強(qiáng)端 (Augmentation) 的問(wèn)題——“上下文沒(méi)用好”
即使檢索到了正確的信息,如何有效地呈現(xiàn)給LLM也是一個(gè)挑戰(zhàn)。
- “大海撈針”問(wèn)題: 為了提高召回率,系統(tǒng)可能一次性檢索出過(guò)多(例如Top-K=10)的文檔塊。當(dāng)這些文檔塊塞滿上下文窗口時(shí),LLM 可能會(huì)被大量無(wú)關(guān)信息干擾,無(wú)法精準(zhǔn)定位到其中真正有用的那一句關(guān)鍵信息。
- 上下文長(zhǎng)度限制: 檢索到的信息總量超過(guò)了模型的上下文窗口長(zhǎng)度,導(dǎo)致關(guān)鍵信息被截?cái)嗷騺G失。
3. 生成端 (Generation) 的問(wèn)題——“看到了但說(shuō)不好”
這是最后一步的問(wèn)題。
- “幻覺(jué)”與不忠實(shí): 即使提供了正確的上下文,LLM 仍有可能忽略上下文,基于其內(nèi)部的參數(shù)化知識(shí)進(jìn)行“自由發(fā)揮”,或者錯(cuò)誤地綜合、曲解上下文的內(nèi)容。
- 無(wú)法綜合復(fù)雜答案: 當(dāng)問(wèn)題的答案散落在多個(gè)不同的檢索文檔塊中時(shí),LLM 可能無(wú)法有效地將它們串聯(lián)起來(lái),形成一個(gè)有邏輯、有條理的完整答案。
4. 評(píng)估 (Evaluation) 的問(wèn)題——“不知道哪里出了問(wèn)題”
- 缺乏有效的評(píng)估體系: 很多團(tuán)隊(duì)不知道如何科學(xué)地、自動(dòng)化地評(píng)估一個(gè)RAG系統(tǒng)的好壞。當(dāng)用戶反饋“答案不對(duì)”時(shí),很難定位問(wèn)題究竟出在檢索環(huán)節(jié)還是生成環(huán)節(jié)。
二、解決實(shí)踐與先進(jìn)技術(shù)
針對(duì)以上問(wèn)題,業(yè)界已經(jīng)發(fā)展出一系列被稱(chēng)為“高級(jí)RAG”(Advanced RAG)的技術(shù)來(lái)應(yīng)對(duì)。
1. 優(yōu)化檢索質(zhì)量
智能切分 (Intelligent Chunking):
實(shí)踐: 不再使用固定長(zhǎng)度切分,而是基于語(yǔ)義或句子邊界進(jìn)行切分,確保每個(gè)文本塊都是一個(gè)完整的語(yǔ)義單元。對(duì)于復(fù)雜文檔,可以先進(jìn)行結(jié)構(gòu)化解析(如提取表格、標(biāo)題),再進(jìn)行切分。
查詢重寫(xiě)與轉(zhuǎn)換 (Query Rewriting & Transformation):
實(shí)踐: 在檢索前,先用LLM對(duì)用戶的原始問(wèn)題進(jìn)行“預(yù)處理”,將其改寫(xiě)得更清晰、更適合機(jī)器檢索。例如,將一個(gè)復(fù)雜問(wèn)題分解成多個(gè)子問(wèn)題分別進(jìn)行檢索,或者將口語(yǔ)化的表達(dá)轉(zhuǎn)化為更正式的查詢語(yǔ)句。
混合搜索 (Hybrid Search):
實(shí)踐: 結(jié)合關(guān)鍵詞搜索(如BM25)和向量語(yǔ)義搜索。關(guān)鍵詞搜索能保證精準(zhǔn)匹配,而向量搜索能處理同義詞和語(yǔ)義相關(guān)性,兩者互補(bǔ),能顯著提升召回率和精準(zhǔn)度。
重排 (Re-ranking):
實(shí)踐: 這是提升檢索質(zhì)量性價(jià)比最高的方法之一。在初步檢索(召回)出較多(如Top-50)的候選文檔后,使用一個(gè)更輕量、但更精準(zhǔn)的交叉編碼器(Cross-encoder)模型對(duì)這些候選文檔與問(wèn)題的相關(guān)性進(jìn)行二次打分排序,只將最終得分最高的Top-3或Top-5文檔塊送入LLM。
2. 優(yōu)化上下文構(gòu)建
上下文壓縮: 對(duì)于檢索到的、可能包含大量冗余信息的長(zhǎng)文本塊,可以先用一個(gè)小的LLM對(duì)其進(jìn)行總結(jié)和壓縮,只將最核心的信息提供給最終的生成模型。
圖 RAG (Graph RAG): 將知識(shí)庫(kù)構(gòu)建成知識(shí)圖譜。檢索時(shí),不僅查找單個(gè)信息節(jié)點(diǎn),還會(huì)檢索其周邊的關(guān)聯(lián)節(jié)點(diǎn),為L(zhǎng)LM提供一個(gè)包含豐富關(guān)系和實(shí)體信息的、更結(jié)構(gòu)化的上下文。
3. 優(yōu)化生成過(guò)程
指令微調(diào) (Instruction Fine-tuning): 對(duì)生成答案的LLM進(jìn)行微調(diào),專(zhuān)門(mén)訓(xùn)練它“嚴(yán)格依據(jù)所提供的上下文來(lái)回答問(wèn)題”的能力,以減少“幻覺(jué)”。
4. 建立科學(xué)的評(píng)估體系
“檢索-生成”分離評(píng)估: 分別建立評(píng)估指標(biāo)來(lái)衡量 檢索器(Retriever)和生成器(Generator)的性能。
檢索評(píng)估指標(biāo):Context Precision(檢索到的上下文有多少是真正相關(guān)的)、Context Recall(相關(guān)的上下文有多少被成功檢索出來(lái)了)。
生成評(píng)估指標(biāo):Faithfulness(回答是否忠實(shí)于上下文)、Answer Relevance(回答是否切中用戶問(wèn)題)。
三、主流開(kāi)源產(chǎn)品與框架
圍繞上述的解決實(shí)踐,涌現(xiàn)出了一批優(yōu)秀的開(kāi)源工具和框架。
1. RAG 應(yīng)用構(gòu)建框架
LangChain (Python/JS):
定位: 最知名、最全面的LLM應(yīng)用開(kāi)發(fā)框架。它提供了構(gòu)建RAG所需的所有組件(數(shù)據(jù)加載、切分、嵌入、向量存儲(chǔ)、檢索、生成),并將它們像“樂(lè)高積木”一樣串聯(lián)起來(lái)。非常適合快速原型設(shè)計(jì)和構(gòu)建復(fù)雜的、包含多步鏈條或Agent的RAG應(yīng)用。
官網(wǎng):https://www.langchain.com/
LlamaIndex (Python):
定位:專(zhuān)注于RAG
的數(shù)據(jù)框架。相比LangChain的“大而全”,LlamaIndex在數(shù)據(jù)索引和檢索方面做得更深入、更專(zhuān)業(yè)。它內(nèi)置了大量高級(jí)的索引結(jié)構(gòu)(如樹(shù)索引、知識(shí)圖譜索引)和檢索策略,是構(gòu)建高性能、專(zhuān)業(yè)級(jí)RAG系統(tǒng)的首選。
官網(wǎng):https://www.llamaindex.ai/
Haystack (Python):
定位:
面向生產(chǎn)環(huán)境的NLP和RAG管道構(gòu)建框架。它非常模塊化,與Elasticsearch等企業(yè)級(jí)搜索引擎集成良好,適合構(gòu)建企業(yè)級(jí)的智能搜索和問(wèn)答系統(tǒng)。
官網(wǎng):https://haystack.deepset.ai/
2. 檢索器與重排器
RAGatouille (Python):
定位: 一個(gè)專(zhuān)注于后期交互(Late Interaction)檢索模型的庫(kù),特別是對(duì) ColBERT 模型的易用封裝。ColBERT是一種比傳統(tǒng)向量搜索更精細(xì)、效果更好的檢索模型,RAGatouille讓普通開(kāi)發(fā)者也能輕松用上這種先進(jìn)技術(shù)。
GitHub:https://github.com/bclavie/RAGatouille
3. RAG 評(píng)估框架
RAGAs (Python):
定位:專(zhuān)門(mén)用于評(píng)估RAG管道的開(kāi)源框架。它提供了上面提到的 Faithfulness, Context Precision, Context Recall 等核心評(píng)估指標(biāo)的實(shí)現(xiàn),可以幫助你自動(dòng)化地、量化地評(píng)估你的RAG系統(tǒng)性能。
官網(wǎng):https://docs.ragas.io/
DeepEval (Python):
定位:
一個(gè)更全面的LLM評(píng)估框架,集成了單元測(cè)試的思想。它不僅能評(píng)估RAG,還能評(píng)估幻覺(jué)、偏見(jiàn)、毒性等多個(gè)維度,并且可以與 pytest 等測(cè)試框架無(wú)縫集成。
GitHub:https://github.com/confident-ai/deepeval
這些開(kāi)源產(chǎn)品的組合使用,可以極大地幫助開(kāi)發(fā)者和企業(yè)構(gòu)建、優(yōu)化和評(píng)估自己的RAG系統(tǒng),從而在實(shí)際應(yīng)用中取得更好的落地效果。





































