作為一個(gè)在Chatbot領(lǐng)域摸爬滾打了7年的從業(yè)者,筆者可以誠實(shí)地說,在大語言模型的推動(dòng)下,檢索增強(qiáng)生成(Retrieval Augmented Generation,RAG)技術(shù)正在快速崛起。
RAG的搜索請(qǐng)求和生成式AI技術(shù),為搜索請(qǐng)求和信息檢索領(lǐng)域帶來了革命性的改變。RAG能夠幫助大語言模型根據(jù)可靠的數(shù)據(jù)直接給出答案。
本文就來介紹一下RAG的技術(shù)原理,并和Fine-tuning(微調(diào))進(jìn)行對(duì)比,同時(shí)介紹RAG的周邊要素——向量數(shù)據(jù)庫。
值得一提的是,RAG原本屬于Chatbot系統(tǒng)搭建中的重要一環(huán),筆者把RAG提前到生命周期部分中來講述的原因是在數(shù)據(jù)處理和Prompt撰寫的過程中,需要對(duì) RAG 有基礎(chǔ)的了解。
為什么有了大語言模型還需要RAG
ChatGPT的出現(xiàn),使越來越多的開發(fā)者開始深入探索大語言模型在實(shí)際生產(chǎn)中的應(yīng)用效果,尤其關(guān)注如何搭建一個(gè)擁有專屬知識(shí)的大語言模型應(yīng)用。
在開始RAG的介紹前,筆者先介紹大語言模型在當(dāng)下的能力邊界。
- 大語言模型的能力
(2)邏輯推理的能力:大語言模型具有一定的邏輯推理能力,無須額外增加任何特殊提示詞,就能做出簡(jiǎn)單的推理,并挖掘出問題的深層內(nèi)容。在補(bǔ)充了一定的提示詞后,大語言模型能展現(xiàn)更強(qiáng)的推理能力。
(3)嘗試回答所有問題的能力:特別是對(duì)話類型的大語言模型,如GPT-3.5、GPT-4,會(huì)嘗試以對(duì)話形式回答用戶的所有問題。大語言模型面對(duì)無法準(zhǔn)確回答的問題,就算回答“我不能回答這個(gè)信息”,也會(huì)努力給出答案。
(4)通用知識(shí)的能力:大語言模型本身擁有海量的通用知識(shí),這些通用知識(shí)的準(zhǔn)確度較高,覆蓋范圍廣泛。
(5)多輪對(duì)話的能力:大語言模型可以根據(jù)設(shè)定好的角色,理解不同角色之間的多次對(duì)話的含義,這意味著可以在對(duì)話中采用追問的形式,而不是每一次對(duì)話都要把之前所有的關(guān)鍵信息重復(fù)一遍。
- 大語言模型的限制
(1)被動(dòng)觸發(fā):大語言模型是被動(dòng)觸發(fā)的,即需要用戶輸入或給出一段內(nèi)容,大語言模型才會(huì)回應(yīng)。大語言模型無法主動(dòng)發(fā)起交互。
(2)知識(shí)過期:特指GPT-3.5和GPT-4,二者的訓(xùn)練數(shù)據(jù)都截至2021年9月,意味著大語言模型不知道之后的知識(shí)。
(3)細(xì)分領(lǐng)域的幻覺:雖然大語言模型在通用知識(shí)部分表現(xiàn)優(yōu)秀,但在特定知識(shí)領(lǐng)域(如垂直的醫(yī)藥行業(yè)),大語言模型的回答往往存在錯(cuò)誤,無法直接采信。
(4)對(duì)話長度:如果給大語言模型提供的內(nèi)容過多,超過模型字符長度的限制,則該輪對(duì)話會(huì)失敗。
- 用戶的常見需求
希望搭建Chatbot的企業(yè),通常期望用大語言模型實(shí)現(xiàn)以下功能。
采取多輪對(duì)話的形式,理解用戶的提問并回答。
要求準(zhǔn)確地回答關(guān)于企業(yè)的專屬知識(shí)。
不能回答與企業(yè)專屬領(lǐng)域知識(shí)無關(guān)的內(nèi)容。
可以發(fā)現(xiàn),雖然大語言模型有上下文推理能力,但由于大語言模型存在“知識(shí)過期”和“細(xì)分領(lǐng)域的幻覺”這兩個(gè)限制,且它會(huì)盡可能地嘗試回答所有的問題,因此只是單純地使用大語言模型是沒有辦法解決所有問題的,RAG正是在這個(gè)背景下應(yīng)運(yùn)而生的。
RAG的技術(shù)原理
在RAG出現(xiàn)之前,早期的問答系統(tǒng)主要依賴預(yù)定義的規(guī)則和模板,以及簡(jiǎn)單的關(guān)鍵詞匹配技術(shù)。知識(shí)圖譜的出現(xiàn),為問答系統(tǒng)帶來了一定的改進(jìn),但這些系統(tǒng)仍然依賴固定的數(shù)據(jù)結(jié)構(gòu)和知識(shí)庫,限制了系統(tǒng)處理復(fù)雜問題的能力發(fā)展。
大語言模型出現(xiàn)后,尤其是ChatGPT的出現(xiàn),顯著提高了機(jī)器對(duì)自然語言的理解能力,大語言模型在大量文本上進(jìn)行預(yù)訓(xùn)練后,能夠生成更自然、更準(zhǔn)確的語言。
RAG結(jié)合了信息檢索和文本生成兩種方法,旨在突破傳統(tǒng)問答系統(tǒng)的局限。通過將外部數(shù)據(jù)檢索的相關(guān)信息輸入大語言模型,大語言模型能夠基于這些信息生成回答,進(jìn)而增強(qiáng)答案生成的能力。RAG能夠處理更廣泛、更復(fù)雜的問題。
使用RAG后可以有效解決大語言模型細(xì)分領(lǐng)域的幻覺和知識(shí)過期的問題。通過預(yù)檢索模塊,無需一次性向大語言模型輸入過多的知識(shí),大部分知識(shí)都可以用外部數(shù)據(jù)庫承載,解決了當(dāng)前大語言模型對(duì)話長度受 Token限制的問題。
值得注意的是,在生成回答時(shí),RAG 系統(tǒng)不是簡(jiǎn)單地復(fù)制檢索到的信息,而是在綜合并加工這些信息,這使最終的回答既準(zhǔn)確又具有一定的原創(chuàng)性。這一點(diǎn)是RAG區(qū)別于其他簡(jiǎn)單問答系統(tǒng)的關(guān)鍵。
- RAG的核心組件
RAG主要有兩個(gè)核心組件:信息檢索和文本生成。
信息檢索
信息檢索(Retrieve)的主要任務(wù)是在一個(gè)大型的知識(shí)庫或文檔集合中搜索與用戶提出的問題相關(guān)的信息。這個(gè)過程類似人在圖書館中查找相關(guān)書籍以回答某個(gè)問題。通常,這一步驟依賴傳統(tǒng)的信息檢索技術(shù),如倒排索引、TF-IDF評(píng)分、BM25算法等,或者采用更現(xiàn)代的基于向量的搜索方法。
雖然讓大語言模型擁有特定領(lǐng)域的知識(shí)就要外掛向量數(shù)據(jù)庫已經(jīng)成為業(yè)內(nèi)共識(shí),但其實(shí)不只是向量數(shù)據(jù)庫,所有外部存儲(chǔ)的內(nèi)容都可以被檢索,再進(jìn)行二次生成。
文本生成
文本生成(Generate)的職責(zé)是根據(jù)檢索到的信息生成一個(gè)連貫、準(zhǔn)確的回答。這個(gè)過程可以看作根據(jù)收集到的材料撰寫一篇簡(jiǎn)短的文章或回答。
這個(gè)功能通常采用預(yù)訓(xùn)練的生成式語言模型來實(shí)現(xiàn),如GPT系列。這些模型在大量文本上進(jìn)行預(yù)訓(xùn)練,能夠生成流暢且語義連貫的文本。
信息檢索和文本生成兩個(gè)組件的緊密結(jié)合至關(guān)重要。信息檢索為文本生成提供了必要的原料,而文本生成則將這些原料轉(zhuǎn)化為易于理解和有用的信息。這種結(jié)合使得RAG能夠處理更復(fù)雜的查詢,并生成更準(zhǔn)確、更豐富的回答。
值得注意的是,在進(jìn)行檢索之前,對(duì)數(shù)據(jù)的處理也非常重要。通常,外部數(shù)據(jù)不僅存儲(chǔ)在數(shù)據(jù)庫中,也可能存儲(chǔ)在外部文檔(PDF、Markdown、Word、Excel等)或網(wǎng)頁中。這時(shí),需要對(duì)所有外部數(shù)據(jù)進(jìn)行清洗和處理,同時(shí)需要提取一些元數(shù)據(jù),包括文件名、時(shí)間、章節(jié)、圖片等。
另外,僅加載外部文件是不夠的。通常,外部文件非常大,而且Embedding模型和大語言模型都有長度限制,這時(shí)就需要將文件進(jìn)一步切割成文本塊(Chunk),才能精準(zhǔn)地進(jìn)行檢索和生成。根據(jù)索引方式的不同、模型選擇的不同,以及問答文本長度和復(fù)雜度的不同,切割的方法也有不同,簡(jiǎn)單的數(shù)據(jù)處理的流程如圖1所示。筆者會(huì)在第10章對(duì)數(shù)據(jù)處理進(jìn)行更詳細(xì)的介紹。
圖1
- RAG的工作流程
首先,通過檢索系統(tǒng)引導(dǎo)大語言模型從外界數(shù)據(jù)庫中查找與問題相關(guān)的文檔或段落;然后,重新構(gòu)建輸入大語言模型的內(nèi)容。最后,使用大語言模型在此基礎(chǔ)上生成符合檢索系統(tǒng)規(guī)定格式的答案。簡(jiǎn)而言之,RAG被視為模型的“外掛數(shù)據(jù)庫”,以優(yōu)化其回復(fù)。
為了讓讀者有完整的結(jié)構(gòu)概覽,結(jié)合數(shù)據(jù)處理流程和RAG流程,可以將RAG的工作流程簡(jiǎn)化為圖2所示的形式。接下來將重點(diǎn)介紹RAG的工作流程。
圖2
最基礎(chǔ)的RAG
最基礎(chǔ)的RAG流程如圖3所示。
圖3
(1)接收查詢:系統(tǒng)收到用戶的問題或查詢。
(2)檢索相關(guān)信息:系統(tǒng)查詢一個(gè)或多個(gè)外部知識(shí)庫,查找與該問題相關(guān)的信息或文檔。
(4)提供回應(yīng):系統(tǒng)將生成的回答呈現(xiàn)給用戶。
增加預(yù)處理查詢的RAG
在用戶提問環(huán)節(jié),可以對(duì)問題進(jìn)行進(jìn)一步的預(yù)處理和理解查詢,具體流程如圖4所示。
(1)問題預(yù)處理:系統(tǒng)先對(duì)用戶輸入進(jìn)行預(yù)處理,如文本清洗、標(biāo)準(zhǔn)化等,確保輸入數(shù)據(jù)的質(zhì)量。
(2)理解查詢:系統(tǒng)運(yùn)用自然語言處理技術(shù)理解查詢的內(nèi)容和意圖。這個(gè)環(huán)節(jié)可以利用傳統(tǒng)自然語言處理技術(shù)中的知識(shí)領(lǐng)域和意圖識(shí)別,即根據(jù)用戶的提問選擇不同數(shù)據(jù)庫中的內(nèi)容,甚至可以對(duì)應(yīng)不同匹配閾值及操作,具體細(xì)節(jié)本節(jié)不再詳述。
圖4
帶有聊天歷史的RAG
在實(shí)際對(duì)話中,用戶和Chatbot的交流往往不是一句話,而是多句話,且上下文之間有指代關(guān)系。例如,用戶說了兩句話:
李佳芮是句子互動(dòng)的創(chuàng)始人。
她今年多大了?
如果系統(tǒng)逐句處理接收的信息,則無法確定句子中的“她”指的是誰。系統(tǒng)需要將兩句話結(jié)合起來,才能正確理解用戶的提問是“李佳芮多大了”。
在這個(gè)例子中,除了對(duì)問題進(jìn)行基礎(chǔ)的預(yù)處理,還有一步重要的操作就是把之前的歷史記錄輸入系統(tǒng)。通用的做法之一是讓大語言模型將當(dāng)前的問題和先前的問題結(jié)合,使用Prompt 引導(dǎo)大語言模型重寫用戶的問題,這樣做可以有效地解決指代消除的問題。具體流程如圖5所示。
圖5
增加自動(dòng)排序的RAG
盡管增加了聊天的歷史記錄,但由于在數(shù)據(jù)處理環(huán)節(jié)中系統(tǒng)內(nèi)切割成的塊數(shù)量很多,系統(tǒng)檢索的維度不一定是最有效的,因此一次檢索的結(jié)果在相關(guān)性上并不理想。這時(shí),需要一些策略對(duì)檢索的結(jié)果進(jìn)行重新排序,或者重新調(diào)整組合相關(guān)度、匹配度等因素,使其更適合業(yè)務(wù)的場(chǎng)景。
對(duì)此,通常會(huì)設(shè)置內(nèi)部觸發(fā)器進(jìn)行自動(dòng)評(píng)審,觸發(fā)自動(dòng)重排序的邏輯,具體流程如圖6所示。
圖6
上述幾個(gè)案例只是簡(jiǎn)單的RAG擴(kuò)展說明,系統(tǒng)搭建章節(jié)會(huì)展示一個(gè)完整的案例。需要注意的是,在很多中間環(huán)節(jié)都可以根據(jù)具體場(chǎng)景加入各種工程化實(shí)現(xiàn),滿足真實(shí)的應(yīng)用場(chǎng)景。在某些應(yīng)用中,即使在最后的環(huán)節(jié)也不代表RAG技術(shù)的完成。用戶的反饋可以進(jìn)一步優(yōu)化RAG的性能,例如用戶評(píng)價(jià)回答質(zhì)量的信息可以用來訓(xùn)練和改進(jìn)模型。
RAG在Chatbot中的應(yīng)用
RAG 技術(shù)在 Chatbot 應(yīng)用中有非常重要的作用,尤其是在提高回應(yīng)的相關(guān)性和準(zhǔn)確性、處理復(fù)雜查詢及增強(qiáng)個(gè)性化和上下文理解能力方面。
- 提高回應(yīng)的相關(guān)性和準(zhǔn)確性
(1)基于檢索的信息豐富性:RAG 技術(shù)的檢索組件可以從大量的知識(shí)庫中檢索與用戶提問相關(guān)的信息。這意味著Chatbot可以訪問更多的數(shù)據(jù)點(diǎn),從而提供更豐富、更準(zhǔn)確的回答。例如,當(dāng)用戶詢問關(guān)于某個(gè)歷史事件的細(xì)節(jié)時(shí),RAG 技術(shù)能夠從多個(gè)來源中檢索相關(guān)信息,確?;卮鸬娜嫘院蜏?zhǔn)確性。
(2)文本生成組件的語境適應(yīng)能力:RAG 的文本生成組件不僅是簡(jiǎn)單地重復(fù)檢索到的信息,還能根據(jù)上下文生成適當(dāng)?shù)幕卮?。這意味著即使利用同樣的信息源,對(duì)不同的問題,生成的回答也會(huì)有所不同,這能確?;貞?yīng)與用戶的查詢高度相關(guān)。
(3)數(shù)據(jù)質(zhì)量和過濾機(jī)制:Chatbot 中的 RAG 技術(shù)通常配備高質(zhì)量的數(shù)據(jù)源,并使用過濾機(jī)制來確保檢索到的信息是可信和準(zhǔn)確的。這降低了生成錯(cuò)誤信息的風(fēng)險(xiǎn),提高了回應(yīng)的準(zhǔn)確性。
- 處理復(fù)雜查詢
(1)信息聚合能力:對(duì)于復(fù)雜的查詢,RAG 技術(shù)能夠從不同的信息源中聚合數(shù)據(jù)。這意味著它可以綜合多個(gè)觀點(diǎn)或信息片段,提供一個(gè)全面的回答。例如,回答關(guān)于氣候變化影響的復(fù)雜問題時(shí),RAG能夠綜合科學(xué)研究、統(tǒng)計(jì)數(shù)據(jù)和專家意見等多方面的信息。
(2)上下文感知和連續(xù)對(duì)話能力:RAG技術(shù)在處理復(fù)雜查詢時(shí)還具備上下文感知的能力。這意味著它可以理解并利用對(duì)話的歷史和上下文信息,更好地處理多輪對(duì)話中的復(fù)雜查詢。
- 增強(qiáng)個(gè)性化和上下文理解能力
(1)個(gè)性化回答:RAG技術(shù)能夠根據(jù)用戶的歷史交互和偏好提供個(gè)性化的回答。例如,如果系統(tǒng)知道用戶對(duì)某個(gè)特定主題有深入的了解,則可以提供有關(guān)該主題的更深入的回答。
(2)上下文追蹤能力和長期記憶:Chatbot中的RAG系統(tǒng)通常具有上下文追蹤能力和一定程度的長期記憶。這意味著它們能夠記住用戶過去的提問和回答,以便在未來的交互中提供更相關(guān)和連貫的回答。
(3)情感識(shí)別:RAG 技術(shù)可以整合情感識(shí)別功能,使 Chatbot 能夠根據(jù)用戶的情緒調(diào)整其回答的風(fēng)格和內(nèi)容。這增加了交互的個(gè)性化,使其更人性。
RAG技術(shù)在Chatbot中的應(yīng)用極大地提高了回應(yīng)的相關(guān)性和準(zhǔn)確性,使得處理復(fù)雜查詢成為可能,并顯著增強(qiáng)了個(gè)性化與上下文理解的能力,為用戶提供了更豐富、更自然、更個(gè)性化的交互體驗(yàn),推動(dòng)了Chatbot技術(shù)的發(fā)展。
RAG面臨的挑戰(zhàn)
當(dāng)然,RAG并非無所不能,當(dāng)前仍然有以下技術(shù)難點(diǎn)需要持續(xù)優(yōu)化。
(1)檢索與生成的協(xié)同工作:檢索到的內(nèi)容與生成的內(nèi)容能否緊密結(jié)合是一個(gè)關(guān)鍵問題。
(2)計(jì)算效率:執(zhí)行檢索和生成這兩個(gè)步驟可能導(dǎo)致系統(tǒng)響應(yīng)延遲,使整個(gè)系統(tǒng)的運(yùn)行速度變慢,因此對(duì)時(shí)間敏感的應(yīng)用而言,RAG可能不太適用。
(3)數(shù)據(jù)噪聲:外部檢索的數(shù)據(jù)可能帶有噪聲,這會(huì)影響生成內(nèi)容的準(zhǔn)確性。
未來,RAG會(huì)在法律、教育、商業(yè)等方向上有非常多的應(yīng)用。值得一提的是,在某一特定語言風(fēng)格(如魯迅的語言風(fēng)格)、模型本身的價(jià)值觀傾向等方面,還需要類似 Fine-tuning的技術(shù)來優(yōu)化大語言模型。
更多關(guān)于RAG及大模型時(shí)代下從0到1構(gòu)建Chatbot的內(nèi)容,歡迎閱讀《Chatbot從0到1(第2版):對(duì)話式交互實(shí)踐指南》一書!
↑限時(shí)五折優(yōu)惠↑文章來源:http://www.zghlxwxcb.cn/news/detail-788361.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-788361.html
到了這里,關(guān)于RAG:讓大語言模型擁有特定的專屬知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!