生成是大模型落地的首選方案)
RAG是什么為什么它是大模型落地的首選方案工具篇講完了從這一篇開始我們進(jìn)入RAG篇。RAG是Retrieval-Augmented Generation的縮寫中文叫檢索增強(qiáng)生成。名字聽起來有點(diǎn)學(xué)術(shù)做的事情其實(shí)很樸素。就是讓大模型在回答問題之前先去知識(shí)庫(kù)搜相關(guān)資料再根據(jù)搜到的內(nèi)容生成答案。為什么要費(fèi)這個(gè)勁。因?yàn)榇竽P陀袃蓚€(gè)老大難問題知識(shí)截止和幻覺。RAG就是沖著解決這兩個(gè)問題來的。這一篇我們從零講起。RAG到底是什么它解決了什么問題基本原理是什么為什么說它是大模型落地最成熟的方案。大模型的兩個(gè)痛點(diǎn)先說背景。大模型很厲害但它不是萬能的。用在實(shí)際業(yè)務(wù)里有兩個(gè)問題繞不開。第一個(gè)問題知識(shí)有截止日期。大模型的知識(shí)來自訓(xùn)練數(shù)據(jù)訓(xùn)練數(shù)據(jù)是有截止日期的。比如GPT-4的訓(xùn)練數(shù)據(jù)截止到2024年中那之后發(fā)生的事它就不知道了。你問它2025年的新產(chǎn)品、新政策、新數(shù)據(jù)它要么說不知道要么瞎編。企業(yè)內(nèi)部的知識(shí)它更不知道。公司的產(chǎn)品文檔、內(nèi)部規(guī)章、歷史案例這些東西不可能出現(xiàn)在公開訓(xùn)練數(shù)據(jù)里。第二個(gè)問題幻覺。大模型有時(shí)候會(huì)一本正經(jīng)地胡說八道。它說的話聽起來很有道理事實(shí)卻是錯(cuò)的。引用不存在的論文編造不存在的API參數(shù)給出錯(cuò)誤的數(shù)字。普通用戶很難分辨真假。做聊天應(yīng)用幻覺是個(gè)體驗(yàn)問題。做企業(yè)應(yīng)用幻覺就是個(gè)事故問題。客服給用戶說錯(cuò)了產(chǎn)品參數(shù)法律助手給了錯(cuò)誤的建議知識(shí)庫(kù)問答引用了不存在的規(guī)定這些都是要出大事的。怎么解決這兩個(gè)問題。有兩條路。一條路是微調(diào)。把領(lǐng)域知識(shí)喂給模型繼續(xù)訓(xùn)練讓模型學(xué)會(huì)這些知識(shí)。這條路效果有但成本高、周期長(zhǎng)、更新慢。知識(shí)變了還得重新微調(diào)跟不上業(yè)務(wù)變化的速度。另一條路就是RAG。不教模型新知識(shí)而是把知識(shí)存在外部的知識(shí)庫(kù)里。回答問題的時(shí)候先去庫(kù)里搜相關(guān)內(nèi)容再基于搜到的內(nèi)容回答。模型不用改知識(shí)隨時(shí)可以更新。兩條路各有適用場(chǎng)景。大部分企業(yè)級(jí)應(yīng)用RAG是更務(wù)實(shí)的選擇。RAG的基本原理RAG的流程說起來很簡(jiǎn)單就三步。第一步用戶提問。第二步去知識(shí)庫(kù)檢索跟問題相關(guān)的內(nèi)容。第三步把搜到的內(nèi)容和問題一起發(fā)給大模型讓它根據(jù)搜到的內(nèi)容生成答案。就這么三步。為什么這樣就能解決知識(shí)截止和幻覺的問題。知識(shí)截止的問題好理解。答案的來源是知識(shí)庫(kù)不是模型的訓(xùn)練數(shù)據(jù)。知識(shí)庫(kù)是最新的答案就是最新的。你更新知識(shí)庫(kù)就行不用動(dòng)模型。幻覺的問題怎么解決。因?yàn)榇竽P突卮鸬臅r(shí)候有參考依據(jù)了。它不再憑記憶瞎說會(huì)先看搜到的原文再根據(jù)原文來回答。有據(jù)可查準(zhǔn)確率就高多了。而且你還能溯源。用戶問為什么這么回答你可以把引用的原文片段找出來給他看。答案是從哪來的清清楚楚。這個(gè)在企業(yè)場(chǎng)景里特別重要。一個(gè)最簡(jiǎn)單的RAG例子光說原理不夠直觀我們寫一個(gè)最簡(jiǎn)單的RAG。不用向量數(shù)據(jù)庫(kù)也不用復(fù)雜的框架。就用Python寫十幾行代碼感受一下RAG是怎么回事。fromdotenvimportload_dotenvfromlangchain_openaiimportChatOpenAI load_dotenv()modelChatOpenAI(modelgpt-3.5-turbo,temperature0)# 模擬知識(shí)庫(kù)knowledge_base[公司A產(chǎn)品的價(jià)格是2999元發(fā)布于2025年3月。,公司A產(chǎn)品的保修期是一年非人為損壞免費(fèi)維修。,公司B產(chǎn)品的價(jià)格是4999元發(fā)布于2025年6月。,公司B產(chǎn)品支持7天無理由退換貨15天質(zhì)量問題包換。,]defsimple_search(query):最簡(jiǎn)單的關(guān)鍵詞搜索results[]foriteminknowledge_base:# 簡(jiǎn)單的關(guān)鍵詞匹配forwordinquery:ifwordinitem:results.append(item)breakreturn\n.join(results)defrag_answer(question):# 第一步檢索相關(guān)內(nèi)容contextsimple_search(question)# 第二步帶著上下文提問promptf請(qǐng)根據(jù)下面的參考資料回答用戶的問題。 如果參考資料里沒有答案就說我不知道。 不要編造資料里沒有的內(nèi)容。 參考資料{context}用戶問題{question}responsemodel.invoke(prompt)returnresponse.content# 測(cè)試print(rag_answer(A產(chǎn)品多少錢))print(rag_answer(B產(chǎn)品保修期多長(zhǎng)))print(rag_answer(C產(chǎn)品價(jià)格是多少))運(yùn)行一下你會(huì)看到。第一個(gè)問題A產(chǎn)品的價(jià)格它能從知識(shí)庫(kù)找到正確答案。第二個(gè)問題B產(chǎn)品的保修期知識(shí)庫(kù)沒寫B(tài)產(chǎn)品的保修它可能會(huì)說不知道或者答錯(cuò)。這就是檢索不準(zhǔn)的問題。第三個(gè)問題C產(chǎn)品知識(shí)庫(kù)沒有它應(yīng)該說我不知道。這個(gè)例子很簡(jiǎn)陋搜索是關(guān)鍵詞匹配知識(shí)庫(kù)只有四條。但麻雀雖小五臟俱全RAG的基本流程就是這樣的。后面所有復(fù)雜的RAG系統(tǒng)都是在這個(gè)基礎(chǔ)上一步步優(yōu)化出來的。為什么需要向量檢索剛才的例子用的是關(guān)鍵詞搜索。關(guān)鍵詞搜索有個(gè)問題。用戶問的話和知識(shí)庫(kù)的文字不一定對(duì)得上。比如知識(shí)庫(kù)寫的是產(chǎn)品享有一年質(zhì)保服務(wù)用戶問的是保修期有多久。關(guān)鍵詞匹配可能就搜不到因?yàn)榫渥永餂]有保修這兩個(gè)字。人能理解質(zhì)保和保修是一個(gè)意思關(guān)鍵詞匹配理解不了。怎么解決這個(gè)問題。用向量檢索也叫語義檢索。向量檢索的思路是把文字轉(zhuǎn)換成向量然后用向量之間的相似度來判斷語義的接近程度。意思相近的句子向量距離就近。意思不相關(guān)的向量距離就遠(yuǎn)。“產(chǎn)品享有一年質(zhì)保服務(wù)和保修期有多久”字面上不一樣語義上很接近。轉(zhuǎn)換成向量以后它們的相似度很高就能被檢索到。這就是為什么現(xiàn)在的RAG系統(tǒng)基本都用向量數(shù)據(jù)庫(kù)。向量檢索比關(guān)鍵詞檢索更懂語義搜得更準(zhǔn)。當(dāng)然向量檢索也不是完美的。它也有搜不準(zhǔn)的時(shí)候有時(shí)候會(huì)漏掉相關(guān)內(nèi)容有時(shí)候會(huì)搜到不相關(guān)的。所以實(shí)際的RAG系統(tǒng)往往是關(guān)鍵詞檢索和向量檢索一起用各取所長(zhǎng)。RAG的優(yōu)勢(shì)和局限說清楚了原理我們來客觀地看看RAG的優(yōu)缺點(diǎn)。優(yōu)勢(shì)第一知識(shí)可以隨時(shí)更新。今天加了新文檔明天就能搜到。不用重新訓(xùn)練模型。第二答案有據(jù)可查。每個(gè)回答都能找到對(duì)應(yīng)的原文片段可溯源可驗(yàn)證。出了問題也能定位是哪里的問題。第三成本低。相比微調(diào)RAG的成本低很多。不需要GPU不需要大量訓(xùn)練數(shù)據(jù)一個(gè)向量數(shù)據(jù)庫(kù)就夠了。第四數(shù)據(jù)安全。企業(yè)的敏感數(shù)據(jù)不用喂給模型訓(xùn)練存在自己的向量庫(kù)里就行。局限第一檢索質(zhì)量決定回答質(zhì)量。搜不到相關(guān)內(nèi)容再?gòu)?qiáng)的模型也答不好。搜到的內(nèi)容不對(duì)答案也會(huì)錯(cuò)。第二不擅長(zhǎng)深度推理。RAG擅長(zhǎng)找事實(shí)性的答案比如價(jià)格、參數(shù)、規(guī)定。需要深度推理、綜合分析的問題光靠檢索不夠。第三上下文長(zhǎng)度有限。能塞進(jìn)上下文的內(nèi)容是有限的太多了模型處理不了還會(huì)稀釋有效信息。第四不能學(xué)習(xí)新知識(shí)。RAG只是檢索和引用它不會(huì)把知識(shí)內(nèi)化到模型里。每次回答都要重新搜。了解了這些你就知道RAG適合做什么、不適合做什么。知識(shí)庫(kù)問答、客服咨詢、文檔檢索這類場(chǎng)景RAG是首選。需要深度思考和創(chuàng)造的場(chǎng)景RAG就不夠用了。為什么說RAG是大模型落地的首選現(xiàn)在行業(yè)里有個(gè)共識(shí)大模型落地RAG是首選方案。為什么。第一個(gè)原因效果可預(yù)期。RAG的效果好不好你大概能估計(jì)出來。知識(shí)庫(kù)質(zhì)量高檢索做得好回答質(zhì)量就不會(huì)太差。不像端到端的模型效果很難預(yù)估。第二個(gè)原因成本可控。不需要大量標(biāo)注數(shù)據(jù)不需要昂貴的訓(xùn)練資源。幾臺(tái)服務(wù)器一個(gè)向量數(shù)據(jù)庫(kù)就能搭起來。第三個(gè)原因風(fēng)險(xiǎn)可控。答案有來源可以溯源可以審核。出了問題能定位也能修正。企業(yè)用著放心。第四個(gè)原因見效快。從0到1搭一個(gè)能用的RAG系統(tǒng)快的話一兩周就能搞定。然后可以持續(xù)優(yōu)化一步步提升效果。這些特點(diǎn)加起來讓RAG成了企業(yè)引入大模型最穩(wěn)妥的路徑。先從知識(shí)庫(kù)問答切入跑通了再擴(kuò)展到其他場(chǎng)景。風(fēng)險(xiǎn)小見效快ROI清晰。這也是為什么這個(gè)專欄用了整整一個(gè)模塊來講RAG。做Agent落地RAG是繞不開的。下一篇我們講文檔處理流水線。知識(shí)庫(kù)的質(zhì)量直接決定RAG的效果。文檔怎么解析、怎么切塊、怎么處理不同格式里面學(xué)問很多。