最近發現了一個開源項目,它提供了一種很好的 RAG 思路,它將?DeepSeek-R1
?的推理能力結合?Agentic Workflow
?應用于 RAG 檢索
項目地址
https://github.com/deansaco/r1-reasoning-rag.git
項目通過結合?DeepSeek-R1
、Tavily
?和?LangGraph
,實現了由 AI 主導的動態信息檢索與回答機制,利用?deepseek
?的?r1
?推理來主動地從知識庫中檢索、丟棄和綜合信息,以完整回答一個復雜問題
新舊 RAG 對比
傳統的 RAG(檢索增強生成)做法有點死板,通常是在處理完搜索后,通過相似性搜索找到一些內容,再按匹配度重新排個序,選出看起來靠譜的信息片段給到大型語言模型(LLM)去生成答案。但這么做特別依賴于那個重排序模型的質量,要是這模型不給力,就容易漏掉重要信息或者把錯的東西傳給 LLM,結果出來的答案就不靠譜了。
現在?LangGraph
?團隊對這個過程做了大升級,用上了?DeepSeek-R1
?的強大推理能力,把以前那種固定不動的篩選方式變成了一個更靈活、能根據情況調整的動態過程。他們把這個叫做“代理檢索”,這種方式讓 AI 不僅能主動發現缺少的信息,還能在找資料的過程中不斷優化自己的策略,形成一種循環優化的效果,這樣交給 LLM 的內容就更加準確了。
這種改進實際上是把測試時擴展的概念從模型內部推理應用到了 RAG 檢索中,大大提高了檢索的準確性和效率。對于搞 RAG 檢索技術的人來說,這個新方法絕對值得好好研究一下!
核心技術與亮點
DeepSeek-R1 推理能力
最新的?DeepSeek-R1
?是一款強大的推理模型
-
深度思考分析資訊內容
-
對現有內容進行評估
-
通過多輪推理辨別缺失的內容,以提高檢索結果的準確性
Tavily 即時資訊搜索
Tavily
?提供即時的資訊搜索,能使大模型過去最新的資訊,擴展模型的知識范圍
-
可動態檢索來鋪沖缺失的資訊內容,而非僅僅依靠靜態數據
LangGraph 遞歸檢索(Recursive Retrieval)
透過?Agentic AI
?機制,讓大模型在多輪檢索與推理后形成閉環學習,大致流程如下:
-
第一步檢索問題相關的資訊
-
第二步分析資訊內容是否足夠以回答問題
-
第三步如果資訊不足,則進行進一步查詢
-
第四步過濾不相關的內容,只保留有效的資訊
這樣的?遞歸式
?檢索機制,確保大模型能夠不斷優化查詢結果,使得過濾后的資訊更加完整與準確
源碼分析
從源碼上來看,就很簡單的三個文件:agent
、llm
、prompts
Agent
這部分的核心思路在于?create_workflow
?這個函數
它定義了這個?workflow
?的節點,其中?add_conditional_edges
?部分定義的是條件邊,整個處理思路就是一開始看到的那張圖的遞歸邏輯
如果不熟悉?
LangGraph
?的話,可以查看一下相關的資料。
LangGraph
?構造的是個圖的數據結構,有節點(node) 和邊(edge),那它的邊也可以是帶條件的。
每次檢索后,都會通過大模型進行篩查,過濾掉沒用的信息(Filter Out Irrelevant Information),保留有用的信息(Retain Useful Information),對于缺失的信息(Identify Missing Information)就再進行一次檢索,然后重復這個過程直到找到想要的答案
prompts
這里主要定義了兩個提示詞。
VALIDATE_RETRIEVAL
?:它用于驗證檢索到的信息是否能夠回答給定的問題。該模板有兩個輸入變量:retrieved_context(檢索到的上下文)和 question(問題)。其主要目的是生成一個JSON格式的響應,根據提供的文本塊來判斷它們是否包含能夠回答問題的信息。
ANSWER_QUESTION
:用于指導一個問答代理(question answering agent)根據提供的文本塊來回答問題。該模板同樣有兩個輸入變量:retrieved_context(檢索到的上下文)和 question(問題)。其主要目的是基于給定的上下文信息提供一個直接且簡潔的答案。
llm
這里很簡單就是定義使用的?r1
?模型
可以改用其他廠商提供的模型,例如?openrouter
?的免費?r1
?模型
測試效果
我這里單獨寫了一個腳本,沒有使用項目中的,問一下?《哪吒2》中哪吒的師傅的師傅是誰
首先它會先調用搜索去查資料,然后開始驗證
接著它會開始分析,并得到?哪吒的師父是太乙真人
?這個有效信息,而且也發現了缺失的信息?太乙真人的師父(即哪吒的師祖)的具體身份或名字
接著它就會去繼續搜索缺失的信息,并繼續對搜索回來的信息進行分析校驗
后面因為我這邊網絡斷了,就報錯了,但是從上圖可以看到,它應該是可以找到這個關鍵的信息了