English
主导航

旧版 API

压缩

通过服务端和独立压缩来管理长时间运行的对话。

概览

为了支持长时间运行的交互,你可以使用压缩来减少上下文大小,同时保留后续轮次所需的状态。

随着对话不断增长,压缩有助于平衡质量、成本和延迟。

服务端压缩

你可以在 Responses create 请求(POST /responses or client.responses.create)中设置以启用服务端压缩 context_management with compact_threshold.

  • 当渲染的 token 数量超过配置的阈值时,服务器将运行服务端压缩。
  • 在这种模式下不需要单独的 /responses/compact 调用。
  • 响应流中包含加密的压缩项。
  • ZDR 注意事项:当你在 Responses create 请求中设置 store=false 时,服务端压缩与 ZDR 兼容。

返回的压缩项使用更少的 token 将关键的历史状态和推理延续到下一次运行中。该项是不透明的,不打算供人类解读。

对于无状态输入数组串联,请像往常一样追加输出项。如果你正在使用 previous_response_id,则每次只传递新的用户消息。在这两种情况下,压缩项都承载了下一个窗口所需的上下文。

延迟提示:在将输出项追加到之前的输入项之后,你可以丢弃最近一次压缩项之前的项,以保持请求较小并减少长尾延迟。最新的压缩项包含了继续对话所需的上下文。如果你使用 previous_response_id 串联,请不要手动修剪。

用户旅程

  1. 像往常一样调用 /responses ,但需包含 context_management with compact_threshold to enable server-side compaction.
  2. 在响应流式传输时,如果上下文大小超过阈值,服务器会触发一次压缩过程,在同一数据流中输出一个压缩输出项,并在继续推理之前修剪上下文。
  3. 使用以下两种模式之一继续你的循环:无状态输入数组链式调用(将包含压缩项在内的输出附加到你下一次的输入数组中),或者 previous_response_id 链式调用(每次只传递新的用户消息,并将该 ID 向前传递)。

示例用户流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
conversation = [
    {
        "type": "message",
        "role": "user",
        "content": "Let's begin a long coding task.",
    }
]

while keep_going:
    response = client.responses.create(
        model="gpt-5.3-codex",
        input=conversation,
        store=False,
        context_management=[{"type": "compaction", "compact_threshold": 200000}],
    )

    conversation.extend(response.output)

    conversation.append(
        {
            "type": "message",
            "role": "user",
            "content": get_next_user_input(),
        }
    )

独立的压缩端点

如需显式控制,请使用 独立的压缩端点 在长时间运行的工作流中进行无状态压缩。

此端点完全无状态,且兼容 ZDR。

您发送完整的上下文窗口(消息、工具及其他项),该端点将返回一个新的压缩后上下文窗口,您可以将其传递给下一次 /responses call.

返回的压缩窗口包含一个加密的压缩项,该压缩项使用更少的 token 延续了之前的关键状态和推理。它是不可见的,不打算供人类解读。

注意:压缩后的窗口通常不仅仅包含压缩项。它还可以包含来自先前窗口的保留项。

输出处理:请勿删减 /responses/compact 输出。返回的窗口是规范的下一个上下文窗口,因此请将其原样传递至您的下一次 /responses 调用中。

独立压缩的用户旅程

  1. 使用 /responses 通常,发送包含用户消息、助手输出和工具交互的输入项。
  2. 当你的上下文窗口变大时,调用 /responses/compact 以生成一个新的压缩上下文窗口。你发送给 /responses/compact 的窗口仍必须适应模型的上下文窗口限制。
  3. For subsequent /responses 在后续调用中,将返回的压缩窗口(包括压缩项)作为输入传入,而不是完整的对话记录。

示例用户流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# Full window collected from prior turns
long_input_items_array = [...]

# 1) Compact the current window
compacted = client.responses.compact(
    model="gpt-5.5",
    input=long_input_items_array,
)

# 2) Start the next turn by appending a new user message
next_input = [
    *compacted.output,  # Use compact output as-is
    {
        "type": "message",
        "role": "user",
        "content": user_input_message(),
    },
]

next_response = client.responses.create(
    model="gpt-5.5",
    input=next_input,
    store=False,  # Keep the flow ZDR-friendly
)