盤(pán)點(diǎn)RAG中最容易犯的五個(gè)錯(cuò)誤
我大部分時(shí)間都在構(gòu)建和改進(jìn) Retrieval-Augmented Generation (RAG) 應(yīng)用。
我相信 RAG 可能是最受歡迎的 AI 應(yīng)用之一。它無(wú)處不在,從聊天機(jī)器人到文檔摘要。
圖片
我也相信,由于各種原因,許多 RAG 應(yīng)用最終未能部署,其中很多并非技術(shù)原因。然而,我希望自己早知道一些技術(shù)方面的知識(shí),以創(chuàng)建更有效的 RAG。
但這就是我們學(xué)習(xí)新事物的方式。沒(méi)有比構(gòu)建并失敗更好的工程學(xué)習(xí)方法了。
從我的失敗中,我學(xué)到了一些寶貴的經(jīng)驗(yàn)教訓(xùn),這些經(jīng)驗(yàn)對(duì)首次構(gòu)建 RAG 的人很有幫助。你不必重復(fù)我犯過(guò)的錯(cuò)誤,這樣你就能更快前進(jìn)。
那么,讓我們談?wù)劦谝粋€(gè)錯(cuò)誤。
向量數(shù)據(jù)庫(kù)并非硬性規(guī)定
幾乎所有關(guān)于 RAG 的網(wǎng)絡(luò)教程都使用向量數(shù)據(jù)庫(kù)。如果你搜索過(guò) RAG 相關(guān)內(nèi)容,你會(huì)明白我的意思。
基于向量的檢索無(wú)疑是 RAG 成功的重要因素。向量嵌入非常適合映射文本的語(yǔ)義含義。它們也適用于不同大小的文本。你的查詢(xún)可能是一句話(huà),但你的文檔存儲(chǔ)包含整頁(yè)文章?——向量搜索可以處理。
然而,檢索并不僅限于基于向量的檢索。
RAG 可以從互聯(lián)網(wǎng)、關(guān)系數(shù)據(jù)庫(kù)、Neo4J 中的知識(shí)圖譜或三者的組合中檢索信息。
在許多情況下,我注意到混合方法能帶來(lái)更好的性能。
對(duì)于通用應(yīng)用,你可以使用向量數(shù)據(jù)庫(kù),但當(dāng)向量數(shù)據(jù)庫(kù)中沒(méi)有所需信息時(shí),你可以搜索互聯(lián)網(wǎng)。
對(duì)于客戶(hù)聊天機(jī)器人,你可能需要讓 RAG 訪問(wèn)部分客戶(hù)數(shù)據(jù)庫(kù),這可以是關(guān)系數(shù)據(jù)庫(kù)。
企業(yè)的知識(shí)管理系統(tǒng)可能會(huì)創(chuàng)建一個(gè)知識(shí)圖譜,并從中檢索信息,而不是使用向量數(shù)據(jù)庫(kù)。
這些都是 RAG 的定義。
然而,選擇數(shù)據(jù)源的過(guò)程并非直截了當(dāng)。你需要嘗試各種選項(xiàng),了解每種方法的優(yōu)點(diǎn)。接受或拒絕一個(gè)想法的理由可能受技術(shù)和業(yè)務(wù)因素的影響。
例如,你可以為每個(gè)客戶(hù)簡(jiǎn)介信息創(chuàng)建文本版本并進(jìn)行向量化以供檢索。這對(duì)于查詢(xún)來(lái)說(shuō)可能很高效,因?yàn)槟阒惶幚硪粋€(gè)數(shù)據(jù)庫(kù)。但它的準(zhǔn)確性可能不如運(yùn)行 SQL 查詢(xún)。這是技術(shù)原因。
然而,讓 LLM 運(yùn)行 SQL 查詢(xún)可能導(dǎo)致 SQL 注入攻擊。這是技術(shù)和業(yè)務(wù)上的問(wèn)題。
向量數(shù)據(jù)庫(kù)在語(yǔ)義檢索方面也很高效。但這并不意味著其他數(shù)據(jù)庫(kù)不能處理語(yǔ)義檢索;幾乎所有其他數(shù)據(jù)庫(kù)都可以進(jìn)行向量搜索。
因此,如果你決定在 RAG 中使用某種形式的向量嵌入,這里還有一個(gè)建議。
優(yōu)先選擇經(jīng)過(guò)微調(diào)的小模型
嵌入模型可以將任何內(nèi)容轉(zhuǎn)化為向量形式。大型模型的性能通常優(yōu)于小型模型。
但這并不意味著越大越好。
別管模型大小。所有模型都在公開(kāi)數(shù)據(jù)集上訓(xùn)練。它們能區(qū)分“蘋(píng)果”水果和“蘋(píng)果”品牌。但如果你和朋友用“蘋(píng)果”作為暗號(hào),嵌入模型無(wú)法知道。
然而,我們創(chuàng)建的幾乎所有應(yīng)用都專(zhuān)注于一個(gè)小的細(xì)分領(lǐng)域。
對(duì)于這些應(yīng)用,大型模型的收益是微不足道的。
這里有一個(gè)不同的做法。
為你的領(lǐng)域數(shù)據(jù)創(chuàng)建一個(gè)數(shù)據(jù)集,并對(duì)小型嵌入模型進(jìn)行微調(diào)。
小型模型足以捕捉語(yǔ)言細(xì)微差別,但可能無(wú)法理解在不同語(yǔ)境中有特殊含義的詞。
但仔細(xì)想想,你的模型為什么需要理解木星的衛(wèi)星?
小型模型更高效。它們速度快,成本低。
為了彌補(bǔ)模型在領(lǐng)域知識(shí)方面的不足,你可以對(duì)其進(jìn)行微調(diào)。
這兩個(gè)建議可以?xún)?yōu)化索引部分以實(shí)現(xiàn)高效檢索。然而,檢索過(guò)程也可以進(jìn)一步優(yōu)化。
檢索過(guò)程可以更高級(jí)
最直接的檢索過(guò)程是直接查詢(xún)。
如果你使用向量數(shù)據(jù)庫(kù),可以對(duì)用戶(hù)輸入進(jìn)行語(yǔ)義搜索。否則,你可以使用 LLM 生成 SQL 或 Cipher 查詢(xún)。
必要時(shí)你還可以調(diào)用 HTTP 端點(diǎn)。
但直接查詢(xún)方法很少能產(chǎn)生可靠的上下文。
你可以以更高級(jí)的方式查詢(xún)數(shù)據(jù)源。例如,你可以嘗試查詢(xún)路由技術(shù)來(lái)決定從哪個(gè)數(shù)據(jù)源獲取數(shù)據(jù)。具有良好推理能力的 LLM 可以用于此目的。你還可以在小型模型上進(jìn)行指令微調(diào),以節(jié)省成本并降低延遲。
另一種技術(shù)是鏈?zhǔn)秸?qǐng)求。對(duì)于初始查詢(xún),我們可以從數(shù)據(jù)源獲取信息。然后,根據(jù)獲取的文檔,我們可以獲取后續(xù)文檔。
分塊是 RAG 中最具挑戰(zhàn)性且至關(guān)重要的部分
當(dāng)上下文包含無(wú)關(guān)信息時(shí),LLM 容易出現(xiàn)幻覺(jué)。
防止 RAG 幻覺(jué)的最佳方法是分塊。
現(xiàn)代 LLM 可能支持更長(zhǎng)的上下文長(zhǎng)度。例如,Gemini 2.5 Pro 支持高達(dá) 200 萬(wàn)個(gè) token,足以容納兩到三本大學(xué)級(jí)別的物理教科書(shū)。
但對(duì)于基礎(chǔ)力學(xué)問(wèn)題,你很少需要量子物理的上下文信息。
如果你將教科書(shū)分解成較小的部分,可能每個(gè)部分只討論一個(gè)主題,你就能只獲取回答問(wèn)題所需的相關(guān)信息。
這里的挑戰(zhàn)在于分塊技術(shù)有很多種。每種技術(shù)都有其優(yōu)缺點(diǎn)。適合你領(lǐng)域的技術(shù)可能不適用于其他領(lǐng)域。
遞歸字符分塊可能是最簡(jiǎn)單的,也是我的默認(rèn)選擇。然而,它假設(shè)文本中每個(gè)主題的討論長(zhǎng)度相等,這很少是事實(shí)。盡管如此,這是最好的起點(diǎn)。
圖片
你甚至可以嘗試主題聚類(lèi)和代理分塊。
嘗試重新排序
最后但同樣重要的是,重新排序。
事實(shí)證明,相關(guān)分塊的位置是高質(zhì)量 LLM 響應(yīng)的關(guān)鍵因素。
然而,常規(guī)向量搜索甚至數(shù)據(jù)庫(kù)查詢(xún)的排序方式并不智能。LLM 可以做到。
因此,我們使用專(zhuān)門(mén)的大型語(yǔ)言模型 (LLM) 作為重新排序器,重新排列獲取的上下文并進(jìn)一步過(guò)濾,找出最相關(guān)的分塊。
這種二級(jí)重新排序在某些應(yīng)用中有幫助,但在其他應(yīng)用中未必。但你可以使用一些技術(shù)來(lái)改進(jìn)重新排序的結(jié)果。
其中之一是獲取大量初始結(jié)果。寬松定義初始標(biāo)準(zhǔn)會(huì)拉取一些無(wú)關(guān)上下文,但會(huì)增加獲取正確內(nèi)容的概率。
圖片
重新排序器現(xiàn)在可以處理這個(gè)大型集合并過(guò)濾出更相關(guān)的部分。
最終思考
構(gòu)建 RAG 已成為任何 LLM 應(yīng)用的必備。即使是 200 萬(wàn) token 的上下文窗口也無(wú)法挑戰(zhàn)它。
我們開(kāi)發(fā)的原型通常未能部署。部分原因歸于業(yè)務(wù)決策,但也有可以解決的技術(shù)原因。
本文是我在構(gòu)建 RAG 方面的經(jīng)驗(yàn)總結(jié)。
雖然這不是一個(gè)全面的列表,但考慮這五個(gè)方面將確保你開(kāi)發(fā)出更持久的 RAG。


























