遷移至 API 版本 2026-10-21
將 Claude API 整合從 API 版本 2023-06-01 升級至 2026-10-21:需要安裝的 SDK 版本以及需要進行的程式碼變更。
本指南列出從 API 版本 2023-06-01 遷移至 2026-10-21 所需的程式碼變更。升級步驟依序說明您需要執行的操作。
升級步驟
切換至 2026-10-21
如果您使用 SDK,您的請求會使用該 SDK 主要版本發布時的現行 API 版本。下方針對您的語言所列出的版本,是第一個使用
2026-10-21的版本,因此請升級至這些版本。如果您不透過 SDK 呼叫 API,請將anthropic-version標頭設定為2026-10-21。將
anthropic套件升級至 2.0.0 版。請將此升級與下一步驟中的修正一併發布。
針對重大變更更新您的程式碼
逐一檢視重大變更,並針對每一項會影響您的變更更新程式碼。同時也請進行新版 SDK 或 CLI 所需的程式碼變更。
針對 2026-10-21 進行測試
在發布之前,請針對
2026-10-21測試您的整合。
重大變更
Messages API
這些變更適用於對 Messages API(POST /v1/messages)的請求、token 計數,以及以 2026-10-21 建立的 Message Batch 中的每個請求。
assistant 訊息中的 document 區塊會傳回錯誤
如果您直接在 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 群組:建立、列出、擷取與更新 | roles | role_ids |
| RBAC 群組成員:列出與新增,以及移除成員的回應 | group_id | rbac_group_id |
| RBAC 角色:列出與擷取 | name | display_name |
| 組織與工作區速率限制:列出,以及設定工作區速率限制的回應 | group_type | group.type |
| API 金鑰:列出、擷取與更新 | workspace_id | scope(值不同;請參閱 API 金鑰上的 workspace_id) |
Claude Enterprise Analytics API:
速率限制列出端點上的 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。重大變更中的變更同樣適用於這些版本:已移除的參數與舊欄位名稱也已從 SDK 的型別以及 CLI 的旗標與輸出中移除。
Amazon Bedrock 與 Google Cloud 上的 API 版本
SDK 中用於 Google Cloud's Agent Platform 的用戶端會在請求主體中指定版本,而非在標頭中。它會傳送 anthropic_version: 2026-10-21(較早的版本傳送的是 vertex-2023-10-16),且不傳送 anthropic-version 標頭。
Amazon Bedrock 用戶端也是如此。它會傳送 anthropic_version: 2026-10-21(較早的版本傳送的是 bedrock-2023-05-31),且不傳送 anthropic-version 標頭。早於 Claude Opus 4.7 的模型目前尚不支援 Bedrock 上的 API 版本 2026-10-21,指定該版本的請求可能會收到 400 錯誤。如果您使用其中任何一個模型,請暫時繼續使用較早的 SDK 版本,或者升級後自行傳送 bedrock-2023-05-31。
這適用於 AnthropicVertex、AsyncAnthropicVertex、AnthropicBedrock 與 AsyncAnthropicBedrock。
若要傳送 bedrock-2023-05-31,請在每個請求中傳入 extra_body={"anthropic_version": "bedrock-2023-05-31"}。
MessageParam 是每個角色各有一個型別的 union
在較早的版本中,MessageParam 是適用於所有角色的單一型別。現在每個角色都有自己的型別:UserMessageParam、AssistantMessageParam 與 SystemMessageParam。BetaMessageParam 也以相同方式拆分為 BetaUserMessageParam、BetaAssistantMessageParam 與 BetaSystemMessageParam。SDK 傳送的請求具有與先前相同的欄位與值。
以 dict 字面值撰寫的訊息(例如 {"role": "user", "content": "Hello"})不需要任何變更。
在 v1 中,anthropic.types.MessageParam 是單一的 TypedDict。在 v2 中,它是這三個型別的 union,而 anthropic.types.beta.BetaMessageParam 則是其三個型別的 union。這兩個名稱在型別註記中仍可使用,例如 list[MessageParam]。
現在呼叫這兩個名稱中的任何一個都會引發 TypeError,且型別檢查工具會標記它。請將訊息寫成 dict:
# 之前
message = MessageParam(role="user", content="Hello")
# 之後
message: MessageParam = {"role": "user", "content": "Hello"}繼承這兩個名稱中的任何一個也會引發 TypeError。請改為繼承該角色的型別,例如 UserMessageParam。
其餘的變更僅影響型別檢查。role 為可容納多個角色之變數的 dict 不會符合 union 中的任何型別,因此請一次針對一個角色建立 dict:
# 之前
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 的命令可以繼續運作,因此無需做任何變更。
已從 tool runner 中移除用戶端壓縮
這會影響 TypeScript 和 Ruby SDK。tool runner 中的「client-side compaction」(用戶端壓縮)已被移除,改用伺服器端壓縮,後者會在 API 內部摘要對話,而不是由用戶端發出額外的請求。
compactionControl 選項和 @anthropic-ai/sdk/lib/tools/CompactionControl 模組已被移除。該選項在 v0.129.0 中已停止運作,當時傳遞它會擲出 AnthropicError。它不在 params 型別中,因此 TypeScript 會將其回報為未知屬性。
若要在達到 token 閾值時繼續自動壓縮:
// 之前
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 個 token。如需其他選項(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 token。
如果代理或閘道讀取 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 以讓請求只傳送 auth token,請刪除該程式碼而不是修改它,因為移除 Authorization 會移除該 token。一個用戶端只持有一個憑證,因此請確保該憑證是 token:如果程式碼中未傳入任何憑證,且同時設定了 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 用戶端只持有一個憑證。若未在程式碼中傳入任何憑證,則會依照憑證優先順序的順序處理。
在 v1 中,當用戶端同時擁有 API 金鑰與驗證權杖時,會將兩者都送出,各自放在自己的標頭中。憑證為 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所指定的設定檔、workload identity federation(工作負載身分聯合)變數、磁碟上的作用中設定檔(即active_config檔案所指定的設定檔,否則為default)。當前兩者都已設定時,用戶端會記錄一次警告。在 v1 中,當設定了ANTHROPIC_CONFIG_DIR或存在active_config檔案時,作用中設定檔的優先順序高於聯合變數;若要繼續使用它,請設定ANTHROPIC_PROFILE。 copy()與with_options()會取代。 您傳入的憑證會取代用戶端自身的憑證,無論兩者各是哪一種。來自舊憑證之 config 或設定檔的基礎 URL 與標頭會隨之移除,並改用新憑證的設定。您自行傳入的基礎 URL 則會保留。
client = Anthropic(api_key=key, auth_token=token)
# 之前:會傳送 `X-Api-Key: <key>` 與 `Authorization: Bearer <token>`
# 之後:引發 `ValueError`平台用戶端保有各自的規則。AnthropicAWS 可同時接受 auth_token 與 api_key 而不會出錯,並會送出金鑰。
_client.py 中 Anthropic.__init__ 與 Anthropic.copy 的 docstring 提供了詳細資訊。
如果您依賴同時送出兩者,例如將權杖用於閘道、將金鑰用於閘道後方的 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?