你是不是也遇過 Agent 一直犯同樣的錯!?提醒了一次又一次,它還是照樣亂改。這篇帶你搞懂 Context Engineering,看完馬上用得到!
Agent 又把同一個欄位改成舊名稱。你提醒它不要碰結帳模組,它下次仍改了。測試失敗後,它反覆修同一行,卻沒有讀懂錯誤訊息。這三種重複錯誤看起來都像「模型不夠穩」,但真正的病灶與處理方式完全不同。 若只要求它再想一次,這次可能勉強過關,下次任務仍會重來。
遇到這種情況,我建議先問一件事:它在做決定的那一刻,眼前到底有什麼?
模型每次決定下一步,只能根據當下送進去的那一包文字:系統指令、工具說明、你的規則檔、它讀過的檔案、到目前為止的對話。這一包叫 context,裝得下的上限叫 context window。Anthropic 在工程部落格〈Effective context engineering for AI agents〉裡把 Context Engineering(上下文工程) 定義得很精準:如果說傳統 Prompt Engineering 是在單輪對話裡把一句指令寫好,那麼 Context Engineering 就是在 Agent 多輪執行的每一刻,從大量候選資訊中挑選(Curation)並維護最合適的那組 token。
快速回答 Agent 每次決定下一步,只看得到當下那一包 context:系統指令、規則檔、讀過的檔案和對話。同一類錯誤反覆出現時,先查三件事:該看的資訊在不在這一包裡、裡面有沒有兩條互相打架、錯誤訊息有沒有說清楚哪裡錯,再決定補在哪一層。對話裡交代的事最脆弱,Claude Code 自動壓縮後可能只剩摘要;要長期有效的規則,寫進 CLAUDE.md 或 AGENTS.md 這類規則檔。
為什麼口頭提醒會被忘記?Context 裡的三層記憶與 /compact 壓縮機制
以我日常主力用的 Claude Code 為例,別家工具(如 Codex CLI、Gemini CLI 或 Cursor)的分法其實大同小異。為什麼有些規則 Agent 永遠記得住,有些你才剛講完、過十幾輪對話它就忘得一乾二淨?這要分三層看:Agent 下決定時,context 裡的東西依「什麼時候進來、自動壓縮(/compact)後會不會留著」,可以拆成三種完全不同的生命週期(見圖 1)。
- 第一層:每輪都在(Always Loaded)。 廠商寫的系統提示和工具定義、專案根目錄的
CLAUDE.md或AGENTS.md、每個 skill 的名稱和一句描述,啟動時就載入,之後每一輪都固定佔著位置。 - 第二層:用到才讀(On Demand,漸進揭露)。 Agent 用搜尋找到、打開來看的檔案,跑指令得到的輸出;子資料夾裡的規則檔,要等它讀到那個資料夾的檔案才載入;skill 的完整內容,要等它決定用這個 skill 才讀。Anthropic 叫這種做法「漸進揭露(Progressive Disclosure)」:就像查百科全書時先看一頁目錄,確定需要哪一章才翻開內文。Agent Skills 開放標準(agentskills.io)把數字訂得很具體:啟動時每個 skill 只放名稱和描述,大約 100 個 token;啟用時才讀內文,建議控制在 5,000 token 以內。
- 第三層:只活在對話裡(Conversation Only)。 你在對話中口頭交代的話、它早先讀過的測試報錯、你們討論出來的決定。這一層最脆弱,因為只要觸發對話壓縮,細節就可能蒸發。
對話快把 context 塞滿時,Claude Code 會自動壓縮:先清掉舊的工具輸出,再把對話整理成一段摘要。官方文件列得很清楚:根目錄的 CLAUDE.md 會從檔案重新讀進來;子資料夾的規則,要等 Agent 再碰到那裡的檔案才回來;至於對話早期交代的細節,文件的原話是「可能會遺失」,並建議把要長期有效的規則寫進 CLAUDE.md。
觀察筆記:為什麼口頭提醒永遠救不了下一次?
開場那句「你提醒它不要碰結帳模組,它下次仍改了」,背後的機制其實很單純:你把一條應該放在第一層(每輪都在)的長期禁令,隨手丟進了第三層(只活在對話裡)。 只要對話一長、系統自動跑了一次壓縮,你當初千叮萬囑的那句話就只剩摘要裡的半句話,甚至一個字都不剩。凡是下一個任務還要守的規矩,一律往左移寫進檔案。
Context 視窗有 100 萬字,為什麼全塞進去 AI 反而變笨?(Context Rot)
現在的模型動輒有一百萬 token 的 context window,很多人的直覺是:全部放進去最保險。這個直覺忽略了一件關鍵限制——Anthropic 稱為「注意力預算(Attention Budget)」。
換句話說,你可以把 Context Window 想成公司的檔案倉庫,而模型的注意力預算是你眼前的辦公桌桌面。倉庫就算能塞進十萬份舊公文,如果你把十萬份公文同時倒在辦公桌上,你連今天要簽的那張單子都找不到。模型讀 context 時,每個 token 都要和其他 token 建立關係,$n$ 個 token 就有大約 $n^2$ 組關係要處理。內容越多,每一條資訊分到的注意力越少。Anthropic 指出這是一條逐漸下滑的坡,他們把這個現象叫做 Context Rot(上下文腐敗):塞進去的 token 越多,模型準確取回關鍵資訊的能力越差。
Chroma 在 2025 年 7 月發表的《Context Rot》報告,把這件事量得很清楚。他們測了 18 個模型,其中一個實驗用長對話記憶基準 LongMemEval(得分範圍 0 到 1,越接近 1 代表記憶召回越準確,1.0 為滿分):同一批問題,一種只給回答所需的那幾段內容(平均約 300 個 token);另一種給完整的對話紀錄(平均約 11.3 萬個 token)。答案需要的內容一樣都在裡面,只是多了大量無關的對話(見圖 2)。
從圖 2 可以看到,多塞無關對話讓旗艦推理模型退步了 6 到 26 個百分點。 Chroma 也提醒,Claude 家族的落差有一部分來自它在資訊模糊時選擇不回答,這是比較保守的設計,不全是看漏。但整份報告的結論沒有例外:所有實驗裡,輸入越長,表現越差。
資訊放在哪個位置也有影響。史丹佛等單位的研究〈Lost in the Middle〉給 GPT-3.5-Turbo 20 份文件找答案:答案放在第 1 份時,正確率 75.8%;放在正中間第 10 份時掉到 53.8%,比一份文件都不給、只靠模型自己盲猜(56.1%)還低。模型最容易看到開頭和結尾,最容易漏掉中間。
觀察筆記:模型變強了,是不是就可以亂塞 CLAUDE.md?
值得留意的是,「位置效應」正在隨模型演進變弱。Anthropic 在 2026 年 7 月的文章裡提到,較早的 Claude 模型有時需要重複指令或仰賴結尾位置,但新一代模型已不再需要;他們甚至替 Claude 5 世代刪掉了 Claude Code 八成以上的系統提示,內部 coding 評測完全沒有退步。日本科技媒體 @IT 報導這篇時,直接下了標題:「你的 CLAUDE.md 已經塞太多了」。
我的判斷是:模型變強,解決的是「不必把同一句話重複罵三遍」,但解決不了「無關垃圾塞爆注意力預算」。 定期幫規則檔減肥、清掉過時的舊對話,依然是工程師自己的責任。
Agent 一直犯同一個錯?3 種常見死循環與對應修法
搞懂 context 的分層與注意力預算後,當 Agent 重複犯錯時,我們就能按圖索驥。這可以拆成三條排查路徑:
- 那條資訊不在這一包裡
- 讓資訊出現在它會走到的地方
- 這一包裡有兩條互相矛盾的資訊
- 刪掉或標註過時的那一條,由人決定哪條算數
- 錯誤訊息只說錯,沒說哪裡錯
- 讓回饋指出哪個行為、預期是什麼、怎麼重現
第一條路徑:該看的沒出現。 假設資料庫一律存 UTC 時間,畫面要顯示台灣時間,換算只在一個共用函式裡做。Agent 新增一張報表,直接拿資料庫的時間來顯示,結果差了八小時。它沒讀到那個函式,也沒有任何地方告訴它這條規矩。這時在對話裡再提醒一次,只能救這一次。持久的修法要依規則範圍放到對應的層級:
- 全專案都適用的:寫進根目錄
CLAUDE.md(例如「時間一律存 UTC,轉換只在某個檔案做」)。 - 只跟某個模組有關的:放在那個子資料夾的規則檔。
- 最穩固的做法:讓錯誤寫法根本寫不出來,例如用型別區分
UtcTime和TaipeiTime,混用就直接編譯失敗。
任務的基準也屬於這一類。請 Agent 修「目前的付款流程」,卻沒說以哪個分支為準,它可能讀到還在開發中的設計,套到已經上線的程式上。任務卡寫明以哪個分支或哪份文件為準,花不了幾秒,卻能省掉整輪白工。
第二條路徑:看到的互相打架,或規則寫得太碎/太模糊。 README 寫安裝用 npm install,repo 裡的 lockfile 卻是 pnpm 的;舊的設計文件說 API 走 v1 路徑,程式早就搬到 v2。Agent 選了其中一份,未必是不聽話。對它來說,兩份都是你給的資料,你沒說哪份比較新。Claude Code 官方文件說得很直接:兩條指令互相矛盾時,Claude 可能任選一條。
此外,Anthropic 在原作中也特別畫了一張光譜圖(見下圖),提醒工程師校准規則時的兩個極端陷阱:
修法是把過時的那份文件刪掉,或標明它只是歷史紀錄。哪條規則有效,是團隊要做的決定,不能丟給模型猜。 Claude Code 內建的 /doctor prompt-audit 指令,可以幫你掃出規則檔裡互相矛盾、指向不存在檔案或寫給舊模型的過時內容。
第三條路徑:回饋只說錯,沒說怎麼定位。 測試失敗時只印出一大段快照差異,或 CI 只回一句 exit 1。這些錯誤訊息會進到對話那一層,成為 Agent 下一步的依據;訊息越含糊,它越可能靠猜,甚至直接把測試改掉來湊綠燈。好的錯誤回饋必須同時給齊三件事:哪個行為失敗、預期值是什麼、怎麼重現。 測試本身怎麼變得可信,可以讀〈AI 寫的測試全過,為什麼功能還是錯的?驗證閉環完整懶人包(2026)〉。
5 分鐘實測:用 /context 抓出吃空間元凶,親眼看口頭指令怎麼被洗掉
在 Claude Code 裡,有兩個指令可以直接看見 context 裡有什麼:
/context
/memory
/context 用彩色格子顯示目前 context 被哪些東西佔用,列出載入了哪些 CLAUDE.md 和記憶檔,也會對佔太多空間的工具給建議。/memory 打開並編輯 CLAUDE.md,順便看 auto memory 記了什麼。
第一步,先跑 /context 檢查兩件事: 你以為 Agent 讀到的規則檔,真的在清單上嗎?哪一類東西佔掉最多空間?如果你接了很多 MCP 工具,或規則檔寫了好幾百行,這裡會看得很清楚。
第二步,做一個五分鐘小實驗,親眼看壓縮會留下什麼。 準備一個測試用的 Git repo,依序執行這四個動作:
- 在根目錄的
CLAUDE.md寫一行:「commit 訊息一律用英文小寫開頭。」 - 開 session 後,在對話裡口頭交代:「這個 session 裡,新增的檔案第一行都加上
// draft註解。」 - 隨便請它做幾件小事,讓對話有點長度,然後執行
/compact。 - 請它新增一個檔案並 commit,看兩條規則各自還在不在。
實驗結果會非常直觀:第 1 條規則會在壓縮後從檔案重新載入,100% 還在;第 2 條只剩摘要裡的一句話,有沒有被記住全靠運氣。 親手看過一次,你對「什麼該寫進檔案」的判斷會準很多。
規則到底該寫在哪?CLAUDE.md、Skill 與 Hook 分層放置表
把上面的機制換成日常工程決定,就是這張對照表:
- 根目錄
AGENTS.md或CLAUDE.md - 每輪都在,壓縮後重新載入
- 子資料夾的規則檔、skill
- 用到才讀,平常不佔位置
- 寫進計畫檔或任務卡
- 對話會被壓縮,檔案不會
- hook、測試、CI
- 不管它記不記得都會執行
另外三個日常習慣也能大幅減少 Context Rot:
- 換題目就清桌面:換到不相關的工作時用
/clear開新對話,舊對話只會擠掉接下來需要的檔案。 - 髒活外包給子代理(Subagent):要讀幾十個檔案做研究時交給子代理,讓它在獨立的 context 裡讀完,只把乾淨摘要帶回來。
- 壓縮前指定保留重點:長任務執行
/compact時順手加一句指示(例如/compact 保留付款 bug 的修正方向與資料庫 schema),確保摘要留下你在意的事。
規則檔具體寫什麼、寫多長、什麼不該寫,完整的做法和範例在〈AGENTS.md 怎麼寫?規則寫越多,Agent 反而越貴?(2026 完整教學+範例)〉。
關於 Context 與 CLAUDE.md 最常見的 3 個踩坑誤區
誤解一:「Context window 有一百萬 token,全部塞進去最保險。」 Chroma 的實驗正好相反:答案需要的內容都在,多塞無關內容,旗艦模型照樣退步最高 26 個百分點。容量是倉庫上限,能用的注意力預算有限。
誤解二:「同一件事講三次,它就會記住。」 在對話裡講三次,壓縮後可能一次都不剩。新一代模型也不需要重複指令,要它長期記住,唯一解是寫進檔案。
誤解三:「規則檔寫得越細越安全。」 每一行都是每輪都要付的 token 成本,也多一個跟別處矛盾的機會。Claude Code 的官方建議是每份 CLAUDE.md 控制在 200 行以內,越長越容易被忽略。
總結:下次 AI 又鬼打牆,先跑 /context 檢查它的桌面
模型會繼續變強,對位置的敏感、對重複的依賴,都在減少。但有兩件事不會因為模型變強就消失:不在那一包裡的資訊,它不可能知道;互相矛盾的兩條規則,必須由人決定哪條算數。 這篇的排查順序,專門解決「同一類錯誤反覆出現」的情況;偶發一次的錯,可能只是模型單次抽樣失準,不值得為它多寫一條規則。
下一次 Agent 又犯同一個錯,先別急著換模型或責怪 AI 變笨。打開 /context 看看它眼前那張辦公桌擺了什麼,再決定那條資訊該補進哪一層。
對話裡講的會被摘要,寫進檔案的才會回來。
常見問題
什麼是 Context Engineering?
Context 是模型每次決定下一步時讀到的那一包文字:系統指令、規則檔、讀過的檔案、對話。Anthropic 把 context engineering 定義成「在推論時挑選並維護最合適的那組 token」(token 是模型讀寫文字的單位),重點在挑選:資訊給得多,模型不一定看得到;看得到的,也可能互相打架。
Context window 有一百萬 token,全部塞進去不就好了?
不保險。Chroma 在 2025 年 7 月測了 18 個模型:同一批問題給完整對話紀錄(平均約 11.3 萬 token),比只給相關內容(約 300 token)答得更差,四家推理版旗艦模型落差 6 到 26 個百分點。Anthropic 把這個現象叫做 context rot:token 越多,模型準確取回資訊的能力越差。
Claude Code 壓縮對話後會忘記什麼?
自動壓縮會先清掉舊的工具輸出,再把對話整理成摘要。專案根目錄的規則檔 CLAUDE.md 會從檔案重新載入;放在子資料夾的規則檔,要等 Agent 再讀到那裡的檔案才回來;對話早期交代的細節,官方文件說「可能會遺失」。長任務開始前,可以用 /compact 加一句要保留的重點。
怎麼看 Claude Code 的 context 裡有什麼?
執行 /context,它用彩色格子顯示 context 被哪些東西佔用,列出載入了哪些 CLAUDE.md 和記憶檔,也會對佔太多空間的工具給建議。先看兩件事:你以為它讀到的規則檔在不在清單上、哪一類東西佔掉最多空間。/memory 可以打開並編輯 CLAUDE.md。
延伸閱讀
- AGENTS.md 怎麼寫?規則寫越多,Agent 反而越貴?(2026 完整教學+範例)
- Token、Embedding、Context Window 是什麼?LLM 基礎一次搞懂(2026 完整懶人包)
- Agent Memory 是什麼?AI 該記什麼、誰批准、何時刪?(2026 完整懶人包)
- Claude Code 權限要怎麼設?一直按「允許」真的安全嗎?(2026 完整懶人包)
- AI Native Builder 是什麼?公司要的已經不只是「會用 AI」(2026 職場趨勢整理)
參考資料
工程文章與官方文件
- Prithvi Rajasekaran, Ethan Dixon, Carly Ryan, Jeremy Hadfield (Anthropic), Effective context engineering for AI agents(2025-09-29) https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
- Thariq Shihipar (Anthropic), The new rules of context engineering for Claude 5 generation models(2026-07-24) https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models
- Anthropic, Explore the context window(Claude Code 文件,2026-10-16 檢視) https://code.claude.com/docs/en/context-window
- Anthropic, How Claude remembers your project(Claude Code 文件,2026-10-16 檢視) https://code.claude.com/docs/en/memory
- Anthropic, How Claude Code works(2026-10-16 檢視) https://code.claude.com/docs/en/how-claude-code-works
- Anthropic, Commands(Claude Code 文件,2026-10-16 檢視) https://code.claude.com/docs/en/commands
- Anthropic, Context windows(Claude API 文件,2026-10-16 檢視) https://platform.claude.com/docs/en/build-with-claude/context-windows
- Agent Skills, Specification(2026-10-16 檢視) https://agentskills.io/specification
研究
- Kelly Hong, Anton Troynikov, Jeff Huber (Chroma), Context Rot: How Increasing Input Tokens Impacts LLM Performance(2025-07-14) https://www.trychroma.com/research/context-rot
- Nelson F. Liu et al., Lost in the Middle: How Language Models Use Long Contexts(TACL 2024;arXiv 2307.03172) https://arxiv.org/abs/2307.03172
報導
- @IT(ITmedia),〈「君のCLAUDE.mdはもう盛り過ぎ」 Claude 5世代で"通用しなくなった"コンテキストの6つの常識〉(2026-09-03,日文) https://atmarkit.itmedia.co.jp/ait/articles/2609/03/news040.html
留言0
登入後就能留言。
登入