雨天小六

读懂 Codex(4.23):Remote Compact 请求、响应和安装边界

· 更新于 2026-08-02 · 专栏:读懂 Codex

#Codex#Agent Runtime#Prompt#上下文工程#软件架构

Remote Compact 把类型化 History、Base Instructions、ToolSpec 和推理设置发送到专用 compact endpoint,由服务端返回替代 transcript。返回成功还不等于已经改变 Session;只有经过过滤、初始上下文处理并调用 replace_compacted_history 后,结果才成为 live History。

请求前先给超大工具输出瘦身

远端请求从 Session 克隆 History,按 context window 估算重写过大的 Function outputs,然后执行 for_prompt()。V1 发送标准 compact unary payload;V2 在 input 末尾加入 CompactionTrigger,通过流式 Responses 协议要求恰好一个 Compaction output item。

Remote Compact 请求、校验、过滤和安装流程
图 4.23-1:服务端负责压缩内容,Core 仍掌握输入规范化和返回安装。V2 流必须完成且恰好产生一个 compaction item。
async def remote_compact_attempt(session, step):
    history = session.history.snapshot()
    trim_outputs_to_fit(history, step.model.context_window)
    input_items = history.for_prompt(step.model.modalities)
    result = await compact_endpoint.send(
        instructions=session.base_instructions,
        input=input_items,
        tools=step.router.model_visible_specs(),
    )
    return input_items, validate_compaction_result(result)

Provider 声明支持远端压缩时才走这条路径。某些错误允许使用当前模型再尝试一次 previous-model compaction fallback;原始错误在 fallback 也失败时仍被保留,避免掩盖根因。

过滤后再安装

V1 返回列表经过 should_keep_compacted_history_item 过滤,只保留协议允许的 assistant、有效 user warning/summary 和 compaction 类型。V2 从请求输入中保留规定形状的消息与图片,在 Token 预算内截断文本,最后追加服务端 Compaction item。

Remote Compact 返回与 live History 安装之间的语义边界
图 4.23-2:attempt success 只是候选结果;filter、window advance、trace installed 和 replace history 共同构成提交边界。
async def install_remote_compaction(session, result, injection):
    filtered = [x for x in result.items if keep_compacted_item(x)]
    context, baseline = await build_initial_context_if_needed(injection)
    replacement = insert_context_at_canonical_boundary(filtered, context)
    window = await session.advance_window()
    await trace.record_installed(replacement, window)
    await session.replace_compacted_history(replacement, baseline, window)
    await session.recompute_token_usage()

若请求成功后在安装前被取消或过滤校验失败,旧 live History 仍应保持不变。这个提交式边界让重试和遥测能区分“服务端生成成功”与“客户端已采用”。

源码与测试锚点

  • codex-rs/core/src/compact_remote_request.rs:V1 请求。
  • codex-rs/core/src/compact_remote_v2_attempt.rscompact_remote_v2.rs:V2 trigger、流校验和保留形状。
  • codex-rs/core/src/compact_remote.rs:过滤与安装边界。

评论


← 返回文章列表