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