AI SDK 的 Anthropic Provider 使用指南:接入 Claude 模型、配置 providerOptions 与专属工具集
2026/9/11 21:14:08 网站建设 项目流程

AI SDK 的 Anthropic Provider 使用指南:接入 Claude 模型、配置 providerOptions 与专属工具集

【免费下载链接】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(TypeScript AI Toolkit)中官方维护的 Anthropic Provider(@ai-sdk/anthropic)展开,系统讲解从安装、Provider 实例创建、模型调用,到推理(thinking)、上下文管理、提示缓存、批处理以及 Anthropic 专属工具集(Bash、Computer、Web Search、Code Execution、Agent Skills 等)的完整使用方法。读完本文,你将掌握如何在generateText/streamText中接入 Claude 模型,并能够根据业务场景精准配置 provider 级与模型级参数。

一、Anthropic Provider 在 AI SDK 中的定位

Anthropic Provider 是 AI SDK 官方为 Anthropic Messages API 中,它被定义为包含「language model support for the Anthropic Messages API」的模块;源码侧,该包同时实现了 ProviderV4 规范下的语言模型、批处理(Batch)、文件(Files)与 Skills 接口。

从源码结构看(见 packages/anthropic/src/),核心实现分为几大块:anthropic-provider.ts负责 Provider 实例与配置,anthropic-language-model.ts负责模型调用与流式解析,anthropic-tools.ts导出 Anthropic 专属工具工厂,convert-to-anthropic-prompt.ts/sanitize-json-schema.ts负责消息与工具 Schema 的转换,anthropic-error.ts负责错误映射。这些模块共同支撑了本文后面所有配置项的落地。

二、安装与最小可用示例

2.1 安装

Anthropic Provider 以独立 npm 包形式发布,使用包管理器安装即可:

npm i @ai-sdk/anthropic

该包同时依赖@ai-sdk/provider@ai-sdk/provider-utils(见 packages/anthropic/package.json),并声明zod为 peer 依赖(^3.25.76 || ^4.1.8),因此在需要为工具定义输入 Schema 时,请确保项目中安装了兼容版本的 zod。

提示:如果你使用 Claude Code、Cursor 等编码 Agent,仓库 README 建议把 AI SDK skill 加入仓库以辅助开发,运行npx skills add vercel/ai即可。该命令仅面向编码 Agent 场景,普通应用开发可跳过。

2.2 最小文本生成示例

安装完成后,导入默认 Provider 实例anthropic,将其与 AI SDK 的generateText组合即可发起一次完整的文本生成:

import { anthropic } from '@ai-sdk/anthropic'; import { generateText } from 'ai'; const { text } = await generateText({ model: anthropic('claude-3-haiku-20240307'), prompt: 'Write a vegetarian lasagna recipe for 4 people.', }); console.log(text);

anthropic('claude-3-haiku-20240307')的返回值是一个符合 AI SDK 语言模型规范(LanguageModelV4)的模型实例,可以直接传给generateTextstreamText以及结构化输出 API。模型 ID 可以是任意字符串(源码中AnthropicModelId除列出常见型号外还接受string & {}),这意味着只要 Anthropic 侧支持,你就能传入任意有效的模型标识,例如claude-sonnet-4-5claude-opus-4-6等。

三、Provider 实例:默认实例与自定义配置

3.1 默认实例与模型别名

直接导入的anthropic是一个已经用默认配置创建好的 Provider 实例(源码见 anthropic-provider.ts,即export const anthropic = createAnthropic();)。它本身是可调用函数,同时提供了多个创建模型的等价别名:

  • anthropic('claude-3-haiku-20240307')—— 直接调用创建语言模型
  • anthropic.languageModel('claude-3-haiku-20240307')—— 显式创建语言模型
  • anthropic.chat(...)/anthropic.messages(...)——languageModel的别名

此外,Provider 还暴露了experimental_batch()files()skills()tools等能力入口,分别对应批处理、文件上传、Agent Skills 和 Anthropic 专属工具集(详见后文)。

3.2 通过 createAnthropic 自定义实例

当需要自定义接入时(例如走代理、换认证方式、加自定义请求头),导入createAnthropic创建实例:

import { createAnthropic } from '@ai-sdk/anthropic'; const anthropic = createAnthropic({ // custom settings });

createAnthropic接收的可选配置项与源码中的AnthropicProviderSettings(anthropic-provider.ts)一一对应:

配置项类型说明
baseURLstringAPI 请求地址前缀,默认https://api.anthropic.com/v1,可改为代理服务器地址。源码中normalizeBaseURL会自动去除末尾斜杠,并将裸域名https://api.anthropic.com归一化为/v1版本化地址(anthropic-provider.ts);同时支持通过环境变量ANTHROPIC_BASE_URL覆盖
apiKeystring通过x-api-key请求头发送,默认读取ANTHROPIC_API_KEY环境变量
authTokenstring通过Authorization: Bearer头发送,默认读取ANTHROPIC_AUTH_TOKEN环境变量
headersRecord<string,string>附加到每个请求的自定义请求头
fetch(input, init) => Promise<Response>自定义 fetch 实现,可用于请求拦截、日志或测试 Mock,默认使用全局 fetch
namestringProvider 名称,默认anthropic.messages,影响 usage/provider 标识
generateId() => string自定义 ID 生成函数

有两点需要注意(均有源码佐证):

  • apiKeyauthToken二选一:若两者同时在options中显式提供,createAnthropic会直接抛出InvalidArgumentError(anthropic-provider.ts),避免请求头冲突。
  • 自动附加请求头getHeaders()会为每个请求附加anthropic-version: 2023-06-01ai-sdk/anthropic/{VERSION}的 User-Agent 后缀(anthropic-provider.ts),你无需手动处理版本头。

3.3 认证方式速查

  • 方式一(默认):设置环境变量ANTHROPIC_API_KEY,Provider 自动读取。
  • 方式二:显式传apiKey
  • 方式三:使用 Bearer Token(如网关类场景),传authToken或设置ANTHROPIC_AUTH_TOKEN

四、模型级 providerOptions 详解

Anthropic 模型支持通过providerOptions.anthropic传入模型专属参数,这些参数的 Schema 定义在 anthropic-language-model-options.ts 中,类型为AnthropicLanguageModelOptions。使用方式统一为:

import { anthropic, AnthropicLanguageModelOptions } from '@ai-sdk/anthropic'; import { generateText } from 'ai'; const { text, usage } = await generateText({ model: anthropic('claude-opus-4-20250514'), prompt: 'How many people will live in the world in 2040?', providerOptions: { anthropic: { effort: 'low', } satisfies AnthropicLanguageModelOptions, }, });

下面对核心参数逐一说明。

4.1 工具调用与结构化输出

  • disableParallelToolUse(boolean,默认false):关闭并行工具调用。置为true后,模型每轮最多调用一个工具。

  • toolStreaming(boolean,默认true):是否启用工具调用输入与结构化输出的细粒度流式(eager streaming)。从源码看,默认开启时每个 function 工具都会获得eager_input_streaming: true,除非该工具自身显式覆盖(见 anthropic-language-model-options.ts)。

  • structuredOutputMode("outputFormat" | "jsonTool" | "auto"):结构化输出生成方式。

    • "outputFormat":使用output_config.format参数声明输出格式;
    • "jsonTool":使用特殊的"json"工具声明输出格式;
    • "auto":支持时优先用outputFormat,否则回退jsonTool(默认)。

    需要特别注意的是:对于claude-fable-5-1auto模式默认走原生结构化输出(output_config.format),而该模型拒绝强制工具调用,因此不要对它使用jsonTool或 required/named 工具选择来实现结构化输出。

4.2 推理控制(Reasoning / Thinking)

  • sendReasoning(boolean,默认true):是否把推理内容随请求发送给模型。若模型对推理内容处理有问题,可置false省略。

  • thinking(object):Claude 扩展思考(extended thinking)配置,三种形态:

    • { type: 'adaptive' }:适用于较新模型(claude-sonnet-4-6claude-opus-4-6及以后),Claude 根据提示复杂度自动决定推理量,无需预算参数。
    • { type: 'enabled', budgetTokens: number }:适用于早期模型(如claude-sonnet-4-5-20250929claude-opus-4-20250514),需要显式 token 预算(最低 1024)。注意max_tokens同时覆盖推理与最终文本,Provider 会自动把budgetTokens累加到maxOutputTokens上,并在已知模型的输出上限处封顶。
    • { type: 'disabled' }:关闭思考。

    针对claude-opus-4-7及以后,思考内容默认以空文本形式出现(display默认为"omitted"),若需要在界面上展示推理过程,可设置display: 'summarized'claude-fable-5-1还支持display: 'updates'在两个工具调用之间流式输出思考摘要(Provider 会自动附加对应 beta 请求头)。另外thinking还支持blockBinding.prefixMismatchBehavior: 'drop_block',让 Fable 5.1 在思考块前缀不匹配时丢弃不匹配块以恢复生成。

    在代码中读取推理结果:

    const { text, reasoningText, reasoning } = await generateText({ model: anthropic('claude-opus-4-6'), prompt: 'How many people will live in the world in 2040?', providerOptions: { anthropic: { thinking: { type: 'adaptive' } }, }, }); console.log(reasoningText); // reasoning text console.log(reasoning); // reasoning details including redacted reasoning console.log(text); // text response
  • effort("low" | "medium" | "high" | "xhigh" | "max",默认"high"):从claude-opus-4-5引入,影响思考、文本回复与函数调用的推理强度;调低可省 token 并降低输出首字延迟(TTLT)。claude-opus-4-7claude-opus-4-8claude-opus-5claude-fable-5claude-fable-5-1claude-sonnet-5额外支持xhigh注意:在claude-opus-5上,若同时设置thinking: { type: 'disabled' }effort: 'xhigh' | 'max',AI SDK 会把 effort 降级为high并发出警告(因为 API 会拒绝该组合)。

4.3 性能与算力调度

  • speed("fast" | "standard"):仅claude-opus-4-6支持,fast可获得约 2.5 倍更快的输出 token 速度。
  • serviceTier("auto" | "standard_only"):选择 Anthropic 服务层级。
  • inferenceGeo("us" | "global",默认"global"):控制推理运行地域,"us"仅使用美国基础设施,用于数据驻留(data residency)合规场景。

4.4 任务预算与元信息

  • taskBudget({ type: 'tokens', total, remaining? }):claude-opus-4-7及以后支持,告知模型本次 agentic 回合的总 token 预算,帮助其规划工作并在预算耗尽前优雅收尾。它是建议性的,不强制限制。total最小 20000;长会话压缩重启后可用remaining携带剩余预算(介于 0 与total之间,缺省等于total)。

    providerOptions: { anthropic: { taskBudget: { type: 'tokens', total: 400000, remaining: 215000 }, }, }
  • metadata.userId(string):请求携带的外部用户标识(应为 UUID、哈希或不透明 ID,不得包含 PII)。

  • anthropicBeta(string[]):需要透传的 beta 功能集合(多数常用 beta 头由 Provider 自动附加,仅在特殊场景手动配置)。

五、提示缓存(Prompt Caching)

Anthropic 的提示缓存通过cacheControl在消息、系统消息或工具定义上打缓存断点(breakpoint)。在 AI SDK 中,通过providerOptions.anthropic设置{ cacheControl: { type: 'ephemeral' } },也可扩展ttl'5m'(默认)或'1h'(更长缓存时长,见 anthropic-api.ts 中AnthropicCacheControl类型)。

对消息内容打缓存断点:

const result = await generateText({ model: anthropic('claude-sonnet-4-5'), messages: [ { role: 'user', content: [ { type: 'text', text: 'You are a JavaScript expert.' }, { type: 'text', text: `Error message: ${errorMessage}`, providerOptions: { anthropic: { cacheControl: { type: 'ephemeral' } }, }, }, { type: 'text', text: 'Explain the error message.' }, ], }, ], }); console.log(result.usage.inputTokenDetails.cacheReadTokens); // cache hit tokens console.log(result.usage.inputTokenDetails.cacheWriteTokens); // cache write tokens

缓存读取与写入的 token 数会通过标准usage对象的inputTokenDetails.cacheReadTokens/cacheWriteTokens返回,generateTextstreamText均支持。系统消息与工具也支持打断点——系统消息需以多条role: 'system'消息放在 messages 头部,工具则把cacheControl放进工具定义自身的providerOptions

局限性:缓存有最小可缓存提示长度门槛,短于阈值的提示即使标记cacheControl也不会被缓存。从官方文档(content/providers/01-ai-sdk-providers/05-anthropic.mdx)整理的门槛如下:

  • Claude Opus 4.5:4096 tokens
  • Claude Opus 4.1 / Opus 4 / Sonnet 4.5 / Sonnet 4 / Sonnet 3.7 / Opus 3:1024 tokens
  • Claude Haiku 4.5:4096 tokens
  • Claude Haiku 3.5 / Haiku 3:2048 tokens

六、上下文管理(Context Management)

Anthropic 的 Context Management 允许在满足条件时自动清理会话上下文中的工具调用或思考内容,从而优化长会话的 token 消耗。通过contextManagement.edits配置,支持三类编辑策略(参数 Schema 见 anthropic-language-model-options.ts):

6.1 清理工具调用(clear_tool_uses_20250919)

删除历史中较早的工具调用/结果对:

const result = await generateText({ model: anthropic('claude-sonnet-4-5-20250929'), prompt: 'Continue our conversation...', providerOptions: { anthropic: { contextManagement: { edits: [ { type: 'clear_tool_uses_20250919', trigger: { type: 'input_tokens', value: 10000 }, keep: { type: 'tool_uses', value: 5 }, clearAtLeast: { type: 'input_tokens', value: 1000 }, clearToolInputs: true, excludeTools: ['important_tool'], }, ], }, }, }, });
  • trigger:触发清理的条件(input_tokens阈值或tool_uses数量)
  • keep:保留最近多少个工具使用
  • clearAtLeast:最少清理量
  • clearToolInputs:是否同时清理工具输入参数
  • excludeTools:永不清理的工具名列表

6.2 清理思考内容(clear_thinking_20251015)

删除较早轮次的思考块,仅保留最近的:

contextManagement: { edits: [ { type: 'clear_thinking_20251015', keep: { type: 'thinking_turns', value: 2 } }, ], }

keep可设为{ type: 'thinking_turns', value: n }'all'

6.3 压缩(compact_20260112)

达到 token 阈值时自动对更早的上下文生成摘要,适合超长会话:

const result = streamText({ model: anthropic('claude-opus-4-6'), messages: conversationHistory, providerOptions: { anthropic: { contextManagement: { edits: [ { type: 'compact_20260112', trigger: { type: 'input_tokens', value: 50000 }, instructions: 'Summarize the conversation concisely, preserving key decisions and context.', pauseAfterCompaction: false, }, ], }, }, }, });

压缩发生时,模型生成的摘要会以带特殊 provider 元数据的文本块出现:在streamTexttext-start事件中可通过part.providerMetadata?.anthropic?.type === 'compaction'检测;在useChat等 UI 场景中,摘要会作为带providerMetadata的普通文本 part 返回,可据此做差异化样式渲染。生成结束后,还可通过result.providerMetadata?.anthropic?.contextManagement.appliedEdits查看实际应用了哪些编辑及各自清理的 token/轮次数。

七、批处理(Batch)

Anthropic 语言模型支持通过 Message Batches API 进行异步文本生成。将 Anthropic Provider 传给 AI SDK 的 Batch API 即可获得包含轮询、持久化与结果处理的完整工作流,同一个批次内允许使用不同的文本模型:

const batch = anthropic.experimental_batch(); // 或由 AI SDK 的 Batch API 编排

需要注意的批处理限制:Message Batches不支持speed选项与完成 webhook;显式的anthropicBeta值必须在启动批次时配置(而不是在单个请求上);当提供webhookUrl时,Provider 会返回 unsupported 警告并以无 webhook 方式启动批次。

八、Anthropic 专属工具集(anthropic.tools)

Provider 实例上的tools属性导出 Anthropic 提供的 provider 定义工具工厂,完整清单见 anthropic-tools.ts。这些工具大多无需自写execute,只需按需引入并配置参数。

8.1 Bash 工具

在沙箱中执行 shell 命令,默认通过generateText/streamText传入的experimental_sandbox执行:

const result = await generateText({ model: anthropic('claude-opus-4-8'), tools: { bash: anthropic.tools.bash_20250124() }, experimental_sandbox: { description: 'A sandboxed shell environment.', run: async ({ command }) => ({ exitCode: 0, stdout: `Executed: ${command}`, stderr: '', }), }, stopWhen: isStepCount(2), prompt: 'List the files in the current directory.', });

参数:command(必填,要执行的命令)、restart(可选布尔值,重启工具)。bash_20250124为推荐版本,另有旧版bash_20241022,均仅部分 Claude 版本支持。

8.2 Memory 工具

让 Claude 使用本地持久化记忆(例如文件系统):

const memory = anthropic.tools.memory_20250818({ execute: async action => { // Implement your memory command execution logic here }, });

8.3 Text Editor 工具

提供文件查看与编辑能力:

const tools = { str_replace_based_edit_tool: anthropic.tools.textEditor_20250728({ maxCharacters: 10000, // optional async execute({ command, path, old_str, new_str, insert_text }) { // ... }, }), } satisfies ToolSet;

参数包括:commandview/create/str_replace/insert/undo_edit)、path(绝对路径)、file_text(create 用)、insert_line(insert 用)、new_str/old_str(str_replace 用)、insert_text(insert 用)、view_range(view 的行范围)。版本对照:textEditor_20250728用于 Sonnet 4 / Opus 4 / Opus 4.1(推荐),textEditor_20250124用于 Sonnet 3.7,textEditor_20241022用于 Sonnet 3.5(textEditor_20250429已废弃)。

8.4 Computer 工具

控制键盘与鼠标操作(可用于自动化 UI 场景):

const computerTool = anthropic.tools.computer_20251124({ displayWidthPx: 1920, displayHeightPx: 1080, displayNumber: 0, // Optional, for X11 environments enableZoom: true, // Optional, enables the zoom action execute: async ({ action, coordinate, text, region }) => { // Implement your computer control logic here }, toModelOutput({ output }) { return typeof output === 'string' ? [{ type: 'text', text: output }] : [{ type: 'file-data', data: output.data, mediaType: 'image/png' }]; }, });

动作支持keytypemouse_moveleft_clickleft_click_dragright_clickmiddle_clickdouble_clickscreenshotcursor_positionzoomzoomcomputer_20251124可用)。computer_20251124面向 Opus 4.5,computer_20250124面向 Sonnet 4.5 / Haiku 4.5 / Opus 4.1 / Sonnet 4 / Opus 4 / Sonnet 3.7。

8.5 Web Search 与 Web Fetch 工具

Web Search 让 Claude 访问实时网页内容(需在组织控制台开启该能力):

const webSearchTool = anthropic.tools.webSearch_20250305({ maxUses: 3, allowedDomains: ['techcrunch.com', 'wired.com'], blockedDomains: ['example-spam-site.com'], userLocation: { type: 'approximate', country: 'US', region: 'California', city: 'San Francisco', timezone: 'America/Los_Angeles', }, });

配置项:maxUses(最大搜索次数)、allowedDomains/blockedDomains(域名白/黑名单)、userLocation(地理位置信息,提供地域相关结果)。

Web Fetch 允许 Claude 抓取指定 URL 内容进行分析:

const result = await generateText({ model: anthropic('claude-sonnet-4-0'), prompt: 'What is this page about?', tools: { web_fetch: anthropic.tools.webFetch_20250910({ maxUses: 1 }) }, });

Web Fetch 额外支持citations(可选开启引用,{ enabled: true })、maxContentTokens(限制进入上下文的抓取内容量)等参数。

8.6 Advisor 工具

advisor_20260301让执行模型在生成过程中向更强的顾问模型请求规划或纠偏建议(provider 端执行,无需execute函数):

const result = await generateText({ model: anthropic('claude-sonnet-4-6'), instructions: 'You have access to an `advisor` tool backed by a stronger reviewer model.', prompt: 'Build a concurrent worker pool in Go with graceful shutdown. Outline the design first.', tools: { advisor: anthropic.tools.advisor_20260301({ model: 'claude-opus-4-8', maxUses: 3, maxTokens: 2048, }), }, });

关键参数:model(必填,顾问模型,能力不得低于执行模型)、maxUses(单请求内最大调用次数,超限返回advisor_tool_result_error)、maxTokens(单次顾问输出上限,最小 1024,建议 2048,超出顾问模型输出上限会触发 400 错误)、caching(可选,{ type: 'ephemeral', ttl: '5m' | '1h' },用于跨调用缓存顾问转录,约 3 次以上调用时收益明显)。注意:顾问子推理不参与流式输出,streamText中执行流会在顾问运行期间暂停。

8.7 Tool Search 工具

针对成百上千个工具的场景,Tool Search 让 Claude 按需动态发现并加载工具,避免一次性把全部工具定义塞进上下文。有两种变体:toolSearchBm25_20251119(自然语言 BM25 检索)与toolSearchRegex_20251119(正则检索)。配合被搜索的工具使用providerOptions: { anthropic: { deferLoading: true } }延迟加载:

const result = await generateText({ model: anthropic('claude-sonnet-4-5'), prompt: 'What is the weather in San Francisco?', tools: { toolSearch: anthropic.tools.toolSearchBm25_20251119(), get_weather: tool({ description: 'Get the current weather at a specific location', inputSchema: z.object({ location: z.string() }), execute: async ({ location }) => ({ location, temperature: 72, condition: 'Sunny' }), providerOptions: { anthropic: { deferLoading: true } }, }), }, });

如需自定义检索逻辑(如基于 embedding 的语义搜索),可通过工具的toModelOutput返回tool-reference类型内容块来加载对应延迟工具。

九、代码执行与 Agent Skills

9.1 Code Execution 工具

codeExecution_20260120(推荐,无需 beta 头,支持 Opus 4.6 / Sonnet 4.6 / Sonnet 4.5 / Opus 4.5)、codeExecution_20250825(支持 Python 与 Bash,含增强文件操作)、codeExecution_20250522(仅 Bash)三个版本让 Claude 在沙箱中直接执行 Python/Bash 代码:

const codeExecutionTool = anthropic.tools.codeExecution_20260120(); const result = await generateText({ model: anthropic('claude-opus-4-20250514'), prompt: 'Calculate the mean and standard deviation of [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]', tools: { code_execution: codeExecutionTool }, });

需要让上传的文件进入执行容器时,先通过anthropic.files()上传,再在文件消息上设置containerUpload: true(anthropic-language-model-options.ts 中anthropicFilePartProviderOptions)。支持 CSV、Excel、JSON、XML、图片(JPEG/PNG/GIF/WebP)与文本文件。

9.2 程序化工具调用(Programmatic Tool Calling)

配合代码执行,Claude 可以在容器内直接编写代码调用你的工具,减少多工具场景的往返延迟与 token 消耗。用allowedCallers声明允许被容器调用的工具,并用forwardAnthropicContainerIdFromLastStep在步骤间传递容器 ID:

const result = await generateText({ model: anthropic('claude-sonnet-4-5'), stopWhen: isStepCount(10), prompt: 'Get the weather for Tokyo, Sydney, and London, then calculate the average temperature.', tools: { code_execution: anthropic.tools.codeExecution_20260120(), getWeather: tool({ description: 'Get current weather data for a city.', inputSchema: z.object({ city: z.string() }), execute: async ({ city }) => ({ temp: 22, condition: 'Sunny' }), providerOptions: { anthropic: { allowedCallers: ['code_execution_20260120'] } }, }), }, prepareStep: forwardAnthropicContainerIdFromLastStep, });

该能力要求claude-sonnet-4-6/claude-sonnet-4-5/claude-opus-4-6/claude-opus-4-5模型,并使用codeExecution_20260120codeExecution_20250825。容器 ID 在每步结束后可从providerMetadata.anthropic.container.id读取。

9.3 Agent Skills

Skills 让 Claude 在沙箱容器中执行文档处理(PPTX、DOCX、PDF、XLSX)与数据分析等专项任务,需要同时启用代码执行工具:

const result = await generateText({ model: anthropic('claude-sonnet-4-5'), tools: { code_execution: anthropic.tools.codeExecution_20260120() }, prompt: 'Create a presentation about renewable energy with 5 slides', providerOptions: { anthropic: { container: { skills: [{ type: 'anthropic', skillId: 'pptx', version: 'latest' }], }, }, }, });

内置 skill 包括pptxdocxpdfxlsx;自定义 skill 使用type: 'custom'并传skillId与可选version。Skills 使用渐进式上下文加载,并在具备代码执行能力的沙箱容器中运行。

十、错误处理与底层实现细节

10.1 错误类型映射

Provider 会把 Anthropic API 返回的错误类型归一化为 AI SDK 统一的错误结构,映射逻辑集中在 anthropic-error.ts(流式场景的映射见 anthropic-language-model.ts 的getAnthropicStreamErrorMetadata):

API 错误类型归一化 HTTP 状态码是否可重试
api_error500
overloaded_error529
rate_limit_error429
request_too_large413
authentication_error401
permission_error403
not_found_error404
billing_error/invalid_request_error400

10.2 Web Search / Code Execution 的错误形态

  • 非流式(generateText):Web Search 错误以异常抛出,可用try/catch捕获(错误消息包含 "Web search failed");Code Execution 错误则以tool-error类型的结果 part 出现在result.content中。
  • 流式(streamText):两类错误都以error类型的 part 进入流,可在result.textStream中按part.type === 'error'检测。

10.3 安全分类器与回退(Fallbacks)

Claude Fable 5 对网络安全、生物、化学等领域有内置安全限制。当请求被分类器拦截时,API 返回200+refusal停止原因(content-filterfinish reason),详情在providerMetadata.anthropic.stopDetails中。为避免被拦截,可配置fallbacks

providerOptions: { anthropic: { fallbacks: 'default' }, // 推荐:按拒绝类别路由到官方推荐回退模型 }

也可指定显式回退链:fallbacks: [{ model: 'claude-fable-5' }],每个条目可覆盖max_tokensthinkingoutput_configspeed。回退是否生效可通过providerMetadata.anthropic.iterations中是否存在fallback_message类型条目来判断。

10.4 MCP Connector

可通过mcpServersprovider 选项在请求中接入远程 MCP 服务器,工具调用与结果均为动态(输入输出 Schema 未知):

providerOptions: { anthropic: { mcpServers: [ { type: 'url', name: 'echo', url: 'https://echo.mcp.inevitable.fyi/mcp', authorizationToken: mcpAuthToken, // optional toolConfiguration: { enabled: true, allowedTools: ['echo'] }, // optional }, ], }, }

10.5 PDF 输入

Claude 模型支持读取 PDF 文件,消息内容中使用type: 'file'mediaType设为'application/pdf'。既可直接传 URL(data: new URL(...)),也可传 base64 Buffer(data: fs.readFileSync(...))。

十一、模型能力速查

不同 Claude 模型对各类能力支持不一,下表汇总常见模型的差异化能力(来源:content/providers/01-ai-sdk-providers/05-anthropic.mdx):

模型图像输入结构化输出工具使用Computer UseWeb SearchTool SearchCompaction
claude-opus-5/claude-sonnet-5/claude-fable-5-1/claude-fable-5
claude-opus-4-8/claude-opus-4-7/claude-opus-4-6
claude-sonnet-4-6/claude-opus-4-5
claude-haiku-4-5
claude-sonnet-4-5
claude-opus-4-1/claude-opus-4-0/claude-sonnet-4-0

表内仅列出常用模型,完整模型清单以 Anthropic 官方为准;同时你也可以把任意有效的模型 ID 以字符串形式传入 provider。

十二、总结

@ai-sdk/anthropic通过统一的 Provider 规范将 Claude 的 Messages API 完整接入 AI SDK 生态:默认实例开箱即用,createAnthropic支持代理、双认证方式与自定义请求头;模型级providerOptions覆盖推理控制、effort 调度、任务预算、数据驻留、结构化输出等进阶能力;anthropic.tools则提供了 Bash、Computer、Web Search、Code Execution、Agent Skills、Tool Search、Advisor 等一批 provider 定义的专属工具,配合上下文管理、提示缓存与批处理,足以支撑从简单文本生成到长程 Agent 的全场景开发。

如需进一步阅读源码级实现,可参考以下仓库路径:

  • Provider 配置与实例创建:packages/anthropic/src/anthropic-provider.ts
  • 模型选项 Schema 定义:packages/anthropic/src/anthropic-language-model-options.ts
  • 语言模型调用与流式解析:packages/anthropic/src/anthropic-language-model.ts
  • 专属工具工厂清单:packages/anthropic/src/anthropic-tools.ts
  • 错误映射:packages/anthropic/src/anthropic-error.ts
  • 官方完整文档(打包时随包发布):content/providers/01-ai-sdk-providers/05-anthropic.mdx

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询