精華筆記

· @aihub.tw

AI Agent 入門

記憶與脈絡:為什麼 Agent 會忘記

記憶與脈絡:為什麼 Agent 會忘記

第 4 課結束時,你的多代理實戰跑得很順——orchestrator 派出 subagent、平行完成任務、匯回報告。然後你關掉視窗。

隔天早上再開 Claude Code,輸入:「繼續昨天的競品分析。」

它說:「請問你在說什麼任務?」

這一刻就是本課的起點。對 agent 而言,每一個新的對話視窗都是一塊全新的白板——昨天研究了什麼、你說過要什麼風格、你的專案叫什麼名字,全部歸零。這不是 Claude 特別健忘,也不是程式 bug:AI 語言模型是**無狀態(stateless)**設計,它沒有跨 session 的長期記憶。

你有三個選擇:每次開對話都花 5 分鐘重新自我介紹;放棄讓 agent 長期協作;或者——學會這一課教的記憶機制。

這堂課適合誰 適合:跑過 Claude Code 或其他 agent 基本操作,覺得「每次都要重新說一遍好煩」的人(本課程屬進階應用專區)。需要基礎:用過 Claude Code 對話至少幾次。前置課:第 3 課《現成 Agent 體驗:Claude Code 當你的代理》。

這堂學什麼

  • Context window 是什麼,為什麼決定了 agent 能「記多少」
  • 記憶的四層架構:從工作記憶到持久記憶,哪些會消失、哪些不會
  • CLAUDE.md 的設計原理與實際寫法——讓 agent 每次開啟都記住你的規則
  • Claude Code auto memory:agent 自動幫自己記筆記的機制
  • 長任務接力策略:跑超過 context 上限的任務怎麼辦
  • RAG 是什麼:知識庫掛載的白話預告(第 7 課綜合實戰會用到)

觀念一:Context Window 就是 AI 的工作桌

你工作時,桌面放得下的東西是有限的。一本書、幾張便利貼、一疊報告——當桌面滿了,新的文件進來,你就得把舊的收起來。

AI 的「桌面」叫做 context window。它的單位是 token(中文一個字約 1.5 個 token),代表這次對話裡 AI 能同時「看到」多少內容。各家主力模型的上限(2026 年 7 月):

模型 Context Window
Claude Sonnet 4.5 / Opus 4.5 200K tokens
Claude Opus 4.8(旗艦) 1M tokens
GPT-4o 128K tokens

200K tokens 大約等於一本 250 頁的中文書——但 agent 跑長任務時會很快把它填滿:系統提示、CLAUDE.md 的內容、你說的每一句話、每一個工具呼叫結果,全部都在這個桌面上佔空間。

Context window 滿了,agent 要嘛停下來等你決定,要嘛把舊的對話「摘要壓縮」來騰出空間(Claude Code 的 auto compact)——但被壓縮的細節就消失了。更根本的問題:你關掉視窗、結束 session,整個桌面清空。下次開新對話,桌面是全新的。這就是「agent 失憶」的技術根因——不是它不想記,是設計上本就沒有跨 session 的記憶。

context window 工作桌比喻:你的工作桌就是 AI 的 context window,滿了就得清空

觀念二:記憶的四層,哪些會消失

認識 context window 之後,接下來要理解:AI 的「記憶」其實有四層,存活週期完全不同。

層次 叫什麼 存活週期 典型例子
第一層 工作記憶(in-context) 對話期間 這次你說的所有話
第二層 壓縮摘要(compact 後) 同一 session 內 auto compact 保留的重點
第三層 持久指令(CLAUDE.md / auto memory) 每次開啟都載入 你寫的規則、agent 自動記的偏好
第四層 外部知識庫(RAG / 檔案) 永久,按需取用 產品文件、合約、客服記錄

前兩層在你關掉視窗後消失。第三、第四層才是真正能跨 session 的記憶。

這堂課的核心是第三層(CLAUDE.md + auto memory);第四層(RAG)本課只做白話預告。

記憶四層架構圖:工作記憶與壓縮摘要關掉即消失,持久指令與外部知識庫跨 session 存活

觀念三:CLAUDE.md——讓 Agent 每次都記住你的規則

CLAUDE.md 是一個純文字的 Markdown 檔案,放在指定位置。Claude Code 每次啟動時會自動讀取它,等於你先替自己說好「嗨,這個專案的規矩是這樣的」。

CLAUDE.md 有三個層級:

  • 全局(~/.claude/CLAUDE.md):你個人的偏好,不管在哪個專案都套用。例如「我喜歡繁體中文回覆、程式碼用 TypeScript、套件管理用 pnpm」
  • 專案(專案根目錄/CLAUDE.md):這個專案特有的規矩。例如「測試框架是 Vitest、API 文件在 /docs、不要動 layout.tsx」——這份通常 commit 進 repo,團隊共用
  • 本機個人(專案根目錄/CLAUDE.local.md,加進 .gitignore):你個人習慣,不想同步給隊友。例如「我的本機 debug port 是 3001」

三個層級同時生效,越具體的越優先。

有效的 CLAUDE.md 寫什麼?

根據社群整理(2026 最佳實踐),五個核心區塊:建置與測試指令(Claude 不知道你用什麼指令跑、測試、lint,不說它就猜,猜錯就浪費三個回合)、架構說明(主要目錄用途與重要檔案位置)、程式風格規定(TypeScript 嚴格模式、不用 any 之類)、禁止事項(哪些檔案不能動、提交前必跑什麼)、個人偏好(語言、說明習慣、改動前要先告知計畫)。

一個重要原則:CLAUDE.md 的內容要精,不要多。 目標控制在 200 行以內,超過之後遵守率明顯下降——每一行都應該是「沒有這行,Claude 就可能犯錯」才值得留著。

CLAUDE.md 三層結構與五個內容區塊:全局、專案、本機個人三層疊加,越具體越優先

觀念四:Auto Memory——Agent 幫自己記筆記

除了你手動寫的 CLAUDE.md,Claude Code 還有一個更動態的機制:auto memory

邏輯是這樣:你跟 Claude Code 工作時,如果你糾正了它的行為、或確認了某個做法有效,Claude 會判斷「這個資訊對未來的對話有用嗎?」——如果有用,它會自動把筆記寫進 ~/.claude/memory/ 資料夾。下次開新對話,它自動讀取這份索引,等於「記住了」你上次說的事。

Auto memory 分四類:user(你的角色與偏好)、feedback(你給過的糾正)、project(架構決策與現狀)、reference(重要資源位置)。

版本要求:auto memory 需要 Claude Code v2.1.59 以上,預設開啟。 輸入 /memory 查看已記住的內容;想手動寫入,直接說「請把這件事存進你的記憶」。

觀念五:長任務的接力策略

Claude Code 在 context 接近上限(大約 95%)時會自動 compact——保留任務目標,但中途的具體限制條件可能被摘要掉。解法是主動讓進度落地到檔案:

每完成一個主要步驟,把「目前所有確認的決定和限制條件」追加到 progress.md。
新步驟開始前先讀 progress.md 確認現狀。不要依賴對話記憶。

就算 context 被壓縮或下次開新 session 繼續,agent 都能從檔案重建脈絡——磁碟上的資料不隨對話消失。

另一個技巧是手動 compact:跑完一個大段落之後輸入 /compact,並在指令前補一句「compact 時必須保留:已確認的決定、已完成的步驟、技術限制條件」,確保重要資訊留在摘要裡。

長任務接力策略示意:每步結論寫入 progress.md,跨越 compact 斷點在新 session 重建脈絡

觀念六:RAG 是什麼(白話預告)

CLAUDE.md 和 auto memory 解決了「規則和偏好」的持久記憶。但如果你需要讓 agent 查詢一個很大的知識庫——公司所有的產品文件、一份 500 頁合約、三年的客服記錄——這些東西根本塞不進 context window。

這時候用的方法叫 RAG(Retrieval-Augmented Generation,檢索增強生成)

白話解釋:agent 有一個外部的「圖書館」。你問問題時,agent 先去圖書館查相關段落(檢索),把查到的幾頁放進 context window 用來回答,而不是把整個圖書館都塞進去——知識庫可以超大,context 不會爆。

RAG 的完整設定涉及向量資料庫、embedding 等技術細節——這堂課你只需要記住:RAG 是第四層記憶的實現方式,解決「大量文件無法放進 context」的問題。第 7 課綜合實戰會用到。

RAG 白話概念圖:agent 先去外部知識庫檢索,只把相關幾頁放進 context window 回答

手把手實戰:設定讓 Agent 記住你偏好的記憶檔

這個實戰做兩件事:建一份個人全局 CLAUDE.md,以及測試 auto memory 怎麼觸發。

Step 1:建立你的全局個人 CLAUDE.md

開啟終端機,建立全局記憶檔:

mkdir -p ~/.claude

用任何文字編輯器建立並打開 ~/.claude/CLAUDE.md。貼入以下範本,根據你的習慣修改:

# 我的個人偏好

## 溝通風格
- 請用繁體中文回覆
- 解釋技術概念時,先說「為什麼」再說「怎麼做」
- 給選項時,說清楚每個選項的取捨,不只是條列
- 修改任何程式碼或檔案前,先告訴我你打算做什麼,確認後再動手

## 技術偏好
- 程式語言:TypeScript(不用 `any`,型別要明確)
- 套件管理:pnpm 優先,不用 npm
- 格式化工具:Prettier

## 工作流程
- 有不確定的地方先問我,不要假設
- 一次改動不要超過三個檔案,除非我明確說全部一起改
- 完成後告訴我「可以測試了」,不要幫我直接執行

存檔。從這一刻起,只要你開 Claude Code 的任何對話,它都會先讀這份檔案。

Step 2:建立專案 CLAUDE.md

切換到你的專案資料夾,建一份專案層級的 CLAUDE.md。重點是「這個專案特有的事情」,不要重複全局已經寫的個人偏好:

# 用你自己的專案路徑,這裡以範例說明
touch ~/my-project/CLAUDE.md
# 專案:個人品牌網站

## 技術棧
- 框架:Next.js 15,App Router
- 樣式:Tailwind CSS v4

## 指令
- 開發:`pnpm dev`(port 3000)
- 建置驗證:`pnpm build`
- 格式:`pnpm lint`(提交前必跑)

## 目錄結構
- `app/`:頁面(App Router)
- `components/`:可重用元件
- `lib/`:工具函式

## 禁止事項
- **不要動** `app/layout.tsx` 的 `<head>` 區塊(SEO 已手動調好)
- API 金鑰一律放 `.env.local`,不進 git

這份 CLAUDE.md commit 進 repo 後,隊友的 Claude Code 也會自動讀取。

Step 3:讓 Claude Code 確認已讀取記憶

在 Claude Code 對話框輸入:

請告訴我你目前載入了哪些記憶檔案,以及你記住了哪些關於我的偏好和這個專案的規則。

它應該能說出你在 CLAUDE.md 裡寫的設定:語言偏好、指令、禁止事項等。如果它回答說沒有特別的偏好、或不知道這個專案的框架——代表 CLAUDE.md 沒有正確讀取。確認:路徑有沒有打錯、檔案名稱是不是 CLAUDE.md(大小寫都要對)、有沒有重新啟動 Claude Code。

Step 4:觸發 auto memory,讓 Claude 自己記筆記

在正常工作的過程中,糾正 Claude 的行為就能觸發 auto memory。試試這樣:

你剛才的解釋順序弄反了——我說過我希望先說「為什麼」再說「怎麼做」。
以後遇到解釋技術概念的時候,請記住這個順序。把這個習慣存進你的記憶。

Claude Code 感應到這是值得記住的反饋時,會在背景把筆記寫進 ~/.claude/memory/。輸入 /memory 查看目前已儲存的內容。

Step 5:驗收——關掉視窗、重新開啟

完全關閉 Claude Code。重新開啟,建立全新對話。輸入:

你記得我喜歡用什麼套件管理工具?這個專案的建置指令是什麼?修改程式碼前你要先做什麼?

如果它能正確回答「pnpm」、「pnpm build」、「先告訴你計畫再動手」,你的記憶機制就設定成功了。

這是這堂課最重要的一刻:你讓 agent 第一次擁有了跨 session 的記憶,之後開新對話不再需要重新自我介紹。

常見坑

坑 1:CLAUDE.md 愈長,agent 遵守率愈低

症狀:你寫了一份 400 行的 CLAUDE.md,列滿各種規定,但 Claude 照樣不遵守——有時還是用了 npm、有時忘了先說計畫、有時又用英文回覆。

原因:CLAUDE.md 的內容都佔用 context space。檔案太長,Claude 讀完就記不住全部了,後半段規定幾乎形同擺設。

解法:把 CLAUDE.md 砍到 50 行以內,只留「沒有這條,Claude 就會犯錯」的規定。其餘靠 auto memory 在工作中累積。

坑 2:個人偏好和專案規定混在同一份 CLAUDE.md

症狀:隊友 clone 你的 repo,Claude Code 讀到你的個人偏好(「繁體中文回覆」「不要用 npm」),但隊友習慣英文操作、平時用 yarn——雙方互相干擾。

解法:嚴格分三份——~/.claude/CLAUDE.md 個人偏好(不進 repo)、CLAUDE.md 專案共用規定(commit 進 repo)、CLAUDE.local.md 個人且不給隊友看的(加進 .gitignore)。三份分開,個人習慣不影響隊友。

坑 3:Context compact 把重要決策摘要掉了

症狀:任務跑到一半,Claude 突然問你「你之前說的 API endpoint 要用哪種格式?」——但你兩小時前就說清楚了。對話裡看到「(對話已自動壓縮)」的提示,代表 auto compact 啟動,你說過的具體限制條件在壓縮中被捨棄。

解法:長任務一開始就加這段指令:

每個步驟完成後,把「目前所有確認的決定和限制條件」追加到 decisions.md。
新步驟開始前先讀 decisions.md。不要依賴對話記憶來記住重要決策。

一旦關鍵決策存進檔案,compact 再猛也不會把它弄丟。

坑 4:Auto memory 沒有自動觸發,以為功能壞了

症狀:你糾正了 Claude 好幾次,跑 /memory 查看卻空空如也。

原因:auto memory 觸發有條件——反饋要「清楚到讓 Claude 判斷這是可重用的偏好」才會觸發。只說「這樣不對」,Claude 不知道要記什麼;說「以後遇到 X,用 Y 處理」,它才會記。

解法:把糾正說完整,加上「以後」這個關鍵詞,再加「請把這個習慣記下來」:

以後給我技術選項時,請同時列出每個選項的缺點,不只是優點。請把這個習慣記下來。

說清楚「以後遇到 X 情況,用 Y 方式處理」,auto memory 才有東西可寫。

作業

  1. 建立你的全局 CLAUDE.md:照本課的範本,在 ~/.claude/CLAUDE.md 建一份。至少包含:回覆語言偏好、一個技術偏好、一個工作流程習慣。建完後重啟 Claude Code,問它「你記得我有什麼偏好?」驗證能說出你寫的設定。
  2. 建立一份專案 CLAUDE.md:為你目前在用的任何專案建一份。只寫:指令、目錄結構、至少一條禁止事項。
  3. 觸發並查看 auto memory:在工作中糾正 Claude 的某個行為,說「以後請記得 [某某事],請把這個存進你的記憶」,輸入 /memory 看有沒有記進去,關掉視窗重開再驗證。
  4. 選做:接力策略測試:選一個多步驟任務,開頭加入「每步完成後把結論追加到 progress.md」。跑完後打開 progress.md 看看。

下一課預告

你的 agent 現在有記憶了。但「有記憶」帶來一個新問題:你授權它的工具,它也記得怎麼用。讀你的信箱、動你的資料夾、呼叫你的 API——如果 agent 方向跑偏或被惡意誘導,它可能用這些工具做出你不想要的事。

第 6 課《授權與安全:別讓 Agent 闖禍》,我們把這個面向攤開:哪些操作需要你明確授權、怎麼設定最小權限原則、agent 遇到不確定情況時如何讓它停下來問你——讓 agent 能幹,同時也不自己闖禍。

#AI Agent#記憶#CLAUDE.md#context window#RAG

← 回所有文章