登入後,會解鎖更多功能喔,快來享受個人化服務吧!
用Claude Code寫到一半,它突然忘了前面交代的規則?問題可能出在上下文快滿了。作者拆解 /context、/compact、/clear、/resume 等4個指令,教你看懂上下文用量,在對的時機壓縮或清空。本文節錄自《Claude Code全攻略》。
文/曾慶良(阿亮老師)
本文目錄(點擊可快速前往)
已經學會用 /usage 看Token用量、用 /cost 看費用。但有一件事這兩個指令看不到:Claude Code的對話有「容量上限」,超過了就會開始忘東忘西。
這個容量上限叫做Context Window(上下文視窗),所有對話歷史(你的提問 + Claude的回覆 + 讀過的檔案內容)都會疊在裡面。容量越接近滿,發生的問題會越多:
| 上下文用量 | 你會遇到的狀況 |
|---|---|
| 0–40% | 對話流暢,Claude記得所有細節 |
| 40–60% | 還沒事,但開始要留意 |
| 60–80% | Claude偶爾忘記前面講過的小細節 |
| 80–90% | 明顯漏掉指令、忽略CLAUDE.md規則 |
| 90–100% | 自動壓縮觸發,回覆變短、品質下降 |
結論:不要等Claude變笨才處理上下文。60%就該主動行動。
很多人把這3件事搞混,先釐清:
| 項目 | 是什麼 | 用什麼指令查 | 滿了會怎樣 |
|---|---|---|---|
| 上下文視窗 | 這次對話Claude能「同時記住」的容量上限 | /context | Claude開始忘事 |
| 對話歷史 | 從這次session開始累積的所有訊息 | 滾動畫面看 | 持續累積,不會自動消失 |
| Token用量/費用 | 從這次session累積的計費基礎 | /usage /cost | 撞到月費用上限 |
關鍵差別:
兩件事獨立發生,要分開管。
啟動Claude Code,隨便聊幾句之後輸入:
/context
[模擬] /context 報表:
Context Window Usage
╭───────────────────────────────────╮
│ ████████░░░░░░░░░░░░░░░░░░░░░░ 28% │
╰───────────────────────────────────╯
Total capacity: 200,000 tokens
Used: 56,420 tokens (28%)
Available: 143,580 tokens (72%)
Breakdown by source:
• System prompt + CLAUDE.md 2,340 tokens (1.2%)
• User messages 14,250 tokens (7.1%)
• Assistant responses 18,920 tokens (9.5%)
• Tool results (file reads) 20,910 tokens (10.5%)
─────────────────────────────────────
Status: 健康(建議已用量保持在 60% 內)
總容量以你的模型為準:多數模型是200K tokens,但Sonnet 5 / Fable 5已提供1M context選項——/context第一行的Total capacity才是你當下的真實上限。
Fable 5的完整脈絡規格:context window 100萬(1M)token、單次輸出上限12.8萬(128K)token、資料保留30天、不支援零資料保留(ZDR)。1M聽起來很多,但單次輸出被128K綁住——長文件產出要拆段,不能期待一次吐完。
別讓模型「自己嚇自己」提早收工。高階模型有時會在額度還很充裕時,就主動說「上下文快滿了、要不要開新對話」而中斷任務。這不是真的滿了,而是它保守過頭。你可以在CLAUDE.md補一條反制指令:
可用額度充裕時,不要因為接近上限就停手、總結或建議我開新 session,
請直接繼續完成手上的工作。
這條屬於「駕馭Fable 5的指令範本」之一,和CH05那組(防過度思考、防自作主張、診斷vs.修復、memory寫法)是同一套心法——把模型保守或雞婆的預設行為,用一句話校正回來。
重點看4個分項:
| 來源 | 為什麼會大 |
|---|---|
| Tool results | 讀檔次數多、檔案大時會迅速膨脹 |
| Assistant responses | Claude生成大量程式碼時 |
| User messages | 你貼了長文件、長日誌 |
| System prompt + CLAUDE.md | 永遠都在,無法縮減 |
/context多久看一次?沒有硬規則,但建議跑完一個複雜任務後看一次、感覺Claude變笨時看一次。
當 /context 顯示60%以上,就該主動壓縮。
操作:
/compact
[模擬] /compact執行畫面:
Compacting conversation...
Before: 142,830 tokens (71%)
After: 38,420 tokens (19%)
Saved: 104,410 tokens
✓ 對話歷史已壓縮成摘要,關鍵決定與檔案內容保留
✓ Claude 仍記得這次 session 做過的事,但細節已濃縮
繼續對話即可。
/compact 做了什麼?它讓Claude自己回顧整個對話,輸出一份摘要,然後用這份摘要取代原始的長對話歷史。結果是:
壓縮完,馬上再跑一次/context驗證:
/context
確認已用百分比真的降下來了(例如71% → 19%)。這一步5秒鐘,能讓你確定壓縮有效,也順便體會前後差異。
何時該/compact、何時該 /clear?
| 情境 | 該用 |
|---|---|
| 還在做同一個任務,但Claude開始迷糊 | /compact |
| 同一個任務跑很久了,想保留脈絡 | /compact |
| 要切換到完全無關的新任務 | /clear |
| 進入第二個工作天,重新開始 | /clear |
| 我把上一份工作的secret不小心貼進去了 | /clear(立刻清掉) |
/clear
注意:/clear 是立即執行、沒有確認畫面、不可逆。按下Enter的瞬間對話歷史就清空了。清空前如果有想保留的結論,先用 /export 把整段對話匯出成檔案再清。
清空後Claude不再記得任何先前的訊息;CLAUDE.md與已安裝的Skills / Plugins不受影響。
和 /compact 的本質差別:
有兩種情境會用到 /resume。
情境A:你不小心關掉Claude Code視窗
重新啟動:
claude --continue
[模擬]:
✓ Resuming last session from 2 minutes ago...
✓ Restored 47 messages, 38% context
> ▌
情境B:你想回到幾天前的某次對話
/resume
[模擬]對話歷史選單:
Recent Sessions
[1] 2026-05-11 14:23 (47 msgs) Flask Hello World 專案
[2] 2026-05-10 09:51 (132 msgs) 程式碼審查與重構
[3] 2026-05-09 17:08 (28 msgs) CLAUDE.md 設定
[4] 2026-05-08 11:30 (89 msgs) Skills 開發
↑↓ Navigate Enter: Resume Esc: Cancel
選擇要恢復的對話,按Enter,Claude Code把那次的所有上下文載回來。
/resume 的價值:
小提醒:claude --continue 是「續接最後一次」的快捷;/resume 是「進選單選哪一次」的完整版。
這節是進階選作,只想入門的話可以直接跳過。下面整段程式碼你完全不用看懂——最省事的做法是把這整節複製起來丟給Claude,說「幫我照這節設定好statusline」,它會自己幫你寫好、掛上去。等你之後想深入再回來研究原理即可。
Claude Code的輸入框下方有一條statusline。它的機制是「外掛腳本」;Claude Code會把當前狀態打包成一包JSON從stdin餵給你指定的指令,你的腳本輸出什麼文字(第一行),statusline就顯示什麼。設定長這樣:
{
"statusLine": {
"type": "command",
"command": "python ~/.claude/statusline.py"
}
}
沒有format、refreshInterval這類欄位——顯示邏輯全部由你的腳本決定,這正是它強大的地方。
目標效果:
> ▌
~/Desktop/flask-hello | Sonnet 5 | ctx 已用 42%
把下面的跨平台Python腳本存成~/.claude/statusline.py(直接把本節整段丟給Claude請它代勞也行):
#!/usr/bin/env python3
# ~/.claude/statusline.py — 顯示「目錄 | 模型 | context 已用%」
import sys, json, os
data = json.load(sys.stdin)
# 1) 目前工作目錄(家目錄縮寫成 ~)
cwd = data.get("workspace", {}).get("current_dir") or data.get("cwd", "")
home = os.path.expanduser("~")
if cwd.startswith(home):
cwd = "~" + cwd[len(home):]
# 2) 模型顯示名
model = data.get("model", {}).get("display_name", "?")
# 3) context 已用百分比(欄位名依版本而異,逐一嘗試;拿不到就顯示 --)
pct = None
ctx = data.get("context_window") or data.get("context") or {}
used = ctx.get("used_tokens") or ctx.get("used")
size = ctx.get("max_tokens") or ctx.get("size") or ctx.get("context_window_size")
if used and size:
pct = round(used * 100 / size)
if pct is None:
ctx_text = "ctx --"
else:
color = "3[32m" # 綠:健康
if pct >= 80: color = "3[31m" # 紅:立刻 /compact 或 /clear
elif pct >= 60: color = "3[33m" # 黃:準備行動
ctx_text = f"{color}ctx 已用 {pct}%3[0m"
print(f"📁 {cwd} | 🤖 {model} | 🧠 {ctx_text}")
Claude Code傳入的JSON欄位會隨版本演進(以官方文件Status line章節為準)。想親眼看看拿到什麼,可在腳本開頭暫時加一行 open(os.path.expanduser("~/statusline_debug.json"), "w").write(json.dumps(data)) 再打開檔案研究。
編輯 ~/.claude/settings.json,加入(或請Claude加入)本節開頭那段statusLine設定。Windows用戶把command寫成:
"command": "python \"%USERPROFILE%\\.claude\\statusline.py\""
/exit
claude
[模擬]啟動後的statusline:
> ▌
~/Desktop | Sonnet 5 | ctx 已用 8%
聊一陣子後,已用量爬到60%會轉黃、80%轉紅——紅色就是強烈建議 /compact 或 /clear 的時刻。

把這套流程記下來,之後不用每次想:
任務開始
↓
[每次切換主任務] → /clear
↓
工作中⋯
↓
[statusline 顯示已用 60% 以下(綠)] → 繼續
[已用 60–80%(黃)] → 留意,準備收尾或 /compact
[已用 80% 以上(紅)] → 立刻 /compact 或 /clear
↓
任務完成
↓
[需要明天續接] → 直接 /exit(明天 claude --continue)
[已徹底完成] → /clear
[要切換到無關的新任務] → /clear
↓
明天回來
↓
[續上次任務] → claude --continue
[選歷史對話] → /resume → 選清單
[全新主題] → 直接 claude

節錄自:博碩出版《Claude Code全攻略:從一句話到部署上線,打造你的AI Agent開發團隊》/曾慶良(阿亮老師) 著
沒看到有興趣的職缺嗎?