Applied AI School
v0 · 規劃中
Anthropic

控制 context

/context、@file、/clear、CLAUDE.md 怎麼寫才有用。

TL;DR

  • /context 看現在裝了什麼、佔多少 tokens;@<file> 塞檔進來、/clear 清掉
  • CLAUDE.md 是 build-time context:寫專案規範、常用 cmd,不要塞詳細 code
  • Context 像 RAM——裝太多就 swap。重要的東西釘在 CLAUDE.md,無關的 history 該 evict 就 evict

一個情境:Claude 第三次重新讀同一個檔

叫 Claude 改某個 service。它讀檔、改檔、跑 test、debug 一個 import 錯誤、修好。接著叫它改第二個相關 service——它又重新讀了一次同一份 schema

不是它笨。中間的對話太長,前面讀過的東西被擠出去了。每次 LLM 呼叫都帶整個 context window 過去,有限的空間塞滿了你不需要的 debug 來回。

該主動 evict 還是開新 session?這篇講這個判斷。

Context 像 RAM

把 Claude 的 context 想成 RAM。容量有限,裝什麼很重要:

例子怎麼控制
永久(build-time)CLAUDE.md@AGENTS.md編輯檔案,每次自動載入
Session(對話 history)你的問題、Claude 的回覆/clear/compact/rewind
暫時(tool 結果)讀過的檔、cmd 輸出跟 history 一起壓縮或丟掉

CLAUDE.md 是釘住的 page——常用、不該被換出去。History 是 working set——太大就 swap。Tool 結果最便宜,丟了再讀一次就好。

看現在裝了什麼

/context 顯示目前用了多少 tokens、哪些檔被載入。長對話先看一眼再決定要不要清。

三種清理手段

指令在做什麼什麼時候用
/rewind(連按兩下 Esc)跳回前面訊息,丟掉中間來回Debug 完無關小 bug,不想留雜訊
/compact對話壓成摘要,保留學到的東西同 task 鏈條延續但 history 太肥
/clear整個清掉,開新對話換完全不相關的 task

/clear 跟「開新 terminal session」差別:/clear 只清 history,CLAUDE.md 還在、permission 還在、cwd 還在。日常切 task 用 /clear 就夠。

@<file> 把檔釘進這次對話

這個 auth flow 怎麼運作的?@src/auth/session.ts

@ 直接把檔內容塞進 prompt,省掉 Claude 自己 grep 找檔。知道哪個檔相關就明講,比讓它猜快。

CLAUDE.md:給 Claude 看的快取摘要

每次對話自動載入,等於「這個 repo 的常駐系統提示」。三個位置:

  • CLAUDE.md(repo 根)——團隊共用、commit 進 git
  • CLAUDE.local.md——個人覆寫、不 commit
  • ~/.claude/CLAUDE.md——所有專案套用

判準:這東西是不是每次對話都會用到? 是就放,不是別塞。

DoDon't
High-level 架構(「auth 在 src/auth/、session 用 JWT」)完整 code 片段
常用 cmd(pnpm devpnpm test:watch一次性的實驗指令
不變的規範(命名、layer 分界、不可違反的決策)會頻繁變的 TODO list
@prisma/schema.prisma 引用核心檔把 schema 整份貼進來
@AGENTS.md(多 agent 系統延伸 context)重複 README 已有的內容

很多 repo 已經有 AGENTS.md 給其他 agent 工具用。CLAUDE.md 第一行寫 @AGENTS.md 就會自動載入,不用維護兩份。

該 evict 還是開新 session?

回到開頭情境的判斷:

  1. 同 task 鏈條延續、Claude 已經學到很多 → /compact
  2. 換不相關的 task → /clear
  3. 中間 debug 一段無關雜訊、想保留 codebase 理解 → /rewind
  4. 同樣的錯犯了第二次 → Esc 中斷 + /memory 寫進 CLAUDE.md

預設:新 task 就 /clear。LLM 在乾淨 context 上的表現幾乎都贏髒 context。

接下來

下一篇 Custom commands——把重複工作 codify 成一鍵 slash command。