在一項任務上忙了一個小時,代理突然又提出您半小時前已否決的方案;或者重新描述您早已手動修改過的檔案。看起來像是健忘,但其實系統就是這樣運作:代理透過一個大小有限的視窗在看,看到的不是整個專案,而只有實際進入這個視窗的內容。
接下來會說明上下文視窗裡有哪些內容、如何用 /context 查看,以及空間快用完時該怎麼做。

上下文與它的上限
上下文是模型在下一步可用的資訊:您的訊息、代理的回覆、讀取過的程式碼、指令輸出,以及專案指示。上下文視窗則限制這些資訊能同時放進多少。它不是磁碟空間,也不是您電腦的 RAM。
最常見的混淆就在這裡。以下三件事很容易被當成同一回事:
- 磁碟上的檔案 - 專案內容,可透過工具讀取;
- 已保存的工作階段歷史 - 對話紀錄,存在磁碟上,也能重新開啟;
- 目前的上下文 - 模型此刻能取得的資訊。
這些集合彼此相關,卻不相同。檔案可能放在資料夾裡,從未進入對話;對話裡也可能留著半小時前的舊版本。因此,光是說"我們不是討論過了嗎",不代表代理手上就有最新資訊。
- 專案檔案
- 透過工具讀取
- 用於回覆的資訊
檔案存在和代理知道檔案內容之間,還差一個讀取步驟。Claude Code 會自行完成:搜尋專案、開啟需要的檔案,再查看相關程式碼。不必事先列出每個路徑。不過,在讀取之前,檔案就還不在對話裡。
這些內容的大小以 token 計算,也就是模型切分您提出的要求和讀取到的程式碼時使用的文字片段。Token 有時是一個完整單字,有時只是單字的一部分,所以不能直接用單字數來推算 token 數量。
第一個問題提出前,視窗裡有什麼
您還沒打下第一個字,視窗就已經有東西佔著了。/context 指令會列出具體項目:

工作階段才剛開啟,200k token 中就已經用了 4k,而且全是系統資訊:System prompt - 代理本身的指示;Memory files - 載入的 CLAUDE.md 和專案規則;Skills - 可用的 skill 清單。代表對話內容的 Messages 目前還是空的。
再看看工作一小時後,還連了幾個 MCP server 時的分布:
/context
System prompt 3.2k ( 2%) 系統指示
System tools 12.1k ( 6%) 內建工具的說明
MCP tools 21.4k (11%) 已連線的外部伺服器
Memory files 1.8k ( 1%) CLAUDE.md、rules、auto memory
Messages 45.2k (22%) 您的對話、檔案、日誌
Free space 116.3k (58%)這只是示意,不是某個特定版本的實際輸出:顯示的項目和畫面配置會依 Claude Code 版本及專案連線項目而異,視窗大小則取決於模型。不過大致情況都差不多,可以從中看出幾件實用的事:
- 系統基本配備 - 代理指示和內建工具說明 - 一定會佔空間,您無法控制;
- 每個連線的 MCP server 至少會把自己的工具清單放進視窗,即使您從未用過。抱著"先連上再說"的心態,每個工作階段都得付出代價;
- 膨脹的
CLAUDE.md每次啟動時也會重新計入。這又是個讓它保持精簡的理由; - 工作過程中,主要增加的其實只有一項 - 訊息。值得留意的就是它。
如果您手邊有 Claude Code:執行 /context,請它讀取幾個檔案,再執行一次。Messages 的數字會明顯增加,您就能看出讀取一次檔案佔了多少空間。
工作過程中會累積什麼
接下來,視窗裡的內容由您逐漸增加,而且不只有文字。代理依照您的要求讀取或取得的所有內容,都會進入上下文:
| 來源 | 佔用的內容 |
|---|---|
| 對話 | 您的訊息、代理的回覆,包括已否決的方案 |
| 讀取過的檔案 | 完整內容或需要的片段 |
| 工具結果 | 指令輸出、找到的文字、瀏覽器中的觀察結果 |
| skill 和 MCP 的資料 | 實際使用的 skill 指示、呼叫工具的說明 |
要求和取得的上下文是差很多的兩回事。"顯示整份日誌"只有幾個字,但結果可能有上千行。所以大型輸出有時比冗長的問題更佔空間。
因此,最好只提供明確需要的來源。在路徑前加上 @,就能把檔案加入對話;輸入路徑時也會出現建議:請讀取 @src/reward-flow.js,並說明分數在哪裡設定。透過 @ 提到資料夾,也不代表裡面所有檔案都會載入:資料夾連結會提供檔案清單。請依照問題選擇來源。傳遞檔案的文件說明的正是引用檔案與引用資料夾的這個差異。
還有一個小地方:如果您之後手動把數字從十改成二十,先前的回覆不會自動更新。要取得新的結果,請要求代理讀取目前的內容。曾經讀取過的檔案連結,不會讓對話裡的舊文字自動變成磁碟上檔案的即時副本。
空間快用完時
視窗的容量有限,但工作階段不會因此講到一半就中斷。Claude Code 會在視窗逐漸填滿時進行壓縮:把詳細歷史改成摘要,騰出空間。這個過程會自動發生,時機取決於模型和設定。

您也可以自行執行 /compact 來壓縮。手動執行的好處是能自己選時機 - 例如開始一段大型工作前 - 也可以指定哪些資訊要保留:
/compact 請保留任務目標和修改範圍、
已否決的獨立處理器方案,
以及下一步:檢查搜尋欄位是否清空。壓縮時最重要的是:視窗裡留下的是摘要,不是完整對話。沒有寫進摘要的細節就會離開視窗,所以壓縮後再爭論"你二十分鐘前不是答應了嗎"沒有意義;需要的資訊直接從檔案重新找會更容易。專案指示不會因此消失:根目錄的 CLAUDE.md 會重新載入。
另一個指令 /clear 不會壓縮任何內容,而是開啟新的對話。先前的對話仍會保存,也能透過 /resume 重新開啟;專案檔案不會改變,專案指示則照常載入。
| 指令 | 作用 | 適用時機 |
|---|---|---|
/context | 顯示視窗裡有哪些內容 | 不清楚空間用到哪裡 |
/compact | 將歷史縮成摘要 | 任務沒變,但對話已累積很多 |
/clear | 重新開始一段對話 | 換了新任務 |
選擇原則很簡單:任務相同就壓縮,任務不同就另開新對話。只要您還在處理同一個問題,就不必每執行一個指令便清空對話,過程中的觀察和補充都派得上用場。但開始新主題前,可以先用幾行記下重要結論:"獎勵設定在 src/reward-config.js,發放邏輯在 src/reward-flow.js"。這就像標記回頭查看的位置,不必重寫整段對話。
更有效率地使用視窗
只要一開始別讓多餘內容塞滿視窗,這三個指令就不用常常派上用場。以下幾個習慣最有幫助:
- 把問題說清楚。要求太模糊時,代理會先到處查找:讀取不相關的檔案、嘗試各種方案。指出檔案和預期結果,就能節省空間和時間。
- 別把所有內容都倒進來。要查測試為什麼失敗,只需要錯誤附近幾行,不必整份日誌。
- 讓專案指示保持精簡。
CLAUDE.md每個工作階段都會載入。詳細參考資料適合放在獨立檔案,需要時再讀取。 - 停用不需要的 MCP server。"以防萬一"而連線的伺服器每次啟動都佔空間,卻完全沒有帶來好處。
- 把大型調查交給子代理。它會使用自己的視窗,最後只回傳摘要;讀過的幾十個檔案也留在它那邊。
請記住
上下文是您放到桌面上的資訊,不是"專案裡有的所有東西"。磁碟上的檔案、歷史紀錄和目前視窗裡的資訊是三回事,大部分奇怪的回覆,都是把它們混為一談造成的。
接下來可以歸納成三個動作:用 /context 查看使用量、透過 @ 提供需要的來源,並適時決定要壓縮對話還是另開新的。依情況選擇就好:壓縮不能取代讀取需要的檔案,提供的檔案也不會替您檢查代理的推理。
GO TO FULL VERSION