之前折腾 RAG、跑本地模型啥的都是自己玩,最近想在正经项目里加一个 AI 对话功能。自己从零写流式响应、处理 SSE 什么的还是挺麻烦的,后来发现 Vercel 出了个 AI SDK,把跟大模型交互的脏活累活都封装好了,前后端都有对应的工具函数。试了一下,确实省了不少事。
1. Vercel AI SDK 是什么
简单说就是一个 TypeScript 库,帮你处理:
- 跟各种大模型 API(OpenAI、Anthropic、Google 等)的对接
- 流式响应(一个字一个字蹦出来的效果)
- 前端的对话状态管理(消息列表、loading 状态等)
它分两个部分:
ai— 后端用的,处理模型调用和流式传输ai/react— 前端用的,提供useChat等 Hook
2. 搭个最简单的对话页面
用 Next.js 项目(App Router)来搞。
1 | npm install ai @ai-sdk/openai |
后端:API Route
1 | // app/api/chat/route.ts |
就这几行,后端就搞定了。streamText 会自动处理流式响应,不用自己写 SSE 的逻辑。
前端:对话组件
1 | // app/chat/page.tsx |
useChat 这个 Hook 帮你管了消息列表、输入状态、loading 状态、流式接收等所有琐碎的事情。
3. 流式响应的体验
用 AI SDK 最爽的一点就是流式响应基本不用管。后端用 streamText 返回流,前端用 useChat 自动接收,回答一个字一个字地蹦出来,跟 ChatGPT 网页版的体验一样。
如果自己实现的话,要处理 SSE 连接、解析 chunk、拼接内容、处理中断和错误……光想想就头大。
4. 换模型
AI SDK 的一个好处是换模型特别简单,基本上改一行代码:
1 | // 用 OpenAI |
接口是统一的,不用因为换了模型就重写后端逻辑。
5. 加点实用功能
限制对话长度
免得 token 消耗太快:
1 | // 只保留最近 10 条消息作为上下文 |
停止生成
1 | const { stop, isLoading } = useChat() |
带上下文的问答(简易版 RAG)
1 | // 在 system prompt 里塞进去相关内容 |
当然真正的 RAG 需要向量检索,但对于文档量不大的场景,直接塞 prompt 里也够用了。
6. 注意事项
- API Key 安全:Key 只在后端的 API Route 里用,别暴露到前端。用环境变量
OPENAI_API_KEY存 - 费用控制:加个速率限制,防止有人疯狂刷你的接口。简单做可以用
next-rate-limit - 错误处理:模型 API 可能超时或报错,前端要展示友好的错误信息
- 内容安全:如果是面向用户的产品,要考虑内容过滤
总的来说 Vercel AI SDK 把”前端接 AI”这件事的门槛降低了很多。以前觉得搞流式对话很复杂,现在前后端加起来不到 50 行代码就能跑起来一个能用的对话界面。
评论加载中…