36 个月 24.7K stars:Vercel AI SDK 如何用一套 TypeScript API 收编 60+ LLM
GitHub: https://github.com/vercel/ai
一句话总结
Vercel AI SDK 是面向前端/全栈工程师的「LLM 统一接入层 + Agent 运行时」:用 generateText / streamText / ToolLoopAgent 一套 TypeScript API 屏蔽 60+ 模型厂商的差异,并把流式响应原生地对接到 React/Next.js/Vue/Svelte/Angular/RSC,是当下 Node/JS 生态最被广泛采用的 AI 应用层 SDK。
值得关注的理由
- 数据级别的体量:24,703 stars、14.2M weekly npm downloads、707 名贡献者、7,157 个 commits — 跨过大众热门门槛,且月增仍能跑出 700+ stars 的爆发型增长。
- 从「SDK」升格到「Agent 运行时」:v7 canary(
7.0.0-canary.165)正在收敛 — 新增ToolLoopAgent框架、InferAgentUIMessage静态类型推导、createAgentUIStreamResponse流响应,把它从「模型 SDK」推向「Agent runtime」分水岭。 - 工程化本身就是产品力:用 4 层消息模型 + 洋葱中间件 +
createStitchableStream+ 单遍 14 态fixJson解析器,把「多 provider × 多框架 × 流式 × 结构化输出」做成可组合的底层原语 — 这是它能撑住 60 个 workspace package 的根因。
项目展示

仓库根目录
assets/hero.gif(1.1MB),README 头部项目主视觉。官网 ai-sdk.dev 另有 Provider 矩阵(Anthropic / OpenAI / Google / Grok / Mistral / Meta / Perplexity / Deepseek / Moonshot / ZAI)以暗示中立性。
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/vercel/ai |
| Star / Fork | 24,703 / 4,545 |
| Watcher | 141 |
| 代码行数 | 589,059(TS 89.5% + MDX 10% + 少量 Vue/JS/CSS/Shell) |
| 文件数 | 5,368 |
| 项目年龄 | 36.5 个月(2023-05 创建) |
| 最近更新 | 2026-06-06 |
| 开发阶段 | 密集开发(v7 canary 收敛窗口) |
| 贡献模式 | 公司主导 + 社区协作(Top 1 主作者 21.7%,707 contributors) |
| 热度定位 | 大众热门(基础设施层 + 商业生态绑定) |
| License | 混合:核心 ai 包 MIT,文档/示例 「Other」(Apache-2.0 + 商用补充条款) |
| 主页 | https://ai-sdk.dev |
| 周下载 | 14.2M(npm) |
作者视角:为什么存在这个项目
创始人/作者背景
vercel/ai 是 Vercel Inc.(Next.js 母公司、前端云平台)组织账户下的官方项目,作者群体不是单一创始人,而是 Vercel 内部一个小而精的核心团队:主作者 Lars Grammel 占 21.7% 提交(1,989 commits),其次是 Gregor Martynus(Vercel 资深工程师,766 commits,参与过 npm/cli、octokit 等明星项目),加上 Jared Palmer 等核心成员。这种「Vercel Labs 出品」属性,决定了项目不是 hobby 玩具,而是绑定 Next.js App Router 的官方 AI 入口层。
问题判断
Vercel 看到了一个被低估的问题:「换 LLM 厂商」在 2023 年仍要改一堆胶水代码。每个厂商的 API、消息结构、流式协议、工具调用格式都不同;Agent 的「思考-工具-消息」三态转换在各家有不同的歧义;前端要把模型流对接到 React/Vue/Svelte 的 UI 状态机,更是二次发明轮子的重灾区。AI SDK 押注的判断是:「切换 LLM 应该只改一行 model 字符串」,并且这件事必须由一家有前端生态话语权的公司来做。
解法哲学
明确的取舍:
- 不做成 LangChain 那样的「全能 agent 编排框架」(不内建 RAG、不强制状态机抽象)。
- 不锁死单一框架(Core 框架无关,UI 层才分 React/Vue/Svelte/Angular/RSC 适配)。
- 不做中心化 gateway(核心走用户自带 key + 厂商 endpoint,可选接入 Vercel 自家的 AI Gateway 商业产品)。
- 要做的是:把「多 provider × 多框架 × 流式 × 结构化输出」抽象成可组合的原语,让上层框架(Next.js、agent 框架)能长在自己之上。
战略意图
AI SDK 在 Vercel 更大图景里是「Agentic infrastructure for every app and agent」战略的开发者入口层 — 上承 Vercel 的 AI Gateway(路由/缓存/成本/审计)、AI Elements(UI 组件库)、Workflows(持久化执行)、Sandbox(安全执行环境)等商业产品,下接 Next.js App Router 的 createAgentUIStreamResponse 这种「首选集成方式」。商业化路径清晰:核心 SDK 留住开发者→Gateway/Workflows 收企业费。
核心价值提炼
创新之处
按「新颖度 × 实用性」排序:
- 4 层消息模型 + 双向转换 — UI Messages ↔ Model Messages ↔
LanguageModelV4↔ Provider-specific messages。packages/ai/src/ui/负责流式渲染态,packages/provider-utils/src/types/model-message.ts负责结构化 LLM 态,中间通过convertToModelMessages/convertToUIMessages双向桥接。是社区票选 (#7180) 最想要 first-class API 的能力。 - 可缝合流(Stitchable Stream) —
packages/ai/src/util/create-stitchable-stream.ts仅 113 行、零依赖,用「funnel-in → single pipeline → tee-out」模式把多步 agent 循环中的分步流拼成单一可订阅流。这是 Agent runtime 的核心原语。 - 洋葱中间件链 —
packages/ai/src/middleware/wrap-language-model.ts用Array.reverse().reduce()把多个语言模型包装器(如缓存、日志、重试、RAG 注入)按洋葱模型叠加 — 比 LangChain 的 callback 链更易组合、类型更干净。 - 版本化 Provider 协议 —
LanguageModelV4/EmbeddingModelV4/ImageModelV4三大统一接口带specificationVersion: 'v4'字段,运行时自动断言并从 V2/V3 升级,让 SDK 升级时可平滑迁移而不是一刀切。 Output<OUTPUT, PARTIAL, ELEMENT>三元抽象 —packages/ai/src/generate-text/output.ts把「输出模式(object/array/text)」与「调用循环」解耦,是结构化输出能流式 partial 出来的关键。InferAgentUIMessage<typeof agent>静态类型推导 — 把 Agent 配置直接编译出 UI 消息的 TS 类型,编译期就能保证「Agent 改了字段,UI 跟着变」。fixJson单遍 14 态流式 JSON 解析器 — 在 partial JSON 流中正确处理被截断的字符串/数字/对象,避免每收到一个 chunk 都重新 parse 整段。零依赖,性能极致。
可复用的模式与技巧
- 版本化接口 + 运行时升级路径:每个 breaking 接口带
specificationVersion,旧版本调用方在 wrap 层自动转新版本。值得任何「多版本共存」的协议层借鉴。 Symbol.for错误标记模式:用Symbol.for('ai.error')把错误链挂在普通对象上而不是继承Error,避免instanceof在跨 realm 失败的痛点。Experimental_前缀 + 硬规则:「非 experimental 类型绝不允许引用 experimental 类型」 — 强制把实验 API 隔离在边界,等到稳定后一次性升级。SharedV4ProviderReference:把 OpenAI-compatible 协议(Deepseek / Moonshot / ZAI / Ollama / vLLM)共用一个 reference 实现,新增一家 5 行代码即可。- Changesets + 自动化 canary:每个 PR 都用 changeset 描述影响,CI 自动按 60 个 workspace 包分别 bump + publish canary,48 小时内发 5 个
7.0.0-canary.x。把发版成本压到接近零 — 这是支撑 18,962 个 tag 的工程基础。
关键设计决策
- Monorepo + 60 个 package 拆分:
ai核心 + 40+ provider 适配 + 6 框架适配 + 工具链 + 22 examples,依赖通过 workspace 协议解耦。用户按需安装,tree-shaking 后 bundle 极小(核心ai包 0 运行时依赖)。 - 流优先(Streaming-first):所有 API 默认 stream,
generateText只是streamText的await streamText(...)语法糖。模型厂商的流式协议千差万别,但 SDK 用同一个AsyncIterable形状给到上层。 - Provider 中立 vs 商业护城河的平衡:核心 SDK 完全中立,Vercel 自家商业产品(AI Gateway / Workflows)作为可选的「上层建筑」出现,避免被社区视为「被 vendor lock-in」。
竞品格局与定位
竞品对比矩阵
| 维度 | vercel/ai | langchain.js | llama_index (TS) | mastra-ai/mastra | portkey-ai/portkey |
|---|---|---|---|---|---|
| 定位 | 轻 SDK + 框架中立 | 全能 agent 编排框架 | RAG / 数据连接器 | TS 优先状态机 agent 框架 | LLM gateway + 可观测性 |
| Stars | 24.7K | ~14K (TS) | ~3.5K (TS) | ~7K | ~8K |
| Provider 切换成本 | 1 行字符串 | 中(callback 调整) | 高(重新实现 retriever) | 中(重写 state graph) | N/A(不解决应用层) |
| 流式 UI | 原生 React/Vue/Svelte/Angular/RSC | 需自接 | 需自接 | 需自接 | N/A |
| RAG 工具链 | ❌(不内建) | ✅(强) | ✅✅(最强) | ⚠️(轻) | ❌ |
| Agent 状态机 | ✅(v7 ToolLoopAgent) | ✅(LangGraph) | ⚠️ | ✅✅(核心卖点) | ❌ |
| Tree-shaking / Bundle | ✅✅(极小) | ⚠️ | ⚠️ | ⚠️ | N/A |
| 静态类型推导 | ✅✅ | ⚠️ | ⚠️ | ✅ | N/A |
| 与 Vercel/Next 集成 | ✅✅(官方) | ⚠️ | ⚠️ | ⚠️ | N/A |
差异化护城河
- 框架中立 + 一等框架支持:Core 抽象与具体框架解耦,但每种主流前端框架都有官方适配包 — 这是其他 SDK 没同时做到的。
- Vercel 商业生态的「上挂」:AI Gateway、Workflows、Sandbox、Elements 都建立在 AI SDK 之上,把 SDK 从「工具」升级为「生态入口」。
- 类型系统投入:
InferAgentUIMessage级别的编译期类型推导,是 LangChain.js / LlamaIndex TS 端口碑最大的差距。 - 发版工程化:60 个包 × canary 节奏 × Changesets 自动化,复制这套工程体系本身就是壁垒。
竞争风险
- LangChain.js 仍是综合生态最大的对手:抽象层级更深、社区更老、第三方集成最多;若 LangChain 把 TS 类型体验拉到 AI SDK 同等水平,AI SDK 的「轻 + 类型好」优势会被部分抹平。
- Mastra 抢 TS 优先 Agent 框架心智:Mastra 用 LangGraph 风格的状态机把工作流做成了 first-class,AI SDK v7 的
ToolLoopAgent是直接对位 — 胜负取决于谁先把「状态化多步 agent」的 DX 拉满。 - Portkey 在 gateway/可观测性层与 Vercel AI Gateway 业务正面竞争:如果企业用户用自建 gateway 多于 Vercel AI Gateway,Vercel 这条商业化路径会被截断一段。
生态定位
在「LLM 厂商 → AI 应用开发者」链路里,AI SDK 占据「模型抽象 + 流式 UI 协议」这一层 — 上方是 LangChain / Mastra(更上层的 agent 编排),下方是 Portkey / AI Gateway(路由/可观测性),横向与 Next.js / React 等前端框架深度绑定。它填补的空白是「前端/全栈开发者写 AI 应用时,不需要懂每个 LLM 厂商的 API,也不需要自己写流式 UI 桥」。
套利机会分析
- 信息差: 低(24.7K stars + 14.2M weekly downloads 已经把这个项目「广而告之」),但**「v7 canary 阶段的具体抽象设计 + 与 LangGraph 风格 agent 框架的差异」** 仍是有信息差的方向 — 中文圈对
ToolLoopAgent/InferAgentUIMessage的深度解读很少。 - 技术借鉴:
createStitchableStream的「funnel-in → single pipeline → tee-out」模式可用于任何「多源流需要合并展示」的场景(多 API 聚合、协作编辑光标同步等)。- 版本化协议接口 + 自动升级 wrap 是构建「长期演进 API」的可复用模式。
fixJson14 态单遍解析器可移植到任何流式 JSON 消费场景。- Changesets 自动化 canary 发版流程值得任何多 package monorepo 借鉴。
- 生态位: 「前端工程师写 AI 应用时的默认选择」 — Vercel 的商业生态把这条护城河越挖越深。
- 趋势判断: 正在增长,且符合「Agent 化」大趋势(v7 收敛窗口即是为此设计);相比 LangChain 抽象层过深的历史包袱,AI SDK 的轻量定位 + 商业生态绑定的后发优势明显。
风险与不足
- 混合 License 的合规成本:核心
aiMIT,文档/示例 「Other」(Apache-2.0 + 商用补充条款)— 企业法务需要单独评估「商用补充条款」对自家产品的影响,不适合无脑npm install进了产品。 - v7 canary 频繁:核心
ai包当前7.0.0-canary.165,48 小时内发了 5 个 canary(17,745 个@ai-sdk/*标签 + 1,209 个ai标签 = 18,962 总量)— 升级需固定版本号,不适合^范围。 - 多 provider 行为一致性是当前头号痛点:#7099(OpenAI reasoning 配对)、#8516(Anthropic tool_use 配对)、#10344(Gemini thought_signature)三个高活跃 issue 都指向同一类问题 — 当 SDK 想统一「思考/工具/消息」三态转换时,各家私有协议带来的边界场景非常棘手。
- 不内建 RAG / 工作流 / 持久化:这是设计取舍,对需要这些能力的项目,仍要组合 LlamaIndex / LangChain / 自建后端。
- 贡献者集中度:Top 1 21.7% + Top 3 含 2 bot — 主作者 Lars Grammel 是关键人,单点失败风险存在但可控。
行动建议
-
如果你要用它:
- 新项目首选 v5/v6 稳定版,按需固定到具体版本,canary 留给尝鲜。
- Next.js / React 项目用
@ai-sdk/react+createAgentUIStreamResponse拿官方「首选集成」。 - 多 provider 切换需求强(比如想接 Anthropic / OpenAI / 国内大模型 / Ollama 都能用一套 API)— AI SDK 是当下最干净的选择。
- 如果你的项目强 RAG / 强工作流 / 强可观测性 — 组合 LlamaIndex / LangGraph / Portkey,而不是指望 AI SDK 一站式搞定。
-
如果你要学它:
packages/ai/src/generate-text/output.ts— 理解「输出模式与调用循环解耦」的三元抽象怎么写。packages/ai/src/util/create-stitchable-stream.ts— 113 行讲清「多步流如何合并成单一可订阅流」。packages/ai/src/middleware/wrap-language-model.ts— 洋葱中间件的标准实现。packages/ai/src/util/fix-json.ts— 流式 JSON 解析的 14 个状态机(单遍实现,性能极佳)。packages/provider/src/language-model/v4/language-model-v4.ts— 版本化协议接口的设计范本。architecture/目录 4 份文档 —provider-abstraction.md/message-layers.md/stream-text-loop-control.md/file-uploads.md是 Vercel 团队自己写的「为什么这样设计」一手材料。contributing/decisions/— MADR 4.0 格式的 ADR(架构决策记录),看真实工程权衡。
-
如果你要 fork 它:
- 强化 RAG 一等公民:补一个
packages/rag/把 LlamaIndex 那套能力内化,是最大的功能空白。 - 强化可观测性第一类公民:OpenTelemetry hooker + 完整的 step-level tracing — Portkey 模式的开源版。
- 更激进的端侧 / 本地模型支持:把 Ollama / vLLM / llama.cpp 的体验拉到和 Anthropic / OpenAI 同等水平。
- 企业级 License 兼容版:剥离 「Other」 文档 license 中的商用补充条款,方便法务直接采用。
- 强化 RAG 一等公民:补一个
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | https://deepwiki.com/vercel/ai |
| Zread.ai | 未收录 |
| 关联论文 | 无(工程 SDK,非论文驱动) |
| 在线 Demo | 无官方 playground;本地可跑 examples/ai-core 等 22 个示例 |
| 官方文档 | https://ai-sdk.dev |
| 架构文档 | 仓库 architecture/ 目录 4 份:provider-abstraction.md / message-layers.md / stream-text-loop-control.md / file-uploads.md |