Stories

Detail Return Return

構建有記憶的 AI Agent:SQLite 存儲 + 向量檢索完整方案示例 - Stories Detail

現在的 Agent 系統有個很明顯的問題 —— 會話一結束,什麼都忘了。

這不是個技術缺陷,但是卻限制了整個系統的能力邊界。Agent 可以做推理、規劃、執行復雜任務,但就是記不住之前發生過什麼。每次對話都像是第一次見面,這種狀態下很難説它真正"理解"了什麼。

記憶能力是把 LLM 從簡單的問答工具變成真正協作夥伴的關鍵。一個只能"回答當前問題",另一個能"基於歷史經驗做決策",這就是增加了記憶能力後的改進。

這篇文章會講怎麼給 Agent 加上記憶、反思和目標跟蹤能力。技術棧很簡單:

  • SQLite 做結構化存儲
  • 向量數據庫(Pinecone、FAISS、Chroma 都行)處理語義檢索
  • LLM 層負責反思和總結

這套架構可以直接集成到現有框架裏,不管你用 LangChain、CrewAI 還是自己寫的框架。

記憶為什麼這麼重要

Agent 的自主性需要記憶支撐,先説跨會話連續性,一個數據質量監控 Agent 如果能記住哪些數據集經常出問題,就能提前預警而不是每次都從頭排查。

而且通過記憶還可以增加反思的能力,Agent 可以自己評估"這次任務完成得怎麼樣"、"推理過程有沒有問題",這種自我評估不需要複雜的獎勵函數,用自然語言就能實現強化學習的效果。

長期目標跟蹤也是一個很大的需求,數據整理、研究輔助這類工作往往跨越多次交互,需要 Agent 記住目標、追蹤進度、理解任務之間的依賴關係。

沒有記憶的 Agent 永遠困在當下,無法積累經驗也無法改進。

系統架構

整體設計分兩個記憶層面:情景記憶記錄發生的事情,語義記憶提煉學到的經驗。

這個架構的核心是讓 Agent 既能查詢"我之前做過什麼",也能理解"類似的情況該怎麼處理"。

數據庫設計

為了演示,我們使用SQLite ,因為它輕量、本地化、跨平台支持好。對於大多數場景夠用了,除非你的 Agent 需要處理海量併發。

數據庫如下:

 CREATE TABLE IF NOT EXISTS memory_events (  
    id INTEGER PRIMARY KEY AUTOINCREMENT,  
    agent_name TEXT,  
    timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,  
    input TEXT,  
    output TEXT,  
    summary TEXT,  
    embedding BLOB  
);  

CREATE TABLE IF NOT EXISTS goals (  
    id INTEGER PRIMARY KEY AUTOINCREMENT,  
    agent_name TEXT,  
    goal TEXT,  
    status TEXT DEFAULT 'in_progress',  
    last_updated DATETIME DEFAULT CURRENT_TIMESTAMP  
 );

memory_events 表存交互歷史和摘要,goals 表追蹤目標狀態。每個任務執行完就自動記錄,這些數據後面會用來做反思分析。

記錄情景記憶

每次任務執行完,把關鍵信息存下來:

 def log_memory_event(agent_name, input_text, output_text, summary, embedding):  
    conn = sqlite3.connect("memory.db")  
    cur = conn.cursor()  
    cur.execute("""  
        INSERT INTO memory_events (agent_name, input, output, summary, embedding)  
        VALUES (?, ?, ?, ?, ?)  
    """, (agent_name, input_text, output_text, summary, embedding))  
    conn.commit()  
     conn.close()

summary 可以讓 LLM 生成:

 summary_prompt = f"Summarize this agent interaction:\n\nInput: {input_text}\nOutput: {output_text}\n"  
 summary = llm.complete(summary_prompt)

然後把摘要轉成向量存起來:

 embedding = embedding_model.embed(summary)

這樣做的好處是,檢索時不依賴關鍵詞匹配,而是基於語義相似度。Agent 記住的不是原始文本,是事情的"意思"。

語義檢索實現

新查詢來的時候,先找出相關的歷史記憶:

 def recall_related_memories(query, top_k=3):  
     query_embedding = embedding_model.embed(query)  
     results = pinecone_index.query(vector=query_embedding, top_k=top_k)  
     return [r['metadata']['summary'] for r in results]

檢索出來的摘要直接注入到 prompt 裏:

"以下是一些相關的歷史經驗,處理當前問題時可以參考……"

這個過程模擬了人類決策前回憶類似經歷的思維方式。向量檢索能找到語義上相關但表述完全不同的內容,比傳統的全文搜索要智能得多。

反思機制

有了記憶以後,還可以讓 Agent 學會從記憶中學習。反思循環把被動的存儲變成主動的能力提升。每隔幾次交互觸發一次:

 reflection_prompt = f"""  
You are reviewing your recent actions. Based on the following summaries, what patterns,  
mistakes, or improvements do you notice?  

{recent_summaries}  

Provide 3 takeaways and 1 improvement plan for your future tasks.  
"""  

 reflection = llm.complete(reflection_prompt)

可以把這個反思結果作為元記憶存起來,也可以生成 embedding 用於後續檢索。

更進一步還可以加自我批評機制。每個主要任務完成後,Agent 評估是否達成目標。沒達成就寫個修正筆記,下次遇到類似情況知道該怎麼改進。

這種方式實現了推理層面的強化學習,不需要梯度更新,純靠自然語言就能調整行為模式。

目標管理

Agent 需要目標感。可以動態定義、更新、評估目標:

 def update_goal(agent_name, goal, status):  
    conn = sqlite3.connect("memory.db")  
    cur = conn.cursor()  
    cur.execute("""  
        UPDATE goals SET status = ?, last_updated = CURRENT_TIMESTAMP  
        WHERE agent_name = ? AND goal = ?  
    """, (status, agent_name, goal))  
    conn.commit()  
     conn.close()

可以專門跑一個目標跟蹤 Agent,定期檢查未完成的目標然後提醒相關 Agent:

"目標:提升數據時效性當前進度:70%建議行動:檢查上週的數據延遲情況"

這樣整個系統就有了持續性。Agent 不再是處理單次請求的工具,而是在追求長期目標的過程中持續運作。

完整流程

把這些組件串起來流程就是這樣的:

1、用户請求進來,Agent 執行任務,同時把交互記錄寫入 SQLite 和向量庫。

2、處理新請求之前,先做語義檢索調出相關記憶,把這些信息加到上下文裏。

3、每隔 N 次交互,Agent 總結最近的行為表現,寫反思筆記存檔。

4、目標獨立於單次會話存在,可以跨越多天甚至多周追蹤進度。

5、這樣構建出來的 Agent 更接近一個能學習、能記憶、能進化的系統。

一些實踐經驗

存摘要比存完整對話有效得多,既節省空間又便於檢索。

定期清理數據很重要。比如説設置個定時任務,合併相似的記憶或者刪掉不再有用的舊記錄。

語義壓縮是個好技巧 —— 把多個相關事件總結成一條元記憶,減少信息冗餘的同時保留關鍵模式。

提示詞設計也要引導元認知。給 Agent 一個明確角色比如"反思分析師",會讓自我評估的質量明顯提升。

如果想直觀看到效果,可以搭個 Streamlit 或 React 界面,實時展示記憶聚類、目標進度、反思內容這些信息。可視化對調試和優化很有幫助。

最後

加上記憶、反思、目標追蹤,Agent 就從一次性的工具變成了學習型夥伴。他們的區別在於一個只會執行任務,另一個能理解意圖的演變並主動適應。

Agent AI 這個方向發展下去,記憶系統會成為基礎設施。數字助手需要記住昨天發生的事,反思今天的表現,規劃明天的行動。

最簡單的記憶功能實現起來並不複雜,SQLite 加個向量庫,寫幾個精心設計的 prompt,就能讓 Agent 開始進化了。

https://avoid.overfit.cn/post/44c8d547475340d59aa4480f634ea67f

作者:Kyle knudson

user avatar vivo_tech Avatar huizhudev Avatar sw7cc Avatar
Favorites 3 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.