Anthropic 11 月 2 日在 Claude Platform 上放出 message threads 公测。开发者在 Messages API 请求里加一个 thread 参数,第一轮发完整对话,之后每轮只发新增消息和上一条回复的 ID,服务端负责把对话拼回去。
官方给的数字来自 Claude Code。这个功能已经在大多数 Claude Code 用户那里默认打开,500k 到 1M token 的请求,首 token 时间的中位数下降约 35%。其他长度区间的效果,博客没有列。
公测覆盖 Claude API、Claude Platform on AWS、Microsoft Foundry,以及 Google Cloud 上由 Anthropic 托管的 Claude。文档列出的可用模型从 Sonnet 4.5、Opus 4.5 一直到 Fable 5.1 和 Mythos 5.1。
省下的是校验和分词
没有线程时,智能体每跑一轮都要把整段对话重新上传一遍,API 也要重新校验、重新分词。会话越长,这段准备工作越久,做计算机操作的智能体尤其吃亏,历史截图每轮都得再传。
线程把这些内容先放在服务端内存里,处理量基本只剩新增的那一轮。
Claude 每轮仍然要读完整对话,所以模型那一侧的 token 不会变少,计费和限流都沿用现有规则。可以粗算一下:一个 80 万 token 的会话,每轮新增 2000 token,用线程之后请求里要传的内容约为原来的四百分之一,账单上的输入 token 却还是 80 万多。想省钱仍要靠提示缓存,这是另一个开关:线程请求顶层可以加 cache_control,不加的话,只发新增消息也不会有任何内容被缓存。
接入要留一条退路
文档把线程定义为“尽力而为”,这决定了接入方式。
- 过期:线程在最后一次请求后 5 分钟过期,每次存储回复会重新计时,最晚在最后一次使用后 1 小时删除。
- 失效:继续请求一旦返回 404,就得把完整对话重新发一遍,开一个新线程。返回结果不会告诉你这一轮有没有存成功,要到下一次继续请求才知道。
- 副本:对话的权威版本仍在应用这边。官方 SDK 的辅助工具会在内存里留一份并自动重放,进程结束就没了,需要跨进程的话得自己存。
- 固定字段:
system和tools只在创建时发,继续请求里带上哪怕是 null 也会报 400。model、thinking、tool_choice、mcp_servers等字段要每轮原样重发,改了就返回thread_fingerprint_mismatch。想换系统提示或工具,只能开新线程。
合规上也有一条限制。线程内容在内存中加密保存,不写入持久存储,但这个功能不符合零数据留存(ZDR)的条件。签了 ZDR 的企业用其他功能不受影响,线程这一项用不了。
另外,开发者要注意区分:Claude Managed Agents 里也有 session threads,和这次的 message threads 是两个东西。
补上的一块
OpenAI 的 Responses API 很早就有 previous_response_id,同样是传一个 ID 接着上文。Anthropic 这边长期要求客户端每轮带完整历史,好处是无状态、实现直白,代价就是会话变长后的延迟。这次的做法是个折中:状态只在服务端短暂停留,丢了就重放,客户端的副本一份也不能少。
从官方列的适用场景看,长时间运行的编程智能体、计算机操作智能体和文档图像密集的工作流是主要对象。Anthropic 也是先在自家 Claude Code 上默认打开,再开放给 API 用户。
短于几十万 token 的普通对话能拿到多少提升,官方没有给数字;文档只说线程在长的智能体循环里帮助最大。自建智能体的团队不妨先用自己的会话长度分布测一轮,再决定要不要为这条 404 重放路径多写一层代码。
参考来源:Claude 官方博客、CocoLoop、Claude Platform 开发文档;延迟降幅以官方公布的 Claude Code 中位数为准,粗算部分为编辑估算。