AI SDK 的 Anthropic Provider 演进全解读:从 @ai-sdk/anthropic CHANGELOG 看 Claude 集成能力路线图
【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai
@ai-sdk/anthropic是 AI SDK(TypeScript AI 工具包,由 Next.js 团队维护)中对接 Anthropic Messages API 的语言模型提供方包。本文以仓库中 packages/anthropic/CHANGELOG.md 的完整变更记录为骨架,系统梳理该包从 0.0.1 到 4.0.52 的能力演进:包括批处理、扩展思考、结构化输出、服务器端工具、Provider 选项体系与模型 ID 迭代,并结合 anthropic-provider.ts、anthropic-language-model-options.ts 等源码给出底层实现证据。读完本文,你将掌握该 Provider 的全部能力面、配置入口与升级迁移要点。
当前状态:v4.0.52 与 v4 时代的全景
截至仓库当前快照,@ai-sdk/anthropic的最新发布版本为4.0.52,紧随其后的 4.0.50/4.0.51 也属于同一迭代批次。近期的变化节奏呈现三个鲜明特征:
- 批处理能力快速补齐:4.0.50 支持"批内按请求指定模型"(per-request models in batch),4.0.52 新增批任务的取消(cancellation)与列表(listing)能力,4.0.42 引入批完成 Webhook(
experimental_startTextBatch接受webhookUrl,直接 Provider 在提供该选项时会返回 unsupported 警告); - 模型 ID 持续刷新:4.0.48 新增
claude-fable-5-1,4.0.20 引入claude-opus-5,4.0.4 引入claude-sonnet-5; - 与核心层(provider/provider-utils)解耦升级:每个 Patch 版本几乎都携带
@ai-sdk/provider与@ai-sdk/provider-utils的依赖更新,说明该包始终跟随核心规格演进。
依赖关系上,该包基于@ai-sdk/provider(4.0.x)与@ai-sdk/provider-utils(5.0.x),规格版本为v4(见 anthropic-provider.ts 中的specificationVersion = 'v4')。
大版本节点:4.0.0 与 AI SDK v7 预发布
4.0.0 是 CHANGELOG 中最关键的大版本(Major Changes)节点,标记为 "Start v7 pre-release",其变更对下游使用者有直接影响:
- 全面 ESM-only:
Remove CommonJS exports from all packages. All packages are now ESM-only ("type": "module")。使用require()的消费者必须切换到 ESMimport语法; - Node 版本门槛提升:最低支持 Node.js 22,官方支持的版本为 22、24 与 26;
- 移除 providerMetadata 中的
cacheCreationInputTokens:缓存创建输入 token 不再暴露在 provider metadata 中,避免与新的 usage 结构冲突; - 顶层
reasoning参数:核心层在generateText/streamText中新增顶层推理参数; - 符号重命名:为了让各 Provider 实现代码模式更一致,重命名了部分对外导出符号,旧名称通过废弃别名继续可用;
- Provider References 抽象:支持通过 provider references 上传技能(skills)与文件,
uploadFile/uploadSkill可直接接收 provider 实例。
同一大版本还打包了一大批 Anthropic 专属增强:claude-opus-4-8、metadata.user_id透传、新的 advisor 工具、bash 工具自动使用沙箱(sandbox)、inference_geo地理选项、claude-fable-5与fallbacksAPI 参数、Opus 4.7 支持,以及全部 Provider 模型的工作流序列化(WORKFLOW_SERIALIZE/WORKFLOW_DESERIALIZE静态方法)。
批处理能力:从 text batch 到取消与列表
批处理是 4.0.x 迭代最密集的领域,CHANGELOG 记录了完整链路:
| 版本 | 能力 |
|---|---|
| 4.0.34 | 新增文本批处理(text batch)支持 |
| 4.0.42 | 批完成 Webhook,experimental_startTextBatch支持webhookUrl |
| 4.0.43 | 对齐跨 Provider 的批结果解析、请求计数与生命周期行为 |
| 4.0.46 | 保留原生批请求计数到 provider metadata,批请求支持完整的语言模型选项面 |
| 4.0.50 | 批内支持按请求指定模型(per-request models) |
| 4.0.52 | 新增批任务取消与列表 |
从源码看,批能力由 anthropic-batch.ts 实现,它实现了Experimental_BatchV4接口,并定义批请求 ID 的正则约束/^[A-Za-z0-9_-]{1,64}$/(anthropic-batch.ts);批响应 schema 包含processing_status与request_counts(processing/succeeded/errored/canceled/expired 五类计数)。在 anthropic-provider.ts 中,Provider 暴露experimental_batch()工厂方法,返回带{ text: AnthropicModelId }泛型的批处理器,其 provider 名基于anthropic.messages派生为anthropic.batch。
思考与推理:thinking 参数与 reasoning 体系
CHANGELOG 中关于"思考"的演进清晰可见:
- 1.1.10:新增 Anthropic reasoning 支持(
ddf9740); - 3.0.x:
9e1e758修复未指定时使用默认 thinking budget;83aaad8引入 Opus 4.5 与effortprovider 选项; - 4.0.8:修复
thinking: { type: 'disabled' }被静默丢弃的问题——此前该值被 schema 接受但不会随请求发出,对默认开启思考的模型(如 Sonnet 5)会消耗整个max_tokens预算,现在会正确转发到 Messages API; - 4.0.21:将思考 token 报告为 reasoning token 用量;
- 4.0.26:通用推理启用自适应思考时,返回可见的总结推理(summarized reasoning);
- 4.0.31:为
advisor_20260301工具添加maxTokens,并作为max_tokens转发以独立限制每个 advisor 子推理。
对应到 anthropic-language-model-options.ts,thinking选项支持三种形态:
{ type: 'adaptive' }:适用于 Sonnet 4.6、Opus 4.6 及更新模型,可配合display(omitted/summarized/updates)与blockBinding.prefixMismatchBehavior: 'drop_block';{ type: 'enabled', budgetTokens }:适用于 Opus 4.6 之前的模型(Sonnet 4.6 仍支持),预算最小 1024 token 且计入max_tokens;{ type: 'disabled' }:显式关闭思考。
effort顶层选项支持low / medium / high / xhigh / max五档,用于控制推理投入。
结构化输出:outputFormat / jsonTool / auto
结构化输出经历了从 beta 到原生支持的演进:
- 2.0.0 时代:
ad66c0e通过工具调用实现 JSON response schema 支持;cdc6b7a在使用 json 输出工具时禁用并行工具调用;075711d修复 json 输出工具的 stop finish reason; - 3.0.0 时代:
b8ea36e引入 Anthropic 原生结构化输出;cf4e2a9支持带结构化输出的工具调用;1bd7d32支持工具级 strict 模式;c012d57清洗不支持的 JSON Schema 校验属性;87db851(vertex/anthropic)仅对结构化输出传 beta header; - 4.0.0 时代:
d98d9ba(3.0.49)将废弃的output_format参数迁移到output_config.format,并让 Bedrock Anthropic 模型通过output_config.format启用原生结构化输出。
源码中structuredOutputMode提供三种选择(anthropic-language-model-options.ts):outputFormat(使用output_config.format参数)、jsonTool(使用特殊 json 工具)、auto(优先 outputFormat,不支持时回退 jsonTool,默认值)。
工具生态:Provider 定义工具的完整族谱
CHANGELOG 记录了 Anthropic Provider 定义工具(provider-defined tools)的持续扩张,这是该包最具差异化价值的部分:
- 代码执行:
code_execution(3.0.48)、2025-08-25版本(3.0.0 时代6f845b4)返回file_id以下载输出文件(80894b3);4.0.28 通过以原始线缆形态重放完整代码执行记录来保留 prompt-cache 命中; - Web 工具:
web_fetch/web_search(fa35e95/11e4abe/0ae783e)、带日期的web_fetch_20260209/web_search_20260209(3.0.54)、支持延迟结果(3.0.21)、PDF 响应与引用(3.0.18)、加密代码执行结果的多轮处理(3.0.55); - 文本编辑:
text_editor_20250124(1.1.13)与text_editor_20250728(3.0.0 时代afb00e3,支持可选max_characters); - 计算机使用:
computer_20250124(3b1b69a)、computer_20251124(3.0.25,用于 Opus 4.5); - 其他:
bash_20250124(1.1.13)、memory(3.0.0 时代d08308b)、advisor(4.0.0 时代8018480,4.0.31 补上 maxTokens)、tool_search(3.0.21)。
工具相关的修复也贯穿始终:f13958c允许自定义 Provider 工具名称、19c5ee2重排客户端与 Provider 工具使用之间的 assistant 内容、9e35785在流式工具调用无参数时发送{}、2e45d9c(4.0.9)将非法工具输入包装进对象、a464505将toModelOutputprovider 选项传播到工具结果。
在 anthropic-provider.ts 中,这些工具通过provider.tools = anthropicTools暴露,统一挂在 Provider 实例上。
Provider 选项体系:一份完整的配置清单
结合 anthropic-language-model-options.ts 的 Zod schema,当前版本支持的 Anthropic 专属 provider 选项可整理如下:
| 选项 | 类型/取值 | 说明 |
|---|---|---|
thinking | adaptive/enabled/disabled | 扩展思考配置(见上文) |
structuredOutputMode | outputFormat/jsonTool/auto | 结构化输出生成方式 |
disableParallelToolUse | boolean | 默认 false;为 true 时每轮最多使用一个工具 |
cacheControl | { type: 'ephemeral', ttl?: '5m' \| '1h' } | 提示词缓存控制(3.0.47 起作为顶层cache_control透传) |
metadata.userId | string | 请求级外部用户标识,禁止含 PII |
mcpServers | 数组 | MCP 服务器接入,含authorizationToken与toolConfiguration |
container | { id?, skills? } | Agent Skills 配置,支持anthropic与custom类型,需启用代码执行 |
toolStreaming | boolean(默认 true) | 细粒度(eager)工具输入流式,4.0.x 默认开启 |
effort | low/medium/high/xhigh/max | 推理努力档位 |
taskBudget | { type:'tokens', total, remaining? } | Agent 回合 token 预算(仅建议性,不强制) |
speed | fast/standard | 快速推理模式,仅 Opus 4.6 支持(3.0.39) |
serviceTier | auto/standard_only | 服务层级 |
inferenceGeo | us/global | 推理地域(4.0.0 时代09bd27b) |
fallbacks | 'default'或数组 | 服务端回退模型链(4.0.20 起default模式自动加server-side-fallback-2026-07-01beta) |
anthropicBeta | string 数组 | 自定义 beta 特性集合(3.0.56 起可向下游 Provider 暴露) |
contextManagement | 对象 | clear_tool_uses_20250919/clear_thinking_20251015/compact_20260112三类编辑 |
sendReasoning | boolean | 是否向模型发送推理输入 |
此外 Provider 级设置(anthropic-provider.ts)包括:baseURL(默认https://api.anthropic.com/v1,裸https://api.anthropic.com会自动归一化追加/v1)、apiKey(x-api-key头,默认读ANTHROPIC_API_KEY)、authToken(Authorization: Bearer头,默认读ANTHROPIC_AUTH_TOKEN,两者不能同时提供)、headers、自定义fetch、name(默认anthropic.messages)。
流式协议与消息处理细节
CHANGELOG 中大量 Patch 记录针对流式与消息处理的细枝末节,体现了该包对 Anthropic 流式协议的精雕细琢:
- 首块处理:
eb56fc6/589a4ee简化首 chunk 拉取,03849b0在首个流 chunk 为错误时抛出 500 错误; - 事件校验:4.0.32 拒绝拼接(spliced)的生成内容,同时允许活动消息的重复 message start 事件;
- 字段位置:3.0.33 修复流式
context_management字段位置——此前错误地在 delta 对象内解析,API 实际返回在message_delta根级; - 用量:3.0.40 在流式时包含
response.usage.raw真实原始用量;3.0.28 填充outputTokens.text;3.0.29 修复流式缓存用量报告; - finish reason:
cbf52cd暴露原始 finish reason;2.0.11 处理pause_turn;2.0.10 将refusal映射为content-filter; - 消息合并:0.0.35 合并连续的 assistant 消息,0.0.24 合并工具与用户消息、系统消息,2.0.13 将
tool_result内容重排到合并用户消息前部以满足 API 校验。
安全与稳健性:URL 校验、错误规范化与原型污染防护
4.0.x 在安全侧投入显著:
- 4.0.14:
getFromApi增加validateUrl标志,通过fetchWithValidatedRedirects拒绝私有/回环/链路本地地址,逐跳重新校验重定向,跨域重定向时剥离 proxy/metadata/cookie 头与调用方头(自定义 API key 头不得跟随重定向离开源站);新增credentialedOrigin(非同源不发送调用方头)与trustedOrigin(自托管部署豁免目标校验);同时补齐 IPv4 组播、文档网段与 IPv6 文档网段校验;仅遵循 fetch 规范重定向状态码(301/302/303/307/308)。详见 contributing/secure-url-handling.md; - 4.0.6:同步解析 Provider JSON 输入时防止原型污染,并从 provider-utils 暴露
secureJsonParse; - 4.0.43:将各 Provider 的流中错误事件规范化为公共
StreamProviderError实例,保留 provider 自有 type/code/status/retry 与原始负载元数据; - 4.0.1 时代:
1fe058b保留模型返回的错误码,6fd51c0在getErrorMessage中保留错误类型前缀; - 3.0.0 时代:
0e38a79支持ANTHROPIC_BASE_URL环境变量;cd12954(4.0.14 同批)拒绝空 base URL。
模型 ID 与能力探测的演进
模型 ID 的迭代贯穿整个 CHANGELOG:0.0.22引入claude-3.5-sonnet,0.0.56引入 Haiku 3.5,2.0.0 时代ca8aac6引入 Claude v4 系列,fdff8a4修正 Claude 4 模型 ID 格式,3.0.0 时代陆续加入 Haiku 4.5、Sonnet 4.5/4.6、Opus 4.5/4.6/4.7,4.0.0 时代加入 Opus 4.8、claude-sonnet-5、claude-opus-5、claude-fable-5/claude-fable-5-1。
当前 anthropic-language-model-options.ts 中的AnthropicModelId联合类型覆盖:claude-3-haiku-20240307、claude-haiku-4-5(-20251001)、claude-opus-4-0、claude-opus-4-20250514、claude-opus-4-1(-20250805)、claude-opus-4-5(-20251101)、claude-sonnet-4-0、claude-sonnet-4-20250514、claude-sonnet-4-5(-20250929)、claude-sonnet-4-6、claude-opus-4-6、claude-opus-4-7、claude-opus-4-8、claude-opus-5、claude-fable-5、claude-fable-5-1、claude-sonnet-5,并保留(string & {})以兼容新模型。
能力探测逻辑同样值得关注:21f378c在模型 ID 未知时不限制 maxTokens,4c5a6be按模型设置默认与上限 maxTokens,97de198(4.0.18)对未知模型使用默认 4096 max output token 时给出警告,4.0.19 对无法识别的 Claude 模型 ID 使用当前世代能力默认值(同时保留对旧 Claude 与非 Claude 模型的保守默认值),4.0.49 修复带日期的 Google Vertex Claude 4 模型 ID 的能力识别。
历史版本时间线:从 0.0.1 到 3.x 的沉淀
CHANGELOG 完整保留了从 0.0.1(7b8791d,重命名baseUrl为baseURL并自动去除尾部斜杠)至今的轨迹,梳理关键里程碑:
- 0.0.x:基础 Messages API 接入,流式工具调用(0.0.14/0.0.30 时代)、toolChoice(0.0.17)、自动下载图片 URL(0.0.18)、自定义 header(0.0.26)、系统消息支持(0.0.11)、消息合并与错误流处理;
- 1.0.x:AI SDK 4 对齐(移除 baseUrl 与 Anthropic facade、移除 topK 模型设置)、
bash_20250124/text_editor_20250124、computer use 工具、图片 URL、PDF 支持(0.0.54 时代的4d2e53b)、提示词缓存(0.0.43 的6ac355e); - 2.0.x:AI SDK 5 大版本,web search 服务端支持(
2e13791)、PDF 引用与 document sources(25f3454)、流式工具调用(0b678b2)、缓存控制(a753b3a)、禁用并行工具(4f26d59)、服务器端代码执行(ae859ce)、暂停轮次(pause_turn)、refusal 映射; - 3.0.x:AI SDK 6 beta,
Provider-V3/LanguageModelV3规格、Anthropic 原生结构化输出、上下文管理(context_management)、effort、Agent Skills(9354297)、MCP connector(81d4308)、程序化工具调用(50b70d6)、fine-grained tool streaming 默认开启(f4e4a95)、authToken认证(3.0.22)、ANTHROPIC_BASE_URL(0e38a79)、temperature/topP 互斥(3.0.6/2231e84与 4.0.0 的f57c702放宽到非 Anthropic 模型)。
如何跟进与验证:从 CHANGELOG 到源码
若要验证本文所述能力或跟进后续演进,仓库内提供了完整的一手材料:
- 变更记录:阅读 packages/anthropic/CHANGELOG.md 全文(共 3554 行,覆盖 0.0.1 至 4.0.52);
- 使用入门:见 packages/anthropic/README.md,安装命令为
npm i @ai-sdk/anthropic,随后import { anthropic } from '@ai-sdk/anthropic'并配合generateText使用; - 导出面:见 packages/anthropic/src/index.ts,导出
anthropic、createAnthropic、AnthropicLanguageModelOptions(含废弃别名AnthropicProviderOptions)等; - 实现细节:Provider 工厂与认证在 anthropic-provider.ts,语言模型选项 schema 在 anthropic-language-model-options.ts,批处理在 anthropic-batch.ts,消息元数据在 anthropic-message-metadata.ts;
- 行为佐证:仓库内含大量测试与响应 fixture,例如 anthropic-batch.test.ts、anthropic-language-model.test.ts,以及
__fixtures__/目录下的anthropic-claude-opus-5-reasoning-high.1.json、anthropic-fallback.chunks.txt、anthropic-refusal.chunks.txt等真实响应样本,可直接对照验证claude-opus-5推理、fallback 流与 refusal 场景的处理逻辑。
总体来看,@ai-sdk/anthropic的演进史是一个典型的"跟随上游能力、打磨协议细节"的过程:每逢 Anthropic API 推出新模型或新特性(思考、原生结构化输出、服务器端工具、批处理、上下文管理),该包都会在短时间内跟进并提供 AI SDK 风格的统一抽象;同时,通过模型能力探测、参数互斥校验、流式事件校验与 URL 安全防护,持续降低误用风险。对正在使用或计划接入 Claude 的 AI SDK 应用而言,这份 CHANGELOG 既是升级手册,也是理解 Anthropic Messages API 能力边界的最佳索引。
【免费下载链接】aiThe AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and agents项目地址: https://gitcode.com/GitHub_Trending/ai/ai
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考