Claude Platform Docs
API 参考支持与配置

迁移到 API 版本 2026-10-21

将 Claude API 集成从 API 版本 2023-06-01 升级到 2026-10-21:需要安装的 SDK 版本以及需要进行的代码更改。

本指南列出了从 API 版本 2023-06-01 迁移到 2026-10-21 所需的代码更改。升级步骤按顺序说明了需要执行的操作。

升级步骤

  1. 切换到 2026-10-21

    如果您使用 SDK,您的请求会使用该 SDK 主版本发布时的当前 API 版本。下面为您的语言列出的版本是首批使用 2026-10-21 的版本,因此请升级到这些版本。如果您不通过 SDK 调用 API,请将 anthropic-version 标头设置为 2026-10-21。

    将 anthropic 包升级到 2.0.0 版本。

    请将此次升级与下一步中的修复一起发布。

  2. 针对破坏性变更更新您的代码

    逐一查看 breaking changes(破坏性变更),并针对每一项影响您的变更更新代码。同时完成新版 SDK 或 CLI 所需的代码更改。

  3. 针对 2026-10-21 进行测试

    在发布之前,针对 2026-10-21 测试您的集成。

破坏性变更

Messages API

这些变更适用于对 Messages API(POST /v1/messages)的请求、令牌计数,以及使用 2026-10-21 创建的 Message Batch 中的每个请求。

assistant 消息中的文档块会返回错误

如果您直接在 assistant 消息中发送 document 块,则会受到影响。

在 2026-10-21 中,直接在 assistant 消息中放置 document 块的请求会返回 400 错误。请改为在 user 消息中发送文档。嵌套在其他块中的文档(例如 Claude 返回的网页获取工具结果)仍然被接受。

user 消息中的引用会返回错误

如果您在 user 消息的 text 块上发送 citations(包括在 search_result 块内),则会受到影响。

在 2026-10-21 中,在 user 消息中发送带有非空 citations 数组的 text 块的请求会返回 400 错误。请从这些块中移除 citations。assistant 消息中 text 块上的引用(例如您回传的 Claude 先前回复)仍然被接受,文档和搜索结果上的 "citations": {"enabled": true} 设置也同样被接受。

采样参数已移除

如果您在 Messages 请求或 Message Batch 请求中发送 temperature、top_p 或 top_k,则会受到影响。

在 2026-10-21 中,发送 temperature、top_p 或 top_k 的请求会返回 400 错误,即使参数值为默认值也是如此。

请从您的请求中移除这三个参数。

从最新的主版本开始,SDK 和 CLI 不再包含这三个参数。

没有这些参数时,请求会使用它们的默认值进行采样,包括 temperature 为 1.0,这与省略这些参数的 2023-06-01 请求相同。已经只接受默认值的模型(例如 Claude 4.7 及更高版本的模型)的采样方式与之前相同。在接受其他值的模型(例如 Claude Sonnet 4.6)上,通过降低 temperature 来获得更一致输出的请求将失去该效果。没有其他设置可以替代它。如果某个请求依赖非默认值,请停止发送该参数,或让该请求继续使用 2023-06-01。

Admin API 和 Claude Enterprise Analytics API

如果您的代码读取下表中的 Admin API 或 Claude Enterprise Analytics API 响应字段,则会受到影响。

在 2026-10-21 中,Admin API 和 Claude Enterprise Analytics API 的响应不再包含已重命名字段的旧名称。请改用新名称。

Admin API:

端点旧名称新名称
RBAC 组:创建、列出、检索和更新rolesrole_ids
RBAC 组成员:列出和添加,以及移除成员的响应group_idrbac_group_id
RBAC 角色:列出和检索namedisplay_name
组织和工作区速率限制:列出,以及设置工作区速率限制的响应group_typegroup.type
API 密钥:列出、检索和更新workspace_idscope(值不同;请参阅 API 密钥上的 workspace_id)

Claude Enterprise Analytics API:

端点旧名称新名称
按用户的使用量和成本报告actor.emailactor.email_address
活动摘要summariesdata

速率限制列表端点上的 group_type 查询参数以及 API 密钥列表端点上的 workspace_id 筛选器保持不变。

API 密钥上的 workspace_id

如果您的代码读取 API 密钥上的 workspace_id,则会受到影响。

在 2023-06-01 中,API 密钥的 workspace_id 是该密钥所绑定工作区的 ID;对于绑定到 Default Workspace 的密钥以及未绑定到单个工作区的密钥(全工作区密钥),该值为 null。

在 2026-10-21 中,workspace_id 已被移除。请改为读取 scope:对于绑定到某个工作区(包括 Default Workspace)的密钥,scope.workspace_id 是该工作区的真实 ID;全工作区密钥的 scope 为 {"type": "organization"},不含 workspace_id。

如果您的代码将 null 的 workspace_id 视为 Default Workspace,请改为将 scope.workspace_id 与您的 Default Workspace 的 ID 进行比较。要查找该 ID,请使用 include_default=true 调用 List Workspaces,并取名为 "Default" 的工作区。

SDK 和 CLI 变更

早期的 SDK 和 CLI 版本在每个请求中都发送 anthropic-version: 2023-06-01。切换到 2026-10-21 中列出的版本会发送 2026-10-21,包括它们的 Amazon Bedrock 和 Google Cloud 客户端。破坏性变更中的变更同样适用于它们:已移除的参数和旧字段名称也已从 SDK 的类型以及 CLI 的标志和输出中删除。

MessageParam 是每个角色对应一种类型的联合类型

在早期版本中,MessageParam 是适用于所有角色的单一类型。现在每个角色都有自己的类型:UserMessageParam、AssistantMessageParam 和 SystemMessageParam。BetaMessageParam 也以同样的方式拆分为 BetaUserMessageParam、BetaAssistantMessageParam 和 BetaSystemMessageParam。SDK 发送的请求具有与之前相同的字段和值。

以字典字面量编写的消息(例如 {"role": "user", "content": "Hello"})无需更改。

在 v1 中,anthropic.types.MessageParam 是一个 TypedDict。在 v2 中,它是这三种类型的联合类型,而 anthropic.types.beta.BetaMessageParam 是其三种类型的联合类型。这两个名称在类型注解中仍然可用,例如 list[MessageParam]。

现在调用这两个名称中的任何一个都会引发 TypeError,类型检查器也会标记它。请将消息写成字典:

# 之前
message = MessageParam(role="user", content="Hello")

# 之后
message: MessageParam = {"role": "user", "content": "Hello"}

继承这两个名称中的任何一个也会引发 TypeError。请继承对应角色的类型,例如 UserMessageParam。

其余变更仅影响类型检查。如果字典的 role 是一个可以包含多个角色的变量,它将不匹配联合类型中的任何类型,因此请一次为一个角色构建字典:

# 之前
def to_message(role: Literal["user", "assistant"], text: str) -> MessageParam:
    return {"role": role, "content": text}


# 之后
def to_message(role: Literal["user", "assistant"], text: str) -> MessageParam:
    if role == "user":
        return {"role": "user", "content": text}
    return {"role": "assistant", "content": text}

另有两项仅适用于 BetaMessageParam:

  • clear_at 和 output_config 是 BetaSystemMessageParam 的键,因此 user 或 assistant 消息不能包含它们。
  • content 在 BetaSystemMessageParam 中是可选的,因此 pyright 会报告 message["content"]。请使用 message.get("content") 读取它,或先检查 message["role"] 不是 "system"。

单值枚举变为常量

这会影响 C#、Go、Java、PHP 和 Ruby SDK 以及一个 CLI 标志。在早期版本中,只能包含一个值的必填字段拥有自己的枚举类型,且该枚举只有一个成员。这些字段现在是常量,相应的枚举类型已被移除。SDK 发送和读取的 JSON 保持不变。

--type 在 ant beta:sessions:resources add 上是可选的。file 是 --type 在此处唯一可取的值,因此 v2 会为您发送它。仍然传入 --type file 的命令可以继续正常工作,因此无需进行任何更改。

工具运行器中的客户端压缩已移除

此变更影响 TypeScript 和 Ruby SDK。"tool runner"(工具运行器)中的客户端 "compaction"(压缩)已被移除,改用服务器端压缩。服务器端压缩在 API 内部对对话进行摘要,而不是由客户端额外发送一个请求来完成。

compactionControl 选项和 @anthropic-ai/sdk/lib/tools/CompactionControl 模块已被移除。该选项在 v0.129.0 中已停止工作,传入它会抛出 AnthropicError。它不在参数类型中,因此 TypeScript 会将其报告为未知属性。

要继续在达到令牌阈值时自动压缩:

// 之前
const runner = client.beta.messages.toolRunner({
  // ...
  compactionControl: { enabled: true, contextTokenThreshold: 100_000 }
});

// 之后
const runner = client.beta.messages.toolRunner({
  // ...
  betas: ["compact-2026-01-12"],
  context_management: {
    edits: [{ type: "compact_20260112", trigger: { type: "input_tokens", value: 100_000 } }]
  }
});

要自行决定何时压缩对话,请调用 runner.compactBeforeNextTurn()。

触发阈值必须至少为 50,000 个令牌。有关其他选项(pause_after_compaction、自定义 instructions),请参阅压缩。

Text Completions 已移除

旧版 Text Completions API 已从 TypeScript、Go、Java 和 Ruby SDK 以及 CLI 中移除。较新的模型和功能不支持它。请改用 Messages API。

ant completions create 命令已被移除。

# 之前
ant completions create \
  --model "$MODEL" \
  --max-tokens-to-sample 1024 \
  --prompt $'\n\nHuman: Hello, Claude\n\nAssistant:'

# 之后
ant messages create \
  --model "$MODEL" \
  --max-tokens 1024 \
  --message '{role: user, content: "Hello, Claude"}'

回复文本从 completion 字段移到了 content.0.text,因此原先传入 --transform completion 的脚本应改为传入 --transform content.0.text。

ant messages create 同样接受 --stream,但其事件的结构不同:文本出现在 content_block_delta 事件的 delta.text 中,因此 --transform content.0.text 不适用于流。

非 beta 的 Models 方法中已移除 betas

非 beta 的 Models 方法不再接受 betas,ant models 命令也不再接受 --beta。要发送 beta 标头,请在 client.beta.models 上调用相同的方法,或在 CLI 中使用 ant beta:models。在 SDK 中,这些方法返回 BetaModelInfo,而非 beta 方法返回 ModelInfo。

client.models.retrieve() 和 client.models.list() 不再接受 betas(传入它会导致 TypeError,类型检查器也会标记它),并且 anthropic.types.ModelListParams 不再有 betas 键。

# 之前
page = client.models.list(betas=[beta])

# 之后
page = client.beta.models.list(betas=[beta])

API 密钥以 Authorization: Bearer 形式发送

SDK 和 CLI 现在以 Authorization: Bearer <key> 的形式发送您的 API 密钥,而不是放在 X-Api-Key 标头中。因此,请将任何读取或设置 X-Api-Key 的代理或网关改为使用 Authorization,或者自行在 X-Api-Key 中发送密钥。Claude API 接受放在任一标头中的密钥,因此直接与 API 通信的程序无需更改。

# Before
X-Api-Key: <key>

# After
Authorization: Bearer <key>

Authorization 是 auth_token 已在使用的标头。

这适用于 Anthropic 和 AsyncAnthropic 的 api_key 参数和 ANTHROPIC_API_KEY 环境变量,以及 AnthropicAWS 的 api_key 和 ANTHROPIC_AWS_API_KEY。AnthropicFoundry 仍以 x-api-key 发送其密钥,而 AnthropicBedrockMantle 原本就发送 bearer 令牌。

如果代理或网关读取 X-Api-Key

在 HTTP 客户端上使用 auth 函数将密钥移回原处。它会在客户端发送的每个请求上运行,包括重试:

import httpx2
from anthropic import Anthropic, DefaultHttpxClient


def send_x_api_key(request: httpx2.Request) -> httpx2.Request:
    if request.headers.get("Authorization") == f"Bearer {api_key}":
        del request.headers["Authorization"]
        request.headers["X-Api-Key"] = api_key
    return request


client = Anthropic(api_key=api_key, http_client=DefaultHttpxClient(auth=send_x_api_key))

AsyncAnthropic 接受相同的函数,写法为 http_client=DefaultAsyncHttpxClient(auth=send_x_api_key)。

如果您在请求上设置或移除了 X-Api-Key

此变更影响 Python、TypeScript、Go、PHP 和 Ruby SDK。

如果您移除了 X-Api-Key 以便请求只发送身份验证令牌,请删除该代码而不是修改它,因为移除 Authorization 会移除该令牌。一个客户端只持有一个凭据,因此请确保该凭据是令牌:如果代码中未传入任何凭据,且同时设置了 ANTHROPIC_API_KEY 和 ANTHROPIC_AUTH_TOKEN,客户端会使用密钥。

传入 extra_headers={"X-Api-Key": omit} 以使请求不携带密钥的代码不再起作用。请改为传入 extra_headers={"Authorization": omit}。

extra_headers={"X-Api-Key": other_key} 不再替换客户端的密钥:两个密钥都会被发出。要在单个请求中发送另一个密钥,请传入 extra_headers={"Authorization": f"Bearer {other_key}"}。

一个客户端只持有一个凭据

API 密钥和身份验证令牌现在共用一个标头,因此一个 SDK 客户端只持有一个凭据。如果代码中未传入任何凭据,它会遵循凭据优先级顺序。

当客户端同时拥有 API 密钥和身份验证令牌时,v1 会将两者都发送,各自放在自己的标头中。凭据是 api_key、auth_token、credentials、config 或 profile 之一。

  • 最多传入一个。 在构造函数中,或在一次 copy() 或 with_options() 调用中传入两个或更多,会引发 ValueError。None 不计入。v1 引发的是 TypeError,并且仅在传入 credentials、config 和 profile 中的两个时才会引发。
  • 您传入的那个就是唯一的凭据。 与 v1 一样,客户端不会在环境或磁盘上查找其他凭据。
  • 如果未传入任何凭据,则只使用以下各项中第一个已设置的: ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN、ANTHROPIC_PROFILE 所指定的配置文件、工作负载身份联合变量、磁盘上的活动配置文件(即 active_config 文件所指定的配置文件,否则为 default)。当前两项都已设置时,客户端会记录一次警告。在 v1 中,当设置了 ANTHROPIC_CONFIG_DIR 或存在 active_config 文件时,活动配置文件优先于联合变量;要继续使用它,请设置 ANTHROPIC_PROFILE。
  • copy() 和 with_options() 会替换。 您传入的凭据会替换客户端自身的凭据,无论两者是哪种类型。来自旧凭据的配置或配置文件的基础 URL 和标头会随之移除,并改用新凭据的基础 URL 和标头。您传入的基础 URL 会保留。
client = Anthropic(api_key=key, auth_token=token)

# 之前:发送 `X-Api-Key: <key>` 和 `Authorization: Bearer <token>`
# 之后:抛出 `ValueError`

平台客户端保留各自的规则。AnthropicAWS 可以在 api_key 之外同时接受 auth_token 而不报错,并发送密钥。

_client.py 中 Anthropic.__init__ 和 Anthropic.copy 的文档字符串提供了详细信息。

如果您依赖于同时发送两者,例如为网关发送令牌、为其后的 API 发送密钥,请将令牌作为 auth_token 传入,并在 default_headers 中设置 X-Api-Key。让网关在转发请求之前移除其 Authorization 标头。Claude API 期望每个请求只有一个凭据。

仅影响某一个 SDK 或 CLI 的变更

以下每项变更仅影响某一个 SDK 或 CLI。

--api-key 和 --auth-token 已被移除。 ant 不再接受以标志值形式传入的 API 密钥或身份验证令牌,因为命令行上的值会在 shell 历史记录和进程列表中可见。自 v1.27.0 起,这两个标志都会打印弃用警告。仍然传入其中任一标志的命令会以 flag provided but not defined 终止。

已移除改用
--api-key <key>ANTHROPIC_API_KEY、--api-key-stdin 或 ant auth login
--auth-token <token>ANTHROPIC_AUTH_TOKEN 或 --auth-token-stdin
# 之前
ant --api-key "$KEY" models list

# 之后,从环境变量读取
export ANTHROPIC_API_KEY="$KEY"
ant models list

# 之后,从密钥管理器读取
op read op://vault/anthropic/api-key | ant --api-key-stdin models list

--api-key-stdin 和 --auth-token-stdin 会读取全部标准输入,因此使用其中之一的命令需要通过标志来提供请求体。

ant auth status、ant apply 的首次运行提示以及关于多个身份验证来源的说明,现在将这些凭据称为 ANTHROPIC_API_KEY 和 ANTHROPIC_AUTH_TOKEN,而此前它们打印的是 --api-key / ANTHROPIC_API_KEY 和 --auth-token / ANTHROPIC_AUTH_TOKEN。

许可证变更为 Apache 2.0

从这些版本开始,SDK 和 CLI 采用 Apache License, Version 2.0 许可。早期版本仍采用 MIT License。无需更改代码。如果您会跟踪依赖项的许可证,请更新相应条目。

  • TypeScript: 平台包(@anthropic-ai/bedrock-sdk、@anthropic-ai/vertex-sdk、@anthropic-ai/foundry-sdk、@anthropic-ai/aws-sdk 和 @anthropic-ai/google-cloud-sdk)在各自的 1.0.0 版本中变更许可证。
  • C#: 其他包(Anthropic.Bedrock、Anthropic.Vertex、Anthropic.Foundry、Anthropic.Aws、Anthropic.GoogleCloud 和 Anthropic.Mcp)在各自的 1.0.0 版本中变更许可证。
  • Java: 此变更涵盖所有 com.anthropic 构件。

Was this page helpful?