使用LlamaIndex和ChatGPT的無代碼檢索增強(qiáng)生成(RAG)
譯文譯者 | 李睿
審校 | 重樓
檢索增強(qiáng)生成(RAG)是使用大型語言模型(LLM)的關(guān)鍵工具。RAG使LLM能夠?qū)⑼獠课臋n合并到它們的響應(yīng)中,從而更緊密地與用戶需求保持一致。這個功能在傳統(tǒng)上使用LLM猶豫不決的領(lǐng)域尤其有益,尤其是在事實(shí)很重要的時候。
自從ChatGPT和類似的LLM推出以來,出現(xiàn)了大量的RAG工具和庫。以下是需要了解的關(guān)于RAG如何工作以及如何開始使用它與ChatGPT、Claude或選擇的LLM。
RAG提供的好處
當(dāng)開發(fā)人員與大型語言模型交互時,它會利用其訓(xùn)練數(shù)據(jù)中嵌入的知識來制定響應(yīng)。然而,規(guī)模龐大的訓(xùn)練數(shù)據(jù)往往超過模型的參數(shù),導(dǎo)致響應(yīng)可能不完全準(zhǔn)確。此外,訓(xùn)練中使用的各種信息可能會導(dǎo)致LLM混淆細(xì)節(jié),可能提供看似合理但不正確的答案,這種現(xiàn)象被稱為“幻覺”。
在某些情況下,開發(fā)人員可能希望LLM使用未包含在其訓(xùn)練數(shù)據(jù)中的信息,例如最近發(fā)布的新聞文章、學(xué)術(shù)論文或?qū)S泄疚臋n。這就是RAG發(fā)揮重要作用的地方。
RAG通過在LLM生成響應(yīng)之前為其提供相關(guān)信息來解決這些問題。這包括從外部源檢索文檔(因此得名),并將其內(nèi)容插入到對話中,以向LLM提供場景。
這一過程增強(qiáng)了模型的準(zhǔn)確性,并使其能夠根據(jù)提供的內(nèi)容制定響應(yīng)。實(shí)驗(yàn)表明,RAG能顯著減少“幻覺”。在需要最新或客戶特定信息的應(yīng)用程序中,它也被證明是有益的,這些信息不包括在訓(xùn)練數(shù)據(jù)集中。
簡單地說,標(biāo)準(zhǔn)LLM和支持RAG的LLM之間的區(qū)別可以比喻成兩個人回答問題。標(biāo)準(zhǔn)LLM就像一個人根據(jù)記憶做出回應(yīng),而支持RAG的LLM則像獲得文件的另一個人,可以根據(jù)文件內(nèi)容閱讀和回答問題。
RAG是如何工作的
RAG的工作原理很簡單。它標(biāo)識與查詢相關(guān)的一個或多個文檔,將它們合并到提示中,并修改提示以包含模型基于這些文檔的響應(yīng)的說明。
開發(fā)人員可以手動實(shí)現(xiàn)RAG,其方法是將文檔的內(nèi)容復(fù)制粘貼到提示中,并指示模型根據(jù)該文檔制定響應(yīng)。
RAG管道將這一過程實(shí)現(xiàn)自動化以提高效率。它首先將用戶的提示與文檔數(shù)據(jù)庫進(jìn)行比較,檢索與主題最相關(guān)的提示。然后,RAG管道將它們的內(nèi)容集成到提示符中,并添加指令以確保LLM符合文檔的內(nèi)容。
RAG管道需要什么?
圖1 使用嵌入和矢量數(shù)據(jù)庫檢索相關(guān)文檔
雖然RAG是一個直觀的概念,但它的執(zhí)行需要多個組件的無縫集成。
首先,需要生成響應(yīng)的主要語言模型。除此之外,還需要一個嵌入模型將文檔和用戶提示編碼為表示其語義內(nèi)容的數(shù)字列表或“嵌入”。
接下來,需要一個矢量數(shù)據(jù)庫來存儲這些文檔嵌入,并在每次收到用戶查詢時檢索最相關(guān)的文檔嵌入。在某些情況下,排序模型還有助于進(jìn)一步細(xì)化向量數(shù)據(jù)庫提供的文檔的順序。
對于某些應(yīng)用程序,開發(fā)人員可能希望合并一種額外的機(jī)制,將用戶提示分為幾個部分。這些部分中的每一個都需要自己獨(dú)特的嵌入和文檔,從而提高所生成響應(yīng)的準(zhǔn)確性和相關(guān)性。
如何在無代碼的情況下開始使用RAG
圖2 無代碼RAG與LlamaIndex和ChatGPT
LlamaIndex最近發(fā)布了一個開源工具,它允許開發(fā)人員開發(fā)基本的RAG應(yīng)用程序,幾乎不需要編寫代碼。雖然目前僅限于單個文件的使用,但未來的增強(qiáng)功能可能包括對多個文件和矢量數(shù)據(jù)庫的支持。
這個名為RAG的項目建立在Streamlit web應(yīng)用程序框架和LlamaIndex之上,LlamaIndex是一個強(qiáng)大的Python庫,對RAG特別有用。如果開發(fā)人員熟悉GitHub和Python,其安裝很簡單:只需克隆存儲庫,運(yùn)行安裝命令,然后將OpenAI API令牌添加到自述文檔中指定的配置文件中。
目前,RAG被配置為與OpenAI模型一起工作。但是,可以修改代碼以使用其他模型,例如Anthropic Claude、Cohere模型或服務(wù)器上托管的開源模型(如Llama 2)。LlamaIndex支持所有這些模型。
應(yīng)用程序的初始運(yùn)行需要設(shè)置RAG代理。這涉及到確定設(shè)置,包括文件、將文件分成塊的大小,以及為每個提示檢索的塊的數(shù)量。
塊在RAG中起著至關(guān)重要的作用。當(dāng)處理一個大文件時,例如一本書或一篇多頁的研究論文,有必要把它分解成可管理的塊,例如500個令牌。這允許RAG代理定位文檔中與提示相關(guān)的特定部分。
在完成這些步驟之后,應(yīng)用程序?qū)镽AG代理創(chuàng)建一個配置文件,并用它來運(yùn)行代碼。RAG是一個有價值的工具,可以從增強(qiáng)檢索開始并在此基礎(chǔ)上進(jìn)行構(gòu)建。人們可以在相關(guān)網(wǎng)站上找到完整的指南。
原文標(biāo)題:No-code retrieval augmented generation (RAG) with LlamaIndex and ChatGPT,作者:Ben Dickson
鏈接:https://bdtechtalks.com/2023/11/22/rag-chatgpt-llamaindex/