Claude Messages API 会话压缩:两条 beta 路、签名块与计费口径
压缩要多一次采样,不自动等于省钱
Anthropic 在 2026-02-05 把 compaction API 放进 beta(到阈值自动摘要),2026-09-14 又加了按需压缩:发顶层 compaction 参数,返回一个签名 compaction 块。两条路不能放在同一个请求里;按需档的签名块要放在 messages 最前,被摘要的消息留在块前面官方写明是 400;usage.iterations 决定这一单的真实消耗;与 prompt caching 怎么配合,官方也给了例子。
更新于 2026-10-20
Claude、GPT 与国产模型共用一把 key,按 token 计费;可调型号以 /models 为准。
- 按 token 计费,实时单价见 /models
- 支付宝、微信支付、信用卡、加密货币均可付款
- 充值后自助开通、立刻生效
四个关键点
两个不同的 beta header
阈值压缩走 compact-2026-01-12,配置放在 context_management.edits 里、条目类型写作 compact_20260112;按需压缩走 compact-2026-09-04,用顶层 compaction 参数。官方写明:compaction 与 context_management 不能放在同一个请求里。
阈值档的默认触发点
官方参数表:trigger 默认是 {"type": "input_tokens", "value": 150000},input_tokens 是唯一支持的触发类型,value 至少 50,000 tokens。触发之后 API 生成摘要、塞进 compaction 块,再用压缩后的上下文继续回答。
签名块的位置错就是 400
按需档返回的是一个签名 compaction 块。官方写明:被它摘要过的那批消息如果还留在块前面,请求会返回 400,错误码是 compaction_block_misplaced。回填时把块放在 messages 最前、替掉它摘要过的那批消息,块本身连 signature 一起原样保留。阈值档的块相反,跟在它摘要过的内容后面,前面那部分官方会替你丢掉。
为什么它要单独计费
官方口径:压缩要多一次采样,这一次计入 rate limit 与计费。响应里 usage.iterations 会多出一条 type 为 compaction 的采样记录;顶层 input_tokens 与 output_tokens 不含这条,官方要求把 iterations 全加起来才是这一单的真实消耗。
这能力是什么
服务端压缩:请求打到配置的阈值时,Claude 自己把当前会话摘要成一段文字,装进一个 compaction 块返回;后续请求你把响应接回去,API 会自动丢掉那个块之前的所有内容块,从摘要继续。官方的定位是替代客户端摘要代码——摘要在服务端写,你不需要自己实现摘要逻辑。官方点名两个适用场景:长期使用同一个聊天窗口的多轮对话,以及需要大量后续动作(多为工具调用、可能撑爆上下文)的任务型请求。
发生了什么
两个时间点都在官方 API release notes 里逐字可查。2026-02-05:compaction API 进入 beta,提供服务端上下文摘要,面向可以无限延续的对话,官方当时标注 Opus 4.6 可用。2026-09-14:Messages API 可以按需压缩会话,同样在 beta,用的 beta header 是 compact-2026-09-04;官方写明发顶层 compaction 参数就会返回一个签名 compaction 块,之后的请求把这个块放在原消息的位置上先送回去。按需档一次生成一个签名块、不返回回复(stop_reason 为 compaction),块可以后台先写着、会话继续跑全量历史,还能把最近几轮原样留在摘要之后。
时间线
2026-02-05:官方 release notes 写 compaction API 进入 beta,提供服务端上下文摘要,面向可以无限延续的对话,条目里写明当时在 Opus 4.6 上可用——服务端压缩第一次进 beta。
2026-09-14:同页新增按需压缩条目(beta header compact-2026-09-04):顶层 compaction 参数、返回签名块、块可后台生成、可保留最近几轮原文。
官方 compaction 总览、阈值页与按需页当天复核,API release notes 一并核对,每个参数、默认值与错误码都逐字核对过;按需档的官方支持平台列表里有 Google Cloud、没有 Amazon Bedrock,阈值档的列表里还列着 Amazon Bedrock。
官方确认 vs 需注意
官方确认
官方文档里逐字能对上的:trigger 默认值是 150000,value 至少 50,000,input_tokens 是唯一支持的触发类型;instructions 传非空字符串就整条替换默认摘要提示词(按需档上限 16,384 字符);pause_after_compaction 默认 false;压缩要多一次采样,这一次计入 rate limit 与计费;顶层用量不含 compaction 那次迭代,要自己把 iterations 加起来;被摘要的消息留在签名块前面会返回 400,错误码是 compaction_block_misplaced;compaction 与 context_management 不能放在同一个请求里;token counting 端点忽略 compaction 参数;图片、文档、container_upload 块与被摘要掉的 URL 在块替代后就不在了。
⚠️ 需注意
社区那句「越压缩越贵」不能直接当事实写:官方一面写压缩要多一次采样并计入计费,另一面在 Prompt caching 一节写压缩与 prompt caching 配合得很好,并给了把 cache_control 断点放在 compaction 块上、以及在系统提示词末尾放断点让系统提示词缓存保持有效的用法;官方还写明重复套用已有的 compaction 块不额外产生压缩成本。所以准确说法是「压缩有成本,但是否更划算取决于断点怎么放」。另外:整个能力仍在 beta;摘要失败时响应仍是 200 且 content 为空,但那一次调用照样计费;服务端瞬时问题会返回可重试的 529 overloaded_error(error.details.error_code 为 compaction_unavailable);task budget 的 remaining 值不能和 compaction 同请求,官方写这会返回 400。
两条路的相同与不同
相同点
都是服务端生成摘要、都返回 compaction 块、都用请求里那同一个模型来写摘要(官方 Current limitations 明写不能换成更便宜的模型来摘要);都会额外产生一次采样、都计入 rate limit 与计费;都还在 beta。
差异
触发方式不同:阈值档由 API 在请求中途判定并就地压缩,一次请求里可能压多次(带 server tools 时每个采样迭代开头都检查一次);按需档由你决定哪一次请求用来写摘要,且那次不生成回复。块的位置也不同:阈值档的块跟在它摘要过的内容后面,按需档的签名块直接替代那批消息。平台也不同:按需档的官方支持平台里有 Google Cloud、没有 Amazon Bedrock;阈值档的官方支持平台里还列了 Amazon Bedrock。
该怎么用
五步。1)先选档:想让 API 在普通请求里自己管上下文就用阈值档;要自己决定何时压、压的时候不能停、或者要保住最近几轮及其思考,就用按需档。2)发对 header:按需档要求在「要摘要的那一次」和「之后每个带签名块的请求」上都带 compact-2026-09-04;要摘要的那次漏了 header,会返回一条说明缺少该 beta header 的 400;之后带块的请求漏了 header,返回的是一条只说 compaction 不是预期内容块类型的校验错,官方写明这种报错不会提到 header。3)回填:把块原样放在 messages 首位、删掉它摘要过的消息。4)改计费口径:把用量统计改成累加 usage.iterations,别只看顶层两个字段。5)处理没摘要出来的情况:带 tools 时模型可能去调工具而不是写摘要,此时块里 content 为 null;官方给的对策是在 instructions 里明写不要调用工具。
在 QCode 上
压缩是 Messages API 侧的参数与 beta header,本站不提供这个开关。参数由 Anthropic 解释,本站不代它做任何行为承诺。官方该 beta 支持列表里的 claude-opus-5、claude-sonnet-5、claude-fable-5、claude-fable-5-1、claude-opus-4-8、claude-sonnet-4-6 都在 /models 公开列表(2026-10-20 核对);官方支持列表里还有 claude-mythos-5 与 claude-mythos-5-1。要确认某个型号支不支持压缩,看官方按 beta 头分开的 Compatibility 列表。计费按 token 计费,各模型单价见 /models。
常见问题
两条 beta 能一起开吗?
不能。官方明确写 compaction 与 context_management 不能放在同一个请求里,并补一句阈值压缩(compact_20260112)不能跑在带签名块的请求上。选一条路。
开了压缩是不是就省钱了?
不是。官方口径是压缩需要额外一次采样、计入 rate limits 与 billing,而且顶层 input_tokens / output_tokens 不含这次采样,得自己把 usage.iterations 加起来。省的是后续请求的上下文长度;缓存断点怎么放、重复套用旧块不额外计费这些细节,决定它到底划不划算。
签名块该放在哪?
放在 messages 最前面,并且把被它摘要掉的那批消息删掉,块本身连 signature 一起原样保留。官方明写:被摘要的消息若还留在签名块前面,请求会返回 400,错误码是 compaction_block_misplaced。之后每个带块的请求都要带 compact-2026-09-04 这个 header。
为什么我开了压缩,块里却是空的?
最常见是工具冲突:官方 Current limitations 写请求带 tools 时,模型偶尔在内部摘要那步去调工具而不是写摘要,此时块里 content 为 null。对策是给它 instructions,明写不要调用工具、只输出文本摘要。另外摘要失败时响应仍是 200、content 为空,而这次调用照样计费并出现在 usage.iterations 里。
官方支持压缩的型号在哪里查?QCode 上哪些模型能试?
官方按 beta 头把支持型号分成两张 Compatibility 列表:按需档一张、阈值档一张,型号写法能在各自那页逐字查到。官方该 beta 支持列表里的 claude-opus-5、claude-sonnet-5、claude-fable-5、claude-fable-5-1、claude-opus-4-8、claude-sonnet-4-6 都在 /models 公开列表(2026-10-20 核对);官方支持列表里还有 claude-mythos-5 与 claude-mythos-5-1。压缩本身是 API 参数,本站不提供开关;beta 随时可能改,不对任何档位作长期支持的承诺。
摘要能不能换个便宜模型来做?或者跳过它?
不能换。官方写明:请求里指定的模型就用来做摘要,没有选项换成别的(比如更便宜的)模型来做摘要。能调的只有 instructions(自定义摘要提示词,非空即整条替换默认提示词)与 trigger 阈值。要完全自己控制,就关掉服务端压缩改用客户端摘要,那是另一套做法。
信息来源
Anthropic 官方压缩文档三页:总览页 https://platform.claude.com/docs/en/build-with-claude/compaction(含 Choose how to compact 对照表与子页索引)、阈值页 https://platform.claude.com/docs/en/build-with-claude/compaction-threshold(Parameters / Understanding usage / Prompt caching / Current limitations 各节)、按需页 https://platform.claude.com/docs/en/build-with-claude/compaction-on-demand(Request a summary / Errors / Count compaction usage 各节),以及 API release notes https://platform.claude.com/docs/en/release-notes/api(2026-02-05 与 September 14, 2026 两条目逐字引用;当天直连官方 .md 形式抓取,HTTP 200)。
相关阅读
Context Engineering 完全指南 2026
压缩属于上下文工程的一种做法;这页讲方法论,不讲 API 参数。
Claude 会话中途增删工具(mid-conversation tool changes)
被摘要掉的中间指令与工具变更怎么处理,另一篇讲得细。
effort is not supported when thinking is disabled
保留思考与历史变更的报错族:签名块保住的那几轮思考同样要求前后一致。
加密货币充值指南
9 种币、56 条网络,0 平台手续费购买 AI 编程 API 额度。
本页转述 Anthropic 公开文档,与 Anthropic 无隶属关系。所有参数名、默认值、报错码与英文原句以 2026-10-20 抓取的版本为准,beta 接口随时可能变更。压缩是否更划算取决于额外的采样成本与缓存断点的位置,官方文档只写了这两点。QCode 提供 API 接入,不改变 Anthropic 接口的 beta 状态。