流程步驟

RAG的工作流程包括三個(gè)主要步驟:檢索、增強(qiáng)和生成。首先,通過(guò)用戶的查詢從外部知識(shí)源中檢索相關(guān)信息。然后,將檢索到的信息與用戶查詢一起嵌入到提示模板中進(jìn)行增強(qiáng)。最后,將增強(qiáng)后的提示輸入到LLM中,生成所需的輸出。

應(yīng)用場(chǎng)景

RAG流程廣泛應(yīng)用于需要結(jié)合實(shí)時(shí)信息和領(lǐng)域知識(shí)的場(chǎng)景,如客戶服務(wù)、技術(shù)支持和內(nèi)容生成。這種流程可以顯著提高回答的準(zhǔn)確性和相關(guān)性。

當(dāng)前大語(yǔ)言模型的局限性

數(shù)據(jù)范圍限制

當(dāng)前的大語(yǔ)言模型(LLMs)在訓(xùn)練時(shí)使用的是大量的靜態(tài)數(shù)據(jù),這限制了它們對(duì)最新信息的掌握能力。這種數(shù)據(jù)范圍的限制常導(dǎo)致模型在面對(duì)新問(wèn)題時(shí)的幻覺(jué)現(xiàn)象。

計(jì)算資源消耗

為了適應(yīng)特定領(lǐng)域的信息,傳統(tǒng)上需要對(duì)模型進(jìn)行微調(diào),這種方法需要耗費(fèi)大量的計(jì)算資源,難以快速適應(yīng)信息的變化。

解決方法

針對(duì)上述局限性,檢索增強(qiáng)生成(RAG)提供了一種更為靈活和高效的解決方案。通過(guò)結(jié)合外部知識(shí)源,RAG能夠有效地彌補(bǔ)LLM的知識(shí)盲區(qū)和數(shù)據(jù)更新問(wèn)題。

ChatGPT回答局限性示例

解決方案與RAG的提出

微調(diào)與RAG的對(duì)比

盡管微調(diào)能夠使大語(yǔ)言模型適應(yīng)特定領(lǐng)域的信息,但其高昂的成本和復(fù)雜的操作使其局限性明顯。相比之下,RAG的引入提供了一種更為靈活且易于更新的方案。

RAG的核心思想

RAG通過(guò)檢索模塊和生成模型的結(jié)合,從外部知識(shí)源獲取額外信息。這種方法不僅靈活,還能大大降低誤導(dǎo)性信息的產(chǎn)生概率。

實(shí)踐中的優(yōu)勢(shì)

在實(shí)踐中,RAG能夠迅速適應(yīng)信息的更新,并為用戶提供更準(zhǔn)確的回答。它在許多需要實(shí)時(shí)更新的領(lǐng)域表現(xiàn)出色,例如新聞報(bào)道和技術(shù)支持。

RAG的理論基礎(chǔ)與比喻

理論基礎(chǔ)

RAG的理論基礎(chǔ)在于將事實(shí)性知識(shí)與模型的推理能力分離。事實(shí)性知識(shí)存儲(chǔ)在外部知識(shí)源中,可以隨時(shí)更新,而推理能力則仍然由LLM負(fù)責(zé)。

比喻解釋

RAG的作用類似于開(kāi)卷考試,學(xué)生在考試時(shí)可以使用參考資料來(lái)解答問(wèn)題,RAG則利用外部知識(shí)源幫助LLM生成更精確的答案。

模型知識(shí)分類

在RAG中,知識(shí)分為參數(shù)化知識(shí)(模型在訓(xùn)練中學(xué)習(xí)的)和非參數(shù)化知識(shí)(存儲(chǔ)在外部知識(shí)源的)。這種分類使知識(shí)的管理和更新更加高效。

RAG理論基礎(chǔ)示意圖

基于LangChain實(shí)現(xiàn)RAG的方法

LangChain角色

LangChain在RAG的實(shí)現(xiàn)中扮演整體編排的角色,它協(xié)調(diào)OpenAI的大語(yǔ)言模型、Weaviate的向量數(shù)據(jù)庫(kù)和嵌入模型,實(shí)現(xiàn)檢索增強(qiáng)生成流程。

實(shí)現(xiàn)步驟

RAG的實(shí)現(xiàn)包括三個(gè)步驟:準(zhǔn)備數(shù)據(jù)、檢索信息和生成答案。LangChain通過(guò)整合這些步驟,簡(jiǎn)化了RAG的實(shí)施過(guò)程。

代碼示例

以下代碼展示了如何使用LangChain實(shí)現(xiàn)RAG:

import requests
from langchain.document_loaders import TextLoader

url = "https://example.com/data.txt"
res = requests.get(url)
with open("data.txt", "w") as f:
    f.write(res.text)

loader = TextLoader('./data.txt')
documents = loader.load()

準(zhǔn)備步驟與向量數(shù)據(jù)庫(kù)的建立

數(shù)據(jù)收集與加載

首先,需要收集并加載數(shù)據(jù)。例如,可以使用LangChain提供的DocumentLoader加載文本數(shù)據(jù),為后續(xù)步驟做準(zhǔn)備。

文檔分塊處理

由于文檔可能超出LLM的處理窗口,因此需要將其切割為更小的片段。LangChain提供了多種文本分割工具,如CharacterTextSplitter。

嵌入與存儲(chǔ)

對(duì)文本塊進(jìn)行嵌入生成向量,并將它們存儲(chǔ)在Weaviate向量數(shù)據(jù)庫(kù)中。這樣可以實(shí)現(xiàn)對(duì)文本塊的高效語(yǔ)義搜索。

RAG流程的完整示例

檢索步驟

一旦向量數(shù)據(jù)庫(kù)準(zhǔn)備好,你可以設(shè)定檢索組件,根據(jù)用戶查詢與已嵌入文本塊的語(yǔ)義相似度,檢索出額外的上下文信息。

retriever = vectorstore.as_retriever()

增強(qiáng)步驟

準(zhǔn)備一個(gè)提示模板,以便用額外的上下文信息來(lái)增強(qiáng)原始提示。這樣可以確保生成的回答的準(zhǔn)確性和相關(guān)性。

template = """You are an assistant for question-answering tasks..."""
prompt = ChatPromptTemplate.from_template(template)

生成步驟

通過(guò)將檢索器、提示模板與LLM結(jié)合形成一個(gè)序列,定義好RAG序列后,開(kāi)始執(zhí)行它。

from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
query = "What did the president say about Justice Breyer"
rag_chain.invoke(query)

RAG流程示例圖

FAQ

問(wèn):什么是檢索增強(qiáng)生成(RAG)?

問(wèn):RAG如何解決當(dāng)前大語(yǔ)言模型的局限性?

問(wèn):RAG的工作流程包括哪些步驟?

問(wèn):在實(shí)踐中,RAG有哪些優(yōu)勢(shì)?

問(wèn):RAG中的知識(shí)是如何分類的?

上一篇:

AI檢查:人工智能內(nèi)容生成與檢測(cè)工具的深入探討

下一篇:

路由追蹤:深入了解網(wǎng)絡(luò)路徑和分析
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)