Vercel AI SDK:构建 AI 应用的完整开发者指南

Vercel AI SDK:构建 AI 应用的完整开发者指南

Vercel AI SDK 是一个用于构建 AI 应用的 TypeScript 工具包。它通过单一统一 API 处理文本生成、流式传输、结构化输出、工具调用和多步骤智能体循环——并且能与任何主流 LLM 提供商配合使用。如果你曾尝试将 OpenAI 或 Anthropic 直接接入 Next.js 应用,结果却要维护三种不同的流式传输实现,那么这个 SDK 能解决你的问题。

本指南涵盖 SDK 的核心功能、如何将其连接到 Novita AI 的 OpenAI 兼容 LLM API,以及对于构建不止于简单聊天机器人的开发者来说,智能体工作流的适用场景。

什么是 Vercel AI SDK?

Vercel AI SDK(npm 包名:ai)是一个开源库,它抽象了不同 LLM 提供商之间的差异。你无需为 OpenAI、Anthropic 和 Google 分别学习不同的流式传输协议,只需调用相同的 generateTextstreamTextgenerateObject 函数,并通过更改单个导入来切换提供商。

SDK 分为两层:

  • AI SDK Core 处理模型交互:文本生成、流式传输、结构化对象、工具调用、嵌入和智能体循环。
  • AI SDK UI 提供 React 钩子(useChatuseCompletionuseObjectuseAssistant)以及针对 Next.js、SvelteKit 和 Nuxt 的适配器,用于在浏览器中管理流式传输状态。

还有一个 @ai-sdk/openai-compatible 包,用于连接到任何实现 OpenAI Chat Completions 格式的提供商——这也是 Novita AI 集成的方式。

该 SDK 可在 Node.js、Deno、边缘运行时(Cloudflare Workers、Vercel Edge)以及浏览器环境中运行。

AI SDK Core:generateText、streamText 和 generateObject

安装 SDK 和一个提供商包:

npm install ai @ai-sdk/openai

generateText

用于非流式补全——批处理、分类、一次性生成:

import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';

const { text } = await generateText({
  model: openai('gpt-4o-mini'),
  prompt: '用两句话解释 LLM 嵌入的工作原理。',
});

console.log(text);

streamText

用于对延迟敏感的聊天界面:

import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';

const result = streamText({
  model: openai('gpt-4o-mini'),
  messages: [
    { role: 'user', content: '带我了解如何搭建一个 Next.js 应用。' },
  ],
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

generateObject

当你需要结构化 JSON 输出而非纯文本时——模式验证使用 Zod 自动处理:

import { generateObject } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';

const { object } = await generateObject({
  model: openai('gpt-4o-mini'),
  schema: z.object({
    name: z.string(),
    skills: z.array(z.string()),
    experienceLevel: z.enum(['junior', 'mid', 'senior']),
  }),
  prompt: '生成一个虚构的软件工程师简介。',
});

console.log(object.name, object.skills);

SDK 会处理必要的系统提示注入,以引导模型输出有效 JSON,并在输出格式错误时进行重试。

AI SDK Tools:函数调用与工具使用

工具允许模型在生成过程中调用外部函数——搜索 API、数据库查询、计算器等。SDK 的 tools 参数接受一个对象,其中每个键对应一个可调用函数:

import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';

const { text, toolCalls } = await generateText({
  model: openai('gpt-4o-mini'),
  tools: {
    getWeather: tool({
      description: '获取某个地点的当前天气',
      parameters: z.object({
        city: z.string().describe('城市名称'),
        unit: z.enum(['celsius', 'fahrenheit']).default('celsius'),
      }),
      execute: async ({ city, unit }) => {
        // 替换为真实的天气 API 调用
        return { city, temperature: 22, unit, condition: 'sunny' };
      },
    }),
  },
  prompt: '东京现在的天气怎么样?',
});

console.log(text);

tool() 辅助函数将 Zod 模式中的类型推断到 execute 函数的参数中。无需手动解析 JSON。

多步骤工具调用

默认情况下,generateText 在一轮工具调用后停止。设置 maxSteps 可以让模型使用工具结果进行后续推理:

const { text } = await generateText({
  model: openai('gpt-4o'),
  maxSteps: 5,
  tools: { getWeather, searchWeb, lookupCalendar },
  prompt: '帮我计划这个周末在柏林的户外活动。',
});

SDK 会自动处理工具调用 → 结果 → 继续循环。如果你需要查看中间推理过程,每个步骤都通过 onStepFinish 暴露出来。

使用 Vercel AI SDK 构建 AI 智能体循环

AI SDK 中的智能体是一个模型,它在带有工具的循环中运行,直到它决定拥有足够的信息来回答。模式与多步骤工具调用相同,但拥有更多工具和更长的 maxSteps

import { generateText, tool } from 'ai';
import { openai } from '@ai-sdk/openai';
import { z } from 'zod';

const result = await generateText({
  model: openai('gpt-4o'),
  maxSteps: 10,
  system: '你是一个研究助手。请使用可用工具进行详尽回答。',
  prompt: 'Llama 3.1 和 Qwen3 的主要区别是什么?',
  tools: {
    search: tool({
      description: '搜索网络以获取最新信息',
      parameters: z.object({ query: z.string() }),
      execute: async ({ query }) => searchWeb(query),
    }),
    summarize: tool({
      description: '总结一个 URL 的内容',
      parameters: z.object({ url: z.string() }),
      execute: async ({ url }) => fetchAndSummarize(url),
    }),
  },
  onStepFinish({ stepType, toolCalls, toolResults }) {
    console.log('步骤:', stepType, toolCalls?.map(t => t.toolName));
  },
});

对于生产环境的智能体管道,将 Novita AI 作为模型后端连接起来,以在规模上控制成本和吞吐量——下一节将详细介绍。

AI SDK React:useChat 钩子与 Next.js 集成

useChat 钩子无需样板代码即可管理流式聊天状态:

// app/chat/page.tsx
'use client';
import { useChat } from 'ai/react';

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
    api: '/api/chat',
  });

  return (
    <div>
      {messages.map(m => (
        <div key={m.id} className={m.role === 'user' ? 'user' : 'assistant'}>
          {m.content}
        </div>
      ))}
      <form onSubmit={handleSubmit}>
        <input
          value={input}
          onChange={handleInputChange}
          placeholder="提问..."
          disabled={isLoading}
        />
        <button type="submit" disabled={isLoading}>发送</button>
      </form>
    </div>
  );
}

对应的路由处理函数:

// app/api/chat/route.ts
import { streamText } from 'ai';
import { openai } from '@ai-sdk/openai';

export async function POST(req: Request) {
  const { messages } = await req.json();

  const result = streamText({
    model: openai('gpt-4o-mini'),
    messages,
  });

  return result.toDataStreamResponse();
}

toDataStreamResponse() 处理 Vercel AI 流协议,客户端的 useChat 原生支持该协议。如需从 API 流式传输结构化对象,将 useChat 替换为 useObject,将 streamText 替换为 streamObject

如何在 Vercel AI SDK 中使用 Novita AI

Novita AI 在 https://api.novita.ai/v3/openai 提供 OpenAI 兼容 API,这使其成为任何使用 OpenAI Chat Completions 格式的 SDK 的直接替代方案——包括 Vercel AI SDK。

为什么在 AI SDK 中使用 Novita AI

Novita AI 通过单一 API 端点托管 70 多个开源模型——Llama 3.3 70B、Qwen3、DeepSeek V3、Mistral 和 Gemma 3。无需管理 GPU 基础设施。对于智能体工作流,无服务器 API 无需更改配置即可从较小的 7B 指令模型扩展到大型推理模型。

设置

安装 OpenAI 兼容的提供商包:

npm install ai @ai-sdk/openai-compatible

配置提供商:

import { createOpenAICompatible } from '@ai-sdk/openai-compatible';

const novita = createOpenAICompatible({
  name: 'novita',
  baseURL: 'https://api.novita.ai/v3/openai',
  apiKey: process.env.NOVITA_API_KEY,
});

设置到此完成。现在可以像使用任何其他 AI SDK 提供商一样使用它:

import { generateText } from 'ai';

const { text } = await generateText({
  model: novita('meta-llama/llama-3.3-70b-instruct'),
  prompt: '对于客服机器人,RAG 和微调之间的权衡是什么?',
});

流式传输的工作方式相同:

import { streamText } from 'ai';

const result = streamText({
  model: novita('qwen/qwen3-235b-a22b-instruct-2507'),
  messages: [
    { role: 'system', content: '你是一个有用的编程助手。' },
    { role: 'user', content: '教我如何使用 FastAPI 构建一个 REST API。' },
  ],
});

for await (const chunk of result.textStream) {
  process.stdout.write(chunk);
}

在 Novita AI 中使用工具调用

支持函数调用的模型无需额外配置即可与 AI SDK 的 tool() 接口配合使用。Llama 3.3 70B Instruct 和 Qwen3 通过 Novita 的 API 支持工具调用:

import { generateText, tool } from 'ai';
import { z } from 'zod';

const { text } = await generateText({
  model: novita('meta-llama/llama-3.3-70b-instruct'),
  maxSteps: 5,
  tools: {
    calculator: tool({
      description: '计算数学表达式',
      parameters: z.object({ expression: z.string() }),
      execute: async ({ expression }) => {
        return { result: eval(expression) }; // 在生产环境中使用安全的数学解析器
      },
    }),
  },
  prompt: '847 的 12% 是多少,然后除以 3.14?',
});

环境设置

将你的 Novita API 密钥添加到 .env.local

NOVITA_API_KEY=your_novita_api_key_here

novita.ai 获取密钥——新账户包含可用于测试 API 的免费额度。

用于长时间运行工作负载的智能体沙箱

对于运行代码、访问文件系统或执行多分钟工作流的智能体任务,Novita AI 的 Agent Sandbox 在 LLM API 之上提供隔离的执行环境。AI SDK 处理模型推理层,而沙箱处理无法在边缘函数超时内运行的有状态执行。

为 Vercel AI SDK 选择 LLM 提供商

AI SDK 使得切换提供商变得容易——这很有用——但在为生产环境选择之前,理解其中的权衡是值得的。

延迟:对于流式聊天,首字节时间比总生成速度更重要。较小的模型(8B–14B)产生首字节的速度更快。Novita AI 的无服务器端点在开放模型上针对低冷启动延迟进行了优化。

规模成本:GPT-4o 非常出色,但在高查询量下,前沿模型与经过良好调优的开放模型(例如 Llama 3.3 70B)之间的价格差距变得显著。AI SDK 让你无需重写应用程序逻辑即可体验两者。

工具调用支持:并非所有模型都可靠地支持函数调用。请针对你的工具模式测试特定模型——即使对于相同的模型系列,不同提供商之间的行为也可能有所不同。

上下文窗口:对于文档密集型 RAG 或长对话历史,请检查上下文限制。许多开放模型支持 128K 令牌,这覆盖了大多数实际用例。

供应商锁定:AI SDK 的提供商抽象与 Novita AI 的 OpenAI 兼容端点相结合,意味着你可以在不触及应用代码的情况下切换模型或添加备用提供商。

结论

Vercel AI SDK 消除了构建 AI 应用时的样板代码——一个 API 即可实现跨任何 LLM 提供商的文本生成、流式传输、工具调用和智能体循环。无论你是使用 useChat 构建流式聊天界面、使用 generateObject 提取结构化数据,还是运行调用外部工具的多步骤智能体,SDK 都能处理底层管道,让你专注于应用逻辑。

对于开放模型推理,Novita AI 的 OpenAI 兼容 API 通过 @ai-sdk/openai-compatible 直接接入 SDK。你可以访问 70 多个模型——Llama、Qwen3、DeepSeek、Mistral——无需管理 GPU 基础设施,并且可以在不触及应用代码的情况下切换模型或添加提供商备用方案。

立即在 novita.ai 开始使用——新账户包含免费额度。

常见问题

什么是 ai sdk react?

AI SDK 的 React 集成位于 ai/react 包中。它提供钩子——useChatuseCompletionuseObjectuseAssistant——用于将 React 前端连接到服务端的流式路由。这些钩子处理流式状态、消息历史、加载指示器和错误处理,因此你无需在组件状态中管理 ReadableStream

ai sdk 5 带来了什么?

AI SDK 5(于 2025 年中作为 beta 版发布)重新设计了提供商规范以获得更好的类型安全性,将 UI 状态管理与模型交互逻辑分离,并引入了一种修订后的消息格式,使智能体 UI 状态更易于序列化。如果你在 2026 年启动新项目,请查看 ai-sdk.dev 以获取最新稳定版本——该 SDK 已通过版本 6 和 7 持续演进。

是否有 ai sdk 文档可供参考?

官方文档位于 ai-sdk.dev。它包含提供商设置指南、所有核心函数的 API 参考、框架集成教程(Next.js、Nuxt、SvelteKit)以及常见模式(如 RAG、智能体循环和结构化提取)的示例代码。

我可以在非 OpenAI 模型中使用 ai sdk tools 吗?

可以。任何支持函数调用的提供商都可以与 AI SDK 的 tool() 接口配合使用。Novita AI 托管了几个支持函数调用的开放模型。行为质量有所不同——在 Novita API 可用的开放模型中,Llama 3.3 70B 和 Qwen3 在多步骤工具使用方面最为可靠。

vercel ai sdk docs 和 ai-sdk.dev 文档有什么区别?

它们是同一个产品。该文档以前位于 sdk.vercel.ai,现在重定向到 ai-sdk.dev。该 SDK 由 Vercel 团队维护,但它是开源的,并且不依赖于部署在 Vercel 基础设施上。

人工智能 SDK 与直接调用 LLM API 相比如何?

直接 API 调用适用于简单的一次性请求。当你需要同时处理多个任务时,SDK 就变得有价值了:与 UI 框架集成的流式传输、多步骤工具调用循环、结构化输出验证、统一的提供商切换以及跨提供商的一致重试/错误处理。AI SDK 在库级别处理所有这些,因此你无需在每个项目中重新构建。

推荐文章