vercel/ai 是 Vercel 与 Next.js 团队主导的开源项目,官方定位是「The AI Toolkit for TypeScript」,目标是帮助开发者用 Next.js、React、Svelte、Vue、Angular 等 UI 框架以及 Node.js 等运行时构建 AI 应用和 Agent。仓库 topics 覆盖 anthropic、openai、gemini、llm、generative-ui、nextjs、react、svelte、vue 等方向,说明它并非单一模型 SDK,而是面向多 Provider 与多前端栈的抽象层。
统一 Provider 抽象是这套工具的核心设计。README 给出的第一种用法是直接传模型字符串,例如 model: 'anthropic/claude-opus-5.5',默认经由 Vercel AI Gateway 访问各大 Provider;第二种用法是安装 @ai-sdk/openai、@ai-sdk/anthropic、@ai-sdk/google 等独立包,再以 anthropic('claude-opus-5-5') 这类工厂函数显式指定模型。两种路径共用同一套 generateText 调用形态,意味着业务代码可以在不重写调用逻辑的前提下切换模型来源。
这种抽象带来的直接收益是模型可替换性。开发者可以先通过 Gateway 快速验证多个模型,再在需要精细控制时切换到直连 Provider 包。代价是抽象层会引入一层间接:模型字符串的解析、Provider 的鉴权与路由由 SDK 或 Gateway 承担,具体行为需要以官方文档为准,不能仅凭调用签名推断。
结构化输出是另一个值得注意的能力。README 展示了 generateText 配合 Output.object 与 zod schema 的用法,模型返回结果会按给定 schema 校验。对需要把 LLM 输出接入下游系统的场景,这比自行解析文本更可控,但 schema 设计本身仍决定成败:字段过深或约束过松都会削弱校验价值。
Agent 能力集中在 ToolLoopAgent。示例中它接收 model、system 和 tools,tools 里可以挂载 openai.tools.localShell 这类工具,execute 回调中执行命令并返回 output。从命名看,ToolLoopAgent 负责工具调用循环,即模型决定调用哪个工具、SDK 执行工具、再把结果回传给模型。工具的实际执行环境需要开发者自己提供,示例中使用的是 Vercel Sandbox。这意味着 Agent 的安全边界、沙箱隔离和超时控制属于应用侧责任,SDK 提供的是循环编排而非执行隔离。
AI SDK UI 模块负责前端协作。官方说明这些 hooks 是框架无关的,可用于 Next.js、React、Svelte 和 Vue,按框架安装对应包,例如 @ai-sdk/react。README 的完整示例展示了三段式结构:agent 文件中用 ToolLoopAgent 定义 imageGenerationAgent,并通过 InferAgentUIMessage 导出消息类型;Next.js App Router 的 route 中用 createAgentUIStreamResponse 把 agent 与 messages 转成流式响应;前端用 useChat 消费消息,并按 part.type 分支渲染文本或工具调用视图。
这个模式的关键在于类型贯通。InferAgentUIMessage 从 agent 定义推导出消息类型,前端 useChat 以该类型为泛型参数,工具调用部分则通过 UIToolInvocation 约束 invocation 结构,示例中按 state 的 input-available、output-available 分支渲染。类型从服务端 agent 定义一路传导到 UI 组件,减少了前后端消息结构不一致的风险。
从工程选型角度看,vercel/ai 适合已经在 Next.js、React、Svelte 或 Vue 技术栈中、且需要接入多个模型 Provider 的团队。它把 Provider 差异、工具循环和 UI 流式协议收敛到统一 API,降低了切换成本。但需要注意几点边界:其一,README 中的模型名称与版本属于示例,实际可用模型需以官方文档为准;其二,Agent 的工具执行、沙箱与权限控制不在 SDK 职责内;其三,结构化输出依赖 schema 设计质量。安装方面,官方要求 Node.js 22+,基础包为 npm install ai,使用 coding agent 的团队可按 README 建议通过 npx skills add vercel/ai 引入 AI SDK skill。