RAG觀止系列(三):為什么?90% 的坑都踩在檢索環(huán)節(jié)上?

0 評論 1213 瀏覽 4 收藏 43 分鐘

在 RAG 應(yīng)用的落地過程中,檢索環(huán)節(jié)往往是決定成敗的關(guān)鍵。數(shù)據(jù)量龐大、語義復(fù)雜、場景多變,使得 90% 的問題都集中在這一環(huán)節(jié)。本文將深入剖析這些“坑”,并探討如何構(gòu)建更穩(wěn)健的檢索體系。

RAG 落地的隱憂與破局

在大模型落地的方案中,RAG(Retrieval-Augmented Generation,檢索增強(qiáng)生成)已經(jīng)成為業(yè)內(nèi)共識的架構(gòu)。

在這個(gè)系列的前兩篇,我們把 RAG 體系里最容易被低估的兩個(gè)基本面拆了個(gè)徹底。

第一篇討論的是 知識庫的“保鮮”機(jī)制。我們得到一個(gè)清晰結(jié)論:

RAG 不是“把知識存進(jìn)去”,而是“確保系統(tǒng)永遠(yuǎn)拿到最新、正確的知識”。舊知識的干擾、時(shí)效性的溢出、版本沖突——這些看似數(shù)據(jù)層的小問題,一旦進(jìn)入檢索鏈路,都會被模型無限放大。

第二篇我們把 重排(Rerank) 從“可有可無”重新定義成“決定勝率的關(guān)鍵步驟”,那篇文章的核心觀點(diǎn)其實(shí)只有一句:

召回給的是“可能相關(guān)”,重排決定“真正有用”。如果沒有重排,RAG 很容易變成“模型在一堆差不多的片段里憑感覺作答”。

而當(dāng)你把“知識保鮮”和“重排”這兩件事都處理到位后,會發(fā)現(xiàn)戰(zhàn)場自然收縮到唯一的核心問題——檢索到底能不能把對的東西拿上來?如果這一步不穩(wěn),后面所有工程與策略的努力都白費(fèi)。

所以,這一篇,我們終于來到 RAG 落地里最“讓人掉過無數(shù)坑”的關(guān)鍵環(huán)節(jié):檢索策略。這也是整個(gè)系列中最容易做對 70 分,卻最難做到 95 分的部分。

那么,如何在檢索環(huán)節(jié)做到極致,把該拿的信息都精準(zhǔn)地拿到?面對海量的知識庫和千奇百怪的用戶提問,我們?nèi)绾卧O(shè)計(jì)一套“勝率最高”的檢索策略,保證后續(xù)生成有高質(zhì)量的材料可用?

這篇文章將圍繞檢索策略展開,從原理剖析到策略選擇,再到實(shí)戰(zhàn)技巧,為你拆解一套標(biāo)準(zhǔn)的 RAG 檢索優(yōu)化 SOP。閱讀完本文,你將對檢索環(huán)節(jié)可能遇到的坑和對應(yīng)的解決方案了然于胸,做到“看完這一篇,檢索環(huán)節(jié)再無疑問”。接下來,我們就一步步揭秘如何讓大模型如虎添翼,徹底釋放 RAG 的潛能。

重新定義檢索策略

在傳統(tǒng)認(rèn)知中,“檢索”似乎只是 RAG 流水線里一個(gè)簡單的步驟:把用戶問題嵌入成向量,丟進(jìn)向量庫,抓出幾段相似文本。很多項(xiàng)目一開始也是這么干的。然而,當(dāng)我們深入研究卻發(fā)現(xiàn):檢索遠(yuǎn)非表面那么簡單,它實(shí)則承載著“將用戶提問與知識庫精確對接”的使命,是整個(gè) RAG 系統(tǒng)的第二大腦。換言之,如果把大模型比作一個(gè)能言善辯的學(xué)生,那檢索策略就是為學(xué)生挑選參考書目和資料的老師——挑得好,事半功倍;挑不好,再聰明的學(xué)生也巧婦難為無米之炊。

檢索策略的本質(zhì)是什么?在有限的時(shí)間內(nèi),以最高的召回率找到最相關(guān)的信息,實(shí)際上牽涉到兩個(gè)看似矛盾的目標(biāo):召回率(不遺漏有用信息)和準(zhǔn)確率(不引入無關(guān)噪音)。普通的做法往往只關(guān)注其中一個(gè)維度,比如“只求找對幾段內(nèi)容”或者“盡量多找一些內(nèi)容以防遺漏”。高級的做法則是想方設(shè)法在高召回高精準(zhǔn)之間取得平衡。要做到這一點(diǎn),就需要對檢索策略進(jìn)行系統(tǒng)性設(shè)計(jì)。

為了形象地說明普通做法 vs 高階做法的區(qū)別,我們可以構(gòu)建一個(gè)簡單的“檢索策略矩陣”,以「方法單一 vs 方法組合」和「覆蓋優(yōu)先 vs 精確優(yōu)先」兩個(gè)維度對檢索方案進(jìn)行分類:

策略類別

單一檢索策略

組合檢索策略

覆蓋優(yōu)先

廣撒網(wǎng)式檢索:一次抓取大量結(jié)果,盡可能不遺漏,但噪音也多。

全面撒網(wǎng):多種方法并用,不漏掉相關(guān)信息,但結(jié)果雜亂,需要后續(xù)嚴(yán)格篩選。

精確優(yōu)先

刻板匹配:嚴(yán)格匹配,結(jié)果精確但容易漏掉表述差異的信息。

精細(xì)打磨:多算法聯(lián)合+結(jié)果重排,結(jié)果全面且高度相關(guān),噪音極低。

簡單解釋:

  • “單一檢索 + 覆蓋優(yōu)先”往往指純向量檢索且設(shè)置較低的匹配門檻,一股腦返回幾十上百條結(jié)果,期望把有用的都撈上來(典型的新手策略)。
  • “單一檢索 + 精確優(yōu)先”則類似純關(guān)鍵詞檢索或設(shè)置很高的相似度閾值,只返回幾條嚴(yán)格匹配的結(jié)果,確保精確但極可能遺漏關(guān)鍵信息。
  • 相比之下,“組合檢索 + 覆蓋優(yōu)先”會同時(shí)運(yùn)行多路檢索(比如關(guān)鍵詞+向量一起上),實(shí)現(xiàn)幾乎不漏的召回,但初始結(jié)果良莠不齊,必須依賴后續(xù)的篩選或模型判斷。
  • 最終的“組合檢索 + 精確優(yōu)先”就是我們的目標(biāo)狀態(tài):通過混合多種檢索方式并輔以智能重排篩選,既保證召回全面又確保結(jié)果相關(guān)度高,幾乎將噪音降到最低。

可以看到,高階的檢索策略并非單指某個(gè)算法,而是一套“組合拳”:用多種技術(shù)彌補(bǔ)彼此短板,在保證不漏掉有用信息的同時(shí),把無關(guān)的信息擋在外面。這才是檢索的本質(zhì)——在海量信息和復(fù)雜問句之間架起精準(zhǔn)匹配的橋梁。

接下來,我們就進(jìn)入最關(guān)鍵的部分:究竟有哪些檢索策略的“勝負(fù)手”,能夠幫助我們搭建上述理想的檢索方案?下面逐一拆解。

核心實(shí)戰(zhàn):檢索環(huán)節(jié)的“勝負(fù)手”

檢索策略決定了檢索階段的成敗。在這一節(jié),我將介紹4個(gè)關(guān)鍵策略,每個(gè)策略都可能成為影響 RAG 成效的勝負(fù)手。針對每個(gè)策略,我會說明其適用場景、優(yōu)缺點(diǎn),并給出避坑指南。

策略一:語義 & 關(guān)鍵詞混合檢索(雙管齊下)

策略概述:不要把“向量語義檢索”和“關(guān)鍵詞精確檢索”視作二選一。最有效的檢索往往是兩者的組合拳。混合檢索策略就是同時(shí)利用向量相似度和關(guān)鍵詞匹配,各取所長,獲取最大化的召回和精確度。向量檢索能夠找出語義相關(guān)的內(nèi)容,即使措辭不同;而關(guān)鍵詞檢索則擅長捕捉精確匹配的關(guān)鍵字、數(shù)字、代號等細(xì)節(jié)。兩者并行,就像左右開弓,確保既不漏掉意義相近卻措辭不同的內(nèi)容,也不錯(cuò)過那些需要精確匹配的細(xì)節(jié)。微軟Azure的實(shí)驗(yàn)證明,“關(guān)鍵詞 + 向量”的混合查詢能顯著提升檢索的準(zhǔn)確率和召回率。

適用場景:幾乎所有 RAG 應(yīng)用都能從混合檢索中受益,尤其是:

存在專業(yè)術(shù)語或編碼的場景,例如法律、醫(yī)療、技術(shù)支持問答等。向量可以捕捉語義,關(guān)鍵詞確保專有名詞不丟。Anthropic 的案例顯示,用戶查詢技術(shù)支持錯(cuò)誤碼“TS-999”時(shí),純向量檢索找到了很多泛泛的錯(cuò)誤信息,而只有 BM25 關(guān)鍵詞檢索才能準(zhǔn)確命中包含“TS-999”的文檔。

用戶用語與文檔用語存在差異的場景。例如用戶問“合同違約賠償”,但文檔中可能寫的是“違約金”。向量能理解兩者語義接近,而關(guān)鍵詞能直接匹配“違約金”出現(xiàn)的段落,二者結(jié)合效果最佳。

希望提升召回率又不想顯著增加噪音的場景?;旌蠙z索相當(dāng)于雙保險(xiǎn),在確保重要信息不漏的同時(shí),通過合并去重可以控制返回結(jié)果數(shù)量。

優(yōu)缺點(diǎn)分析:

優(yōu)點(diǎn):召回率和精準(zhǔn)度雙提高。實(shí)踐證明混合檢索往往能找到單一檢索錯(cuò)過的內(nèi)容,例如只用向量可能漏掉精確匹配項(xiàng),只用關(guān)鍵詞則可能漏掉語義同義表述。微軟的基準(zhǔn)測試顯示混合查詢帶來最顯著的精準(zhǔn)/召回提升。此外,現(xiàn)代搜索引擎支持并行執(zhí)行向量和關(guān)鍵詞查詢,性能影響可控。

缺點(diǎn):實(shí)現(xiàn)稍復(fù)雜,需要維護(hù)兩套索引(向量索引和倒排索引)并設(shè)計(jì)結(jié)果融合邏輯。對實(shí)時(shí)系統(tǒng)而言,兩路查詢也略增額外延遲(通常毫秒級別)。此外,如果融合策略不當(dāng),可能出現(xiàn)一方結(jié)果完全淹沒另一方的情況,需要調(diào)參平衡。硬件成本上,維護(hù)向量索引會消耗額外存儲和內(nèi)存。

代價(jià)權(quán)衡:通常而言,這點(diǎn)復(fù)雜度和開銷相對于提升的效果是值得的。如果系統(tǒng)對準(zhǔn)確性要求高(如金融、醫(yī)療問答),混合檢索是性價(jià)比極高的改進(jìn)。只有在知識庫極小、查詢極簡單的情況下,才可能考慮單一檢索以減少開銷。

避坑指南:

注意結(jié)果融合邏輯:不要簡單地把兩路檢索結(jié)果拼在一起就交給大模型了事。這樣可能導(dǎo)致重復(fù)(同一內(nèi)容被兩種方法檢索到)或者無關(guān)結(jié)果插隊(duì)。正確做法是對兩路結(jié)果進(jìn)行去重統(tǒng)一重排。可以采用“rank fusion(排序融合)”算法,或根據(jù)需要調(diào)整一方結(jié)果的權(quán)重。例如,有實(shí)踐經(jīng)驗(yàn)表明,可對向量匹配結(jié)果和關(guān)鍵詞結(jié)果分別打分歸一化,然后按一定比例混排,確保既有語義相關(guān)度又考慮關(guān)鍵詞命中。Azure 提供了直接的參數(shù)來微調(diào)混合檢索結(jié)果,比如提高向量匹配結(jié)果權(quán)重或限定BM25結(jié)果數(shù)量。

關(guān)鍵詞檢索別忘配置同義詞表:混合檢索的初衷之一就是彌合用戶提問和文檔用詞差異。如果文檔中缺少用戶常用說法,可以在索引中加入同義詞表來提升匹配率。例如將“客服”映射到“客戶服務(wù)”,避免關(guān)鍵詞檢索漏掉相關(guān)內(nèi)容。

控制返回?cái)?shù)量:混合檢索容易一下召回很多內(nèi)容。切忌把幾十條結(jié)果全丟給大模型生成,否則上下文窗口會爆炸、響應(yīng)變慢。通常我們可以設(shè)定一個(gè)合理的top-k(如總共返回5~10條最相關(guān)結(jié)果),足夠覆蓋答案所需又不過載。記?。嘿|(zhì)量優(yōu)于數(shù)量,過多無關(guān)段落只會拖累大模型表現(xiàn)。

“別迷信單一的向量檢索,它并非萬能。最有效的檢索常是多種方法的組合拳,一種補(bǔ)另一種之短。

策略二:二階段檢索與重排序(精準(zhǔn)打磨)

策略概述:所謂二階段檢索,就是在初始檢索之后,再增加一道“復(fù)篩”工序,即重排序(Rerank)。具體做法通常是:第一階段用快速檢索(向量或關(guān)鍵詞)獲取一批候選文檔(比如 top-50);第二階段用更高精度的模型(如跨編碼器 cross-encoder 或大模型本身)對這批候選進(jìn)行相關(guān)性重新打分,選出最終最相關(guān)的少數(shù)結(jié)果(比如 top-5)供生成使用。這個(gè)過程類似搜索引擎中的“粗排+精排”兩級架構(gòu)。Rerank 的作用就是最大限度提高最終喂給大模型的內(nèi)容精準(zhǔn)度,把噪音降到最低——這就是為什么有人說“Rerank 才是 RAG 的靈魂”,因?yàn)樽罱K給模型的那幾段上下文質(zhì)量,往往決定了回答質(zhì)量。

適用場景:當(dāng)下列情況出現(xiàn)時(shí),強(qiáng)烈考慮引入重排序:

  • 知識庫很大且內(nèi)容參差不齊:初始檢索難免撈上一堆半相關(guān)的段落,需要精篩。例如在包含百萬文檔的庫中查詢,如果不重排,初始top-5里混入無關(guān)段落概率很高。
  • 查詢問法復(fù)雜或含糊:簡單的向量匹配可能無法準(zhǔn)確理解用戶意圖,導(dǎo)致候選結(jié)果良莠不齊。這時(shí)讓一個(gè)強(qiáng)力模型做進(jìn)一步語義判斷,會明顯提高準(zhǔn)確率。
  • 對準(zhǔn)確率要求極高:如法律問答、醫(yī)療診斷等,寧可少給一些段落也要保證給的每段都可靠。在這些場景, 二次重排幾乎是必備的環(huán)節(jié),用于剔除任何可能干擾大模型的噪音。

優(yōu)缺點(diǎn)分析:

  • 優(yōu)點(diǎn):重排序往往能帶來質(zhì)的飛躍:將檢索結(jié)果的純凈度提升到一個(gè)新水平。據(jù) Anthropic 報(bào)告,引入語義重排后,檢索失敗率大幅降低,在結(jié)合上下文檢索時(shí)可以減少多達(dá)67%的檢索遺漏。微軟也在 Azure 檢索中集成了 Bing 的語義Ranker模型,對初始結(jié)果進(jìn)行重新排序,從而顯著改善結(jié)果與查詢的語義契合度。Cross-Encoder 等重排模型在學(xué)術(shù)基準(zhǔn)上往往能較dual encoder提升10幾個(gè)點(diǎn)的MRR/NDCG。這些都證明了二階段檢索對最終相關(guān)性的價(jià)值。
  • 缺點(diǎn):主要是性能開銷。重排序一般需要引入一個(gè)額外的模型評估步驟。如果使用跨編碼器(如 MiniLM、mpnet 等小模型),一次對幾十個(gè)候選評分可能耗費(fèi)幾十毫秒到數(shù)百毫秒不等;如果一味追求極致,用上大型模型做重排,那延時(shí)和成本會飆升,不切實(shí)際。此外,重排序增加了系統(tǒng)復(fù)雜度:需要維護(hù)這個(gè)模型,以及在工程上串聯(lián)兩個(gè)階段。
  • 代價(jià)權(quán)衡:在多數(shù)企業(yè)應(yīng)用中,一次查詢延遲增加50~100毫秒來換取顯著準(zhǔn)確率提升是值得的,用戶幾乎感覺不到慢。但如果對實(shí)時(shí)性要求極高(如需要毫秒級響應(yīng)的場景),可以考慮權(quán)衡重排序的層數(shù)和模型大小,或僅對“模糊查詢”等高風(fēng)險(xiǎn)情況觸發(fā)重排(動態(tài)開啟)??傮w來說,對于關(guān)乎正確率的任務(wù),重排序投入的算力往往遠(yuǎn)低于因錯(cuò)誤回答導(dǎo)致的代價(jià)(例如誤導(dǎo)用戶的損失)。

避坑指南:

  • 合理設(shè)置候選集大小:重排序并非候選越多越好。候選集太?。ū热缰蝗〕跏紅op-5)可能讓重排無用武之地,漏掉正確答案;太大則增加計(jì)算量還可能把噪音也排上來。經(jīng)驗(yàn)上,候選數(shù)一般是最終所需文檔數(shù)的5-10倍較為合適(如最終要3段,就初始取20-30段)。這樣大概率涵蓋正確段落,又不會給重排增加太多負(fù)擔(dān)。
  • 選擇合適的重排模型:優(yōu)先考慮現(xiàn)成的輕量級重排模型。例如 Microsoft 的 msmarco-MiniLM、Cohere 的rerank模型等,在數(shù)十毫秒內(nèi)即可對幾十條候選排序,效果也不錯(cuò)。如果自行使用GPT模型來重排,成本和延時(shí)都會很高,而且GPT未必擅長細(xì)粒度排序任務(wù)。除非有特殊需求,否則不建議用大模型直接做重排。
  • 關(guān)注閾值和篩選:有些情況下,可以為重排序結(jié)果設(shè)置最低分?jǐn)?shù)閾值,低于閾值的候選一律不要。這樣哪怕初始檢索胡亂抓來一些內(nèi)容,也不會流入最后上下文。在實(shí)踐中,我們常根據(jù)驗(yàn)證集調(diào)整一個(gè)分?jǐn)?shù)線,讓模型對不確定的檢索結(jié)果情愿少給也不給。這對確?;卮鹁珳?zhǔn)很有效。此外,重排時(shí)也可以考慮多樣性,避免最終選出的段落內(nèi)容高度重復(fù)——如果候選前幾名來自同一篇文檔的相鄰段落,可能信息冗余,適當(dāng)選擇不同來源的段落會讓答案覆蓋面更廣。

“在 RAG 這場信息檢索的淘金賽中,重排序就是那把淘金篩網(wǎng)——過濾掉沙子,留下真金。”

策略三:多維召回策略(多向量表示 & 查詢擴(kuò)展)

策略概述:用戶提問千差萬別,知識庫內(nèi)容也錯(cuò)綜復(fù)雜。要提高檢索的全面性,我們需要讓檢索從多個(gè)角度出擊?!岸嗑S召回”策略涵蓋了多向量表示查詢擴(kuò)展兩種思路,但目標(biāo)一致:最大化有用信息的召回率,降低檢索遺漏。多向量表示是指為同一份內(nèi)容生成多個(gè)不同角度的向量,以捕捉內(nèi)容的不同側(cè)面;查詢擴(kuò)展則是從用戶問題出發(fā),生成同義詞、相關(guān)詞或子查詢,擴(kuò)大檢索覆蓋面。直白地說,就是用多把鑰匙開鎖,以防丟掉某把單一鑰匙就打不開知識寶庫的大門。

適用場景:

  • 長文檔或多主題文檔:一篇內(nèi)容涵蓋多個(gè)要點(diǎn)的長文,用單一向量表示可能無法涵蓋所有信息。這種情況下,可按段落甚至句子生成多個(gè)向量,確保文檔中每個(gè)要點(diǎn)都有機(jī)會被檢索到(實(shí)際上就是細(xì)粒度切片和表示)。類似地,如果一個(gè)知識單元本身有結(jié)構(gòu)(標(biāo)題、正文、摘要),也可以針對不同部分各算一個(gè)embedding。
  • 專業(yè)詞匯豐富或別稱多:如醫(yī)藥領(lǐng)域同一種病有學(xué)名和俗稱,法律領(lǐng)域一個(gè)概念有拉丁文和本地語言兩種叫法??梢钥紤]為內(nèi)容創(chuàng)建多種embedding(例如分別基于不同語言或不同Embedding模型),或者在查詢擴(kuò)展時(shí)加入這些別稱,避免遺漏。正如 Azure 所建議的,利用同義詞表等手段擴(kuò)充索引和查詢術(shù)語,以覆蓋不同說法。
  • 用戶查詢很簡短或不明確:短查詢可能不包含足夠上下文來匹配正確文檔。此時(shí)可以通過查詢擴(kuò)展來豐富查詢語義。方法包括:根據(jù)用戶上下文或歷史提問補(bǔ)充關(guān)鍵詞,利用小型語言模型將查詢重述成更具體的問題,或加入潛在相關(guān)的詞。例如用戶問“打印機(jī)卡紙”,擴(kuò)展后變成“打印機(jī) 卡紙 解決 方法”,從而檢索到包含“解決卡紙”內(nèi)容的文檔,而不僅僅是“卡紙”定義。

優(yōu)缺點(diǎn)分析:

  • 優(yōu)點(diǎn):多維召回能有效提升檢索的覆蓋面,降低 “漏掉關(guān)鍵資料” 的風(fēng)險(xiǎn)。Anthropic 提出的Contextual Retrieval本質(zhì)上也是一種多維召回:它在生成embedding時(shí)為每個(gè)段落附加上下文描述,從而等價(jià)于每段內(nèi)容有了“本段+上下文”兩種表示,顯著減少了檢索失敗率。查詢擴(kuò)展在傳統(tǒng)搜索里早已被證明有效(例如用戶搜索引擎的“你是不是想找…”提示),在RAG中同樣能提升召回。特別是對于新手用戶模糊的提問,擴(kuò)展后的查詢更有機(jī)會匹配到正確答案。
  • 缺點(diǎn):首當(dāng)其沖是資源消耗增加。多向量表示意味著索引規(guī)模變大,一個(gè)文檔存多份embedding,占用更多存儲和內(nèi)存;查詢擴(kuò)展則可能需要對每個(gè)用戶問題執(zhí)行多次檢索,增加CPU/QPS消耗和延時(shí)。如果知識庫很大或并發(fā)請求多,這兩方面開銷不容忽視。
  • 代價(jià)權(quán)衡:可以有選擇地應(yīng)用多維召回策略。例如,只對高價(jià)值內(nèi)容或易遺漏內(nèi)容使用多向量(重要段落多Embed幾次),一般內(nèi)容保持單一向量,以控制索引規(guī)模。同樣,查詢擴(kuò)展可以在檢測到查詢過短或包含歧義時(shí)才觸發(fā),而不用對每個(gè)請求都擴(kuò)展。通過緩存(后面詳述)也可以減輕多次檢索的性能壓力。總之,應(yīng)根據(jù)實(shí)際需求權(quán)衡召回提升和資源代價(jià)——在高準(zhǔn)確率要求場景,增加些資源以避免錯(cuò)誤是值得的。

避坑指南:

  • 避免過度冗余:多向量策略容易導(dǎo)致某些“健談”的內(nèi)容占據(jù)過多檢索名額。例如一個(gè)長文檔拆成10段,各自embedding,如果用戶問一個(gè)相關(guān)問題,這10段可能一起涌入候選集,擠掉別的來源。這會造成結(jié)果多樣性下降。應(yīng)當(dāng)限制每篇文檔的入選段落數(shù),比如最終結(jié)果中同源文檔最多2段,避免“一篇獨(dú)大”。
  • 擴(kuò)展要有針對性:查詢擴(kuò)展如果做不好,反而會帶來一堆無關(guān)結(jié)果。避坑的關(guān)鍵在于相關(guān)性判斷。可以使用領(lǐng)域詞典或知識圖譜來擴(kuò)展專業(yè)術(shù)語,但盡量不要用與原問毫不相干的擴(kuò)展詞。使用 LLM 自動改寫問題時(shí),也要核查改寫后的意思未跑偏。理想情況下,擴(kuò)展應(yīng)當(dāng)緊扣原始意圖,只填補(bǔ)信息,不引入新的歧義。例如,將“合同違約賠償”擴(kuò)展為“合同 違約 賠償 金額 法律 責(zé)任”,這些詞都是相關(guān)的,而不應(yīng)添加諸如“合同范本”等無關(guān)詞。
  • 關(guān)注Embed模型差異:如果為同一內(nèi)容生成多種embedding(比如用不同模型或策略),要了解各embedding的特點(diǎn)。有些embedding偏重關(guān)鍵詞(如Sentence-BERT),有些偏重主題。當(dāng)多embedding共同使用時(shí),可能需要對檢索結(jié)果進(jìn)行歸一化評分以便公平比較。不妨先單獨(dú)評估哪種embedding對哪些查詢效果好,再決定如何融合它們的結(jié)果,避免盲目疊加。

“檢索就像找鑰匙開鎖。用多把鑰匙試試,總比只用一把碰運(yùn)氣更保險(xiǎn)。

策略四:動態(tài)過濾與緩存優(yōu)化(效率加速)

策略概述:最后一個(gè)勝負(fù)手,關(guān)注的是檢索的效率和穩(wěn)定性。再好的檢索算法,如果又慢又貴,用戶和產(chǎn)品也難以承受。所以我們需要在保證準(zhǔn)確率的前提下,盡可能優(yōu)化檢索的速度和成本。這方面有兩大利器:動態(tài)過濾緩存。動態(tài)過濾指根據(jù)查詢或場景對檢索范圍進(jìn)行智能縮小,比如利用元數(shù)據(jù)篩選、分區(qū)檢索等,減少無謂搜索范圍,從而加快響應(yīng)并減少噪音。緩存則是老生常談的優(yōu)化:對于重復(fù)性高的查詢或固定不變的知識,可以提前緩存檢索結(jié)果甚至緩存生成結(jié)果,避免每次都大海撈針式地重新搜一遍。簡而言之,該花時(shí)間檢索時(shí)不偷工減料,該直接返回時(shí)也絕不重復(fù)勞動。

適用場景:

  • 有明確屬性篩選條件的查詢:比如企業(yè)知識庫中,用戶問題含“2023年”字樣,就可以在檢索時(shí)加一個(gè)年份=2023的過濾;又如多業(yè)務(wù)線知識庫,可以先根據(jù)業(yè)務(wù)線或類別過濾,只在相關(guān)部分檢索。這類過濾大幅縮小搜索面,讓檢索更快、更精準(zhǔn)。
  • 知識庫按主題/章節(jié)天然分塊:可以考慮分區(qū)檢索策略。比如法律資料按法規(guī)、案例、評論劃分,用戶問題提到法規(guī)號時(shí)就直接檢索法規(guī)庫,不去管案例庫。這實(shí)質(zhì)是在產(chǎn)品上引導(dǎo)用戶選擇范圍,技術(shù)上減少檢索開銷。
  • 高頻重復(fù)的問答:如果統(tǒng)計(jì)發(fā)現(xiàn)某些問題每天都有人問,或者某類查詢結(jié)果幾乎不變(比如公司簡介類問題),那么完全可以直接緩存結(jié)果甚至緩存完整答案。第一次檢索并生成后,把答案存起來,后面遇到同類提問直接返回緩存內(nèi)容或輕微調(diào)整即可。這就是“以時(shí)間換空間”的典型做法,用一點(diǎn)存儲換取響應(yīng)速度的大幅提升。

優(yōu)缺點(diǎn)分析:

  • 優(yōu)點(diǎn):動態(tài)過濾往往能顯著提升性能減少干擾項(xiàng)。通過預(yù)先排除掉不相關(guān)的大塊內(nèi)容,檢索可以更專注于可能有答案的區(qū)域,速度更快,結(jié)果更純凈。例如對百萬級文檔的庫,如果提前按類別篩掉90%的無關(guān)部分,只在10%里檢索,速度和精度都會上一個(gè)量級。緩存的優(yōu)點(diǎn)則是“快”——命中緩存時(shí)幾乎零延遲,而且還能減輕后端負(fù)載。有研究指出,在靜態(tài)數(shù)據(jù)集上取消實(shí)時(shí)檢索,整體延遲可降低約40%。一些創(chuàng)新方案如 Cache-Augmented Generation(CAG)甚至主張直接把整個(gè)知識庫預(yù)加載進(jìn)模型緩存,一次加載、多次問答,聲稱能讓回答速度提升10倍以上。雖然這種方案只適用于小規(guī)模知識,但從中可以看出緩存帶來的潛在提速效果。
  • 缺點(diǎn):過濾和緩存都需要額外管理策略控制。過濾不宜過度,否則可能把正確答案排除在外——如果用戶提問中的線索不充分,盲目過濾可能適得其反。因此需要仔細(xì)設(shè)計(jì)過濾條件,必要時(shí)提供用戶開關(guān)或在結(jié)果為空時(shí)自動放寬過濾。緩存則有數(shù)據(jù)時(shí)效性問題:知識更新后緩存必須失效,否則可能返回過期信息;緩存命中也可能錯(cuò)過最新內(nèi)容。所以緩存適合穩(wěn)定、不頻繁變化的信息。其次,緩存策略需要平衡命中率和內(nèi)存占用,緩存粒度太細(xì)或太粗都會影響效果。
  • 代價(jià)權(quán)衡:動態(tài)過濾通常屬于“精雕細(xì)琢”范疇,投入的是策略和規(guī)則設(shè)計(jì)時(shí)間,回報(bào)是持續(xù)的性能收益,值得嘗試。但要留后門:一旦過濾導(dǎo)致檢索結(jié)果為空,系統(tǒng)應(yīng)自動回退到不過濾或提示用戶,否則用戶體驗(yàn)會受損。緩存方面,則應(yīng)根據(jù)業(yè)務(wù)需要決定是否采用。如果99%的查詢都不重復(fù),那緩存價(jià)值不高;但如果某領(lǐng)域問答有明顯長尾分布(少數(shù)問題反復(fù)出現(xiàn)),就很值得實(shí)現(xiàn)緩存??上葘θ罩緮?shù)據(jù)做分析,再決定緩存哪些內(nèi)容以及緩存多久??傊?,優(yōu)化要有的放矢,切忌為了技術(shù)而技術(shù)。

避坑指南:

  • 設(shè)計(jì)過濾策略時(shí)保留余量:不要過分依賴單一條件過濾。可以采用漸進(jìn)式過濾:先寬后嚴(yán),多層篩選。例如先按業(yè)務(wù)線分區(qū)(大塊淘汰無關(guān)),再按日期等細(xì)粒度篩選。如果篩選后結(jié)果過少,可以自動放寬一個(gè)條件。這種動態(tài)調(diào)整比一刀切強(qiáng)得多。
  • 緩存內(nèi)容定期刷新:為保證緩存命中內(nèi)容的正確性,應(yīng)該對緩存設(shè)定合理的TTL(存活時(shí)間),或者在源知識更新時(shí)使相關(guān)緩存失效。如果有條件,也可引入版本控制:緩存時(shí)標(biāo)記所依據(jù)的知識版本號,查詢時(shí)若發(fā)現(xiàn)知識庫有更新則跳過老緩存。這避免了“知識變了但系統(tǒng)還在用舊答案”的尷尬。
  • 警惕緩存與隱私/個(gè)性化:如果系統(tǒng)面向的是多用戶且有權(quán)限區(qū)分的場景,緩存要注意隔離不同用戶的權(quán)限。避免出現(xiàn)A用戶的問題緩存了答案,B用戶問類似問題直接拿到但其實(shí)無權(quán)限看的信息。這需要在緩存Key設(shè)計(jì)時(shí)把用戶/權(quán)限維度考慮進(jìn)去。對于個(gè)性化很強(qiáng)的問題,緩存意義也不大,可以直接禁用。

“快,也是一種答案的準(zhǔn)確。用戶不只想要對的答案,也想要及時(shí)的答案。優(yōu)化檢索的效率,就是在優(yōu)化用戶體驗(yàn)?!?/p>

案例復(fù)盤:檢索策略優(yōu)化前后對比

紙上得來終覺淺,讓我們通過一個(gè)虛構(gòu)的案例場景,直觀感受以上策略的威力。假設(shè)有一家大型軟件公司上線了一個(gè)內(nèi)部知識庫問答B(yǎng)ot,供員工查詢技術(shù)支持問題。知識庫涵蓋了產(chǎn)品手冊、故障排查指南、內(nèi)部論壇問答等數(shù)十萬條文檔。產(chǎn)品團(tuán)隊(duì)起初采用了經(jīng)典 RAG 實(shí)現(xiàn):OpenAI Embedding 將文檔切片向量化,F(xiàn)aiss 向量庫檢索 top-5 相似片段,最后GPT生成答案。然而上線后,用戶反饋“答案不準(zhǔn)”、“經(jīng)常答非所問”。我們選取其中一個(gè)真實(shí)場景對比優(yōu)化前后的效果:

優(yōu)化前:一位運(yùn)維同事詢問Bot:“如何解決報(bào)錯(cuò) TS-999?

  • 檢索階段(原方案):系統(tǒng)用TS-999生成向量,在向量庫檢索。由于這個(gè)錯(cuò)誤碼在文檔中非常少見,embedding 與之最接近的結(jié)果反而是一些包含類似“錯(cuò)誤代碼”字眼的文章。最終返回的5段中,沒有一段提及 TS-999,只有一篇《常見錯(cuò)誤處理指南》稍有關(guān)聯(lián)。
  • 生成階段:GPT基于這些片段嘗試作答,只給出一些通用的錯(cuò)誤排查步驟,并未真正解決 TS-999 問題。用戶當(dāng)然不滿意,認(rèn)為Bot答非所問。

問題剖析:這里檢索策略不當(dāng)是罪魁禍?zhǔn)?/strong>。向量檢索在罕見關(guān)鍵字場景失靈了,沒能召回真正相關(guān)的內(nèi)容(其實(shí)知識庫中有一篇專門的《TS-999 錯(cuò)誤解決方案》文章,但因embedding差異未被檢索到)。沒有檢索到正確材料,后面再強(qiáng)的GPT也是巧婦難為無米。

優(yōu)化后:團(tuán)隊(duì)針對上述痛點(diǎn)引入了混合檢索 + 重排序策略,并對 TS-999 這類特殊查詢加入查詢擴(kuò)展。運(yùn)維同事再次提問:“如何解決報(bào)錯(cuò) TS-999?”

  • 檢索階段(優(yōu)化方案):系統(tǒng)并行執(zhí)行向量檢索和關(guān)鍵詞檢索。關(guān)鍵詞檢索直接鎖定包含“TS-999”的文檔,很快找到了那篇《TS-999 錯(cuò)誤解決方案》;向量檢索仍返回一些一般性內(nèi)容,但由于Rank融合策略,將包含精確TS-999的結(jié)果提升了優(yōu)先級。然后對候選結(jié)果集啟用跨編碼器重排,模型判斷《TS-999 錯(cuò)誤解決方案》的相關(guān)性遠(yuǎn)高于其他片段,最終選取該文檔的相關(guān)段落作為主要回答依據(jù)。
  • 生成階段:GPT現(xiàn)在拿到了準(zhǔn)確的參考段落,其中明確寫著TS-999錯(cuò)誤的原因和解決步驟。它據(jù)此給出了有針對性的回答:“錯(cuò)誤 TS-999 表示許可證過期。解決方法:更新許可證密鑰并重啟服務(wù)。”?;卮鸩粌H正確還引用了內(nèi)部指南的措辭。用戶對結(jié)果非常滿意。

效果對比:經(jīng)過檢索策略升級后,該Bot在內(nèi)部評測中的回答準(zhǔn)確率從原來的68%提升到了90%以上,提升顯著。對于類似TS-999這樣以前答不出的細(xì)節(jié)問題,現(xiàn)在Bot幾乎都能對答如流。據(jù)團(tuán)隊(duì)統(tǒng)計(jì),引入混合檢索和重排序后,知識庫文檔的命中率(正確文檔出現(xiàn)在Top5檢索結(jié)果中)從70%左右提高到了95%。與此同時(shí),由于過濾掉大量無關(guān)內(nèi)容,平均每次回答的響應(yīng)時(shí)間反而從5秒縮短到了3秒,大幅改善了用戶體驗(yàn)。這個(gè)案例清楚地展示了:檢索策略的優(yōu)化如何讓 RAG 系統(tǒng)脫胎換骨,真正發(fā)揮出“大模型 + 知識庫”的威力。

落地清單與未來展望

通過以上分析,我們可以總結(jié)出一份檢索策略優(yōu)化的落地清單(Checklist):

  • 理解你的知識庫和問答需求:梳理知識庫的類型(文本為主?是否有結(jié)構(gòu)化數(shù)據(jù)?)、規(guī)模和更新頻率,分析用戶提問特征(專業(yè)術(shù)語多不多?問句長短?模糊問句比例?)。這是制定檢索策略的基礎(chǔ)。
  • 確定文檔切片粒度:選擇合適的切片大小和重疊,保證每個(gè)切片既自包含核心信息又不會太長影響匹配。(例如:FAQ類短問答可整條為單位,長文檔則按段/小節(jié)切片。)
  • 選擇嵌入模型和索引:根據(jù)語言和領(lǐng)域選擇表現(xiàn)好的Embedding模型,并評估向量維度、距離度量等參數(shù)。選型向量數(shù)據(jù)庫或搜索引擎時(shí),注意其對混合檢索的支持程度。如果需關(guān)鍵詞功能,優(yōu)先考慮支持原生Hybrid查詢的方案。
  • 實(shí)施混合檢索策略:為索引同時(shí)配置向量檢索和關(guān)鍵詞檢索。設(shè)計(jì)融合邏輯(可以先簡單地按得分排序,后續(xù)逐步調(diào)優(yōu)加權(quán))。確保建立同義詞表或關(guān)鍵術(shù)語詞表,提高關(guān)鍵詞檢索覆蓋面。
  • 考慮重排序組件:如果準(zhǔn)確率要求高,部署一個(gè)輕量級重排序模型。先離線測試其效果增益,再決定用在在線哪些查詢上(可以對長問句或低信心檢索結(jié)果觸發(fā))。設(shè)置好候選集大小和最低分等參數(shù)以控制重排行為。
  • 提升召回的措施:針對容易遺漏的信息源,使用多向量表示(如標(biāo)題和正文分別嵌入)。對常見模糊查詢,預(yù)先設(shè)計(jì)查詢擴(kuò)展規(guī)則或模型。定期檢查未答出的問題案例,分析是否需要增加新的擴(kuò)展規(guī)則或embedding角度。
  • 性能優(yōu)化與緩存:為常用查詢和固定問答結(jié)果建立緩存機(jī)制(哪怕只是緩存檢索結(jié)果,也能節(jié)省向量計(jì)算和IO)。同時(shí)利用元數(shù)據(jù)過濾減少不必要的搜索范圍。在保證答案質(zhì)量的前提下,不斷壓測和優(yōu)化檢索的延遲,爭取毫秒必爭。
  • 監(jiān)控與迭代:上線后,搭建檢索效果的監(jiān)控指標(biāo)體系,如檢索召回率、文檔命中率、回答準(zhǔn)確率、平均響應(yīng)時(shí)間等。出現(xiàn)指標(biāo)異常及時(shí)排查(很多時(shí)候又是檢索沒抓到關(guān)鍵內(nèi)容)。根據(jù)用戶反饋和日志,持續(xù)調(diào)整同義詞庫、過濾規(guī)則乃至重新訓(xùn)練embedding模型,迭代優(yōu)化。

以上清單可以幫助團(tuán)隊(duì)一步步完善檢索環(huán)節(jié),構(gòu)筑起 RAG 應(yīng)用的堅(jiān)實(shí)地基??梢哉f,做好檢索這一環(huán),后面的生成就有了源源不斷的“彈藥”,成功率自然水漲船高。

最后,我們將目光放遠(yuǎn)一些,展望未來 Agent 時(shí)代檢索策略的演進(jìn)趨勢。隨著大模型朝著更加自主的Agent方向發(fā)展,未來的 AI 助手將不再被動等待檢索結(jié)果,而可能主動地參與檢索、驅(qū)動檢索

  • Agent 主導(dǎo)的檢索鏈路:正如微軟提出的“Agenticsearch”,LLM Agent 可以基于對話上下文自行規(guī)劃檢索計(jì)劃,拆分成多個(gè)子查詢并行執(zhí)行。這意味著未來檢索不再是單輪的,而可能是多輪交互:Agent 先檢索大概信息,如果不滿意再自動追問細(xì)節(jié),像一個(gè)真人分析師一樣層層深入。這對檢索策略提出了新的要求——需要支持Agent的實(shí)時(shí)決策、快速多輪查詢和結(jié)果合并。
  • 知識融合的新形態(tài):除了文本向量,Agent還可能調(diào)用知識圖譜、數(shù)據(jù)庫查詢等多種工具檢索。例如 Graph RAG 將圖數(shù)據(jù)庫引入,讓檢索不僅匹配文檔,還能按照實(shí)體關(guān)系網(wǎng)找到關(guān)聯(lián)信息。未來復(fù)雜問答可能需要混合多模態(tài)、多數(shù)據(jù)庫的檢索,策略上就要考慮如何讓不同來源的信息協(xié)調(diào)發(fā)揮作用。
  • 內(nèi)存型檢索與模型融合:隨著上下文長度的增加和新技術(shù)(如RMT、Retro、memorizingtransformer)的出現(xiàn),檢索與生成的界限可能模糊。模型也許能“記住”更多知識,在生成時(shí)少依賴外部實(shí)時(shí)檢索;或者檢索模塊本身智能化,更好地理解模型需求。比如前文提到的Cache-Augmented Generation,本質(zhì)就是用長時(shí)記憶緩存替代部分檢索,將知識綁定在模型內(nèi)部。未來我們可能會看到檢索模塊與模型深度融合的新架構(gòu),大模型可以動態(tài)決定何時(shí)查詢外部、何時(shí)用內(nèi)部記憶,打造更流暢高效的問答體驗(yàn)。

總而言之,萬變不離其宗:無論技術(shù)如何演進(jìn),讓對的信息在對的時(shí)間送達(dá)到模型面前始終是檢索策略的核心使命。正如一句話所言:“Information is power”,而在 RAG 系統(tǒng)里,檢索策略就是解鎖信息力量的鑰匙。希望這篇“檢索策略觀止”能幫助你撥開迷霧、抓住要領(lǐng),在自己的大模型落地項(xiàng)目中少走彎路、脫穎而出。下次再有人抱怨RAG效果不佳時(shí),你會知道去檢查哪兒,并有信心調(diào)校出一個(gè)既全又準(zhǔn)、既快又穩(wěn)的檢索方案。畢竟,掌握了檢索這門藝術(shù),就等于掌握了 RAG 成敗的命門。

本文由 @Timothy 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)作者許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!