许多开发者可能已经发现,最近调用 claude-3-haiku-20240307 模型的代码突然开始报错。其原因在于:Anthropic 已于2024年4月20日正式停用该版本的 Claude Haiku 3 模型。这不是简单的弃用,而是彻底的“退休”——对旧模型ID的请求将不再被处理,而是直接返回错误。
这一停用政策实际上在60天前就已经宣布,但似乎并未引起广泛关注。许多开发者可能错过了相关的邮件通知,直到生产环境出现告警,甚至用户报告产品故障时才意识到问题。
Anthropic 的停用政策非常明确:已退休的模型会直接返回错误,而不会自动回退到诸如 Haiku 4.5 等新版本。这意味着模型ID将直接无法解析。
实际上,这意味着 API 会返回 4XX 响应。如果路由层判定模型标识符已不存在,会是 not_found_error;如果被视为格式错误的请求,则可能是 invalid_request_error。无论哪种情况,错误响应体大致如下:
{
"type": "error",
"error": {
"type": "not_found_error",
"message": "The requested resource could not be found."
},
"request_id": "req_..."
}
更令人头疼的是,你的代码本身没有任何变化。请求体、SDK版本、API Key 都和上周正常工作时一模一样。唯一改变的是 Anthropic 的路由层不再识别 claude-3-haiku-20240307。
那么,这个过时的模型ID可能藏在哪里呢?多数团队的代码库中对模型名称会有多处引用。建议检查以下地方:
- 环境变量和配置文件: 如
ANTHROPIC_MODEL,CLAUDE_MODEL,DEFAULT_MODEL。不仅要检查代码仓库,还要特别关注生产和测试环境的实际配置。 - 框架封装层: 像 LangChain, LlamaIndex, Vercel AI SDK, LiteLLM 等框架的旧版本中,
claude-3-haiku-20240307可能被设为默认值或出现在示例代码中。请检查你所使用的框架版本及其依赖项。 - 硬编码测试固件: VCR cassettes、快照测试和模拟响应中常常会捕获模型字符串。
- 细粒度路由逻辑: 任何根据任务类型选择模型的逻辑(例如“分类任务使用成本较低的模型”)都需要检查,确保“成本较低”的分支不再解析到旧模型。
- 日志和监控仪表板: 这虽不是代码问题,但如果你通过模型ID过滤日志或监控数据,这些过滤器也会失效。
快速排查命令:
git grep -n "claude-3-haiku-20240307"
git grep -n "claude-3-haiku"
如果这些命令有任何命中,你就需要着手修改了。
应该替换成什么?Anthropic 推荐的替代模型是 claude-haiku-4-5-20251001。理论上,这是一个直接的替换。但实际上,Haiku 4.5 属于 Claude 4 系列模型,而 Claude 4 系列引入了一些 API 端的重大变更,这可能会导致为 Haiku 3 编写的代码出现问题。
例如,Haiku 4.5 不再允许同时设置 temperature 和 top_p 参数,而 Haiku 3 之前是允许的。