Vercel AI SDK 是 Vercel 推出的前端工具集,专门用来简化大模型应用的接入流程。它提供了一套统一的接口,让开发者可以在 React、Vue、Svelte 等框架中使用几乎相同的 Hook 或组合式函数来处理对话消息、流式响应和加载状态。传统做法需要手动封装 fetch 请求、解析 SSE 数据流、维护消息数组和错误状态,而 AI SDK 把这些重复劳动抽象成 `useChat`、`useCompletion` 等语义化 API,前端只需专注于组件结构和交互体验。本文重点拆解 React 与 Vue 两个主流框架下的组件化实现方案,帮助团队根据现有技术栈选择最合适的接入路径。

Vercel AI SDK 的核心能力与安装准备
Vercel AI SDK 的核心价值在于把大模型交互中的常见模式沉淀为可复用的前端原语。以 `useChat` 为例,它内部管理了消息列表、输入框内容、提交状态、流式响应接收和自动滚动等细节。开发者调用一次 Hook 就能拿到这些状态和操作方法,不需要关心数据是怎么从后端流式传输过来的。这种设计大幅降低了 AI 应用的前端门槛,尤其适合需要快速验证产品原型的团队。
安装 SDK 时,可以根据框架选择对应的子包。对于同时使用 React 和 Vue 的项目,也可以在同一个工程中安装多个适配包。基础依赖安装命令如下:
npm install ai @ai-sdk/react @ai-sdk/vue
安装完成后,需要在项目里配置一个 API 路由或代理端点,用来转发大模型请求。SDK 本身不绑定任何后端实现,只要接口返回符合约定的流式数据即可。常见做法是在 Next.js 的 API 路由或者 Nuxt 的 server 目录下创建一个 `/api/chat` 端点,内部使用 `OpenAIStream` 或 `StreamingTextResponse` 处理模型输出。这样前端就可以通过相对路径直接调用,避免跨域问题。
流式响应的底层原理基于 SSE 或 ReadableStream。SDK 会在前端自动读取数据流,逐步累积每个 token,并更新消息对象的 `content` 字段。用户看到的效果就是文字逐字出现,而不是等待完整回答一次性返回。这种体验对聊天类产品至关重要,而开发者不需要手动处理 `EventSource` 或 `fetch` 的分块读取逻辑。
React 组件化方案与代码拆解
React 端的核心入口是 `useChat` Hook。它返回一组值和函数,包括 `messages`、`input`、`handleInputChange`、`handleSubmit` 和 `isLoading`。其中 `messages` 是消息数组,每条消息包含 `id`、`role` 和 `content` 属性;`input` 是受控输入框的当前值;`handleInputChange` 用于更新输入状态;`handleSubmit` 负责触发表单提交并发送消息;`isLoading` 表示当前是否正在等待模型响应。
下面是一个完整的 React 聊天组件示例,可以直接嵌入到页面中使用:
import { useChat } from '@ai-sdk/react';
export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat({
api: '/api/chat',
});
return (
<div className="chat-container">
<div className="messages">
{messages.map(message => (
<div key={message.id} className="message">
<strong>{message.role}: </strong>{message.content}
</div>
))}
</div>
<form onSubmit={handleSubmit}>
<input
value={input}
onChange={handleInputChange}
placeholder="输入消息..."
disabled={isLoading}
/>
<button type="submit" disabled={isLoading}>
{isLoading ? '生成中...' : '发送'}
</button>
</form>
</div>
);
}
在实际组件化拆解时,可以把消息列表项抽成 `MessageBubble` 组件,把输入区域抽成 `ChatInputBox` 组件。父组件负责维护 `useChat` 的状态,子组件通过 props 接收数据和回调。这样做的好处是消息展示样式、输入框交互可以独立迭代,同时保持聊天逻辑集中管理。如果消息数量较多,还可以用 `React.memo` 包裹 `MessageBubble`,避免父组件重新渲染时子组件无意义更新。
React 方案的优势在于 Hook 组合的自由度很高。例如可以在 `useChat` 的基础上封装自定义 Hook `useCustomerChat`,加入本地存储持久化、敏感词过滤、自动重试等业务逻辑。SDK 本身保持轻量,开发者可以根据项目需要灵活扩展。不过要注意,流式更新会导致 `messages` 数组频繁变化,如果子组件没有合理使用 `memo` 或 `useMemo`,可能会带来额外的渲染开销。
Vue 组件化方案与实现细节
Vue 端提供了与 React 功能对等的 `useChat` 组合式函数。它的返回值同样是 `messages`、`input`、`handleSubmit` 和 `isLoading`,但底层基于 Vue 的响应式系统,这些值通常已经是 `ref` 或 `computed`。在 `
以下是一个完整的 Vue 单文件组件示例:
<script setup>
import { useChat } from '@ai-sdk/vue';
const { messages, input, handleSubmit, isLoading } = useChat({
api: '/api/chat',
});
</script>
<template>
<div class="chat-container">
<div class="messages">
<div v-for="message in messages" :key="message.id" class="message">
<strong>{{ message.role }}: </strong>{{ message.content }}
</div>
</div>
<form @submit.prevent="handleSubmit">
<input v-model="input" placeholder="输入消息..." :disabled="isLoading" />
<button type="submit" :disabled="isLoading">
{{ isLoading ? '生成中...' : '发送' }}
</button>
</form>
</div>
</template>
Vue 的组件化可以进一步拆分为 `ChatMessage.vue` 和 `ChatInputBox.vue`。父组件通过 `provide/inject` 或 props 传递状态,子组件内部使用 `defineProps` 和 `defineEmits` 保持单向数据流。由于 Vue 的模板语法天然支持事件修饰符,例如 `@submit.prevent` 可以阻止表单默认提交,省去了手动调用 `preventDefault` 的步骤。
与 React 相比,Vue 的响应式更新是细粒度的,`messages` 数组变化时只会触发相关 DOM 的更新,不需要开发者手动优化渲染。但要注意,如果直接在模板中访问 `messages.value`,写法会比较繁琐,因此 SDk 在返回时已经做了处理,使解构后的变量可以直接用于模板。对于复杂的数据转换,建议使用 `computed` 派生新的数据,而不是在模板中写冗长表达式。
React 与 Vue 方案对比及工程化建议
从 API 设计上看,React 和 Vue 的 `useChat` 几乎一致,相同的参数和返回值大大降低了跨框架迁移成本。两者的主要差异体现在响应式机制和模板语法上。React 依靠显式的 Hook 和 JSX,更适合喜欢函数式编程和高度自定义组合的团队;Vue 则凭借模板和自动响应式更新,在中小型项目或需要快速交付的场景下效率更高。下面用一个表格对比核心差异:
| 对比维度 | React | Vue |
|---|---|---|
| 核心 API | useChat Hook | useChat 组合式函数 |
| 响应式原理 | 手动触发渲染,需配合 memo 优化 | 自动细粒度更新,性能默认较优 |
| 模板语法 | JSX,逻辑与标记混合 | 模板语法,标记与逻辑分离 |
| 组件拆分 | 函数组件 + props | 单文件组件 + props/emits |
| 生态集成 | React Hook 生态丰富 | Vue 组合式 API 生态成熟 |
选型时优先考虑团队现有技术栈和成员熟悉度。如果项目已经用 Next.js 或 React 组件库,直接使用 React 端 SDK 最自然;如果是 Nuxt 或 Vue 生态,选择 Vue 端可以享受更顺滑的响应式体验。也不排除在微前端架构中同时使用两个框架,SDK 的统一设计让这种混合方案成为可能。
工程化落地时,建议把 API 路由的创建、环境变量配置、错误处理和流式中断恢复封装成独立模块。前端组件只负责渲染和交互,不直接包含模型调用细节。这样当后端模型从 OpenAI 切换到 Anthropic 或自建模型时,前端代码几乎不需要改动。另外,利用 TypeScript 为消息对象和 API 响应定义类型,可以显著减少运行时错误。最后,为长会话添加消息持久化和自动滚动到底部的逻辑,能进一步提升用户体验。
Vercel AI SDKReact AI组件Vue AI集成修改时间:2026-08-19 18:47:33