AI Agent 的記憶與檔案系統:memory、檔案記錄、漸進式揭露 — 自架 AI Agent 實戰(三)
你有沒有遇過這種情形:昨天才跟 ChatGPT 聊得好好的、它好像很懂你的狀況,今天開一個新對話,它整個人就「不認得你」了?
我那隻股票 agent 一開始也是這樣。我昨天明明跟它討論過某檔股票的觀察重點,隔天它自己醒來盯盤,卻像第一天上班一樣什麼都不記得——昨天算過的指標、判斷的理由,通通歸零,每天都在重新認識同一檔股票。
這不是它笨,是因為 AI 模型天生就「沒有記憶」。今天這篇,就要來解這個問題:怎麼讓一隻 agent 真的「記得事情」、而且越記越聰明。
在 自架 AI Agent 實戰系列 裡,我把一隻自主 agent 拆成四層:Context(它知道什麼)→ 能力(它能做什麼)→ 溝通(它怎麼跟你來往)→ 自動化(它什麼時候自己動)。上一篇 Agent Instruction 講了 Context 的第一塊「規則」,這篇要接著講 Context 的第二塊、也是讓 agent「越用越懂你」的關鍵——記憶(memory)。
這篇會聊這些:
- 為什麼 AI 會「失憶」:context window 根本不是記憶
- 工作記憶 vs 長期記憶:什麼該記、什麼不該記
- 解法:用檔案系統當 agent 的記憶(把知識寫成檔案,它自己讀寫)
- 招牌觀念漸進式揭露:用「索引檔 → 細節檔」避免一次塞爆它的腦袋
- 我那隻股票 agent 的記憶資料夾長怎樣(真的貼給你看)
關於作者:我是工程師阿穆,寫程式十多年,這幾年在做 AI Agent 與電商系統開發。文中的記憶結構都是我自己電腦上 agent 真的在用的,本文是第一手實作紀錄。 利益揭露:本文沒有業配、沒有聯盟連結。提到的工具都是我自己用過或研究過的。
為什麼 AI 會「失憶」:context window 不是記憶
先講清楚一個很多人搞混的地方。
你跟 AI 對話的時候,它好像「記得」你前面講過的話,對吧?但那其實不是記憶,那叫 context window(上下文視窗)——它是模型這一次對話能「同時看到」的文字範圍。
我喜歡這樣比喻:
context window 就像你考試時桌上能攤開的小抄,一張紙就那麼大。這次對話結束、紙一收走,下次考試是一張全新的空白紙。而真正的「記憶」,是你放在書包裡那本寫滿筆記的筆記本——隨時可以翻、不會因為考完試就消失。
模型本身只有「小抄」,沒有「筆記本」。所以每開一個新對話,它就是一張白紙重新開始。這就是為什麼你的 agent 會失憶:它不是忘了,是它根本沒有一個地方能「記住」。
兩者擺一起就很清楚:
| context window(上下文視窗) | 記憶(memory) | |
|---|---|---|
| 比喻 | 考試小抄 | 筆記本 |
| 存在多久 | 這次對話結束就清空 | 跨對話一直保留 |
| 容量 | 有限,塞爆反而變笨 | 幾乎無上限 |
| 模型天生有嗎 | 有 | 沒有,要自己幫它補 |
而且小抄還有大小限制。你把越多東西塞進 context window,它反而越容易抓不到重點、品質變差——這個現象有人叫它 context rot(脈絡腐化)。所以「把所有東西一次塞給它」不但做不到永久記憶,還會幫倒忙。
工作記憶 vs 長期記憶:什麼該記、什麼不該記
那「記憶」這件事,其實要拆成兩種來看,就跟人腦一樣:
- 工作記憶(短期):這一次任務當下需要的東西。例如「現在正在分析台積電,剛抓到的即時報價」。任務做完,它就沒用了,不需要留。
- 長期記憶:跨越多次對話、值得一直留著的東西。例如「我的持股清單」「我設定的停利停損價」「過去每天的收盤判斷」。
搞懂這個分層,你就知道什麼該寫進記憶、什麼不該:
會變、用完即丟的 → 工作記憶,不用存;穩定、之後還會用到的 → 長期記憶,要存起來。
這很重要,因為新手最常犯的錯就是「什麼都想記」,結果記憶檔案塞滿一堆過期的即時報價、一次性的閒聊,反而把真正重要的東西淹沒。記憶不是越多越好,是越乾淨越好。
解法:用檔案系統當 agent 的記憶
那長期記憶要放哪?最樸素、也最強大的答案是——檔案。
概念簡單到你會懷疑:把該記住的東西,寫成一個個檔案存在電腦上,讓 agent 需要的時候自己去讀、有新東西自己去寫。 那個資料夾,就變成它的「筆記本」、它的長期記憶。
以我的股票 agent 為例,它每天做完事會把這些寫進檔案:
- 今天選出的觀察清單 → 存成
morning_watchlist.txt - 每檔算好的指標、判斷理由 → 存進
data/底下對應的檔案 - 抓回來的歷史股價、三大法人籌碼 → 存進它自己的快取檔
久而久之,這個 data/ 資料夾就累積成一個它專屬的資料庫。隔天它醒來盯盤,先去讀這些檔案,就「想起來」昨天的脈絡了——不用我重講一遍。
這招的好處是它樸素到不可思議:不用架資料庫、不用學什麼花俏的記憶框架,就是檔案而已。你看得到、改得動、備份方便,agent 也讀得懂。我在 用 LLM 維護我的個人知識庫 那篇講的,本質上就是同一套思路——讓 AI 把知識寫成一份份檔案,自己當管理員。
這就是自架 agent 很迷人的地方:最強的記憶方案,不是什麼高深的向量資料庫,而是你早就會用的「檔案」。
招牌觀念:漸進式揭露(progressive disclosure)
好,現在有個新問題。
當記憶檔案越來越多——假設累積了上百檔股票、每檔都有一份筆記——你總不能每次都把全部檔案塞進 context window 吧?前面說過,小抄就那麼大,塞爆了反而變笨。
那該怎麼辦呢?答案是這篇我最想跟你分享的觀念:漸進式揭露(progressive disclosure)。
聽起來很學術,但概念你超熟悉,就是圖書館的目錄卡:
你進圖書館找書,不會把整座書庫的書都搬到桌上。你先看目錄(一個小小的索引),找到你要那本書在哪一櫃,再走過去把那一本抽出來。
漸進式揭露就是這招用在 agent 記憶上:
- 先給 agent 一個小小的索引檔——只列「我有哪些記憶、各自放在哪個檔案、講什麼」。
- agent 看索引,判斷這次任務需要哪幾份。
- 它才去讀那幾份細節檔,而不是一次全載。
這樣 context window 永遠只裝「現在真正需要的那幾本」,既不會塞爆、又能存無限多記憶。索引檔是那張目錄卡,細節檔是書架上的書。
有趣的是,這不是我發明的偏方——連 Claude Code 自己的記憶系統就是這樣設計的:一個 MEMORY.md 當索引,底下連到一個個獨立的記憶檔,要用到哪則才去讀哪則。微軟的 Agent Skills 文件也把它列為核心 pattern。下一篇要講的 Skills 其實也是同一個精神——一份 skill 描述很短,需要時才展開細節。漸進式揭露可以說是整個 agent 設計的底層心法之一。
我那隻股票 agent 的記憶長怎樣
講了這麼多,直接攤開我自己的東西最有感。我那隻 台股 AI Agent 的記憶資料夾,骨架大概長這樣:
data/
INDEX.md ← 索引檔:列出底下有哪些記憶、各記什麼
watchlist.md ← 我的持股 + 觀察清單(長期記憶)
rules.md ← 我設定的停利停損價、訊號門檻(長期記憶)
history/
2330-台積電.md ← 單檔股票的歷次判斷紀錄
2454-聯發科.md
...
cache/ ← 抓回來的股價、籌碼快取(半長期)
關鍵就在那個 INDEX.md。它很短,內容大概像這樣:
# 記憶索引
- watchlist.md:目前持股與觀察名單
- rules.md:各檔的停利/停損價與訊號門檻
- history/{代號}.md:單檔股票的歷次判斷與理由
- cache/:股價與籌碼快取,需要歷史資料時再讀
agent 每次醒來,先讀這份 INDEX.md,知道「喔今天要盯台積電,那我去讀 history/2330-台積電.md 跟 rules.md 就好」,其他幾百個檔案碰都不用碰。這就是漸進式揭露的實際樣子——它腦袋裡永遠只裝今天用得到的那幾份,乾淨、省力、又不失憶。
而且你回頭看會發現:這份記憶設計,其實是被上一篇的 instruction 指揮的——我在指令裡寫了「判斷理由寫進 history/ 對應檔案」「每次只讀需要的檔案」,記憶才會這樣有條理地長出來。instruction 是規則,memory 是它照著規則累積下來的成果,兩塊合起來就是完整的 Context。
常見的三個踩雷
我自己踩過、也最常看到的,就這三個:
1. 什麼都想記,結果記憶變垃圾場。 前面講過,工作記憶(即時報價、一次性閒聊)不要存。只存「之後還會用到的」。記憶要定期清,不然越記越鈍。
2. 沒有索引,一次全塞。 如果你把所有記憶檔案每次都整包丟給 agent,檔案一多就會塞爆 context、品質直接崩。一定要有索引檔,讓它先看目錄再決定讀哪幾本。
3. 記憶結構太亂,agent 自己也找不到。 檔案命名要直覺(像 2330-台積電.md 一看就懂)、分類要清楚。你都看得吃力的結構,agent 也會讀得辛苦。好的記憶結構,是人跟 agent 都能一眼看懂的。
你可以怎麼開始
不用一開始就設計什麼完美的記憶系統,從最小的開始就好:
- 先開一個資料夾,放這隻 agent 的記憶。
- 挑一兩件「它每次都該記得的事」寫成檔案——像你的偏好、固定的清單、規則。
- 在 instruction 裡告訴它:「重要的結論寫進這個資料夾、下次先讀它」。
- 等檔案多了,再加一個
INDEX.md索引檔,做漸進式揭露。
關鍵心法:記憶不是一次設計好的,是邊用邊長出來的。 先讓 agent 養成「把重要的事寫下來、下次先翻筆記」的習慣,它就會一天比一天更懂你。而且你完全可以直接叫 AI 幫你設計這個記憶結構——跟它說「幫我規劃一個用檔案當記憶的資料夾結構,要有索引檔」,它就會給你一份草稿。
常見問題
AI Agent 的記憶跟 context window 有什麼不同?
context window 是它「這一次」能看到的文字範圍,對話結束就清空;記憶是它「跨對話」能一直保留的東西。 context window 像考試小抄(用完收走),記憶像筆記本(永遠在)。模型本身只有 context window,所以要靠「把知識寫成檔案」幫它補上長期記憶。
為什麼要用檔案當記憶,不用資料庫?
對自架的個人 agent 來說,檔案最樸素也最夠用:不用架設、看得到、改得動、好備份,agent 也讀得懂。資料庫適合資料量超大、要複雜查詢的場景;但多數個人 agent 用資料夾 + Markdown 檔就綽綽有餘,複雜度低很多。
什麼是漸進式揭露(progressive disclosure)?
就是「先看索引、需要時才讀細節」,避免把所有記憶一次塞進 context window。 做法是放一個簡短的索引檔列出「有哪些記憶、各在哪」,agent 先讀索引、判斷這次需要哪幾份,再去讀那幾份。像進圖書館先查目錄、再抽特定那本書,而不是把整座書庫搬上桌。
記憶檔案會不會越來越大、把 context 塞爆?
只要做了漸進式揭露就不會。重點不是「記憶總量」,而是「每次載入量」。 記憶檔案可以有上百個、無限大,但每次 agent 只透過索引讀「當下需要的那幾份」,載入 context 的量永遠是可控的。記得定期清掉過期的工作記憶,保持乾淨。
一定要會寫程式才能幫 agent 做記憶嗎?
不用。記憶本質上就是一個資料夾 + 幾個 Markdown 檔,你會建檔案、會寫筆記就會。甚至可以直接叫 AI 幫你規劃資料夾結構、幫你寫索引檔。你要做的是想清楚「哪些事值得長期記得」,剩下的結構它可以幫你搭。
結語
繞了一圈,讓 agent「有記憶」這件事,其實沒有想像中神祕:模型沒有記憶,那我們就用檔案幫它補一個。 把重要的事寫成檔案當長期記憶、用索引檔做漸進式揭露讓它每次只讀需要的——這兩招一搭,你的 agent 就從「每天失憶的金魚」變成「越用越懂你的老員工」。
這也是 自架 AI Agent 實戰系列 Context 這一層的完整樣貌:instruction(規則) + memory(記憶)。規則告訴它怎麼做事,記憶讓它記得做過什麼——兩塊到齊,這隻 agent 才算真的「知道自己在幹嘛」。
如果你想養一隻會記憶、越用越聰明的 agent,但卡在「記憶結構不知道怎麼設計」或「想做的東西有點複雜」——這正是我在做的事。我有提供 AI Agent 的諮詢顧問與代建服務,幫你看記憶與架構怎麼設計,或直接幫你做出來。
這是 自架 AI Agent 實戰系列 的第三篇,想看完整的四層觀念與其他篇,可以從總論進去。
延伸閱讀:
- 自架 AI Agent 實戰(一):在自己電腦養一隻會自己開工的 AI 員工 — 系列總論,四層觀念地圖
- Agent Instruction:怎麼寫 AI Agent 的「憲法」 — 系列 #2,記憶要怎麼長,是 instruction 指揮的
- 你的 Notion 第幾次爛掉了?我用 LLM 維護我的個人知識庫 — 用檔案當記憶的完整實戰
- 用 Claude Code 打造台股 AI Agent:盤中盯盤、訊號到就發 Telegram — 本篇記憶資料夾的完整案例
喜歡這篇文章嗎?
📧 訂閱 Newsletter — 新文章直接寄到你信箱 🎬 追蹤我的 YouTube — 看 AI / 工具實作影片 💬 加我的 LINE — 聊聊你想做的 agent,或有問題隨時問我 🧵 追蹤 Threads — 平常的工程隨筆
掰掰~👋