所有頁面
本頁內容

壓縮對話

模型一次能讀取的內容有限。在很長的對話中,歷史記錄會填滿它的上下文視窗,遲早得有所取捨。OAR 提供兩種解決方式:你可以用 /compact 開始一個帶有摘要的新對話,而有些供應商會自動縮減自己的上下文。

上下文視窗的顯示(🧠 按鈕)在上下文視窗中說明;本頁只說明壓縮。

/compact #

在輸入區中輸入 /compact 並傳送。你輸入 / 時,輸入區的自動完成也會提供這個指令。OAR 會請你確認 Compact this conversation into a new one with carry-over summary?(將此對話壓縮為附帶延續摘要的新對話?),然後:

  1. 建立一個新對話,標題和舊對話相同,並加上 (compacted)(已壓縮)。
  2. 封存舊對話。舊對話會完整保留,並且仍可在已封存清單中閱讀,見對話清單。
  3. 開啟新對話,內容是空的,摘要已在等待。其他開著舊對話的瀏覽器也會一併移到新對話。

摘要會放在你在新對話中傳送的第一則訊息前面:agent 會在 [Carry-over context from previous compacted conversation]([從上一個已壓縮對話帶入的上下文])之下收到摘要,接著在 [New user request]([新的使用者請求])之下收到你的文字。你自己的泡泡只會顯示你輸入的內容。第一則訊息之後,摘要就用完了;之後的回合只帶有 agent 自己保留在歷史記錄中的內容。

/compact 不接受指示。它只有在作為整則訊息、不帶附件,而且在未封存的對話中時才有效。如果你在它後面加上文字,這則訊息就不會被當成指令,而是以一般文字送給 agent。OAR 不會等待執行中的回合,也不會停止它,所以請在 agent 閒置時傳送 /compact。

新對話是全新的開始

只有標題和摘要會被複製。新對話不會接續舊的 agent session,所以除了摘要之外,agent 對舊對話沒有任何記憶。App 中沒有任何東西把這兩個對話連在一起;要找到舊對話,請查看已封存清單。供應商、模型和資料夾不會被複製:請像任何新對話一樣選擇它們。釘選訊息也不會被複製。

摘要包含什麼 #

摘要由舊對話的文字訊息組成,不會請模型來撰寫:

  • 對話標題;
  • 最多 16 則訊息,包括你的和 agent 的,從最舊的開始,每則縮成一行並截斷為 260 個字元;
  • 總共最多 3,500 個字元,所以較長的摘要會失去結尾。

這 16 則是從最近 24 則訊息中選出,其中最舊的排在最前面。因此在超過 24 則訊息的對話中,最新的 8 則不會進入摘要。沒有文字的訊息會占用一個位置,但不會增加任何內容。

其他內容都不會帶過去:沒有工具輸出、檔案、圖片、思考,也沒有 agent 的計畫。如果舊對話沒有文字,摘要會說明這一點。新對話得到的是主題的粗略提醒,而不是忠實的紀錄。請在第一則訊息中再告訴 agent 一次所有重要的事,特別是最近的步驟。

自動壓縮 #

有些供應商會自行就地壓縮很長的對話。對話仍是同一個,agent session 也相同;視窗接近上限時,供應商會以較短的版本取代較舊的歷史記錄。這不會要求確認。

供應商 何時壓縮
Claude 上下文達到 auto-compact window(自動壓縮視窗)時,見下文。預設情況下,這接近模型本身的上限(在 1M 上下文的模型上約為 967k token),所以很長的對話也很少會到達。
DeepSeek 0.9.17 新增 和 Claude 相同,在 auto-compact window 時壓縮。維持 Auto(自動)時,DeepSeek 對話會在 400k token 時壓縮,遠低於這些模型的 1M 視窗。
GitHub Copilot 和 OpenAI,SDK 引擎 在上下文視窗達到 80% 時於背景壓縮,達到 95% 時則以阻擋式壓縮進行。

壓縮進行期間,你傳送的訊息會留在佇列中,壓縮結束後才會送出。這時傳送按鈕會顯示 Queue(加入佇列)。

你會看到什麼 #

在 Claude、DeepSeek 和 Claude Cloud 上,對話紀錄會以一條全寬的線顯示壓縮,同一個位置也會以捲軸旁的一個點標出:

  • 0.9.8 新增 壓縮進行期間(僅限 Claude 和 DeepSeek),執行中回合的上方會有一條線顯示 Compacting context…(正在壓縮上下文…),回合的泡泡則顯示 Compacting the conversation…(正在壓縮對話…)。
  • 壓縮結束時,同一條線會變成 Context compacted · 120k → 40k tokens(上下文已壓縮 · 120k → 40k token),並帶有實際的數字。如果只知道壓縮前的大小,它會顯示 Context compacted · was 120k tokens。
  • 沒有結果就結束的壓縮不會留下線。

在 Claude Cloud 上,這條線只會在壓縮結束後出現,並顯示 session 回報的內容。

在 SDK 引擎(GitHub Copilot 和 OpenAI)上,進度則改以執行中回合裡的活動行顯示:Compacting the conversation context…(正在壓縮對話上下文…),然後是帶有實際數字的 Context compacted (removed 12 messages, 30k tokens)(上下文已壓縮,移除 12 則訊息、30k token),或 Context compaction failed: reason(上下文壓縮失敗:reason)。

自動壓縮視窗 #

在 Claude 和 DeepSeek 上,你可以選擇一個對話在壓縮之前可以累積多少上下文。較小的視窗會較早壓縮,讓每個回合的花費較低。這個設定屬於該對話。

開啟對話的 🧠 上下文按鈕,然後移動 Auto-compact window 滑桿。它有七個刻度:

刻度 意義
Auto 預設值。Claude Code 會選擇適合該模型的視窗。在 DeepSeek 上,Auto 表示 400k:除非你選擇其他刻度,否則中繼會設定這個視窗。
100k、150k、200k、300k、500k、1M 對話的上下文達到這麼多 token 時就會壓縮。

需要知道的事:

  • 最小的視窗是 100k。 Claude Code 會忽略更低的值,並退回它自己的預設值,所以滑桿不提供這些值。
  • 視窗不能超過模型本身的上限。 在上下文視窗較小的模型上,1M 的視窗在超出那個較小上限的部分不會有任何作用。
  • 滑桿會在你關閉對話框時儲存。 移動它只會變更標籤和它下方的說明。
  • 執行中的 session 會重新啟動一次以套用設定。 Claude Code 只在啟動時讀取視窗。在你的下一則訊息之前,OAR 會在 agent 處理程序中沒有東西執行時重新啟動它,回覆中也會說明這一點:Restarted the session to apply the compaction window (Auto → 100k)(已重新啟動 session 以套用壓縮視窗,Auto → 100k)。滑桿下方的說明會告訴你這項變更在等待什麼:Applies after the current turn.(在目前的回合之後生效。)、Applies when background work has finished.(背景工作結束後生效。)或 Applies on the next message (the session restarts once).(從下一則訊息起生效,session 會重新啟動一次。)
  • 低於對話目前已使用量的視窗會立即壓縮對話。 滑桿會警告你:The conversation will be compacted on the next message.(下一則訊息時將壓縮對話。)
  • 滑桿下方的那一行會顯示目前生效的視窗以及它的來源:你的設定、模型預設值或環境。它會在對話的第一個回合之後填入。

環境變數 CLAUDE_CODE_AUTO_COMPACT_WINDOW 也可以設定視窗。當 Claude Code 回報它是從那裡取得視窗時,滑桿下方的那一行會顯示 from CLAUDE_CODE_AUTO_COMPACT_WINDOW(來自 CLAUDE_CODE_AUTO_COMPACT_WINDOW)。在 session 於 tmux 中執行的地方(Linux 和 macOS),為中繼設定這個變數並不會把它傳給 Claude Code:見哪些變數會傳到 agent。

會遺失什麼、會保留什麼 #

/compact 自動壓縮
對話 一個新對話;舊對話會被完整封存。 同一個對話。
對話紀錄 舊的對話紀錄保留在已封存的對話中;新對話從空白開始。 不變。每則訊息都留在對話紀錄中,並在發生壓縮的位置有一條壓縮線(Claude、DeepSeek、Claude Cloud)。
agent 知道什麼 只有摘要:最近的幾則訊息,最多 3,500 個字元。 由供應商撰寫的較短版本歷史記錄。
釘選訊息 留在舊對話中。 保留。
供應商、模型、資料夾 不會複製。 不變。

依供應商 #

/compact 自動壓縮
GitHub Copilot 和 OpenAI,SDK 引擎 是 是,在視窗的 80% 和 95% 時。活動行會顯示。
GitHub Copilot 和 OpenAI,擴充功能引擎 是 OAR 不設定也不顯示任何東西。
Claude 是 是。自動壓縮視窗、對話紀錄中的線、捲軸旁的點。
DeepSeek 0.9.17 新增 是 和 Claude 相同;除非你選擇其他視窗,否則視窗為 400k。
Claude Cloud 是 session 回報壓縮時,對話紀錄中會有一條線;沒有視窗設定。
Cursor 是 OAR 不設定也不顯示任何東西;沒有視窗設定。
Grok 是 OAR 不設定也不顯示任何東西;沒有視窗設定。

/compact 在每個供應商上的運作都相同,因為它從不使用供應商自己的壓縮:它只會開始一個新對話。「OAR 不設定也不顯示任何東西」表示 OAR 既不會觸發壓縮,也不會在對話紀錄中標出壓縮;供應商自己的 agent 仍可能管理它的上下文。