Vercel AI SDK 在 README 中对自己的定位是:一个 provider-agnostic 的 TypeScript 工具包,用于在 Next.js、React、Svelte、Vue、Angular 等 UI 框架以及 Node.js 运行时中构建 AI 应用和 Agent。这个定位本身已经给出两层信息:它不绑定任何单一模型厂商,也不绑定 React 或 Next.js,尽管它确实由 Vercel 与 Next.js 团队成员创建。
对 TypeScript 开发者而言,真正值得关注的不是它“支持多少框架”,而是它把模型调用、结构化输出、Agent 循环、UI 流式渲染放进同一套 API 之后,选型问题会发生什么变化。
统一 Provider 层的实际含义
README 明确描述了两种接入方式。默认情况下,AI SDK 使用 Vercel AI Gateway 访问所有主流模型提供商,调用时只需传入模型字符串:
import { generateText } from 'ai';
const { text } = await generateText({
model: 'openai/gpt-5.4',
prompt: 'What is an agent?',
});
另一种是使用官方 SDK 包直连提供商:
npm install @ai-sdk/openai @ai-sdk/anthropic @ai-sdk/google
import { anthropic } from '@ai-sdk/anthropic';
const result = await generateText({
model: anthropic('claude-opus-4-6'),
prompt: 'Hello!',
});
这里有两个被 README 的代码示例同时带出来的事实:AI SDK 的 generateText 这一入口函数同时覆盖文本生成和结构化数据生成,而且同一个函数签名可以接收字符串形式或 SDK 包形式的模型引用。
对于开发团队的选型,统一 Provider 层的价值在于:当项目的模型需求从单一 OpenAI 扩展到 Anthropic、Google 时,业务代码只需要修改 model 字段,而不用为每家厂商单独实现一层请求封装。README 展示的代码写法是一致的,但“切换模型成本低”是否意味着“切换后效果一致”,则不属于 SDK 能承诺的范围——模型本身的生成能力差异仍然存在,这需要在选型时区分清楚。
结构化输出已经被抽象为普通函数调用
README 中一个值得注意的示例是,使用 generateText 配合 Output.object 生成符合 Zod schema 的 JSON 数据:
import { generateText, Output } from 'ai';
import { z } from 'zod';
const { output } = await generateText({
model: 'openai/gpt-5.4',
output: Output.object({
schema: z.object({
recipe: z.object({
name: z.string(),
ingredients: z.array(
z.object({ name: z.string(), amount: z.string() }),
),
steps: z.array(z.string()),
}),
}),
}),
prompt: 'Generate a lasagna recipe.',
});
这意味着在应用代码里,开发者不需要手工拼接 JSON Schema 提示词,也不需要自己解析模型返回的 JSON 文本再与 Zod 校验。SDK 把 schema 定义作为参数传入,将模型输出规约为类型安全的对象。
对一个 TypeScript 项目来说,这带来的架构影响是:AI 输出可以像普通函数返回值一样进入业务逻辑和类型系统,而不是停留在字符串或 JSON.parse 的脆弱状态。README 没有披露这一过程在底层是采用 function calling、JSON mode 还是其他机制,所以严谨的工程判断是:它在使用层提升了开发体验,但内部实现的稳定性与兜底策略仍需进一步查看源码和文档验证。
Agent 与工具调用:README 给出的新抽象
README 展示了一个新的核心对象:ToolLoopAgent。示例中,Agent 可以配置工具列表,每个工具封装一个具体的可执行动作:
import { openai } from '@ai-sdk/openai';
import { ToolLoopAgent } from 'ai';
const sandboxAgent = new ToolLoopAgent({
model: 'openai/gpt-5.4',
system: 'You are an agent with access to a shell environment.',
tools: {
shell: openai.tools.localShell({
execute: async ({ action }) => {
const [cmd, ...args] = action.command;
const sandbox = await getSandbox(); // Vercel Sandbox 示例占位,需自行实现
const command = await sandbox.runCommand({ cmd, args });
return { output: await command.stdout() };
},
}),
},
});
这段代码同时透露了几件事实:第一,AI SDK 的工具调用能力已经上升到 Agent 层,而不只是让模型在单次对话中返回工具参数;第二,从 ToolLoopAgent 命名和示例看,Agent 内部可能具备循环执行机制,否则 shell 这类需要多轮执行的工具难以自洽工作,但具体循环控制流需查看源码验证;第三,工具函数被设计为直接执行业务逻辑的 async function,开发者无需在示例中自行处理中间控制流。
README 还展示了 createAgentUIStreamResponse 这个服务端入口,以及 InferAgentUIMessage、useChat 等配套类型和 Hook。这个组合解决的是一个在 Agent 类应用中很现实的问题:当工具在服务端执行时,UI 如何随着工具调用状态分阶段更新。
生成式 UI:能直接从官方示例确认的部分
关于生成式 UI,README 给出了一个完整的四段链路:Agent 定义、Next.js App Router 路由处理、React 组件渲染工具调用、页面端 useChat 消费消息。以图像生成为例,Agent 中的 generateImage 工具通过 openai.tools.imageGeneration 暴露,UI 组件则根据 invocation.state 区分 input-available 和 output-available 两个状态,最终将工具输出以 base64 图片的形式渲染回聊天流。
import { openai } from '@ai-sdk/openai';
import { UIToolInvocation } from 'ai';
export default function ImageGenerationView({
invocation,
}: {
invocation: UIToolInvocation>;
}) {
switch (invocation.state) {
case 'input-available':
return Generating image...;
case 'output-available':
return ;
}
}
这里能直接得出的工程判断是:AI SDK 并没有把生成式 UI 限定为“模型返回一段可渲染的 UI 描述”,而是将其建立在工具调用状态的可观察性之上。对团队来说,这意味着同一个 Agent 接口可以对接多种自定义工具视图,UI 的扩展点是工具调用本身,而不是模型输出格式。
需要谨慎的是,README 示例中的 imageGeneration 工具来自 @ai-sdk/openai 包,说明该能力与 OpenAI 工具生态相关,不能默认所有 Provider 都有同等能力的实现。
明确支持范围与安装前提
AI SDK 安装命令只有一个:
npm install ai
README 明确要求本地开发环境为 Node.js 22+,并支持 npm 或其他包管理器。UI 模块需要按框架安装附加包,例如 React 对应的是:
npm install @ai-sdk/react
这个安装结构意味着 ai 是核心包,@ai-sdk/react、@ai-sdk/openai 这类包是外圈集成层。项目采用这种包结构,可以只引入自己真正需要的依赖,但也说明使用场景越复杂,需要管理的包越多。
README 还推荐在仓库中为 Claude Code、Cursor 等编码代理添加 AI SDK skill:
npx skills add vercel/ai
这属于 AI SDK 对编码工作流的一次适配,可以作为工程效率辅助手段考虑。
资料未覆盖的边界
仅凭 README,无法得知以下关键细节,开发者需要在转向源码和文档时单独验证:
- Provider 抽象层如何处理不同厂商的流式协议差异?
- ToolLoopAgent 的循环终止条件、多工具调用顺序、错误恢复及重试策略是什么?
- generateText 底层是通过 function calling 还是其他方式获取结构化输出?
- Vercel AI Gateway 代理模式下,数据流、缓存策略和重试机制如何工作?
- 当采用 @ai-sdk/anthropic 等直连包时,其请求生命周期和超时控制是否与 Gateway 模式完全一致?
- 使用 Agent 的现有模型提供商,是否对模型上下文窗口有最低要求?
这些不是本文可以代替官方文档回答的问题,而是选型者将 README 中的 API 示例落地前必须检查的工程项。
选型判断与下一步路径
对于 Next.js 或通用 TypeScript 项目,AI SDK 的选型优势可以从 README 中直接归纳为:统一模型访问层、类型友好的结构化输出、框架无关的 Agent 与 UI 抽象,以及官方维护的 Provider SDK 和模板集成。对于已经深度使用 React 状态管理或流式 UI 的团队,尤其是计划在聊天之外构建带工具调用的复杂界面的团队,这一工具链的抽象层次与项目需求是匹配的。
从严格的工程角度看,真正需要投入时间验证的是 Agent 工具循环和中间状态传输的细节。在把业务逻辑绑定进入 ToolLoopAgent 之前,建议团队先在一个独立的 Next.js 项目中用官方示例跑通一条完整链路:Agent 定义一个自定义工具,服务端接收并返回流式消息,前端 useChat 渲染工具状态。只有这一链路在真实部署环境表现稳定,统一 Provider 层的便利性才有落地价值。
选型结论可以概括为:AI SDK 提供了 TypeScript 生态中目前少见的“从 model string 到 Agent UI”端到端抽象;但模型的最终一致性和复杂工具链的稳定性,仍然取决于每个 Provider 自身能力以及团队对源码层的理解深度。