AI 智能體記憶架構演進之路:從 RAG 到智能體記憶的技術演進 原創
大家好,我是玄姐。
?在學習 AI 智能體(AI Agents)的記憶相關知識時,被各種新術語搞得不知所措。一開始是 “短期記憶” 和 “長期記憶”,后來又出現了 “程序性記憶”、“情景記憶” 和 “語義記憶”,這就更混亂了。但等等,“語義記憶” 讓我想到了一個熟悉的概念:檢索增強生成(RAG)。
難道 AI 智能體的記憶,是基礎 RAG 演進到 AI 智能體化 RAG 之后的合理下一步?本質上,AI 智能體的記憶核心是 “將信息傳入和傳出大型語言模型(LLM)的上下文窗口”。至于這些信息被稱為 “記憶” 還是 “事實”,在這個抽象概念下并不重要。
本文將從一個不同的角度,介紹 AI 智能體的記憶。我們暫時不討論 “短期記憶” 和 “長期記憶”,而是從 “樸素 RAG” 概念逐步演進到 “AI 智能體化 RAG”,再延伸到 “AI 智能體記憶”(注:這是一個簡化的思維模型。AI 智能體記憶的完整主題在底層更為復雜,涉及記憶管理系統等內容)。
一、RAG:一次性只讀模式
檢索增強生成(RAG)的概念由 Lewis 等人于 2020 年提出,并在 2023 年左右開始流行。它是首個讓 “無狀態 LLM” 能夠獲取兩類信息的概念:一是過往對話內容,二是 LLM 在訓練過程中未接觸過、未存儲在模型權重中的知識(即 “參數化知識”)。
樸素 RAG(naive RAG)的工作流程核心很簡單,如下圖所示:
loading
- 離線索引階段:將額外信息存儲到外部知識源(比如:向量數據庫)中;
- 查詢階段:根據用戶的查詢,從外部知識源中檢索相關上下文;將檢索到的上下文與用戶查詢一起輸入 LLM,讓 LLM 基于這些額外信息生成有依據的回復。
以下偽代碼展示了樸素 RAG 的工作流程:
# 第一階段:離線攝入
def store_documents(documents): # 定義“存儲文檔”函數
for doc in documents: # 遍歷所有待存儲文檔
embedding = embed(doc) # 對文檔進行嵌入(生成向量表示)
database.store(doc, embedding) # 將文檔及其向量存儲到數據庫
# 第二階段:在線檢索+生成
def search(query): # 定義“檢索”函數
query_embedding = embed(query) # 對用戶查詢進行嵌入
results = database.similarity_search(query_embedding, top_k=5) # 相似度檢索,取Top5結果
return results # 返回檢索結果
def answer_question(question): # 定義“回答問題”函數
# 先檢索,再生成回復(固定流程)
context = search(question) # 調用檢索函數,獲取上下文
prompt = f"上下文:{context}\n問題:{question}\n答案:" # 構造提示詞
response = llm.generate(prompt) # LLM生成回復
return response # 返回回復盡管樸素 RAG 能有效減少簡單場景下 LLM 的 “幻覺”(生成無依據內容),但它存在一個關鍵局限:
- 從外部知識源檢索信息時,不會先判斷 “是否需要這些信息”;
- 無論檢索到的信息是否相關、是否正確,都只進行一次檢索;
- 所有額外信息都依賴單一外部知識源存儲。
這些局限意味著:在更復雜的場景中,如果檢索到的上下文與用戶查詢無關甚至有誤,LLM 仍可能產生 “幻覺”。
二、AI 智能體化 RAG:通過工具調用實現只讀
AI 智能體化 RAG(Agentic RAG)解決了樸素 RAG 的諸多局限:它將 “檢索步驟” 定義為智能體可調用的一種工具。這一改變讓 AI 智能體能夠:
- 先判斷 “是否需要額外信息”;
- 決定使用哪種工具進行檢索(比如:存儲專有數據的數據庫 vs 網頁搜索);
- 評估檢索到的信息是否與用戶查詢相關。
loading
以下偽代碼展示了 AI 智能體在 AI 智能體化 RAG 流程中如何調用 ??SearchTool??(檢索工具):
class SearchTool: # 定義“檢索工具”類
def __init__(self, database): # 初始化工具,關聯數據庫
self.database = database
def search(self, query): # 定義“檢索”方法
query_embedding = embed(query) # 對查詢進行嵌入
results = self.database.similarity_search(query_embedding, top_k=5) # 相似度檢索Top5
return results # 返回檢索結果
def agent_loop(question): # 定義“智能體循環”函數(核心邏輯)
messages = [{"role": "user", "content": question}] # 初始化對話歷史,存入用戶問題
while True: # 循環:持續判斷是否需要調用工具
# LLM生成響應,同時告知其可使用SearchTool
response = llm.generate(
messages,
tools=[SearchTool]
)
if response.tool_calls: # 如果LLM決定調用工具
for tool_call in response.tool_calls: # 遍歷所有工具調用請求
if tool_call.name == "search": # 若調用的是“檢索工具”
results = search_tool.search(tool_call.arguments["query"]) # 執行檢索
# 將檢索結果存入對話歷史,角色標記為“工具”
messages.append({
"role": "tool",
"content": f"檢索結果:{results}"
})
else: # 如果LLM不調用工具,直接返回生成的回復
return response.content樸素 RAG 與 AI 智能體化 RAG 有一個共同點:信息均在離線階段存入數據庫,而非在推理(inference)階段存儲。這意味著:AI 智能體只能 “檢索” 數據,無法在推理階段對數據進行 “寫入、修改或刪除”。這一局限導致:默認情況下,樸素 RAG 和 AI 智能體化 RAG 系統都無法從過往交互中學習并改進。
三、AI 智能體記憶:通過工具調用實現讀寫
AI 智能體記憶(Agent Memory)通過引入 “記憶管理概念”,解決了樸素 RAG 和 AI 智能體化 RAG 的上述局限。它讓 AI 智能體能夠從過往交互中學習,并通過更具個性化的方式提升用戶體驗。
AI 智能體記憶的概念建立在 AI 智能體化 RAG 的基本原則之上:它同樣通過工具從外部知識源(記憶庫)中檢索信息。但與 AI 智能體化 RAG 不同的是,AI 智能體記憶還能通過工具向外部知識源 “寫入” 信息,具體流程如下:
loading
這一能力讓 AI 智能體不僅能 “回憶”(從記憶庫中檢索)信息,還能 “記住”(向記憶庫中存儲)信息。其最簡單的實現形式是:在一次交互結束后,將原始對話歷史存入一個集合(collection);之后,AI 智能體可通過檢索過往對話找到相關信息。
若要進一步擴展,還可讓 “記憶管理系統” 生成對話摘要并存儲,以備后續參考;甚至能讓 AI 智能體在對話中主動識別重要信息(比如:用戶提到喜歡用表情符號、或提及自己的生日),并基于這些事件創建記憶。
以下偽代碼展示了 “ AI 智能體記憶” 如何在 AI 智能體化 RAG 的基礎上,通過新增 ??WriteTool???(寫入工具)實現信息存儲:
class SearchTool: # 定義“檢索工具”類
def __init__(self, database): # 初始化工具,關聯數據庫
self.database = database
def search(self, query): # 定義“檢索”方法
results = self.database.search(query) # 執行檢索
return results # 返回檢索結果
# 為簡化演示,此處僅定義“寫入工具”;實際中還可添加“更新、刪除、整合”等工具
class WriteTool: # 定義“寫入工具”類
def __init__(self, database): # 初始化工具,關聯數據庫
self.database = database
def store(self, information): # 定義“存儲”方法
self.database.store(information) # 將信息存入數據庫
def agent_loop(question): # 定義“智能體循環”函數(核心邏輯)
messages = [{"role": "user", "content": question}] # 初始化對話歷史,存入用戶問題
while True: # 循環:持續判斷是否需要調用工具
# LLM生成響應,同時告知其可使用SearchTool和WriteTool
response = llm.generate(
messages,
tools=[SearchTool, WriteTool]
)
if response.tool_calls: # 如果LLM決定調用工具
for tool_call in response.tool_calls: # 遍歷所有工具調用請求
if tool_call.name == "search": # 若調用“檢索工具”
results = search_tool.search(tool_call.arguments["query"]) # 執行檢索
# 將檢索結果存入對話歷史
messages.append({
"role": "tool",
"content": results
})
elif tool_call.name == "store": # 若調用“寫入工具”
result = write_tool.store(
tool_call.arguments["information"] # 獲取待存儲信息
)
# 將存儲結果存入對話歷史
messages.append({
"role": "tool",
"content": result
})
else: # 如果LLM不調用工具,直接返回生成的回復
return response.content四、這一簡化思維模型的局限性
正如本文開頭所說,上述對 AI 智能體記憶的對比僅為 “簡化思維模型”,它幫助我將 “ AI 智能體記憶” 與已熟悉的 RAG 概念關聯起來,但為了避免讓大家誤以為 “AI 智能體記憶只是‘帶寫入功能的 AI 智能體化 RAG’”,需要強調這一簡化模型的幾個局限性:
- 單一記憶源的簡化:為清晰起見,上述模型僅展示了 “單一記憶源”,但實際應用中,不同類型的記憶可使用不同的存儲源。例如,可參考 CoALA 論文的思路,為以下三類記憶分別建立獨立的數據集:
- “程序性記憶”(如 “與該用戶互動時使用表情符號”);
- “情景記憶”(如 “用戶在 10 月 30 日提到過計劃旅行”);
- “語義記憶”(如 “埃菲爾鐵塔高 330 米”);此外,還可單獨為 “原始對話歷史” 建立數據集。
- 缺少復雜記憶管理策略:上述模型僅涵蓋了 “CRUD 操作”(創建、讀取、更新、刪除),但未包含更復雜的記憶管理策略,比如:MemGPT(記憶生成式預訓練 Transformer)中提到的高級策略。
- 新增挑戰未體現:盡管 AI 智能體記憶實現了 “記憶持久化”,但也帶來了 RAG 和 AI 智能體化 RAG 沒有的新挑戰,例如 “記憶損壞”,以及對 “遺忘” 等記憶管理策略的需求。
五、總結
本質上,RAG、AI 智能體化 RAG 和 AI 智能體記憶的核心差異,在于 “如何對外部知識源(比如:文本文件、數據庫)中存儲的信息進行創建、讀取、更新和刪除(CRUD)”。
類型 | 信息存儲方式 | 信息檢索方式 | 信息編輯與刪除方式 |
RAG | 在攝入階段離線進行 | 一次性檢索 | 需手動操作 |
AI智能體化 RAG | 在攝入階段離線進行 | 通過工具調用動態檢索 | 需手動操作 |
AI 智能體記憶 | 通過工具調用動態存儲 | 通過工具調用動態檢索 | 通過工具調用動態操作 |
最初,優化樸素 RAG 的核心焦點在于 “檢索環節”,比如:采用向量檢索、混合檢索、關鍵詞檢索等不同技術(即 “如何檢索信息”);隨后,焦點轉向 “工具選擇”,即 “是否需要檢索信息?若需要,從哪個知識源檢索?”;過去一年,隨著 AI 智能體記憶的興起,焦點再次轉移:RAG 和 AI 智能體化 RAG 均以 “檢索” 為核心,而 AI 智能體記憶則融入了對外部知識源中數據的 “創建、修改和刪除” 操作,核心變為 “如何管理信息”。
好了,這就是我今天想分享的內容。
本文轉載自???玄姐聊AGI?? 作者:玄姐

















