AI 工具用久了,你會發現自己一直卡在兩件事中間。
把前因後果都餵給它,context 越大 token 燒越快,燒得你心痛,而且愈聊愈慢。
不餵,它就每天給你失憶,講好的規則、踩過的坑、答應要做的下一步,全部歸零,同一個坑拉著你再踩一次。
Claude、ChatGPT、Gemini,都一樣。這不是哪一家的問題,是現在這一代 AI 的本質。
大叔治不好 AI 的失憶,只好教它在失憶前寫小抄。
做著做著累積了五支小工具,最近整理成開源專案和大家分享,叫做 MyR2D2。
■ 失憶的代價,比你想的具體
「AI 沒有長期記憶」這句話講起來很抽象,實際遇到是這樣的:
你花了一個小時,跟它一起把某件事的來龍去脈釐清,訂好接下來要怎麼做。隔天開一個新對話,它什麼都不知道。你重講一遍,它給你一個跟昨天不太一樣的版本,然後把昨天已經確認過不能走的那條路,又推薦一次。
更麻煩的是第二種:你為了避免上面那件事,索性把所有背景都貼給它。結果每一次對話都越來越長、越來越慢,配額燒得飛快。而且真正重要的那三句話,被埋在兩千字的背景裡,它反而看不到。
所以問題不是「要不要給它記憶」,是在燒 token 和失憶之間,有沒有第三條路。
我的解法是:不求 AI 記得,只求它在忘記之前,把該留的東西寫到硬碟上。
■ 五支 skills,各自解決什麼
- save-all:關掉之前,把東西寫進硬碟
收工、關機、或準備重開之前跑一次。它會盤點這個對話裡「只活在對話裡、還沒寫進檔案」的東西,全部外部化,然後回報「安全可重開」或「還有 X 沒同步」。
關鍵在第二步:寫完要回讀驗證。AI 說「存好了」不等於真的存好了,寫入是會靜默失敗的。這條規則是踩過坑才寫進去的,後面會講。
- handoff:把一件事連同脈絡交出去
當一件事要換另一個對話(或另一台機器、另一個專案)接手,跑 handoff 產出一張交接卡:做到哪、下一步是什麼、相關連結、有什麼坑。
交接卡的原則是「假設讀者對前情一無所知」。不是寫給自己看的備忘,是寫給一個完全不認識這件事的人看的。
- pickup:新對話開場,讀卡接手
handoff 的搭檔。新的對話一開場就去讀有沒有交接給自己的卡,有就接手續做。
這兩支是純 Markdown 檔案、零外部依賴。不需要資料庫、不需要外掛、不需要任何服務在跑。這是刻意的設計,後面會講為什麼。
- token-optimizer:派工前先管好預算
當你讓 AI 開好幾個分身同時幫你做事,這支會在派工之前先過一輪節流自檢:這個任務該用哪一檔模型、範圍要不要收斂、會不會產生「改了又審、審了又改」的返工迴圈。
真正燒配額的通常不是單價,是返工循環,還有把一大堆原始資料灌回主控端。
用訂閱制的人特別有感:配額燒完不是多付錢的問題,是所有對話一起停擺,比燒錢還痛。
這支改寫自 kieiken/ultracode-token-optimization(MIT),我把它泛化成全 Claude 環境適用的版本。
- flight-to-calendar:同場加映
跟前面四支不太一樣,這支純粹是大叔自己需要:把訂好的機票行程一鍵丟進 Google 日曆,一段航班一個事件,跨時區自動算好。傍晚抵達或清晨起飛的航段,還會提醒你選夕陽那一側的座位。
常飛的人應該懂為什麼要有這個。
不然移動日老是要重新喬開會時間,
不約事情卡著,約了又搞得自己在機場裡奔跑…
(大叔真的幹過好多次這種事情)
■ 兩個設計決策
驗證優先於宣告
整套裡最重要的一條規則:寫入要回讀驗證,完成要證據,不信字面成功訊息。
這條不是理論,是被咬過才寫的。AI 明明回報「檔案已更新」,實際上磁碟上什麼都沒變。如果沒有回讀驗證這一步,你會帶著一個「已經存好了」的錯覺去關掉對話,然後那些東西就真的消失了。
所以 save-all 的最後一步永遠是:讀回來、比對、確認真的寫進去了,才敢說安全。
零依賴的最小公倍數
交接卡是純 Markdown 檔案,放在專案資料夾裡。沒有資料庫、沒有 API、沒有任何服務需要在背景跑。
會這樣設計,是因為工具要能在最糟的情況下運作。換一台電腦、網路斷掉、某個服務掛了,一張 Markdown 檔案還是打得開。進階的接法可以有,但預設一定要是誰都跑得起來的那一版。
■ 踩坑故事
AI 說「存好了」不等於真的存好了
前面提過,這裡補完整。
有一次收工前跑落地流程,工具一路回報成功,我就關掉了。隔天要用的時候發現檔案是空的,中間那一大段結論全部消失。
從那次之後,「回讀驗證」變成整套裡的硬規則,不是可選步驟。工具說成功,不算數;讀回來看到內容,才算數。
這也是為什麼 MyR2D2 的每一支 skill 都有一個「怎麼確認真的做到了」的段落。
■ 為什麼叫 MyR2D2
莉亞公主把求救訊息交給 R2-D2,它才能千里迢迢找到歐比王,原封不動播出來。
任務靠人傳承,訊息靠它不失真。
對應到這套工具:
- handoff 是莉亞把訊息存進去的那一刻
- pickup 是 R2 找到歐比王、把訊息播出來
- save-all 是把逃生艙裡的圖紙保住,讓後面的人接得上
命名的時候只是覺得有趣,寫完 README 才發現梗對得意外地貼切。
■ 最後一個彩蛋
「寫這篇文章」這個任務本身,就是用專案裡的 handoff 交接卡,從另一個對話交接過來的。
我在整理 repo 的那個對話裡把素材寫成一張卡,換到寫文章的對話開場 pickup 接手,然後你現在看到的這篇就出來了。
最好的產品驗證,是自己已經離不開它。
■ 怎麼裝
MIT 授權,中英文件都有。
Claude Code CLI(推薦),兩行指令:
/plugin marketplace add tingyulu/MyR2D2
/plugin install myr2d2@myr2d2
兩行跑完,五支 skill 全部就位。也可以手動把 skills/ 底下的資料夾複製到 ~/.claude/skills/。
另外 repo 裡放了 adapters/openai,給要移植到 ChatGPT 或 Codex 的人用。畢竟失憶不是 Claude 一家的專利。
專案在這:https://github.com/tingyulu/MyR2D2
痛點自己解,答案不藏私。
有裝來玩的,回來留言說一下順不順,或是有哪支根本沒用到、哪個地方卡住。這種回饋比 star 有用得多。
留言
張貼留言