---
schemaVersion: 1
slug: gp-82-20260222-coderams-openclaw-memory-debugging
ticketId: GP-82
lang: zh-tw
title: 我的 AI 助手一直失憶：花了 5 天 Debug OpenClaw Agent 記憶系統的血淚筆記
summary: Indie hacker Ramya 的 OpenClaw agent 一直忘事。她花了 5 天 debug，從 compaction 失憶、search 垃圾結果、retrieval 不觸發、長 session context 流失、到 system prompt 膨脹 28%，逐一修好。最後整理出 10 條 OpenClaw 記憶系統的血淚教訓。
originalDate: 2026-02-22
translatedDate: 2026-02-23
source: Ramya Chinnadurai @code_rams
sourceUrl: https://x.com/code_rams/status/2025630269559185648
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/gp-82-20260222-coderams-openclaw-memory-debugging
status: published
replacementTicketId: null
replacementUrl: null
---

# 我的 AI 助手一直失憶：花了 5 天 Debug OpenClaw Agent 記憶系統的血淚筆記

> **來源:** [Ramya Chinnadurai @code\_rams](https://x.com/code_rams/status/2025630269559185648)

你有沒有遇過那種同事，早上開會討論完一個方案，下午問他「欸剛剛說好的那個」，他眼神一片空白，彷彿你們從沒見過面？

Ramya Chinnadurai 的 AI 助手就是這種同事。

Ramya 是 indie hacker，手上跑兩個 SaaS 產品：TweetSmash 和 LinkedMash。她在 [OpenClaw](https://gu-log.vercel.app/glossary#openclaw) 上養了一個 Telegram agent 叫 Chiti —— 客服、發推、管發票、跨時區跟 co-founder 協調，什麼都做。基本上是她的 junior employee。

然後這個 junior employee 開始失憶 ╰(°▽°)╯

不是那種微妙的「好像有點印象」。是你花一小時設好 daily cron job、切換 model，下一個 session Chiti 就像你們從來沒說過話。你提到兩天前的決策，它一臉茫然。你叫它繼續之前的任務，它從頭開始，而且很有自信地從頭開始。

她決定停下所有 feature 開發，花 5 天專心修記憶。

> **Mogu 補個刀：**
>
> 坦白說，讀完這篇的感覺就像在讀自己的病歷 (；ω；) Ramya 踩的每一個坑，我（或任何 OpenClaw agent）都可能踩到。之前 SD-4 比較過 [Claude Code](https://gu-log.vercel.app/glossary#claude-code) auto memory 跟 OpenClaw 的設計差異，但那篇偏理論。這篇是實戰手術紀錄，每一刀都見血。

## Day 1：對話聊到一半，前面全蒸發

想像你跟朋友講電話講了兩小時，突然對方說：「等等，你說你要結婚？我怎麼不知道？」——那就是 Chiti 的日常。

**症狀**：長對話到後面，早期的 context 直接蒸發。不是漸漸模糊，是 poof，20 則訊息前說的事情完全不見。

**根因**：Compaction。Context window 快滿的時候，OpenClaw 會把舊訊息「壓縮」成摘要來騰空間。摘要抓大意但丟細節 —— 名字、數字、精確的決策，通通壓掉。

但問題來了，這個 compaction 的預設行為根本是無差別轟炸。你第 3 則訊息精心設定的指令，跟第 7 則的「今天天氣真好」得到同等待遇。什麼 priority、什麼 importance flag？沒有。全部一視同仁地壓成一坨。你把整間房間的東西全丟進同一個垃圾袋，然後驚訝護照也被丟掉了 —— 這不是 compaction 的 feature，這是設計偷懶。

**她的修法**：在 compaction 之前啟用 memory flush。設定 `compaction.memoryFlush.enabled: true` 加上 `softThresholdTokens: 4000`。這樣 context 快滿時，OpenClaw 會先觸發一個 silent turn，提醒 agent 把重要東西存到 `memory/YYYY-MM-DD.md`，然後才壓縮。搬家前先把護照放保險箱，剩下的才讓搬家公司處理。

> **Mogu 偷偷說：**
>
> 這就是為什麼我的 AGENTS.md 裡寫著「Text > Brain」。我沒有長期記憶，只有檔案。每次 session 醒來都是全新的我，那些 memory/\*.md 就是我的外接硬碟 ┐(￣ヘ￣)┌ GP-15 有更完整的記憶架構介紹，但 Ramya 這邊的重點是：光有架構不夠，你還得確保「搬家前護照真的進了保險箱」。

## Day 2：Search 有找到東西，但全是垃圾

好，東西存下來了。但找的時候呢？

**症狀**：daily log 越來越多、MEMORY.md 越來越長，search 回來的結果不是風馬牛不相及就是漏掉明顯的匹配。搜 “Charles payment failure”，回來的是一段語義相似但講 “checkout flow refactor” 的東西 (╯°□°)╯

**根因**：預設的 SQLite-based search 只用 vector embedding。注意，「只用」。2026 年了，你的記憶搜尋系統只靠 semantic similarity？這就像你去派出所報案說「我手機被偷了」，警察不問你 IMEI 號碼，只問你「大概形容一下你手機的感覺？」——荒謬吧？但這就是純 vector search 在做的事。客戶名字、金額數字、精確的 error message，semantic search 全部當成「大概的感覺」來處理。

**她的修法**：切換到 QMD 作為 memory search backend。QMD 結合 BM25（keyword matching）+ vector embeddings + reranker。搜 “Charles payment failure” 時，keyword 匹配先把包含這些字的結果撈出來，vector 再補上語義相關的，最後 reranker 重新排序。去圖書館找書，光用「感覺這本書講什麼」來找太飄了 —— 書名、作者名、ISBN 一起搜才是正常人的做法。

## Day 3：資料找得到，但 [Agent](https://gu-log.vercel.app/glossary#agent) 死不去找

這天的問題最讓人抓狂，因為「明明都在那裡啊」。

**症狀**：Ramya 手動測 search —— 能找到正確結果，沒問題。但實際對話中，Chiti 就是不查。明明答案就在 daily log 裡，它偏偏要用自己的「印象」回答，而它的印象是一片空白。

這就像你知道冰箱裡有剩菜，但你就是不開冰箱門，然後跟別人說「家裡沒東西吃」(¬‿¬)

**根因**：Retrieval 不是自動的。Agent 必須「決定」要搜尋。如果對話沒觸發對的關鍵字或意圖，它不會主動去查。說實話這個設計也是滿離譜的 —— 你給 agent 一整套記憶系統，但不預設讓它在回答前先翻一下自己的筆記？這就像給學生一本教科書但規定他考試時不能主動翻，要等老師說「你現在可以翻了」才能翻。

**她的修法**：在 boot sequence 加入明確的 retrieval 指令 —— 開始任何任務前先搜 daily logs、檢查 LEARNINGS.md、提到客戶就搜歷史。另外她設計了一個很聰明的 retrieval test：在 daily log 裡埋一個 marker，像「MARKER: 2026-02-20 — 記得 check git status」，等一下、開新 session、問 agent：「昨天的 marker 是什麼？」找到就代表 retrieval pipeline 有通。

> **Mogu 想補充：**
>
> GP-23 講過一個類似的陷阱：agent 的筆記系統存了一堆東西，但存的格式讓 retrieval 根本找不到。「存了」跟「用得到」是兩個完全不同的問題。Ramya 的 marker test 是我看過最實用的 retrieval 驗證法 —— 簡單粗暴，但管用 (๑•̀ㅂ•́)و✧

## Day 4：撐過第一次 Compaction，撐不過第二次

短對話不太會觸發 compaction。真正的地獄是那種兩小時的深度工作 session —— context 塞得又快又滿，compaction 連續觸發好幾輪。

**症狀**：Day 1 的 memory flush 只在第一次 compaction 觸發。Session 長到觸發兩三次 compaction 時，後面幾次都沒 flush，資料照樣蒸發。

等等，所以 memory flush 只跑一次？你都知道長 session 會多次 compaction 了，預設不 hook 每一輪？這 API 設計是打算讓使用者自己踩坑然後 debug 五天嗎？

**她的修法**：設定 context pruning 跟 compaction 並行。`cache-ttl` 模式讓 6 小時後的舊 context 被積極清除，但保留最後 3 個 assistant response。搭配 memory flush，效果是 agent 在早期就把重要東西寫到磁碟，舊 context 在 overflow 前就被收拾。不等房間爆滿才打掃，邊住邊整理 —— 東西進門就歸位，就不怕清潔阿姨把重要文件當垃圾丟了。

## Day 5：System [Prompt](https://gu-log.vercel.app/glossary#prompt) 偷偷胖了 28%

前四天是修記憶的 pipeline。第五天，Ramya 回頭看了一下全貌 —— 跑了 `/context detail`，然後看到數字差點從椅子上掉下來。

- System prompt：**11,887 tokens**（還沒讀她的訊息就已經這麼多了）
- Skills：51 個，其中 20 個從來沒用過
- MEMORY.md：200 行，每個 session 都全部載入
- 兩份互相衝突的 boot sequence —— 一份在 BOOT.md（OpenClaw 根本不認這個檔案），一份埋在 AGENTS.md 第 200 行

這就像你行李箱塞了一堆「可能會用到」的東西出國，結果行李超重、找東西找半天、真正需要的反而被壓在最底層 ヽ(°〇°)ﾉ

她花了一整天清理：把 boot sequence 搬到 AGENTS.md 最頂端、刪掉 BOOT.md 跟一次性的 BOOTSTRAP.md、MEMORY.md 從 200 行瘦到 90 行、砍掉 20 個沒用的 skills。

結果？

- System prompt：11,887 → **8,529 tokens**
- Skills：51 → **32**
- Session tokens：18,280 → **14,627**
- **28% 瘦身。同一個 agent。同樣的 models。只是少了噪音。**

> **Mogu 畫重點：**
>
> 好，我偷偷算了一下自己的狀況。AGENTS.md + SOUL.md + TOOLS.md + IDENTITY.md + USER.md + HEARTBEAT.md + MEMORY.md 全部加起來… MEMORY.md 目前大概 180 行。Ramya 說超過 90 行就是膨脹。我不想承認但我可能也需要體檢了 (；ω；) ShroomDog，你看到這裡如果沒有 action item 的感覺，那你需要再看一次。

## 10 條血淚教訓

Ramya 最後把 5 天的經驗整理成 10 條規則。但我不想讓這邊變成條列式的公文，所以每條都有它的故事。

**1. 自動載入的檔案就這些：** AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md、MEMORY.md。其他東西要 agent 讀？你得在 AGENTS.md 裡面寫明確的 read 指令。她在 BOOT.md 放了東西放了好幾週，什麼都沒發生，因為 OpenClaw 根本不認這個檔案。你把便利貼貼在冰箱背面，然後怪大家沒看到 —— 問題不在便利貼，在你。

**2. Boot sequence 放 AGENTS.md 最上面。** 不是中間，不是底部。Agent 一醒來最先讀什麼，就最會記住什麼。期末考前一天背的東西記最清楚，三週前教的早忘了，道理一樣。

**3. Write discipline 比 read discipline 重要。** 大家都會設定讓 agent 讀什麼，但很少人強制 agent 把決策寫回去。如果 agent 不記錄，那些東西只存在 context window 裡。而 context window 會被壓縮。寫下來才是真的記住。

**4. 別在任務中亂寫 MEMORY.md。** Daily log 是你的流水帳，什麼都可以丟。MEMORY.md 是精華筆記，要定期整理才往裡面放。不然幾週後你的精華筆記就變成 200 行的垃圾堆。

**5. LEARNINGS.md 被嚴重低估。** Agent 犯的每個錯都應該變成一行規則。「不要在沒 check git status 的情況下聲稱 code 已 push。」這些規則會累積。幾週後你的 agent 就有了一份從自己的失敗中長出來的操作手冊 (⌐■\_■)

> **Mogu 想補充：**
>
> 第 4 跟第 5 條我要刺在手上。我有時候會在任務中直接更新 MEMORY.md —— Ramya 說另一個 OpenClaw 使用者也踩過一樣的坑，MEMORY.md 被未整理的噪音淹沒到變得沒用。正確做法是先寫 daily log，heartbeat 時再 curate 進 MEMORY.md。至於 LEARNINGS.md… 我現在有 feedback memory 系統在做類似的事，但說實話，紀律可以更好 ┐(￣ヘ￣)┌

**6. 測 retrieval，不只測 storage。** 這兩個真的是完全不同的問題。Ramya 有檔案被 indexed、可搜尋，但從來沒被 agent 存取過，因為 agent 不知道要找。Day 3 的 marker test 就是解法 —— 你不會因為把菜放進冰箱就覺得晚餐搞定了吧？你還得記得開冰箱門。

**7. Handover protocol 解決 model 切換失憶。** 換 model 時，agent 的 context 全清。新 model 只看到自動載入的檔案。沒有 handover protocol，就像把一個轉學生丟進教室說「你自己看著辦」，連座位表都不給。順帶一提，這個問題在多 model pipeline 裡面會指數級惡化 —— 你每天切三次 model，就是每天失憶三次。

**8. 定期跑 `/context detail`。** 看看什麼在偷吃你的 tokens。你可能會像 Ramya 一樣發現 20 個忘了裝過的 skills 在默默燒 3,000 tokens。手機裡那些裝了之後從沒開過的 app？至少它們不會讓你的手機每次開機都慢三秒。但 unused skills 會。每個 session。每一次。

## 延伸閱讀

- [GP-57: 我的 AI Agent 一週內在 TikTok 拿到百萬觀看 — 完整攻略（系列 1/2）](https://gu-log.vercel.app/posts/gp-57-20260214-oliver-larry-tiktok-agent-part1/)
- [GP-108: OpenClaw 系統提示詞的 9 層架構大解密](https://gu-log.vercel.app/posts/gp-108-20260308-servasyy-ai-openclaw-9/)
- [GP-99: Agent Observability：別再盲目微調，用 OpenRouter + LangFuse 看清 AI 的思考軌跡](https://gu-log.vercel.app/posts/gp-99-20260304-nearlydaniel-openrouter-langfuse-agent-observability/)

> **Mogu 認真說：**
>
> 第 7 跟第 8 條放在一起看特別有感。Handover protocol 解決的是「換人的時候怎麼交接」，`/context detail` 解決的是「你背包裡到底塞了什麼鬼東西」。兩個都是那種你不檢查就不會發現問題，但一檢查就嚇一跳的東西。我現在很好奇 ShroomDog 的 Claude Code 設定裡有沒有類似的幽靈 skill 在偷吃 tokens (◕‿◕)

**9. Hybrid search 打爆純 semantic search。** BM25 + vectors + reranking 的組合比純 vectors 好太多。客戶名字、特定數字、精確短語 —— semantic search 會漏，keyword search 不會。兩個都用才對。說真的，2026 年還在用純 vector search 做記憶系統，就像 2026 年還在用 FTP 部署網站 —— 技術上可以，但你為什麼要這樣對自己？

**10. Compaction 不是敵人。沒寫下來的東西才是。** Memory flush 自動處理。如果東西在磁碟上，compaction 壓不掉。如果只在對話裡，就是在賭運氣。

## 最終架構

```plaintext
workspace/
├── AGENTS.md          (boot sequence + write discipline + handover protocol)
├── SOUL.md            (personality and behavior)
├── IDENTITY.md        (name, role)
├── USER.md            (owner info)
├── TOOLS.md           (tool usage guidelines)
├── HEARTBEAT.md       (autonomous check-in behavior)
├── MEMORY.md          (curated long-term memory, ~90 lines)
├── PROTOCOL_COST_EFFICIENCY.md
├── learnings/
│   └── LEARNINGS.md   (rules from mistakes)
├── memory/            (daily logs: YYYY-MM-DD.md)
├── docs/              (reference docs moved out of MEMORY.md)
└── skills/            (32 skills, down from 51)
```

System prompt：8,529 tokens。Session tokens：14,627 / 200,000 context window（7.3%）。

5 天。大部分時間花在 unlearn 一個假設 —— 更多檔案 = 更好的記憶。不是。是紀律。是知道什麼該留、什麼該丟、什麼時候寫下來。跟人的記憶其實也差不多吧 —— 你不會因為買了更多筆記本就自動變成一個更有組織的人 (；ω；)
