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);