服务对象与地域限制
PuppyIP 仅面向海外合规企业及其授权人员提供服务,不面向中国大陆地区开放或提供代理服务。本服务仅限用于中国大陆境外的合法业务活动,严禁在中国大陆境内使用本服务。
代理 IP 或服务器位于境外,不改变上述限制。不得通过中转、转接、共享或转售向中国大陆境内的最终使用者提供本服务。使用前请阅读用户服务协议。
本文要点
- Anthropic 在 2026 年 11 月 2 日发布说明中列出 message threads beta;请求需携带 message-threads-2026-08-12 标头,其中的日期不是本次公告日期。
- create 接收完整对话、system 和 tools;continue 使用最新响应 id 且只发新增消息,必须完全省略 system 和 tools。
- 线程在最后一次请求后 5 分钟过期,服务端保存属于尽力而为;应用需要自己的完整历史,不能只留下 previous_message_id。
- 提示缓存需要单独配置,线程不改变 API 定价和速率限制;文档没有给出可外推的延迟或费用改善数值。
- 该 beta 不符合 ZDR 或 HIPAA 资格;官方列出的平台支持不等于已核验每个国家、账号或组织都可使用。
消息线程适合解决什么问题?
Message threads 是 Messages API 的短期对话状态功能。对于不断增长的对话或 agent 循环,服务端重建已保存的上下文,后续请求只需传递新增消息;官方称这可以减小请求并让首个 token 的等待时间更低、更稳定,但没有承诺固定提速比例。
它不是长期会话数据库。它也不同于 Claude Code 的提示缓存 TTL,以及 Claude Managed Agents 的 session threads。若你的问题是 Claude Code 的缓存命中与 /usage,可先看 https://puppyip.com/resources/claude-code-prompt-cache-ttl-usage-guide;后台工作流和预算则见 https://puppyip.com/resources/claude-managed-agents-dynamic-workflows-completion-budget-guide。
怎样创建线程并继续下一轮?
第一步,在 /v1/messages 的每次线程请求中发送 anthropic-beta: message-threads-2026-08-12。首轮携带完整 messages、所需的 system 和 tools,并设置 thread 为 {"type":"create"}。保存完整的助手响应及其 id;SDK 的线程 helper 会自动添加 beta 标头。
第二步,下一轮设置 thread 为 {"type":"continue","previous_message_id":"上一轮最新响应 id"},messages 只放上一轮之后新增的消息。完全省略 system 和 tools,连 null 都不能传,否则返回 400。每次收到新响应后,下一轮都改用新的 id。
例如,首轮用户问了一个问题,助手回答后,第二轮只发送用户的追问。不要再附上已经保存的旧问答,否则可能重复写入对话或报错。线程只能追加,每个响应 id 只能继续一次;要修改旧消息或分支对话,应携带相应完整历史创建新线程。
5 分钟过期或出现 404 后怎么恢复?
线程在最后一次请求后 5 分钟过期,每次实际保存的响应会重置这个计时;数据最迟在最后一次使用后一小时内删除。过期与删除是两个时间点。create 或 continue 的成功响应也不会确认该轮是否保存,往往要到下次 continue 才发现不可用。
先检查 error.details.error_code。thread_not_found 可能来自过期、上一轮未保存、回退模型回答、前一轮仍在生成,或组织、工作区及身份不一致等原因;不存在的模型也可能返回 404,不能把所有 404 都归为线程过期。 同一线程的请求应保持同一 API key、workspace,以及创建线程的用户或服务账号身份;先排除这些不一致,再决定是否重放。
如果确认需要恢复,使用应用保存的完整对话,包括已接收的助手响应,以及所需的 system 和 tools,发出新的 create,并移除旧消息上的 cache_control 断点。用新响应 id 接续。若重放后立刻再次 thread_not_found,按文档退回发送完整对话且不带 thread 的请求。
SDK helper 可协助重放,但其历史只保存在 helper 对象的内存中,进程退出后没有持久副本。应用应根据自己的保留规则维护恢复所需的完整历史;previous_message_id 本身不足以恢复对话。
哪些参数需要固定,哪些能逐轮调整?
model、tool_choice、thinking、mcp_servers(授权 token 除外)、context_management、output_config、container 中的 skills、顶层 cache_control,以及 anthropic-beta 的值集合,必须在每轮保持一致。变化会触发 400 thread_fingerprint_mismatch;需要改这些参数或首轮的 system/tools 时,创建新线程。max_tokens、stop_sequences、stream、metadata 和 service_tier 等非固定字段可以调整。
在文档列出的 Claude Fable 5.1、Claude Mythos 5.1、Claude Opus 5.5、Claude Sonnet 5.5 和 Claude Haiku 5.5 上,修改 system 或 tools 会使历史 thinking/redacted_thinking 块失效。此时创建新线程重放,应按文档移除这些旧块,避免 400。
使用 MCP 或 container 的请求仍需逐轮发送对应字段:服务端不保存 MCP URL、MCP 授权 token 或 container id,MCP 授权 token 可以更新。Claude Platform on AWS 的同一线程还须使用创建它的 IAM role 或 IAM user 的凭据。
Claude API 文档说明,与线程配合使用服务端 fallbacks 时,须每轮都带该字段或每轮都不带,不能中途添加或移除;其值可以变化。某些组织不能把 fallbacks 与线程组合使用。先保留准确错误及本地历史,再按官方恢复路径处理,不能用换代理来替代平台资格或身份要求。
请求变小,会自动缓存或少计费吗?
不会自动缓存。Prompt caching 是独立功能,仍需满足最小可缓存长度及断点规则。可以在每次请求配置顶层 cache_control,或自行设置内容块断点;一个线程请求最多支持四个断点,顶层 cache_control 算一个,首轮 system/tools 中的固定断点在后续请求仍占名额。
官方明确说线程不改变定价或速率限制。服务端会重建上下文后再调用模型,因此不能把少上传的历史内容当成少计的模型输入 token,也不能把更小的请求等同于自动省钱。应分别查看实际 usage、缓存读写和账单;本文没有费用或延迟实测。
上线前要核对哪些支持和数据边界?
文档将该功能列为所有模型上的 beta,平台包括 Claude API、Claude Platform on AWS、Claude Models on Google Cloud(Anthropic managed)和 Claude in Microsoft Foundry。不要据此替换成其他云服务名称。文档未给出完整国家、账号及组织资格清单,也没有正式可用日期;是否适用仍需按实际组织与平台核对。
线程内容、system prompt 和 tools 在服务端内存中用服务端管理的密钥加密,不写入持久存储,最迟在最后使用后一小时内删除。该功能不符合零数据保留(ZDR)或 HIPAA 资格,不能把短期内存保存解释为 ZDR。它不改变其他合资格功能的 ZDR 资格,也没有列出、读取或删除线程的 API。
线程不支持 Message Batches、token counting、compaction 和按需 compaction;计数时应提交完整对话。Context editing 仅列出 clear_thinking_20251015 且 keep='all' 的例外,启用 HIPAA readiness 或 Inference hooks 的组织也不支持。文件按引用保留,应用仍须确保文件可用。遇到不支持的组合,按文档使用完整对话且不带 thread 的请求。
资料来源
常见问题
流式响应已经返回 id,能立刻继续吗?
等到 message_stop 后再继续。id 会在 message_start 出现,但上一轮还在生成时继续可能返回 404。若 continue 的流在 message_stop 前断开,可重试同一个 continue;遇到 thread_already_continued 或 thread_continue_in_flight,则携完整历史创建新线程重放。
stop_reason 是 pause_turn 时怎么恢复?
使用该响应 id 继续,并发送 messages: [],暂停期间不要添加新的 user 消息。若恢复请求返回 404,用包含暂停响应的完整对话发起新的 create。拒答响应则不要继续,应去掉或改写触发拒答的轮次后创建新线程。
如果这一轮由 fallback 模型回答怎么办?
Claude API 文档说明,回退模型的响应不会写入线程,不能用其 id 继续。检查 usage.iterations 中的 fallback_message;流式请求检查最终 message_delta。将该响应和下一条消息加入完整历史,发起新的 create。若重试原 model/fallbacks,保留 server-side-fallback-2026-07-01 beta 标头及原参数;若再次由 fallback 回答,下一轮仍须完整重放。另一条路径是以 fallback_message 中的 model 和该模型接受的参数创建新线程,并省略 fallbacks。