ChatGPT、Midjourney等生成式人工智能(GenAI)在文本生成、文本到圖像生成等任務(wù)中表現(xiàn)出令人印象深刻的性能。然而,生成模型也不能避免其固有的局限性,包括產(chǎn)生幻覺的傾向,在數(shù)學(xué)能力弱,而且缺乏可解釋性。因此,提高他們能力的一個(gè)可行辦法是讓他們能夠與外部世界互動(dòng),以不同的形式和方式獲取知識,從而提高所生成內(nèi)容的事實(shí)性和合理性。
檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)技術(shù)研究旨在提供更有依據(jù)、更依賴事實(shí)的信息來幫助解決生成式AI的幻覺傾向、專業(yè)力弱等固有缺陷。RAG最新科研綜述可以參考:面向AI內(nèi)容生成的檢索增強(qiáng)生成(RAG)技術(shù)全面綜述:背景、基礎(chǔ)、進(jìn)階、應(yīng)用、展望。
檢索增強(qiáng)生成智能體(Agentic RAG)的核心是將智能和自主性注入到RAG框架中。這就像是給一個(gè)普通的RAG系統(tǒng)進(jìn)行了重大升級,將其轉(zhuǎn)變?yōu)橐粋€(gè)能夠自主決策并采取行動(dòng)以實(shí)現(xiàn)特定目標(biāo)的自主智能體。本文幫助理解RAG智能體方法并了解它如何徹底改變我們處理信息的方式。
作者:張長旺,圖源:旺知識
作為對照,您可以參考我們以前的相關(guān)文章來了解經(jīng)典RAG系統(tǒng)的特性和特點(diǎn):
高級檢索增強(qiáng)生成技術(shù)(RAG)全面指南:原理、分塊、編碼、索引、微調(diào)、Agent、展望
檢索增強(qiáng)生成技術(shù)(RAG)深度優(yōu)化指南:原理、挑戰(zhàn)、措施、展望
1 - RAG智能體特性特點(diǎn)
上下文至上:傳統(tǒng)RAG實(shí)現(xiàn)的最大局限之一是它們無法真正理解并考慮更廣泛的對話上下文。而RAG智能體則被設(shè)計(jì)成具有上下文感知能力。它們可以把握對話的微妙之處,考慮歷史,并相應(yīng)地調(diào)整行為。這意味著更連貫和相關(guān)的回應(yīng),就像智能體真正參與了一場自然對話一樣。
智能檢索策略:RAG系統(tǒng)過去依賴靜態(tài)規(guī)則進(jìn)行檢索,RAG智能體比規(guī)則那聰明多了。它們采用智能檢索策略,動(dòng)態(tài)評估用戶的查詢、可用工具(數(shù)據(jù)來源)和上下文線索,以確定最合適的檢索行動(dòng)。就像有一個(gè)知道在哪里找到你需要的信息的私人助手一樣。
多智能體協(xié)作:復(fù)雜的查詢通常涉及多個(gè)文檔或數(shù)據(jù)源,在RAG智能體的世界里,我們有多智能體協(xié)作的能力。想象一下有多個(gè)專門的智能體,每個(gè)智能體都是自己領(lǐng)域或數(shù)據(jù)源的專家,共同合作并綜合他們的發(fā)現(xiàn),為用戶提供全面的回應(yīng)。就像有一組專家一起解決你最棘手的問題一樣。
智能推理:RAG智能體不僅擅長檢索信息;它們還配備了遠(yuǎn)遠(yuǎn)超越簡單檢索和生成的推理能力。這些智能體可以對檢索到的數(shù)據(jù)進(jìn)行評估、校正和質(zhì)量檢查,確保用戶收到的輸出是準(zhǔn)確可靠的。不再擔(dān)心獲取到可疑信息了!
生成后驗(yàn)證:RAG智能體可以進(jìn)行生成后的檢查。它們可以驗(yàn)證生成內(nèi)容的真實(shí)性,甚至運(yùn)行多次生成并為用戶選擇最佳結(jié)果。
適應(yīng)性與學(xué)習(xí):RAG智能體架構(gòu)可以設(shè)計(jì)成包含學(xué)習(xí)機(jī)制,使智能體能夠隨著時(shí)間的推移適應(yīng)和改進(jìn)其性能。這就像有一個(gè)系統(tǒng),你使用得越多,它就越聰明、越高效!
2 - RAG智能體參考架構(gòu)
好了,現(xiàn)在我們已經(jīng)對RAG智能體的基本原理有了很好的理解,讓我們深入探討一下使整個(gè)系統(tǒng)運(yùn)行的參考架構(gòu)。
在這個(gè)架構(gòu)的核心,我們有RAG智能體——智能指揮官,負(fù)責(zé)接收用戶查詢并決定適當(dāng)?shù)男袆?dòng)方針。把它想象成交響樂團(tuán)的指揮,協(xié)調(diào)所有不同的樂器(工具)以創(chuàng)造和諧的表演。
現(xiàn)在,這個(gè)智能體并不孤單。它配備了一套工具,每個(gè)工具都與特定的一組文檔或數(shù)據(jù)源相關(guān)聯(lián)。這些工具就像是專門的智能體或函數(shù),可以從各自的數(shù)據(jù)源中檢索、處理和生成信息。
例如,假設(shè)你有工具1,負(fù)責(zé)訪問和處理財(cái)務(wù)報(bào)表,以及工具2,處理客戶數(shù)據(jù)。RAG智能體可以根據(jù)你的查詢動(dòng)態(tài)選擇和組合這些工具,使其能夠從多個(gè)來源合成信息,為你提供全面的回應(yīng)。
檢索的信息來自于自定義文檔和數(shù)據(jù)源。這些信息可以是結(jié)構(gòu)化的或非結(jié)構(gòu)化的,包括數(shù)據(jù)庫、知識庫、文本文檔和多媒體內(nèi)容等。它們是工具處理的原材料。
現(xiàn)在,假設(shè)你向智能體提出了一個(gè)涉及多個(gè)領(lǐng)域或數(shù)據(jù)源的復(fù)雜問題:RAG智能體規(guī)劃整個(gè)過程,確定使用哪些工具,從相關(guān)的數(shù)據(jù)源檢索相關(guān)信息,并生成針對你查詢的最終回應(yīng)。
在整個(gè)過程中,智能體利用智能推理、上下文感知和生成后驗(yàn)證技術(shù),確保你收到的輸出不僅準(zhǔn)確,而且符合你的需求。
當(dāng)然,這只是參考架構(gòu)的簡化表示。在現(xiàn)實(shí)世界中,RAG智能體的實(shí)現(xiàn)可能涉及其他組件,例如語言模型、知識庫和其他支持系統(tǒng),具體取決于特定的用例和需求。
3 - RAG智能體開發(fā)實(shí)例
我們這里實(shí)現(xiàn)一個(gè)RAG智能體的實(shí)例(arXiv文章檢索智能體)來具體說明RAG智能體的開發(fā)實(shí)現(xiàn)。
3.1 開發(fā)架構(gòu)
這里RAG智能體的開發(fā)架構(gòu)是為每份文檔設(shè)置一個(gè)文檔智能體,每個(gè)文檔智能體都能在自己的文檔中進(jìn)行問題解答和總結(jié)。然后建立一個(gè)頂級智能體(元智能體),管理所有低級文檔智能體。
3.2 開發(fā)技術(shù)棧
Langchain: 更具體地說是 LCEL:開發(fā) LLM 應(yīng)用程序的協(xié)調(diào)框架
OpenAI: 提供大語言模型(LLM)服務(wù)
FAISS-cpu: 向量存儲
3.3 數(shù)據(jù)源
在這里,我們將利用ArxivLoader來檢索發(fā)表在arXiv上的文章的元數(shù)據(jù)。
3.4 代碼實(shí)現(xiàn)
安裝所需的依賴項(xiàng):
!pip install -qU langchain langchain_openai langgraph arxiv duckduckgo-search
!pip install -qU faiss-cpu pymupdf
設(shè)置環(huán)境變量:
from google.colab import userdata
from uuid import uuid4
import os
#
os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_PROJECT"] = f"AIE1 - LangGraph - {uuid4().hex[0:8]}"
os.environ["LANGCHAIN_API_KEY"] = userdata.get('LANGCHAIN_API_KEY')