探索智能代理增強檢索生成(Agentic RAG):從基礎(chǔ)到實踐 原創(chuàng)
引言:檢索增強生成的演進
在人工智能領(lǐng)域,大語言模型(LLMs)雖成果豐碩,但也有明顯短板。模型訓(xùn)練時存儲的知識,可能因時間推移而過時,或存在范圍局限。檢索增強生成(Retrieval - Augmented Generation, RAG)應(yīng)運而生,它將大語言模型的輸出與外部知識源相連,有效增強了模型能力。
傳統(tǒng)RAG系統(tǒng)處理用戶查詢流程較為固定。用戶提問后,系統(tǒng)先把查詢送入嵌入模型生成向量嵌入,再用其在向量數(shù)據(jù)庫搜索相關(guān)文檔,接著將檢索到的上下文與原始查詢整合,輸入大語言模型生成答案。整個過程線性推進,缺乏反復(fù)推理環(huán)節(jié)。
然而,傳統(tǒng)RAG的弊端也很突出。工作流程靜態(tài)線性,初始檢索若失敗,最終答案質(zhì)量就難以保證。并且,進行相似性搜索時,直接使用用戶原始查詢,若查詢表述與文檔差異大,搜索效果便大打折扣。另外,它缺乏內(nèi)置推理、規(guī)劃及策略調(diào)整機制,面對復(fù)雜或多步驟查詢時力不從心。
為突破這些困境,智能代理增強檢索生成(Agentic RAG)誕生了。Agentic RAG把人工智能代理嵌入RAG管道,讓大語言模型具備自主決策能力,能決定何時檢索、檢索什么、如何整合結(jié)果,甚至何時向用戶請求說明。憑借基于代理系統(tǒng)的規(guī)劃、工具使用和自我完善原則,Agentic RAG構(gòu)建了更靈活智能的檢索工作流程,為復(fù)雜問題的解決提供了新途徑。
Agentic RAG與標準RAG的區(qū)別
工作流程
標準RAG采用一次性檢索和生成序列,面對查詢僅檢索一次就生成答案。而Agentic RAG工作流程靈活且可迭代,由代理推理引導(dǎo)。代理能執(zhí)行多輪檢索/生成,拆解復(fù)雜問題或中途改變策略。比如,用戶詢問復(fù)雜多面的問題,標準RAG可能僅依據(jù)一次檢索給出不完整答案,而Agentic RAG的代理會經(jīng)推理決定多次檢索,從不同知識源獲取信息,進而生成全面精準的答案,凸顯其處理復(fù)雜任務(wù)的優(yōu)勢。
決策與適應(yīng)性
標準RAG系統(tǒng)檢索后就結(jié)束,不檢查答案是否完善。Agentic系統(tǒng)則適應(yīng)性強,代理能評估中間結(jié)果,若當(dāng)前上下文信息不足,會決定檢索更多信息或換用其他工具。例如,用戶查詢某事件詳情,標準RAG可能僅檢索到基礎(chǔ)事實就生成答案,而Agentic RAG的代理若覺得信息不全面,會再次檢索或調(diào)用網(wǎng)絡(luò)搜索API獲取更多信息,生成更完整準確的答案。
工具使用與數(shù)據(jù)源
傳統(tǒng)RAG一般只連接單個知識源,如某文檔向量數(shù)據(jù)庫。Agentic RAG的代理則可調(diào)用多個知識庫和多種工具。例如,處理用戶查詢時,代理既能從私人文檔索引檢索,也能調(diào)用網(wǎng)絡(luò)搜索API,還能使用計算器或其他API。這種多工具運用能力,使Agentic RAG可按需從結(jié)構(gòu)化數(shù)據(jù)庫、非結(jié)構(gòu)化文本、網(wǎng)絡(luò)等多種數(shù)據(jù)源獲取信息,極大拓展了信息獲取范圍。
自我反思與準確性
標準RAG模型不會自我檢查答案,答案正確性依賴用戶或開發(fā)人員判斷。Agentic RAG代理具備自我反思能力,能形成反饋循環(huán)。比如,檢索上下文并起草答案后,代理會檢查問題是否回答全面,若有不足,會獲取更多信息或優(yōu)化查詢。通過迭代改進,答案準確性不斷提高,為用戶提供更可靠服務(wù)。
可擴展性與復(fù)雜性
Agentic RAG可讓多個代理和工具協(xié)同工作,適用范圍更具擴展性,能處理多樣查詢類型和不同數(shù)據(jù)源信息。例如,可部署由專門代理組成的網(wǎng)絡(luò),分別負責(zé)查詢內(nèi)部文檔、API或網(wǎng)絡(luò),由主代理協(xié)調(diào)。但這也導(dǎo)致系統(tǒng)復(fù)雜性大幅增加,包括代理交互管理、工具集成及多輪對話狀態(tài)維持等,都需投入更多精力和資源。
多模態(tài)性
傳統(tǒng)RAG主要進行文本檢索,Agentic RAG借助先進大語言模型代理,可融入多模態(tài)數(shù)據(jù)。隨著多模態(tài)大語言模型發(fā)展,代理能檢索和推理圖像、音頻等數(shù)據(jù)類型。比如,代理可從數(shù)據(jù)庫獲取圖像,用圖像字幕模型解讀后融入答案,這種多模態(tài)處理能力是傳統(tǒng)RAG所不具備的。
Agentic RAG架構(gòu)深度剖析
從宏觀看,Agentic RAG架構(gòu)在常規(guī)檢索和生成組件之上新增代理層,該代理層可為單個強大代理,也可為多代理系統(tǒng)。
單代理RAG架構(gòu)
單代理RAG架構(gòu)中,代理如同查詢工作流程的智能“指揮者”,涉及以下組件:
- 用戶查詢:用戶以自然語言提出的問題或任務(wù)。
- 代理(LLM):由大語言模型或其與編程邏輯組合而成,經(jīng)特定提示或設(shè)計,可決定行動。能調(diào)用向量數(shù)據(jù)庫查找、網(wǎng)絡(luò)搜索等工具,通過思維鏈提示確定各步驟行動。
- 知識源/工具:包含向量數(shù)據(jù)庫、關(guān)鍵字搜索引擎、各類API及從屬代理等,其中至少有一個可獲取查詢相關(guān)上下文的檢索器。
- 生成模型:通常代理自身就是生成答案的大語言模型(前提是收集到足夠信息),也可能委托單獨大語言模型實例生成答案,本質(zhì)上都是大語言模型負責(zé)推理和回答。
單代理系統(tǒng)處理查詢流程如下:
- 代理決策——是否需要檢索:代理研究查詢及對話上下文(若為多輪對話),判斷是否需要外部信息。簡單事實性問題可能直接搜索知識庫,直白或常識性問題也可能不檢索直接回答,但多數(shù)系統(tǒng)習(xí)慣先嘗試檢索。
- 代理決策——選擇工具/源:確定檢索后,代理挑選合適工具或數(shù)據(jù)源。如有多個向量索引,會選最可能含答案的;針對當(dāng)前事件查詢,會在向量數(shù)據(jù)庫和網(wǎng)絡(luò)搜索API間抉擇。
- 制定檢索查詢:代理構(gòu)思輸入檢索工具的查詢內(nèi)容,可直接用用戶問題,也可重新表述,高級代理還會采用查詢擴展等技術(shù)提升檢索效果。
- 檢索并觀察:檢索工具返回候選文檔或數(shù)據(jù),代理審視結(jié)果,判斷能否回答問題,若結(jié)果不佳,會返回前序步驟調(diào)整。
- 生成答案:代理收集到足夠信息或確定檢索無幫助后,用大語言模型撰寫答案,檢索上下文會用于提示,代理思維過程也會影響答案構(gòu)建。
簡化的代理循環(huán)代碼如下:
while True:
action = agent.plan(next_step, context_so_far)
if action.type == "SEARCH":
tool = action.tool_selection # 例如 "VectorDB" 或 "WebSearch"
query = action.formulated_query
results = tool.run(query)
agent.observe(results)
elif action.type == "ANSWER":
final_answer = agent.generate_answer(context_so_far)
break
循環(huán)持續(xù)至代理認為可輸出答案或達最大步驟限制。
多代理RAG系統(tǒng)
復(fù)雜應(yīng)用場景可采用多代理RAG系統(tǒng),多個代理分工明確。如:
- Web代理:專門查詢外部網(wǎng)絡(luò)資源。
- DB代理:主要查詢內(nèi)部數(shù)據(jù)庫。
- 協(xié)調(diào)代理:將問題分配給合適專家代理,并匯總結(jié)果。
多代理設(shè)置下,代理可相互調(diào)用,以完成特定子任務(wù)。實際應(yīng)用中,多代理RAG可能呈層級或網(wǎng)絡(luò)結(jié)構(gòu),各代理協(xié)作完成復(fù)雜任務(wù)。像IBM的Agentic RAG系統(tǒng),一個代理查詢外部數(shù)據(jù)庫,另一個梳理內(nèi)部郵件和數(shù)據(jù),由協(xié)調(diào)代理整合輸出形成最終答案,這種設(shè)計雖增加復(fù)雜性,但提升了系統(tǒng)穩(wěn)定性和專業(yè)性。
Agentic RAG的實現(xiàn)細節(jié)
以LangChain為例搭建Agentic RAG系統(tǒng):
設(shè)置檢索的知識庫
先準備知識源,通常為文檔向量存儲,操作與標準RAG類似。
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
# 假設(shè)文檔列表docs_list
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50)
docs = text_splitter.create_documents(docs_list)
# 創(chuàng)建嵌入并在FAISS中索引
embedding_model = OpenAIEmbeddings() # 使用OpenAI嵌入(需API密鑰)
vector_store = FAISS.from_documents(docs, embedding_model)
代碼將文檔分割為約500字符小塊,創(chuàng)建嵌入存入FAISS索引,以便vector_store根據(jù)新查詢嵌入查詢相似文檔。
為代理定義工具
至少定義一個檢索工具包裝向量存儲調(diào)用。
from langchain.agents import Tool
# 定義查詢向量存儲函數(shù)
def vector_search(query: str) -> str:
"""在向量數(shù)據(jù)庫中搜索相關(guān)文檔,并返回結(jié)果的連接字符串。"""
docs = vector_store.similarity_search(query, k=3)
# 組合檢索到的文檔的內(nèi)容(可能帶有元數(shù)據(jù)或片段格式)
return"\n".join([doc.page_content for doc in docs])
# 創(chuàng)建檢索工具
retrieval_tool = Tool(
name="VectorDB",
func=vector_search,
descriptinotallow="從知識庫中檢索相關(guān)文檔。"
)
# (可選)定義網(wǎng)絡(luò)搜索工具(模擬)
def web_search(query: str) -> str:
# 實際網(wǎng)絡(luò)搜索API調(diào)用占位符
# 實踐中使用SerpAPI或Bing API等
return fake_web_search_api(query)
search_tool = Tool(
name="WebSearch",
func=web_search,
descriptinotallow="在網(wǎng)絡(luò)上搜索最新信息。"
)
創(chuàng)建的VectorDB和WebSearch工具,接受字符串輸入,返回檢索文本,供代理按名稱調(diào)用。
初始化代理
選擇大語言模型為代理推理提供動力,初始化可調(diào)用工具的代理。
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent
# 為代理初始化語言模型(用聊天模型)
llm = ChatOpenAI(model_name="gpt - 4", temperature=0) # 或選其他大語言模型
# 使用工具創(chuàng)建代理,設(shè)置詳細輸出觀察思維過程
agent = initialize_agent(
tools=[retrieval_tool, search_tool],
llm=llm,
agent="zero - shot - react - description", # 用基于ReAct的代理
verbose=True
)
代碼設(shè)置提示策略,讓代理大語言模型學(xué)會使用工具,運行時輸出思維過程。
提問(代理行動)
準備好代理后輸入用戶查詢獲取答案:
query = "標準RAG和Agentic RAG的主要區(qū)別是什么?"
response = agent.run(query)
print("代理的答案:", response)
代理內(nèi)部思考回答,可能先使用VectorDB工具查詢,若知識庫有相關(guān)文章,向量搜索會返回內(nèi)容,代理讀取后繼續(xù)操作。若問題復(fù)雜,可能調(diào)用WebSearch或優(yōu)化問題后再次查詢。
替代實現(xiàn)方法
除LangChain,還可用Autogen、CrewAI等框架實現(xiàn)Agentic RAG邏輯。核心都是定義知識源、包裝成工具,在循環(huán)中提示大語言模型使用工具得出答案。實現(xiàn)復(fù)雜程度可靈活調(diào)整,從簡單的提示邏輯到完全自主決策代理,通常從簡單方法入手,如允許一次額外檢索的兩步RAG,常能有效提高答案準確性。
性能和可擴展性比較
答案質(zhì)量和成功率
Agentic RAG旨在提升復(fù)雜查詢成功率,通過多次檢索和智能查詢構(gòu)造,挖掘傳統(tǒng)RAG遺漏信息。Hugging Face團隊研究表明,代理方法能重拾先進RAG技術(shù),找到傳統(tǒng)RAG錯過的信息。實際場景中,如100道難題,傳統(tǒng)RAG可能答對60道,采用兩步檢索的Agentic RAG答對題數(shù)可能提升至75道,尤其在法律、醫(yī)療等對答案準確性要求高的領(lǐng)域,意義重大。
計算開銷和延遲
Agentic RAG對資源需求更高,多次調(diào)用大語言模型代理推理,加上頻繁檢索操作,增加查詢延遲和計算成本。Qdrant文章指出,標準RAG一次大語言模型調(diào)用即可快速出答案,Agentic RAG代理可能多次調(diào)用,延遲累積。例如普通RAG 2秒響應(yīng),Agentic RAG因運行步驟多,可能需5到10秒。雖對許多交互應(yīng)用延遲可接受,但影響吞吐量,相同硬件下每秒處理查詢數(shù)量減少。可通過限制代理步驟或選用更快但準確性稍低的模型緩解。
數(shù)據(jù)源的可擴展性
Agentic RAG在數(shù)據(jù)源可擴展性方面優(yōu)勢顯著,能協(xié)調(diào)管理多個數(shù)據(jù)源,可隨業(yè)務(wù)發(fā)展為代理添加工具或索引。IBM研究表明,RAG代理網(wǎng)絡(luò)可利用多個數(shù)據(jù)孤島,處理復(fù)雜查詢擴展性強。傳統(tǒng)RAG面對大規(guī)模數(shù)據(jù)時,如向量索引過大,會出現(xiàn)檢索慢、結(jié)果不準確問題,而Agentic RAG代理可智能路由查詢到合適子索引,適應(yīng)數(shù)據(jù)增長,雖每個查詢處理速度降低,但系統(tǒng)覆蓋范圍和靈活性提升。
基準測試考慮
評估Agentic RAG與標準RAG性能,常用答案準確性、F1值、檢索召回率及平均延遲等指標。目前雖無專門標準化基準測試,但研究人員已優(yōu)化問答基準測試以適應(yīng)多步驟檢索評估。社區(qū)實驗顯示,代理方法處理邊緣情況表現(xiàn)更好,失敗查詢減少。對答案準確性要求高、需減少模型幻覺的應(yīng)用,Agentic RAG值得考慮;追求快速響應(yīng)簡單查詢的場景,傳統(tǒng)簡單RAG即可滿足需求。
系統(tǒng)復(fù)雜性和維護
Agentic RAG系統(tǒng)組件多、交互復(fù)雜,維護和擴展挑戰(zhàn)大??赡艹霈F(xiàn)代理陷入工具調(diào)用循環(huán)等問題,開發(fā)人員需追蹤代理推理步驟,借助Arize的Phoenix或LangSmith等工具調(diào)試。工程實踐中,需花費更多時間調(diào)整提示策略、確定代理停止時機及更新維護知識源,增加了系統(tǒng)開發(fā)和運維成本。
Agentic RAG的挑戰(zhàn)與未來
關(guān)鍵挑戰(zhàn)
- 復(fù)雜性與可調(diào)試性:Agentic RAG系統(tǒng)比標準RAG管道復(fù)雜,管理多代理或工具及其交互困難,易出現(xiàn)代理無限檢索循環(huán)或選錯工具等問題。需詳細記錄代理思維鏈以便調(diào)試,建立完善監(jiān)控體系。提示設(shè)計不當(dāng)還會導(dǎo)致代理誤解指令或錯誤使用工具。
- 延遲與成本:迭代特性增加推理成本,對實時性要求高或預(yù)算有限的應(yīng)用不利。需合理設(shè)置超時或步驟限制,部分代理框架采用緩存中間結(jié)果策略降低延遲和成本,但緩存機制也需額外資源和管理。
- 數(shù)據(jù)質(zhì)量與知識邊界:依賴底層數(shù)據(jù)質(zhì)量,知識庫不完整、有錯誤或偏差,會導(dǎo)致代理檢索到誤導(dǎo)性信息,且代理自主性可能使其超出預(yù)設(shè)邊界,引入無關(guān)或不安全信息,需確保代理遵循數(shù)據(jù)訪問策略。
- 安全與倫理問題:代理自主性增強,若未嚴格沙盒化,可能執(zhí)行危險操作。需研究增強代理可信度方法,如評估大語言模型輸出可信度、多代理相互批判等,但并非絕對可靠。同時要注意倫理問題,防止代理獲取版權(quán)文本或不適當(dāng)內(nèi)容。
- 評估:評估Agentic RAG系統(tǒng)難度大,傳統(tǒng)答案準確性指標外,代理決策過程評估復(fù)雜,需考慮步驟數(shù)量、工具選擇是否最優(yōu)等。研究定義針對代理的評估指標,如“工具使用效率”,但大語言模型隨機性導(dǎo)致評估可重復(fù)性受挑戰(zhàn),生產(chǎn)系統(tǒng)中仍存在可變性。
未來趨勢與發(fā)展
- 更好的代理框架:未來有望出現(xiàn)更成熟易用的代理框架,簡化構(gòu)建和約束代理過程。如微軟Autogen庫支持更結(jié)構(gòu)化定義多代理對話和工具使用,未來框架可能集成安全檢查、循環(huán)檢測及常見應(yīng)用模式優(yōu)化功能,降低開發(fā)門檻。
- 規(guī)劃算法的集成:研究將經(jīng)典規(guī)劃或強化學(xué)習(xí)與大語言模型代理結(jié)合,使Agentic RAG更系統(tǒng)決定檢索順序,減少對大語言模型不穩(wěn)定推理的依賴,讓代理行為更可預(yù)測和優(yōu)化。
- 從反饋中學(xué)習(xí):未來基于學(xué)習(xí)的代理將成主流,可根據(jù)用戶反饋或操作演示微調(diào)策略。如通過多步驟搜索示例微調(diào)大語言模型,使其學(xué)會不同情況下檢索次數(shù),實現(xiàn)元學(xué)習(xí),提升智能水平。
- 多模態(tài)和多步驟推理:隨著大語言模型多模態(tài)能力提升,Agentic RAG將向多模態(tài)拓展。代理可檢索圖像、圖表等多模態(tài)信息融入答案,甚至觸發(fā)計算操作,成為通用問題解決助手。
- 與知識圖譜和符號人工智能的融合:結(jié)合大語言模型代理與知識圖譜或數(shù)據(jù)庫,實現(xiàn)更深入基于知識的推理。Agentic RAG可借助知識圖譜驗證答案一致性,神經(jīng)符號人工智能探索將非結(jié)構(gòu)化信息轉(zhuǎn)化為結(jié)構(gòu)化形式,提升推理能力。
- 標準化和最佳實踐:隨著Agentic RAG應(yīng)用案例增加,將總結(jié)出涵蓋系統(tǒng)設(shè)計到應(yīng)用各方面的最佳實踐指南,如代理數(shù)量選擇、查詢路由策略設(shè)計及用戶后續(xù)問題處理等。社區(qū)已分享應(yīng)用模式經(jīng)驗,為設(shè)計者提供參考。
結(jié)論
Agentic RAG是檢索增強生成理念的重大創(chuàng)新,賦予大語言模型規(guī)劃、調(diào)用工具和迭代能力,構(gòu)建的系統(tǒng)能處理復(fù)雜查詢、整合多元數(shù)據(jù)源、優(yōu)化答案質(zhì)量。它推動人工智能系統(tǒng)能力提升,為工程師開啟構(gòu)建高自主性智能應(yīng)用的大門。
隨著技術(shù)發(fā)展,Agentic RAG將在未來人工智能應(yīng)用中發(fā)揮關(guān)鍵作用,帶來創(chuàng)新機遇,在學(xué)術(shù)、商業(yè)及日常生活智能化等方面展現(xiàn)巨大潛力,引領(lǐng)人工智能邁向新高度。
本文轉(zhuǎn)載自公眾號Halo咯咯 作者:基咯咯
原文鏈接:??https://mp.weixin.qq.com/s/xJJT5A0Textp8bBb3itdkA??
