Vercel AI SDK 的 README 开头写明:它是一个 provider-agnostic 的 TypeScript toolkit,用于构建 AI-powered applications 和 agents,支持 Next.js、React、Svelte、Vue、Angular 这类 UI 框架,以及 Node.js 这类运行时。安装前提是 Node.js 22+ 和包管理器,核心包是 ai

这组信息基本勾勒出它的切入位置:不负责模型训练,也不直接托管推理,而是处在“你的应用”和“模型 Provider”之间。对已经在用上述前端框架的团队来说,引入成本看起来就是一条 npm 命令。

两条 Provider 接入路径

README 描述了一个 unified API,用来对接 OpenAI、Anthropic、Google 等 Provider。默认路径是 Vercel AI Gateway,README 的原文说法是,默认使用 Gateway 让你开箱即用所有主要 Provider,只要传一个 model 字符串。

const result = await generateText({
  model: 'anthropic/claude-opus-4.6',
  prompt: 'Hello!',
});

另一条路径是直接安装 Provider SDK 包,用它导出的工厂函数构造模型:

import { anthropic } from '@ai-sdk/anthropic';

const result = await generateText({
  model: anthropic('claude-opus-4-6'),
  prompt: 'Hello!',
});

(以上片段摘自 README,为便于阅读做了删减。其中的模型字符串是 README 示例原文,不代表当前可用模型清单。)

两条路径对应不同的信任边界。走 Gateway 时,代码里只有 model 字符串,凭证与路由由网关侧承担;走 Provider SDK 时,包名和模型构造方式都显式出现在代码里。工程上真正需要确认的是:

  • 各 Provider 在 unified API 下是否能力对等。README 只给了统一接口的说法,没有给出能力矩阵。工具调用、结构化输出、多模态输入、流式行为这些差异,需要逐个 Provider 对照官方文档,或者自己跑一组能力测试。
  • Gateway 与直连的边界。走 Gateway 时密钥怎么管、能否替换、是否支持自托管,README 没有展开。
  • 模型命名规则。anthropic/claude-opus-4.6 这种写法属于 Gateway 风格,anthropic('claude-opus-4-6') 属于 Provider 工厂风格,两者不通用,升级时容易踩坑。

三个调用面:文本、结构化数据、agent

README 展示的能力可以归成三层,接口外形都落在 generateText 和 agent 类上。

文本生成是最小形态,返回 { text }

结构化数据用 output 参数加 zod schema,返回值里取 output

const { output } = await generateText({
  model: 'openai/gpt-5.4',
  output: Output.object({ schema: /* zod schema */ }),
  prompt: 'Generate a lasagna recipe.',
});

README 没有说明结构化输出是依赖 Provider 原生 JSON mode,还是通过工具调用实现。这属于必须查源码或 API Reference 的问题,因为它直接决定在哪些模型上能稳定工作。

agent 形态是 ToolLoopAgent,构造参数里包含 model、system 和 tools。README 的示例把 shell 工具挂上去,工具内部再去调用沙箱执行命令。类名里的 ToolLoop 暗示工具调用循环由 SDK 托管,但 README 没有给出循环上限、终止条件、工具报错后的行为、并发工具调用的顺序保证。这几项是 agent 上生产前最容易出成本事故的地方。建议用一个必然失败的工具加一个必然触发多轮的 prompt,在真实凭证下用小额度做边界测试,观察轮次、token 消耗和错误传播路径。

生成式 UI 的接线方式

README 给出的端到端示例值得完整看一遍,因为它展示了这套 SDK 在 UI 侧的抽象方式。链路大致分四段:

  1. agent 定义:ToolLoopAgent 挂上 Provider 提供的图像生成工具,并用 InferAgentUIMessage 导出消息类型;
  2. Next.js App Router 的 route:POST 请求里调用 createAgentUIStreamResponse({ agent, messages })
  3. UI 组件:接收 UIToolInvocation,按 invocation.state 分支渲染,input-available 时显示占位,output-available 时渲染结果;
  4. 页面:'use client' 下用 @ai-sdk/reactuseChat(),遍历 message.parts,按 part.type 区分文本与工具调用。

这套模式的关键取舍是:SDK 把工具调用的生命周期映射成消息 part 上的状态机,前端只需按状态渲染。好处是不用自己设计流式协议和消息序列化格式;代价是前端组件与 agent 定义通过类型绑定在一起,agent 改了工具名,前端的分支判断也要跟着改。

README 只展示了 input-availableoutput-available 两个状态,完整状态集合、错误状态、中间流式片段的表示方式,需要看官方 API Reference。同理,示例中工具参数的语义 README 没有解释,需要以官方文档为准。

README 还说 AI SDK UI 的 hooks 是 framework agnostic 的,可以用在 Next.js、React、Svelte 和 Vue,使用时需要安装对应框架的包,例如 @ai-sdk/react。但示例本身是 Next.js App Router 形态,其他框架的 route 约定和流式响应适配需要单独验证。

对编码代理的适配

README 里有一条容易被忽略的建议:如果使用 Claude Code 或 Cursor 这类 coding agent,建议执行 npx skills add vercel/ai,把 AI SDK 的 skill 加进仓库。这本质上是把 SDK 的用法知识以 skill 形式喂给编码代理,减少代理凭记忆写旧 API 的概率。这个效果只能实测:可以拿同一个任务,在装与不装 skill 的仓库里各跑一次,比对生成代码是否能通过类型检查。

README 覆盖不到的部分

以下几点是上生产前绕不开、但 README 没有承诺的内容。每一项都可以配一个具体动作:

  • 密钥与网关凭证管理:确认直连模式下环境变量的注入方式,以及 Gateway 模式下的凭证归属。
  • 重试、超时、限流、熔断:查 API Reference 是否内置,没有就自己在调用层包一层。
  • 可观测性:请求与响应记录、token 与成本归因、延迟分解。README 未提供,需要结合日志和 Provider 侧账单交叉验证。
  • 多 Provider 降级:unified API 降低了切换成本,但不等于行为等价。建议做能力矩阵测试,而不是只看接口签名。
  • 结构化输出的失败处理:schema 校验失败时是抛错还是回退,需要按版本确认。
  • agent 循环的成本上限:设置最大轮数、单轮 token 上限和人工介入点。
  • 前端消息类型兼容:agent 类型变化会传导到 UI 组件,需要版本化策略。
  • 运行时支持范围:README 提到的是 Node.js,其他运行时应以官方文档为准。

选型上的判断

如果项目已经在 Next.js、React、Svelte、Vue 或 Angular 上,并且需要一层的模型接入来做流式对话、结构化输出和工具调用渲染,这个 SDK 的抽象层次与场景是匹配的:它把 Provider 差异和 UI 消息协议都收进 SDK,应用侧主要写业务工具和渲染逻辑。

如果核心需求是后端批量推理、极细粒度的模型参数控制,或者运行时不在 README 提到的范围内,那么需要额外评估的部分会更多,README 提供的证据不足以支撑结论。

一个务实的推进方式是:先用 README 里的示例跑通一条最小链路(文本、结构化、工具调用、UI 渲染),再针对你要用的每一个 Provider 做一轮能力与错误行为测试。README 能证明它的定位和 API 外形,不能证明它在你的模型组合下等价、稳定、便宜。