你有沒有想過一個問題:為什麼你的 AI 助手每次開新對話,都像是第一次見面?
它忘了你上次交代的偏好、忘了你們討論過的技術決策、忘了你最討厭簡體字。每一次,你都得從頭教起。這不是 AI 不夠聰明——而是它根本沒有記憶系統。
我花了三個月的時間,從零建構了一套分層記憶架構。它現在每天自動運行,跨越四個不同的 AI CLI(Claude Code、Gemini CLI、GitHub Copilot、Codex),共享同一套記憶——而且不會爆 token。
這套系統叫做 Ghost In Shell,已經開源。以下是它的設計哲學與核心架構。
問題:現有方案全部不及格
| 常見做法 | 致命缺陷 |
|---|---|
| 把所有知識塞進 system prompt | Token 燒錢大法——500+ 行每次都載入 |
| 用一個大檔案存所有東西 | 無限膨脹,context window 爆掉 |
| 依賴對話歷史 | 新 session = 完全失憶 |
| 外掛向量資料庫 | 架設複雜、檢索延遲、過度工程 |
解法:五層分層記憶 + 認知引擎
Ghost In Shell 的記憶架構靈感來自 CPU 快取層級(L1/L2/L3)——越常用的資料離核心越近,越冷的資料按需載入。
┌─────────────────────────────────────────┐
│ Always Loaded (~230 lines) │
│ ┌──────────────┐ ┌─────────────────┐ │
│ │ L0 MEMORY.md │ │ L1 fact.yml │ │
│ │ 路由索引 │ │ 熱層事實 │ │
│ └──────────────┘ └─────────────────┘ │
├─────────────────────────────────────────┤
│ Load on Demand (按需載入) │
│ ┌──────────────────────────────────┐ │
│ │ L1 fact_archive.yml (冷層工具) │ │
│ │ L1 fact_decisions.yml (決策紀錄) │ │
│ │ L1 episodic.jsonl (情節記憶) │ │
│ │ L0.5 scratchpad.md (任務暫存) │ │
│ └──────────────────────────────────┘ │
├─────────────────────────────────────────┤
│ v4 Cognitive Layer (背景認知層) │
│ ┌──────────────────────────────────┐ │
│ │ associations.jsonl (關聯圖譜) │ │
│ │ principles_candidates.jsonl │ │
│ │ .retrieval_buffer.jsonl │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
效果:每次 session 只載入 ~230 行(而非 500+),認知層在背景自動強化有用記憶、淘汰過時資訊。
核心設計:每一層做一件事
L0: MEMORY.md — 路由器,不是資料庫
這是記憶系統的入口。它只存「去哪裡找什麼」的索引,不存實際知識。目標 < 200 行。就像圖書館的目錄卡——你不會在卡片上寫完整本書的內容。
L1 熱層: fact.yml — 每次必載的核心事實
YAML 格式,存放使用者偏好、系統配置、絕對規則、工具清單。目標 < 150 行。這是 Agent 的「短期工作記憶」——你的名字、時區、語言偏好、禁用詞表。
L1 冷層: 按需載入的專業知識
工具完整配置(fact_tools_detail.yml)、歷史決策(fact_decisions.yml)——只在需要時才讀取,避免浪費 token。
L1 情節層: episodic.jsonl — 教訓與里程碑
JSON Lines 格式,目前累積 398 條記錄。每一條都有重要度(1-10)、標籤、時間戳。這是 Agent 的「長期經驗記憶」——它記得上次部署失敗是因為什麼、哪個 API 有坑。
v4 認知層: 讓記憶自己「思考」
這是最有趣的部分。認知層不只是被動儲存——它主動建立記憶之間的關聯。
associations.jsonl 是一張圖譜,記錄記憶之間的因果、延續、相似關係。當你問「上次部署失敗」時,系統不只找到那條記錄,還會連帶拉出相關的修復方案、後續改進、類似問題。
記憶強度公式:
strength = base(imp/10) + retrieval(count * 0.08) + assoc(edges * 0.05) - decay(weeks * 0.03)
- base:重要度(1-10)的 10%
- retrieval:使用次數 x 0.08——越常被提取的記憶越強
- assoc:關聯邊數 x 0.05——連結越多的記憶越不容易遺忘
- decay:週數 x 0.03——遺忘曲線,但可被 retrieval 和 assoc 抵消
這模擬了人類記憶的核心機制:常用的記得住,有關聯的記得住,太久沒用的會淡忘。
多 CLI 共享記憶:四個 Agent,一個大腦
我的工作環境同時運行四個 AI CLI:Claude Code(主力)、Gemini CLI(超長 context)、GitHub Copilot(Code Review)、Codex(備用)。它們全部共享同一套記憶系統。
| CLI | 角色 | 記憶共享 |
|---|---|---|
| Claude Code | 本體——全功能開發 | 完整讀寫 |
| Gemini CLI | 分靈體——超長文件處理 | 完整讀寫 |
| GitHub Copilot | 異界審判官——Code Review | 完整讀寫 |
| Codex CLI | 備用執行器 | 完整讀寫 |
每個 CLI 啟動時會透過 wrapper 自動注入 runtime metadata(VOID_MEMORY_RUNTIME、VOID_MEMORY_EXECUTOR、VOID_MEMORY_SESSION_ID),session 結束時自動寫回記憶。多執行器同時寫入時有 file lock 機制防衝突。
自動化:記憶不需要人類維護
| 自動化排程 | 頻率 | 做什麼 |
|---|---|---|
| Session Logger | 每次 session 結束 | 自動記錄本次工作摘要 |
| Trigger Check | 每次 session 結束 | 檢查是否需要整合記憶 |
| Daily Review | 每日 23:00 | 自動審查 + 衰減計算 |
| Weekly Consolidate | 每週日 19:00 | 整合教訓、萃取原則 |
所有排程由 macOS launchd 驅動,不依賴 cron。整合引擎會自動從 398 條情節記憶中萃取通用原則,形成 principles_candidates.jsonl——這些是 Agent 從經驗中「學到」的規則。
身份三角:Agent 不只需要記憶
記憶只是 Ghost In Shell 的一部分。完整框架由三個支柱組成:
- Identity(身份):
IDENTITY.md+SOUL.md+USER.md——定義 Agent 是誰、服務誰、怎麼說話 - Memory(記憶):五層分層 + 認知引擎——讓 Agent 記得過去
- Governance(治理):三層強制執行——確保 Agent 不會做危險的事
治理層特別重要:L1 是 deny list(100% 強制,寫在 settings.json)、L2 是 PreToolUse Hook(100% 強制,shell guard)、L3 是 rules/ 指導(~80% 軟約束)。三層疊加,確保 Agent 有自主權但不會失控。
開源:拿去用
Ghost In Shell 已完整開源,附帶:
- 互動式 CLI 精靈(5 步建立完整 Agent 配置)
- 16 篇完整文件(從快速開始到跨機器同步)
- 範例模板(minimal / multi_cli_memory)
- 記憶自動化腳本(session log、整合、衰減、關聯)
GitHub: cyhsieh817/Ghost_In_Shell
如果你也厭倦了每次對話都要重新教 AI 你是誰——試試看。
本文的記憶架構在 TheVoidWeaver 系統上已穩定運行三個月,每日自動維護,累計 398 條情節記憶、138 條關聯邊、6 次自動整合。它不是理論——是正在呼吸的基礎設施。