記憶注入「兩條路分開」實作計畫
2026-09-22|EverOS|依據:Supermemory radar 報告 §4、§6b|Brian 已拍板方向 A,本頁請你拍板 3 個細節
進度更新(2026-09-22 清晨)
- 三個決策都拍板了:照建議(決策 1=C、決策 2=A、決策 3=A)。
- 「歷史重播」做完了:把過去 400 場對話的第一句話拿去重問一遍(全程免費、每次約 0.43 秒、零錯誤)。重播時會排除「那場對話自己後來才產生的記憶」,避免作弊。
- 重播抓到一個大坑:約三分之一的對話,第一句話是「你是接棒 agent,讀交棒檔…」。拿這種句子去翻,會撈到一疊「以前某次交棒的紀錄」——分數很高(0.78–0.86)卻沒用。比喻:你跟館員說「我來接班」,他搬來一疊「歷年交接班紀錄」。所以這類開場整個不翻,交棒檔本身已經帶著脈絡。
- 定案規則(Brian 看過 30 組抽查後同意):①少於 15 個字→不翻 ②接棒類開場→不翻 ③給機器跑的英文指令→不翻 ④其餘:只塞分數 ≥0.70、而且離第 1 名不超過 0.10 的,最多 3 段。寧可少塞,不要塞錯。
- 規則在 400 場的效果:接棒類 151 場不翻、機器指令 50 場不翻、太短 11 場不翻;剩下的有 26 場會塞(平均 1.7 段);162 場不塞(其中 117 場是那個專案還沒有記憶)。
- 現在:正在改程式(工單 2)→ 驗收員檢查 → 備份後部署。
先講一個剛查到的關鍵發現
現在每次開工,系統去翻記憶時,用的是一句寫死的英文:「project context: recent decisions, architecture…」。不管你今天要做什麼,它都問同一句話。
比喻:你每天走進圖書館,館員都只問書庫同一句「有沒有跟這個人有關的書?」——當然每天拿到差不多的那幾本,而且每本都「有點相關、又不太相關」。這就是分數全擠在 0.50–0.58 的原因。
小實測(今晚跑的,免費):改用「真實的任務句子」去問,同一個書庫馬上找得準:
| 拿什麼去問 | 第 1 名分數 | 第 1 名是不是要的 |
|---|---|---|
| 現在寫死的那句 | 0.579 | ✗(7 月的舊進度) |
| 「R2-B chunk 2 驗收…」 | 0.742 | ✓ 正中(第 2 名 0.716 也中) |
| 「incident_detect v6.1 round 2…」 | 0.652 | ✓ 正中 |
| 「磁碟成長警報誤報…」 | 0.640 | ✓ 前 5 名全中 |
| 今天的 Supermemory 開場句 | 0.650 | ✓ 記憶架構討論 |
| 「繼續昨天的工作」(太籠統) | 0.650 | △ 撈到一堆雜的 |
| 「幫我訂披薩」(故意亂問) | 0.582 | ✗ 應該什麼都不給 |
兩個結論:①方向對了:拿任務句去問,準度立刻上來。②但不能只看分數高低決定塞不塞:籠統句也能拿到 0.65,和真正命中的 0.652 一樣高。要看的是「第 1 名有沒有明顯甩開後段班」(命中時會甩開,亂問時大家擠在一起)。
1. 請你拍板 ⏳待拍板
決策 1:你說完第一句話後,系統要塞什麼給 Claude?⏳
前情:以後開工那一刻不再塞舊對話。等你打出第一句話,系統拿那句話去翻 EverOS。翻到之後,要用什麼形式交給 Claude?
- A. 只塞「真的命中」的,最多 3 段摘要;沒命中就什麼都不塞。判斷命中的方法:第 1 名分數夠高,而且明顯甩開後段班。像館員只在「確定找對書」時才把書遞給你。
- B. 只塞一張「書單」(5 行標題+日期),不塞內容。Claude 覺得有用再自己去查全文。省空間,但 Claude 要多跑一步,也可能懶得查。
- C. 命中的塞摘要(同 A)+最後附一行「想查更多可以用這個指令」。
決策 2:「夠不夠相關」的標準,要怎麼定出來?⏳
前情:上面的小實測只有 8 句話。用 8 句話定標準,像只考 8 題就決定及格線,容易定歪。上次的「先只記錄、不生效」觀察期(08-06 開始)拖了一個多月沒回收,也是前車之鑑。
- A. 先做「歷史重播」再定標準。你過去幾百場對話的「第一句話」都還在紀錄檔裡。寫個小工具把它們全部拿出來重問一遍,得到幾百組分數,我從裡面定標準、抽 30 組給你看對不對。全部在自己電腦上算,不花錢,約多半天工。
- B. 直接用小實測的標準上線(第 1 名 ≥ 0.62,且比第 8 名高 0.08 以上),之後邊用邊調。
決策 3:只在「第一句話」翻記憶,還是每一句都翻?⏳
前情:Supermemory 的做法是每一輪都讓 Claude 判斷要不要翻。但你這邊每翻一次,你送出的那句話就要多等 1–3 秒才到 Claude 手上。
- A. 第一版只翻第一句話。之後 Claude 需要時自己用指令查。簡單、不拖慢每一輪。
- B. 每一句都翻,但同一場對話塞過的不重複塞。更主動,但每輪都變慢一點,雜訊風險也高。
2. 我已選好、但你可以翻案 ✅已預設,可翻
- 開工時的舊對話區塊整個拿掉,包含「個人檔案」那一欄(它目前混了測試假資料,清乾淨前不再塞)。交棒檔、現場快照、時鐘、說明檔位全部照舊。✅
- 「過期資訊提醒」(例如 make-terminal 已封存)跟著搬家:它本來就是黏在被塞的舊對話上,以後跟著第一句話那批一起出現。✅
- 壞了不擋路:翻記憶失敗或超過 5 秒,就當沒這回事,你的話照常送出。✅
- 第一句話太短或太籠統(例如「繼續」「接棒」)→ 直接不翻。交棒場合本來就有交棒檔撐著。✅
- 只翻當前專案,不跨專案(和現在一樣)。✅
- 每次塞或不塞都記一筆(問了什麼、各名次分數、為什麼塞/不塞),寫進現有的分數紀錄檔,方便日後檢討。✅
- 對所有專案一起生效(這支程式本來就是全域的)。✅
3. 執行層 🔒已授權自行決定
- 工單 1|重播工具(派 coder):新檔
hooks/tools/replay_first_prompts.py。從各專案對話紀錄抽每場第一句話→呼叫現有搜尋→輸出一份分數表。只讀不寫。 - 我來定標準:看分數表定「命中規則」,抽 30 組給你過目。
- 工單 2|新程式+舊程式瘦身(派 coder):新檔
hooks/everos-first-prompt.py(過濾雜訊、去重複、過期標記這些功能,從舊程式搬成共用模組,不重寫);hooks/everos-session-start.py拿掉舊對話與個人檔案,只留「攝取心跳警告」。部署清單hooks/deploy-claude-hooks.sh加新檔。 - 驗收員檢查(派 reviewer)→ 過了才部署。
- 部署:先跑備份 → 部署腳本 → 在
~/.claude/settings.json的「送出訊息時」清單加一行(逾時設 8 秒,大於程式內的 5 秒)。
驗收條件:
- 測試全綠(現有 352 個+新增:命中→塞、沒命中→不塞、太短→不翻、第二句話→不翻、伺服器掛掉→照常放行、逾時層級正確)。
- 真機三連測:開新對話,開工畫面不再出現「EverOS 長期記憶」區塊;打一句具體任務→出現 ≤3 段且對題;打「繼續」→什麼都不出現。
- 紀錄檔每次多一行,看得出「為什麼塞/不塞」。
工單會附「偏離紀錄」條款:遇到計畫外狀況→選保守做法→寫下來→繼續做;只有碰到不可逆動作才停下來問。
4. 風險與回退
| 風險 | 怎麼防 |
|---|---|
| 你送出第一句話時變慢 | 上限 5 秒、壞了就放行;實測每次約 1–3 秒,只發生在第一句 |
| 標準定歪,塞錯或該塞沒塞 | 用幾百場歷史重播定標準(決策 2-A);每次都留紀錄可檢討 |
| 交棒場合第一句很籠統→什麼都沒塞 | 這是刻意的:交棒檔已經帶著脈絡 |
| 改到全域設定檔 | 動手前先跑 ~/Code/EverOS/safety/backup.sh pre-two-lanes |
回退(兩步,1 分鐘):①把 settings.json 新加的那一行刪掉。②部署腳本每次都會自動留舊版備份(.bak-predeploy-*),把舊的 everos-session-start.py 複製回去。資料庫完全不動,沒有任何不可逆動作。