Agentic RAR+Nano-GraphRAG+Claude 3.7 Sonnet=智能推理RAG系統(tǒng)
在這篇文章中,我將介紹如何使用 LangGraph、Agentic RAR、Nano-GraphRAG 以及 Claude 3.7 Sonnet 來(lái)創(chuàng)建一個(gè)基于智能推理(Agentic RAR)的聊天機(jī)器人,看完這篇文章之后你就學(xué)會(huì)了如何為你的業(yè)務(wù)打造一個(gè)強(qiáng)大的智能推理聊天機(jī)器人。
我首先向你展示一下聊天機(jī)器人的效果:“生成代碼,檢查以下數(shù)字是否為回文數(shù):123、121、12321、12345、123454321?!?/p>
當(dāng)用戶提出問(wèn)題時(shí),初始推理 Agent 會(huì)對(duì)其進(jìn)行分析,識(shí)別需要哪些專業(yè) Agent,并檢測(cè)特定的標(biāo)簽,這些標(biāo)簽表明 Agent 查詢類型,例如網(wǎng)頁(yè)搜索、代碼執(zhí)行或思維導(dǎo)圖。
每個(gè) Agent 都有一個(gè)負(fù)責(zé)收集數(shù)據(jù)的伙伴。例如,當(dāng)代碼 Agent 執(zhí)行任務(wù)時(shí),另一個(gè) Agent 會(huì)記錄過(guò)程并將其存儲(chǔ)在一個(gè)文件中。
- route_to_agent 通過(guò)檢查狀態(tài)的推理和所需 Agent 來(lái)指導(dǎo)工作流程,提取嵌入式查詢,決定激活哪個(gè) Agent,并存儲(chǔ)路由決策。
- 當(dāng)需要網(wǎng)頁(yè)搜索時(shí),web_search_agent 會(huì)查詢 Tavily API,處理結(jié)果,更新推理,并在移除自身之前存儲(chǔ)查詢和結(jié)果。
- code_execution_agent 生成并執(zhí)行代碼,提取帶有格式化標(biāo)簽的輸出,更新推理,存儲(chǔ)結(jié)果,并在執(zhí)行后移除自身。
- 思維導(dǎo)圖 Agent 扮演兩個(gè)角色:在整個(gè)過(guò)程中收集知識(shí),并在查詢時(shí)組織結(jié)構(gòu)化信息。它匯編所有收集的信息,將其格式化為知識(shí)文檔,并存儲(chǔ)在 GraphRAG 知識(shí)圖譜中,以便檢索和結(jié)構(gòu)化分析。
- 知識(shí)管理依賴于通過(guò) collected_knowledge 字典進(jìn)行的過(guò)程內(nèi)收集和通過(guò)基于 GraphRAG 的 MindMap 類進(jìn)行持久存儲(chǔ),它使用基于目錄的存儲(chǔ)、JSON 文本塊、用于語(yǔ)義搜索的向量嵌入以及通過(guò) graph_retrieval 的查詢功能,從而使知識(shí)隨著時(shí)間的推移而增長(zhǎng)。
- 最后,synthesize_answer 方法整合所有收集的信息,生成全面的總結(jié),將其存儲(chǔ)在思維導(dǎo)圖中,查詢相關(guān)信息,并結(jié)合推理鏈和思維導(dǎo)圖信息生成最終答案。
我在開(kāi)發(fā)中遇到的問(wèn)題
在開(kāi)發(fā)聊天機(jī)器人時(shí),我踩了一些坑。
- 一個(gè)主要問(wèn)題是思維導(dǎo)圖初始化,Agent 在沒(méi)有任何數(shù)據(jù)收集之前就嘗試訪問(wèn)數(shù)據(jù),導(dǎo)致“matrix”錯(cuò)誤。為了解決這個(gè)問(wèn)題,我改變了初始化方法,在啟動(dòng)時(shí)僅創(chuàng)建基本的目錄結(jié)構(gòu),并讓 Agent 在存儲(chǔ)信息之前收集真實(shí)數(shù)據(jù)。
- 另一個(gè)坑是 Agent 之間的狀態(tài)管理,因?yàn)樾畔⒃谵D(zhuǎn)換之間會(huì)丟失。我通過(guò)添加一個(gè)持久的知識(shí)收集機(jī)制解決了這個(gè)問(wèn)題,使用 collected_knowledge 字典跟蹤輸出,確保知識(shí)逐步積累。
- 最后,思維導(dǎo)圖中的知識(shí)整合效果不佳,因此我修改了工作流,持續(xù)收集數(shù)據(jù),在適當(dāng)?shù)臅r(shí)刻存儲(chǔ)格式化的知識(shí),并在合成前查詢思維導(dǎo)圖。
- 最大的突破是重新設(shè)計(jì)思維導(dǎo)圖 Agent,使其成為一個(gè)被動(dòng)的收集者,而不是一個(gè)顯式調(diào)用的 Agent,從而讓它在推理過(guò)程中自然構(gòu)建全面的知識(shí)圖譜。
通過(guò)這篇文章,你將了解 Agentic RAR 和 Nano-GraphRAG 是什么,為什么 Agentic RAR 如此獨(dú)特,它是如何工作的,以及我們?nèi)绾问褂?Agentic RAR 創(chuàng)建一個(gè)強(qiáng)大的推理聊天機(jī)器人。
什么是 Agentic RAR?
首先,大型語(yǔ)言模型(LLM)中的推理能力可能還不是 AGI(通用人工智能)或 ASI(超人工智能),但它在處理數(shù)學(xué)、編碼和復(fù)雜思維等任務(wù)方面已經(jīng)取得了巨大的進(jìn)步。
以 Claude 3.7 Sonnet 的最新版本為例,這是市場(chǎng)上首個(gè)混合推理模型。它可以根據(jù)需求快速響應(yīng)或進(jìn)行更深入的思考,用戶還可以調(diào)整它的思考時(shí)間。它能夠啟動(dòng)一種長(zhǎng)時(shí)間思考模式,模擬人腦的思考過(guò)程。
LLM 在序列推理方面存在困難。例如,如果你要求一個(gè) LLM 解決一個(gè)多步驟的數(shù)學(xué)問(wèn)題,它可能會(huì)忘記前面的步驟,從而給出錯(cuò)誤的答案。
如果遇到不明確的地方,它們會(huì)猜測(cè)而不是詢問(wèn)細(xì)節(jié),這可能導(dǎo)致錯(cuò)誤。有時(shí),它們甚至對(duì)同一個(gè)問(wèn)題給出不同的答案,這也很令人困惑,因?yàn)樗鼈冊(cè)谔幚韺<壹?jí)話題和長(zhǎng)期對(duì)話時(shí)會(huì)遇到困難。
想象一下,你有一個(gè)非常聰明的朋友,他不僅知識(shí)淵博,還能上網(wǎng)搜索更多信息,編寫并運(yùn)行簡(jiǎn)單的程序,甚至還能畫出思維導(dǎo)圖來(lái)幫助連接各種想法。
這就是 Agentic RAR 的用武之地。它在 RAG 模式基礎(chǔ)上,引入了一種動(dòng)態(tài)的、以推理為核心的問(wèn)題處理方式。
Agentic Reasoning 就像賦予 AI 模型使用額外工具的能力——就像我們使用計(jì)算器解決復(fù)雜數(shù)學(xué)問(wèn)題、查字典找詞義或用搜索引擎在線查找答案一樣。
想象你問(wèn) AI:“中國(guó)現(xiàn)在的人口是多少?”它不僅依賴過(guò)去學(xué)到的知識(shí),還能檢查最新數(shù)據(jù)并給你一個(gè)準(zhǔn)確的答案。這讓 AI 變得更聰明、更有用,因?yàn)樗粫?huì)只是猜測(cè)——它會(huì)通過(guò)使用正確的工具找到最佳答案,就像我們?cè)诂F(xiàn)實(shí)生活中一樣!
為什么 Agentic RAR 獨(dú)特?
Agentic RAR 的獨(dú)特之處在于,它通過(guò)統(tǒng)一的 API 標(biāo)準(zhǔn)化工具調(diào)用,使得集成新工具(比如化學(xué)方程求解器)變得輕而易舉。
它還能動(dòng)態(tài)分配認(rèn)知負(fù)荷,通過(guò)將簡(jiǎn)單任務(wù)分配給輕量 Agent,將復(fù)雜計(jì)算交給專用代碼代理,確保高效使用資源——在醫(yī)學(xué)診斷測(cè)試中,響應(yīng)速度提高了 40%,計(jì)算能力使用量減少了 72%。
它的多模態(tài)記憶融合使思維導(dǎo)圖代理能夠存儲(chǔ)并鏈接文本、公式和圖表,創(chuàng)建一個(gè)三維知識(shí)系統(tǒng)——使其能夠處理復(fù)雜問(wèn)題。
它是如何工作的?
Agentic Reasoning 采用一種結(jié)構(gòu)化的方法,結(jié)合各種外部 Agent 來(lái)增強(qiáng) LLM 的推理能力。
- 它使用網(wǎng)頁(yè)搜索 Agent 從互聯(lián)網(wǎng)獲取實(shí)時(shí)信息,幫助補(bǔ)充 LLM 預(yù)訓(xùn)練數(shù)據(jù)集之外的知識(shí)。
- 編碼 Agent 用于執(zhí)行代碼或完成計(jì)算任務(wù);這個(gè) Agent 支持定量推理并解決需要編程技能的問(wèn)題。
- 思維導(dǎo)圖 Agent 用于構(gòu)建知識(shí)圖譜,組織和可視化復(fù)雜的邏輯關(guān)系,幫助結(jié)構(gòu)化推理過(guò)程。
- 該模型能在推理過(guò)程中識(shí)別何時(shí)需要額外信息或計(jì)算能力。它可以生成特定的查詢,無(wú)縫觸發(fā)外部 Agent 的使用。
在綜合所有信息和結(jié)構(gòu)化信息后,模型會(huì)構(gòu)建一個(gè)連貫的推理鏈并生成最終答案。
認(rèn)識(shí) Nano-GraphRAG
GraphRAG 由微軟提出,非常有效,但官方實(shí)現(xiàn)和使用非常復(fù)雜,難以修改和定制。
Nano-GraphRAG 是一個(gè)輕量且靈活的 GraphRAG 實(shí)現(xiàn),旨在簡(jiǎn)化 GraphRAG 的使用和定制。它保留了 GraphRAG 的核心功能,同時(shí)提供更簡(jiǎn)單的代碼結(jié)構(gòu)、更友好的用戶體驗(yàn)和更高的可定制性。
Nano-GraphRAG 僅有大約 1100 行代碼(不包括測(cè)試和提示),設(shè)計(jì)為輕量、異步且完全類型化,非常適合希望將 GraphRAG 集成到項(xiàng)目中而又不增加復(fù)雜性的開(kāi)發(fā)者。
本文轉(zhuǎn)載自??PyTorch研習(xí)社??,作者:南七無(wú)名式
