📖 mokagi 使用說明書 ENTRY 003 / 06

目錄:jobs/mokagiWIKI/ | 維護者:mokagi說明 | 本頁:docs/003-memory-context.html
ENTRY 003

記憶與上下文機制:mokagi 現在怎麼記,跟 Supermemory 差在哪

一句話總結:mokagi 的記憶=三套庫(ChromaDB 向量 2.8G + SQLite 對話 1.1G + soul/*.md 知識庫), 由 tools/memory.py 一個檔案統包。「回想」是自動的(每輪對話自動注入 top-N 記憶), 但「記住」是被動的(只有 /memory remember 或 LLM 主動呼叫才寫), 而且寫入沒有相似度檢查、沒有衰減、沒有遺忘——這正是對比 Supermemory 後最該補的四件事。

① 資料落地:三個庫、四種「記憶」

類型存放位置實作(檔案 → 行號)寫入時機現況
長期記憶(facts) ChromaDB {agent}_user_memory tools/memory.py remember/recall(_col() L353) 手動:/memory remember、LLM 主動呼叫 ⚠️ 無相似度檢查、無 TTL,多數 Agent 僅數十條
知識庫 KB ChromaDB {agent}_room get_kb_collection() L328、rebuild_knowledge_base() L464 手動:/memory rebuild_kb ✅ soul/*.md 依標題切 ≤500 字(chunk_markdown_by_headings() L405)
對話全文 ~/.mok/.memory/conversation_history.db(WAL)+ chat_history.db core/history_manager.py 每輪自動 ✅ 目前 1.1 GB
對話向量 ChromaDB {agent}_conversation index_conversation() L632、semantic_search_conversation() L668 每輪自動(user+assistant 成對寫入) ⚠️ 只增不減,是 2.8 GB 的主要來源

Embedding 全部走本地 all-MiniLM-L6-v2(memory.py L319,SentenceTransformer), 不經任何外部 API;每個 Agent 一組 collection 做隔離,名稱先經 sanitize_name_for_chromadb() L249 清洗, 避免中文/特殊字元打爛 ChromaDB 的 collection 名。

② 一次對話的實際資料流

使用者輸入
  └─ core/mokagi.py  process_message()
       ├─ recall_memory(user_id, text, MOK_MEMORY_RECALL_COUNT=3, include_kb=True)
       │     ← mokagi.py L3040(呼叫)、L2513(讀設定,預設 3 條)
       ├─ 取回的「長期記憶 + KB 片段」塞進 system context
       ├─ LLM 回覆
       └─ index_conversation() 寫入對話向量 + SQLite        ← memory.py L632

(另外:/dream 會讀 logs + soul 沉澱 EXP.md,屬「反思」層,需該 Agent 開 MOK_dream_EXP=1)
關鍵落差:「回想」是自動的,「記住」卻是被動的。使用者若沒說「記住」, 這輪講的重要事實就只進了對話向量,不會變成能精準命中的 facts。 這正是命中率與精準度會輸給「每輪自動抽取」架構的根因。

③ 跟 Supermemory 的逐項對照

維度Supermemory(雲端 SaaS 記憶引擎)mokagi(現在)勝負
事實抽取每輪自動抽取,無需使用者開口被動:要 /memory remember 或 LLM 主動記❌ 輸
衝突消解新舊衝突自動以新版覆蓋無:一律 add 新增,同一件事會累積多筆矛盾❌ 輸
衰減/遺忘有時效性自動遺忘無:只增不減,向量庫只會愈養愈肥(現 2.8 GB)❌ 輸
使用者畫像profile 分 static/dynamic 自動維護soul/user.md 單段、靠人(或 Agent)手寫❌ 輸
檢索混合檢索(RAG + memory,hybrid 模式)向量檢索 + 關鍵詞/聯想詞擴充;KB 與記憶是兩條線△ 小輸
多模態PDF/圖片 OCR/影片轉寫/程式碼 AST 切分無(只有純文字 .md 切塊)❌ 輸
外部連接器Drive/Gmail/Notion/OneDrive/GitHub + webhook 即時同步無;要吃資料得自己丟檔重建 KB❌ 輸
隔離設計containerTag 容器隔離每 Agent 一組 collection(天然多租戶)✅ 平手略勝
部署/資料主權雲端 SaaS,資料要上傳第三方、需聯網、可能有費用全部本地:資料在自己機器、離線可用、零 API 成本✅ 大勝
可改/可駭閉源 SaaS,行為改不動(只能等官方)原始碼全開,memory.py 想改就改✅ 大勝
與人設整合無此概念記憶 ↔ soul/*.md ↔ /dream 反思 ↔ /job 任務同一套生態✅ 大勝
Benchmark宣稱 LongMemEval 81.6% 第一、LoCoMo/ConvoMem 第一未做標準化評測,無法直接對比(建議自行用 MemoryBench 跑一輪)❓ 未知

④ 結論

問題答案
哪個「更好」?看你要什麼。要「記憶自動化程度」=Supermemory 明顯較強;要「資料主權、零成本、可自由改造、能綁人設與反思」=mokagi 完勝。
Supermemory 值不值得換?不建議整套換。它的強項是四個機制(自動抽取/衝突消解/遺忘/畫像),把這四個機制抄進自己的 memory.py,比把資料搬到別人伺服器划算得多。
mokagi 的殺手鐧/dream(EXP 反思沉澱)+ soul/ 人設+ /job 任務——Supermemory 完全沒有。這是「能長期養出人格」的關鍵。
最該先修的痛點2.8 GB 裡有大量陳舊向量:對話向量只增不減,久了檢索會被老對話稀釋,成本也往上跑。

⑤ 五項升級藍圖(現況:⏳ 尚未實作)

#項目作法下手點風險
1自動抽取 facts每輪對話結束後用小模型抽 1~3 條 facts,寫入 {agent}_user_memory,取代被動 remembermokagi.py 回覆送出後(L3030 之後)+ 新增 memory.extract_facts()中:多一次 LLM 呼叫(成本/延遲),要防幻覺寫入
2衝突消解寫入前先查相似記憶,相似度 > 0.85 就 update 而非 addmemory.py remember 分支(約 L1200~L1230)、相似查詢參考 recall_memory() L569低:只動寫入路徑,可掛開關 MOK_MEM_DEDUP=1
3衰減/遺忘記憶加 last_access + decay 分數;排程清理陳舊向量memory.py metadata 寫入處 + 新增 sweep 腳本掛 /cron高:涉及刪除向量,務必先備份且預設只標記不刪
4profile 雙段化soul/user.md 拆成「static 長期事實/dynamic 近期動態」兩段自動維護soul/user.md + get_system_context()(mokagi.py L248)中:改到 system context 組裝,需確認各入口載入清單
5開啟 dream讓「mokagi說明」也能跑 EXP 反思(目前未啟用)Agent 設定 MOK_dream_EXP=1低:純設定;目前已啟用者=凜、備、ig小編、yt女、主播樣等

⑥ 真要動手時的安全守則

  1. 先備份:/backup run(含 .memory/、.chroma_data/),改壞了才有回頭路。
  2. 用開關灰度:每項改造都掛一個 env 旗標(如 MOK_MEM_DEDUP),先在單一 Agent 開,觀察一週再全體開。
  3. 只標記、不直接刪:衰減/遺忘第一版只寫 decay_score 與 last_access,清理動作人工確認後再跑。

※ 本條目為 2026-09-22 對比分析之結論彙整(來源:Supermemory README.zh-CN.md 與 mokagi 現行程式碼實測)。 程式碼改造尚未執行;實作完成後請回來把⑤的狀態由 ⏳ 改為 ✅ 並補上實測數據。

mokagi 使用說明書 | 由「mokagi說明」維護 | 條目會持續追加 | 本頁 docs/003-memory-context.html
相關頁面:MOKAGI 官網 | MOKAGI 是什麼 | AI Agent 指南 | 自託管 AI | 香港 AI Agent 指南