AI SDK 的 README 开篇用一句话定义自己:provider-agnostic TypeScript toolkit。这句话容易被误读成“又一个模型调用封装”,真正值得注意的是 README 后半部分展示的 image generation agent 示例:Agent 执行工具后产生的结果,与文本一起沿着消息流进入前端,最终由 React 组件按工具调用状态渲染。因此本文不复述“这个项目有哪些功能”,而是围绕 README 中实际出现的三层结构展开:模型接入层、结构化生成、Agent 与 UI 的集成边界。所有结论都以 README 正文为界,README 没有讲清的部分会明确列为待验证项。

项目事实:支持栈与安装约束

根据官方 README,AI SDK 是一个面向 AI 应用与 Agent 构建的 TypeScript 工具集,可配合 Next.js、React、Svelte、Vue、Angular 等 UI 框架使用,也支持 Node.js 运行时。项目创建方是 Vercel 与 Next.js 团队成员,同时接受开源社区贡献。

安装约束很直接:本机需要 Node.js 22+ 和 npm 或其他包管理器,核心包通过 npm install ai 安装。如果要在 React 项目中使用 UI hooks,需要按框架安装对应包,README 给出的例子是 npm install @ai-sdk/react。这里可以得出的工程结论是:项目并不要求你先接入某个厂商 SDK,核心依赖只有一个。

第一层:统一 Provider 入口,模型字符串化

在 Unified Provider Architecture 部分,README 展示了两种接入方式。

默认方式是直接传模型字符串:

const result = await generateText({
  model: 'anthropic/claude-opus-4.6', // or 'openai/gpt-5.4', 'google/gemini-3-flash', etc.
  prompt: 'Hello!',
});

这条路径默认经过 Vercel AI Gateway,再由 AI Gateway 转发到各大模型提供商。换言之,业务代码并不直接感知 OpenAI 或 Anthropic 的 HTTP API,模型在代码里的身份是一个 provider/model 字符串。

第二种方式是绕过 Gateway,直接使用提供商自己的 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!',
});

这时模型身份从字符串变成由 @ai-sdk/anthropic 这类包返回的实例,代码里仍然只面对 generateText 这一个入口,但底层连接是直连 provider。README 同时保留“字符串 + Gateway”和“编程实例 + 直连”两条路径,这比只提供单一方案更容易嵌入企业的不同网络架构。从工程角度看,无论选哪条,上层业务代码的调用结构都被收敛了,这是“provider-agnostic”在代码层面的具体含义。

注意,两套写法里的模型名都是 README 的示例字符串。示例只说明 API 形态,具体模型是否可调用、能力边界如何,仍需以各 provider 当前文档为准。

第二层:结构化输出成为一等能力

README 中另一个值得注意的设计,是让 generateText 直接返回结构化数据,而不是只返回字符串。它给出的代码形态大致如下:

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.',
});

这里输出结构由 zod schema 描述,嵌套对象和数组的边界都在代码里表达出来。对工程团队来说,这意味着模型返回内容在进入业务代码之前,先被 schema 约束,而不是得到一段文本后再用正则或 JSON.parse 二次处理。

Output.object 并不是另一个 API,它仍然挂在 generateText 之下。这种设计保持了调用入口的统一:文本生成、结构化生成、Agent 调用共享同一套消息格式,减少了上层应用需要理解的 API 面。

第三层:ToolLoopAgent 是一个工具容器

README 在 Agent 示例中引入了一个核心类:ToolLoopAgent。代码示例如下:

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 }) => {
        // 在 Vercel Sandbox 中执行命令并返回 stdout
      },
    }),
  },
});

从 README 的用法看,ToolLoopAgent 接受模型、system prompt 和工具表,工具以对象形式注册。示例中的 shell 工具来自 openai.tools.localShellexecute 内部调用 Vercel Sandbox 执行命令,然后把 stdout 返回给 Agent。

但需要划定边界:README 只展示了构造方式,没有解释 ToolLoopAgent 内部如何决定调用顺序、如何终止循环、如何处理工具报错。对于要上生产的团队,这些是实现层面的关键问题,只能通过进一步阅读源码或官方文档确认。

第四层:Agent 工具怎么变成生成式 UI

README 中最有信息量的部分,是一个图片生成 Agent 的前后端串联示例。整个链路由几个文件组成:

  • agent/image-generation-agent.ts 定义 imageGenerationAgent,并用 InferAgentUIMessage 导出消息类型;
  • app/api/chat/route.ts 读取请求中的 messages,调用 createAgentUIStreamResponse({ agent, messages }) 返回流式响应;
  • 前端页面用 useChat() 接收消息,并遍历 message.parts

关键在对应关系:当某个 part 的类型等于工具名 tool-generateImage 时,React 渲染一个 ImageGenerationView 组件。组件拿到 UIToolInvocation 后,根据 invocation.state 分支:

  • input-available 时显示生成中;
  • output-available 时把 invocation.output.result 当作 base64 图片渲染到 ``。

这个模式的工程意义,是前端 UI 状态和 Agent 工具调用状态被显式地关联起来。工具结果不再只是塞回给模型的隐藏文本,而是变成 UI 可以直接响应的事件。React 组件接收到的消息类型由 Agent 实例推断而来,前端和后端因此共享同一套消息结构,减少了为对接大模型而单独维护一套协议类型的成本。

同样需要谨慎的是,README 的示例只是展示集成方式,并没有说明这套 UI 消息机制在超长任务、断线重连、多个工具并发执行时的具体行为。这些边界要在真实应用落地前单独验证。

生态配套:模板与 coding-agent skill

AI SDK 不只是一个 npm 包,README 还提供了两类上手设施。

一是 npx skills add vercel/ai,把 AI SDK skill 加入仓库,供 Claude Code、Cursor 这类 coding agent 使用。二是官方 Templates,覆盖不同 use case、provider 和框架的预集成工程。

对开发者而言,这两件事降低了从文档到可运行工程的距离。特别是 coding-agent skill,解决的是“AI 帮你写代码时不知道 AI SDK 有哪些 API”的问题。它是否稳定、是否需要更新,需以官方后续维护情况为准,但接入成本低,值得尝试。

选型判断:能确认与不能确认的事

根据 README 这一层资料,可以确认的信息包括:核心安装基于 Node.js 22+;UI hooks 按框架拆包,README 明确给出 React 示例;模型接入支持默认走 Vercel AI Gateway,也可用 @ai-sdk/openai@ai-sdk/anthropic@ai-sdk/google 等包直连;generateText 可通过 Output.object + zod 约束结构化输出;Agent 使用 ToolLoopAgent + tools 注册;Agent 消息类型可以推断到前端,工具状态可渲染为 UI。

尚未确认的信息包括:ToolLoopAgent 内部循环策略;各 provider 的工具定义到不同模型 tool schema 的映射细节;Vercel AI Gateway 在高并发或企业网络中的行为;以及官方 benchmark 或性能对比数据。

从选型角度,AI SDK 最值得关注的团队有两类。第一类是技术栈已经以 Next.js、React 和 TypeScript 为主的团队,官方示例和工程路径与现有代码结构最接近。第二类是计划在多 provider 之间保留替换空间的团队。provider/model 字符串加统一 generateText 入口,确实降低了厂商锁定的体感,但“统一 API”不意味着“模型行为一致”,结构化输出和工具调用的实际质量仍要以目标模型为准。

如果团队已经深度使用某个厂商原生 SDK,且没有切换多个 provider 的诉求,引入 AI SDK 带来的收益会变小。它不是替代所有模型 SDK 的银弹,而是一个在 TypeScript 应用层收敛模型请求与 UI 状态的抽象层。

回到开头的问题:AI SDK 真正有意思的地方,不是“能调 GPT”,而是把模型访问、结构化输出、Agent 工具与 UI 消息放进同一套 TypeScript 代码路径中。GitHub README 只能证明这套 API 形态存在,不能证明它在所有复杂场景下都可靠。因此,一个合理的下一步是用最小 demo 跑通 README 中的 generateTextToolLoopAgentuseChat 链路,再根据真实场景判断是否值得长期投入。