Claude 对话中 System Messages 正式 GA:每个 Gateway 和代理运营商都需要立刻审查

Anthropic 的对话中 system message 功能于 7 月 15 日取消 beta header 要求,覆盖 API、Bedrock 和 Vertex AI。如果你的 gateway 在代理 Claude 时过滤了 messages 数组中的 role:system 条目,你的 agentic 会话已在无声中损坏。

发布于 来源 Anthropic

归档条目:由 AI 根据所引信源辅助生成,发布时未经逐篇审阅。责任编辑:Joe Werner。

路由示意图,展示对话中途注入 system message 的流程

2026 年 7 月 15 日,Anthropic 正式取消了对话中 system message 功能的 beta header 要求,覆盖 Claude API、Amazon Bedrock 和 Google Cloud Vertex AI。这条看似不起眼的 release note,实际上是一次重大的运营变化:运营商首次可以在会话中途以 operator 权级注入系统指令,同时不会使 prompt cache 失效——而任何会过滤或篡改 messages 数组中 role: system 条目的 gateway 或代理,将静默破坏 agentic 工作流,且不会返回任何错误。

变更内容

对话中 system message 允许你在 messages 数组的任意位置追加一个 {"role": "system"} 对象,而非仅在顶层 system 字段中设置。该指令具有完整的 operator 级权限——可覆盖用户指令中的冲突内容——但与编辑顶层 system 字段不同,它不会移动 cache breakpoint。已缓存的前缀保持不变,只有新增消息作为新输入进行处理。

该功能现已无需 beta header,正式 GA,覆盖:

  • Claude Fable 5
  • Claude Mythos 5
  • Claude Opus 4.8

三个平台均支持:Claude API、Bedrock 和 Vertex AI。

重要例外: Claude Sonnet 5 不支持此功能。如果你路由到 Sonnet 5 且应用在 messages 中途发送了 role: system,Anthropic 建议改用顶层 system 字段。

对 AI 工程团队的影响

实际应用场景远不止是一个聪明的缓存技巧。对话中 system message 解决了 agentic 会话中一个真实存在的问题——此前只能用笨拙的变通方案应对:

需要 operator 权限的状态变更。 长时间 agentic 会话会积累状态:可用工具发生变化、剩余 token 预算减少、用户切换审批模式。将这些事实以 user 消息注入是可行的,但 Claude 将其视为低于系统指令的权级。通过对话中 role: system 消息,可在不刷新缓存的情况下保持 operator 权限。

每轮 governance 策略。 会话级模式——"自动审批所有 bash 命令"、"切换到只读推理模式"——现在可以在会话中途以 operator 权限开启或关闭,且每次切换只计费新消息,而非全部历史记录。

Prompt cache 成本优化。 对于包含数百个已缓存 turn 的会话,编辑顶层 system 字段实际上等同于清空缓存。一个拥有 200 个 turn、50k token 上下文的编程会话,每次修改 system prompt 都会触发完整重新处理。对话中 system message 模式彻底消除了这一权衡。

Claude Code prompt cache 修复(2.1.212)。 本周早些时候发布的 Claude Code 2.1.212 包含一项相关修复:"对话中 system block 现在可在 LLM gateway 和自定义 base URL(Bedrock、Vertex、1P)后端正常工作"。这表明该功能此前在 gateway 代理会话中表现不稳定——在 7 月 15 日之前测试过此功能的运营商可能遇到过不一致的结果。

Router/Operator 视角

以下是大多数 gateway 和代理运营商需要审查的静默失效场景:

消息归一化中的 role 过滤。 许多 gateway——包括 OpenAI 兼容反向代理——会对消息数组进行归一化处理,过滤掉非 user 或 assistant 的 role。这种常见模式会静默丢弃对话中的 system message。agentic 应用认为 governance 指令已送达,但模型从未收到。不返回任何错误。

OpenAI 兼容路由的缺口。 OpenAI /v1/chat/completions schema 不支持在 messages 数组中途使用 role: system(仅支持在数组顶部)。如果你的 gateway 将 Anthropic API 调用转换为 OpenAI 兼容调用进行下游路由,这个功能在转换过程中会完全丢失。必须走 Anthropic 原生 API 路径才能保留。

代理 Claude 的运营商审查清单:

  1. 检查你的 gateway 是否将 role: system 消息对象原封不动地转发给 Anthropic API。
  2. 验证你的 role 白名单是否在 messages 数组中包含 system,而不仅仅是顶层字段。
  3. 用一个简短的 agentic 会话进行测试,注入对话中 system message,确认指令在模型的下一个 turn 生效。
  4. 如果你同时路由到 Fable/Mythos/Opus 4.8 和 Sonnet 5,确保你的路由策略考虑到 Sonnet 5 不支持此功能——对 Sonnet 5 路由降级到顶层 system 字段注入。
  5. 如果你将 Anthropic API 以 OpenAI 兼容端点形式代理,向用户文档明确说明:对话中 system message 在该路径上会被静默丢弃。

Prompt cache 路由影响。 如果你代理了缓存优化请求(在 system 字段上设置 cache_control 以降低成本),对话中 system message 现在允许客户端动态添加 operator 指令而不产生 cache miss。这改变了长会话的预期缓存命中率模式:如果客户端迁移到此模式,你应该看到完整上下文重新处理事件减少。

需要关注的后续动态

  • Sonnet 5 的功能对齐。 目前没有公布 Claude Sonnet 5 支持对话中 system message 的时间表。如果你的应用因成本原因使用 Sonnet 5,同时在 governance 密集型工作流中使用 Fable/Mythos/Opus 4.8,你需要分离代码路径。
  • 7 月 22 日 memory API 切换。 7 月 22 日,managed-agents-2026-04-01 beta header 的 list memories 行为将与 agent-memory-2026-07-22 一致。分页和排序行为在该日期发生变化——这是独立于 system message 变更的另一项审查事项。
  • SDK 版本要求。 对话中 system message 不需要新 SDK 版本——这是消息 schema 层面的变更——但需要验证你的序列化层不会在请求发出前过滤掉该 role。

如需了解你当前的路由配置如何转发 Anthropic API 请求,可参阅 TheRouter 相关文档。

帮助与联系