這個 404 令人困惑之處在於,該模型通常確實存在——存在於 Anthropic 的文件、部落格文章或上一季的程式碼中。但它不存在於您的 API 金鑰今天獲准存取的模型清單中。
錯誤
{
"type": "error",
"error": {
"type": "not_found_error",
"message": "model: claude-3-5-sonnet"
}
}原因與解決方法一覽
| 原因 | 解決方法 |
|---|---|
| 已退役的日期快照 | 快照會依照已發布的時程淘汰,之後便不再解析。請改用目前的快照。 |
| 從未存在的別名 | `claude-3-5-sonnet` 是一個系列,而不是可呼叫的 ID。Anthropic ID 會帶有版本或日期後綴。 |
| 模型確實存在,但未對您的帳戶啟用 | 最新模型可能受方案層級限制。這種 404 與拼字錯誤無法區分——請檢查 models 端點,而不是文件。 |
| Anthropic 端點上的 OpenAI 模型名稱 | 在 api.anthropic.com 使用 `gpt-4o` 代表找不到模型,而不是路由錯誤。如果您想以單一端點使用兩者,請使用閘道。 |
詢問 API,而不是文件
文件描述的是模型目錄;models 端點描述的是您的模型目錄。兩者不一致時,應以端點為準。凡是不在此清單中的項目,無論在其他地方看起來多麼新,都會回傳 404。
curl -s https://api.anthropic.com/v1/models \
-H "x-api-key: $ANTHROPIC_API_KEY" \
-H "anthropic-version: 2023-06-01" \
| grep '"id"'有意識地固定,有意識地升級
寫死日期快照能換來可重現性,也會換來一個由他人決定日期的未來 404。從設定讀取模型 ID,表示修正只需在部署時設定值,而不必修改程式碼;同一個切換機制也能讓您在模型忙碌時進行故障切換,而不是在模型不存在時才切換。
import os
# One place to change when a snapshot retires.
MODEL = os.environ.get("LLM_MODEL", "claude-sonnet-5")
resp = client.chat.completions.create(
model=MODEL,
messages=[{"role": "user", "content": "ping"}],
)區分 404、400 與 403
404 表示該名稱解析後沒有任何結果。400 表示名稱正確,但請求有問題(參數錯誤、內容格式錯誤)。403 表示模型存在,但您無權使用。只有 404 能透過變更模型字串修正。
如果你透過 Kunavo 呼叫
Kunavo 的模型目錄就是其 /v1/models 端點回傳的清單,其中每個 ID 都可由任何已儲值的金鑰呼叫——不存在針對個別帳戶的模型限制,因此上述「模型確實存在但未對您啟用」的情況不會發生。由於同一個端點同時提供 Claude 與 GPT 系列名稱,OpenAI ID 也不是端點錯誤;它只會進行路由。上游仍可能退役模型,而模型撤下時,其 ID 會被重新導向或加以說明,不會默默留到回傳 404。 目前的 ID 及其每 token 費率位於 Claude API 價格清單.
常見問題
404 會是暫時性錯誤嗎?
不會。不同於 429、500 與 529,使用相同模型字串重試 404 只會再次失敗。請變更字串或停止。
我如何知道快照何時退役?
Anthropic 會發布日期快照的淘汰日期。如果您固定使用快照,該時程就是行事曆項目;如果您從設定讀取 ID,則只需修改一行。
為什麼同事的金鑰使用相同名稱卻能運作?
模型可用性可能因帳戶方案層級而異。比較兩個 /v1/models 回應——差異就是答案。