Claude Messages API 会话压缩:两条 beta 路、签名块与计费口径
压缩不自动等于省钱
Anthropic 在 2026-02-05 把 compaction API 放进 beta(到阈值自动摘要),又在 2026-09-14 加了按需压缩:发顶层 compaction 参数,返回一个签名 compaction 块。这页只回答四件事:两条路各自怎么发、块怎么回填(放错位置官方明写是 400)、usage.iterations 为什么会改变你的计费口径,以及它和 prompt caching 的真实关系。
更新于 2026-09-21
四个关键点
两个不同的 beta header
阈值压缩走 compact-2026-01-12,配置放在 context_management.edits 里、条目类型写作 compact_20260112;按需压缩走 compact-2026-09-04,用顶层 compaction 参数。官方原句:You can't send compaction and context_management on the same request。
阈值档的默认触发点
官方参数表:trigger 默认是 {"type": "input_tokens", "value": 150000},input_tokens 是唯一支持的触发类型,value 至少 50,000 tokens。触发之后 API 生成摘要、塞进 compaction 块,再用压缩后的上下文继续回答。
签名块的位置错就是 400
按需档返回的是一个签名 compaction 块,官方原句:Leaving the summarized messages in front of a signed block is a 400 error。回填时把块放在 messages 最前、替掉它摘要过的那批消息,块本身要原样保留(含 signature)。阈值档的块相反,是跟在它摘要过的内容后面。
为什么它要单独计费
官方口径:Compaction requires an additional sampling step, which contributes to rate limits and billing。响应里 usage.iterations 会多出一条 type 为 compaction 的采样记录;顶层 input_tokens 与 output_tokens 不含这条,官方要求把 iterations 全加起来才是这一单的真实消耗。
这能力是什么
服务端压缩:请求打到配置的阈值时,Claude 自己把当前会话摘要成一段文字,装进一个 compaction 块返回;后续请求你把响应接回去,API 会自动丢掉那个块之前的所有内容块,从摘要继续。官方给它的定位是替代客户端摘要代码(Server-side compaction is the recommended strategy),适用场景写了两类:一个聊天窗口长期用下去的多轮会话,以及需要大量后续动作(多为工具调用、可能撑爆上下文)的任务型请求。
发生了什么
两个时间点都在官方 API release notes 里逐字可查:2026-02-05「We've launched the compaction API in beta, providing server-side context summarization for effectively infinite conversations. Available on Opus 4.6.」;2026-09-21 复核时该页 September 14, 2026 条目写「The Messages API can now compact a conversation on demand ... in beta with the compact-2026-09-04 beta header」。按需档一次生成一个签名块、不返回回复(stop_reason 为 compaction),块可以后台先写着、会话继续跑全量历史,还能把最近几轮原样留在摘要之后。
时间线
2026-02-05:官方 release notes 写「We've launched the compaction API in beta ... Available on Opus 4.6.」——服务端压缩第一次进 beta。
2026-09-14:同页新增按需压缩条目(beta header compact-2026-09-04):顶层 compaction 参数、返回签名块、块可后台生成、可保留最近几轮原文。
2026-09-21:本页抓取官方 compaction 文档与 API release notes 两份 .md 逐字核对;站内目录与 30 天计价口径同日复核。
官方确认 vs 需注意
官方确认
能在 2026-09-21 抓取的官方页面上逐字对上的:trigger 默认 150000 且 value 至少 50,000;input_tokens 是唯一支持的触发类型;instructions 非空时整条替换默认摘要提示词(按需档上限 16,384 字符);pause_after_compaction 默认 false;Compaction requires an additional sampling step, which contributes to rate limits and billing;顶层用量不含 compaction 迭代、要自己加总 iterations;带签名块时 Leaving the summarized messages in front of a signed block is a 400 error;compaction 与 context_management 不能同请求;token counting 端点忽略 compaction 参数;图片、文档、container_upload 块与被摘要掉的 URL 在块替代后就不在了。
⚠️ 需注意
社区那句「越压缩越贵」不能直接当事实写:官方一面写压缩要额外一次采样并计入计费,另一面在 Prompt caching 一节写 Compaction works well with prompt caching,并给了把 cache_control 断点放在块上、以及在系统提示词末尾放断点让系统提示词缓存不被冲掉的用法;官方还写明重复套用已有的 compaction 块不额外产生压缩成本。所以准确说法是「压缩不是免费的,但也不是必然更贵,取决于断点怎么放」。另外:整个能力仍在 beta;摘要失败时响应仍是 200 且 content 为空,但那一次调用照样计费;服务端瞬时问题会返回可重试的 529 overloaded_error(error.details.error_code 为 compaction_unavailable);task budget 的 remaining 值不能和 compaction 同请求,官方写这会返回 400。(以上四条按 2026-09-21 核对的官方文档为准;文档若改,本节要重写。)
两条路的相同与不同
相同点
都是服务端生成摘要、都返回 compaction 块、都用请求里那同一个模型来写摘要(官方 Current limitations 明写不能换成更便宜的模型来摘要);都会额外产生一次采样、都计入 rate limit 与计费;都还在 beta。
差异
触发方式不同:阈值档由 API 在请求中途判定并就地压缩,一次请求里可能压多次(带 server tools 时每个采样迭代开头都检查一次);按需档由你决定哪一次请求用来写摘要,且那次不生成回复。块的位置也不同:阈值档的块跟在它摘要过的内容后面,按需档的签名块直接替代那批消息。平台也不同:官方写按需档 available on the Claude API but not on Amazon Bedrock or Google Cloud。
该怎么用
五步。1)先选档:想让 API 在普通请求里自己管上下文就用阈值档;要自己决定何时压、压的时候不能停、或者要保住最近几轮及其思考,就用按需档。2)发对 header:按需档要求在「要摘要的那一次」和「之后每个带签名块的请求」上都带 compact-2026-09-04;官方特别写了漏带 header 的报错是通用校验错(compaction: Extra inputs are not permitted),不会提 header。3)回填:把块原样放在 messages 首位、删掉它摘要过的消息。4)改计费口径:把用量统计改成累加 usage.iterations,别只看顶层两个字段。5)处理没摘要出来的情况:带 tools 时模型可能去调工具而不是写摘要,此时块里 content 为 null;官方给的对策是在 instructions 里明写不要调用工具。
在 QCode 上
压缩是 Messages API 侧的参数与 beta header,不是本站的开关。本站没有在这条链路上发过真实计费请求去验它(测试账号只读),所以这里只说清它属于哪一层:参数由上游 Anthropic 解释,本站不代它做任何行为承诺。2026-09-19 核本站目录:官方该 beta 支持列表里的 claude-opus-5、claude-sonnet-5、claude-fable-5、claude-fable-5-1、claude-opus-4-8、claude-sonnet-4-6 都在 /models 公开列表,近 30 天计价调用分别是 59,161、222,137、12,904、15,728、22,007、151,645 次;列表里也有 claude-mythos-5 与 claude-mythos-5-1,近 30 天计价调用 0 次。beta 状态的东西随时会改,本页不替任何档位承诺可用性不变。
常见问题
两条 beta 能一起开吗?
不能。官方在 How it fits with the rest of the API 一节写 You can't send compaction and context_management on the same request,并补一句阈值压缩(compact_20260112)不能跑在带签名块的请求上。选一条路。
开了压缩是不是就省钱了?
不是。官方口径是压缩需要额外一次采样、计入 rate limits 与 billing,而且顶层 input_tokens / output_tokens 不含这次采样,得自己把 usage.iterations 加起来。省的是后续请求的上下文长度;缓存断点怎么放、重复套用旧块不额外计费这些细节,决定它到底划不划算。
签名块该放在哪?
放在 messages 最前面,并且把被它摘要掉的那批消息删掉,块本身连 signature 一起原样保留。官方明写把原消息留在签名块前面是 400。之后每个请求都要带 compact-2026-09-04 这个 header。
为什么我开了压缩,块里却是空的?
最常见是工具冲突:官方 Current limitations 写请求带 tools 时,模型偶尔在内部摘要那步去调工具而不是写摘要,此时块里 content 为 null。对策是给它 instructions,明写不要调用工具、只输出文本摘要。另外摘要失败时响应仍是 200、content 为空,而这次调用照样计费并出现在 usage.iterations 里。
QCode 上哪些模型能试?
官方 beta 支持列表里的 claude-opus-5、claude-sonnet-5、claude-fable-5、claude-fable-5-1、claude-opus-4-8、claude-sonnet-4-6 都在本站 /models 公开列表(2026-09-19 核对,近 30 天计价调用 59,161 / 222,137 / 12,904 / 15,728 / 22,007 / 151,645 次)。压缩本身是 API 参数,本站不提供开关;beta 随时可能改,本页不承诺可用性不变。
摘要能不能换个便宜模型来做?或者跳过它?
不能换。官方写 The model specified in your request is used for summarization. There is no option to use a different (for example, cheaper) model for the summary。能调的只有 instructions(自定义摘要提示词,非空即整条替换默认提示词)与 trigger 阈值。要完全自己控制,就关掉服务端压缩改用客户端摘要,那是另一套做法。
信息来源
Anthropic《Compaction》https://platform.claude.com/docs/en/build-with-claude/compaction(本页 2026-09-21 直连官方 .md 形式抓取,HTTP 200;含 Compatibility / Parameters / Understanding usage / Prompt caching / Current limitations / Compact on demand 各节)与《Claude release notes》https://platform.claude.com/docs/en/release-notes/overview(同法抓取,2026-02-05 与 September 14, 2026 两条目逐字引用)。站内目录与 30 天计价调用为本站内部核对(/models 快照 + 计价台账)。
相关阅读
Context Engineering 完全指南 2026
压缩属于上下文工程的一种做法;这页讲方法论,不讲 API 参数。
Claude 会话中途增删工具(mid-conversation tool changes)
被摘要掉的中间指令与工具变更怎么处理,另一篇讲得细。
effort is not supported when thinking is disabled
保留思考与历史变更的报错族:签名块保住的那几轮思考同样要求前后一致。
本页转述 Anthropic 公开文档,与 Anthropic 无隶属关系。所有参数名、默认值、报错码与英文原句以 2026-09-21 抓取的版本为准,beta 接口随时可能变更;「压缩更省钱」这类结论本页不给,官方只给了额外采样计费与缓存配合用法。QCode 提供 API 接入,不改变上游接口的 beta 状态。