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

















