For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
主要導覽

壓縮

透過伺服器端壓縮與獨立壓縮,管理長時間持續的對話。

概覽

若要支援長時間持續的互動,你可以使用壓縮來縮減上下文大小,同時保留後續回合所需的狀態。

隨著對話內容增加,壓縮有助於兼顧品質、成本與延遲。

伺服器端壓縮

你可以在 Responses 建立請求 (POST /responsesclient.responses.create)中設定 context_management,並指定 compact_threshold,以啟用伺服器端壓縮。

  • 當呈現後的 Token 數量超過設定的閾值時,伺服器就會執行伺服器端壓縮。
  • 此模式不需要另外呼叫 /responses/compact
  • 回應串流會包含加密的壓縮項目。
  • ZDR 注意事項:在 Responses 建立請求中設定 store=false 時, 伺服器端壓縮即可配合 ZDR 使用。

傳回的壓縮項目會以較少的 Token,將先前的關鍵狀態與推理帶入下一次執行。其內容採用不透明格式,並非供人類解讀。

若使用無狀態的輸入陣列串接方式,請照常附加輸出項目。 若使用 previous_response_id,則每個回合只需傳入新的使用者訊息。 無論採用哪種方式,壓縮項目都會攜帶下一個視窗所需的上下文。

降低延遲的技巧:將輸出項目附加至先前的輸入項目後, 你可以移除最近一個壓縮項目之前的項目, 以縮小請求並降低長尾延遲。最新的壓縮項目會攜帶 繼續對話所需的上下文。若使用 previous_response_id 串接方式,請勿手動刪減。

使用流程

  1. 照常呼叫 /responses,但請加入 context_management 並設定 compact_threshold,以啟用伺服器端壓縮。
  2. 在串流傳送回應的過程中,若上下文大小超過閾值,伺服器就會觸發一次壓縮,在同一串流中傳送壓縮輸出項目,並刪減上下文,然後繼續推論。
  3. 選擇一種方式繼續執行迴圈:使用無狀態的輸入陣列串接方式(將 包含壓縮項目在內的輸出附加至下一個輸入陣列),或使用 previous_response_id 串接方式(每個回合只傳入新的使用者訊息,並 將該 ID 帶入下一個回合)。

使用流程範例

import OpenAI from "openai";
import { toResponseInputItems } from "openai/lib/responses/ResponseInputItems";

const client = new OpenAI();

const conversation = [
  {
    type: "message",
    role: "user",
    content: "Let's begin a long coding task.",
  },
];

const response = await client.responses.create({
  model: "gpt-5.3-codex",
  input: conversation,
  store: false,
  context_management: [{ type: "compaction", compact_threshold: 200_000 }],
});

conversation.push(...toResponseInputItems(response.output));
console.log(response.output_text);

獨立壓縮端點

若要自行控制壓縮,請使用 獨立壓縮端點,在 長時間執行的工作流程中進行無狀態壓縮。

此端點完全無狀態,且可配合 ZDR 使用。

你傳送完整的上下文視窗(訊息、工具及其他項目)後, 端點會傳回新的壓縮後上下文視窗,供你傳入下一次 /responses 呼叫。

傳回的壓縮後視窗包含一個加密的壓縮項目,會以較少的 Token 延續先前的關鍵狀態與推理。該項目的內容採用不透明格式,並非供人類解讀。

注意:壓縮後的視窗通常不只包含壓縮項目,也可能包含從先前視窗保留下來的項目。

輸出處理:請勿刪減 /responses/compact 的輸出。 傳回的視窗就是下一次應使用的完整上下文視窗,因此請將其原樣傳入下一次 /responses 呼叫。

獨立壓縮的使用流程

  1. 照常使用 /responses,傳送的輸入項目應包含使用者訊息、 助理輸出及工具互動。
  2. 當上下文視窗變大時,請呼叫 /responses/compact 來產生 新的壓縮後上下文視窗。傳送至 /responses/compact 的視窗 仍不得超出模型的上下文視窗容量。
  3. 後續呼叫 /responses 時,請傳入傳回的壓縮後視窗 (包括壓縮項目)作為輸入,取代完整的對話紀錄。

使用流程範例

import OpenAI from "openai";

const client = new OpenAI();

const conversation = [{ role: "user", content: "Plan a trip to Kyoto." }];

const compacted = await client.responses.compact({
  model: "gpt-6-astra",
  input: conversation,
});

const nextInput = [
  ...compacted.output.map((item) => item),
  { role: "user", content: "Add two more days to the itinerary." },
];

const response = await client.responses.create({
  model: "gpt-6-astra",
  input: nextInput,
  store: false,
});

console.log(response.output_text);