为什么用 Next.js 做 AI?
Next.js 为 AI 应用提供了完美基础:服务端渲染利于 SEO,API 路由处理后端逻辑,流式支持实现实时响应。
设置
- 安装 Vercel AI SDK:`npm install ai @ai-sdk/openai`
- 在 `app/api/chat/route.ts` 创建 API 路由
- 使用 `streamText` 辅助函数实现实时 token 流式传输。
核心模式
### 流式聊天
客户端使用 `useChat` hook。它自动处理流式传输、消息状态和中断。
### RAG 集成
- 将文档存储在向量数据库(Pinecone、Qdrant 或 pgvector)。
- 用户查询时检索相关块。
- 将块作为上下文包含在系统提示中。
### 图像生成
- 使用 DALL-E 或 Stable Diffusion API。
- 用乐观 UI 更新显示加载状态。
性能建议
- Edge Runtime:将 API 路由部署到边缘以降低延迟。
- 缓存:缓存嵌入和常见响应。
- 批处理:尽可能将多个 API 调用分组。
部署
- 在 Vercel 上部署实现自动边缘部署。
- 使用环境变量存储 API 密钥。
- 设置速率限制控制成本。
流式响应
Vercel AI SDK 提供出色的流式支持。聊天界面使用 `useChat` hook,服务端使用 `streamText` 实现逐 token 传递。始终显示加载指示器并允许用户中途停止。
状态管理
- 对话历史:存储在数据库中(推荐 PostgreSQL),对 conversation_id 和 created_at 建索引。
- 乐观更新:立即显示用户消息,再与实际 AI 响应协调。
- 缓存:缓存已完成的对话以减少 API 成本。用 Redis 做会话级缓存。
性能优化
- Edge 运行时:在 Vercel Edge 或 Cloudflare Workers 上部署 API 路由。
- 并行工具调用:使用函数调用时并行执行独立工具。
- 图像优化:使用 Next.js Image 组件,AI 生成图像需压缩。
- 速率限制:实施每用户速率限制防止滥用。