Pinecone 是一个完全托管的向量数据库,专为 AI 应用设计。相比 Redis 存储向量,Pinecone 有以下优势:
| 特性 | Pinecone | Redis |
|---|---|---|
| 向量搜索性能 | ⭐⭐⭐⭐⭐ 专为向量优化 | ⭐⭐⭐ 通用数据库 |
| 持久化 | ✅ 完全持久化 | ✅ 持久化 |
| 跨实例共享 | ✅ 原生支持 | ✅ 支持 |
| 维护成本 | ✅ 零维护 | |
| 免费额度 | 1个索引,100K向量 | 256MB 数据 |
| 相似度搜索 | ⭐⭐⭐⭐⭐ 原生支持 | ⭐⭐ 需要自己实现 |
| 扩展性 | ⭐⭐⭐⭐⭐ 自动扩展 | ⭐⭐⭐ 手动扩展 |
┌─────────────────────────────────────────────────────────┐
│ 优化后的存储架构 │
└─────────────────────────────────────────────────────────┘
PDF 上传
↓
┌──────────────────────────────────────────────────────┐
│ 1. Redis (Upstash) │
│ ├─ PDF 元数据 (id, fileName, fileSize, etc.) │
│ ├─ 文本内容 (textContent) │
│ └─ 文本 chunks (content only, no vectors) │
│ 💾 存储大小: ~1-5MB per PDF │
└──────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────┐
│ 2. Pinecone │
│ ├─ 向量嵌入 (embeddings) │
│ ├─ 向量元数据 (pdfId, chunkIndex, content) │
│ └─ 相似度索引 │
│ 💾 存储大小: ~100-500 vectors per PDF │
└──────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────┐
│ 3. 内存缓存 (MemoryVectorStore) │
│ ├─ 单次请求快速访问 │
│ └─ 请求结束后清空 │
└──────────────────────────────────────────────────────┘
搜索流程:
1. 优先使用 Pinecone 搜索(持久化,跨实例)
2. 如果 Pinecone 未配置,使用内存搜索
3. 如果内存没有,从 Redis 恢复文本并重建
- 访问 Pinecone 官网
- 点击 "Start Free" 注册账号
- 免费版提供:
- 1 个索引
- 100,000 个向量
- 足够个人项目使用
- 登录 Pinecone 控制台
- 点击 "Create Index"
- 配置索引:
Index Name: pdf-chat
Dimensions: 1536
Metric: cosine
Cloud: AWS (或其他)
Region: us-east-1 (选择离你最近的)
重要说明:
- Dimensions: 必须是
1536(Alibaba Tongyi Embeddings 的维度) - Metric: 使用
cosine(余弦相似度) - Index Name: 可以自定义,但要和环境变量一致
- 在 Pinecone 控制台,点击 "API Keys"
- 复制你的 API Key
- 保存好,后面会用到
# Pinecone 配置
PINECONE_API_KEY=your-pinecone-api-key-here
PINECONE_INDEX_NAME=pdf-chat
# Alibaba Tongyi (必需)
ALIBABA_API_KEY=sk-your-alibaba-api-key-here
# Upstash Redis (必需)
KV_REST_API_URL=https://your-redis-url.upstash.io
KV_REST_API_TOKEN=your-redis-token- 进入 Vercel 项目设置
- 点击 "Environment Variables"
- 添加以下变量:
PINECONE_API_KEY = your-pinecone-api-key-here
PINECONE_INDEX_NAME = pdf-chat
启动开发服务器:
npm run dev查看日志,应该看到:
✓ Pinecone configured for vector storage
✓ Using Qwen (Alibaba Tongyi) for embeddings
上传一个 PDF 文件,查看日志:
[Pinecone] Storing 15 vectors for PDF: abc-123
[Pinecone] ✓ Generated 15 embeddings
[Pinecone] ✓ Uploaded batch 1/1
[Pinecone] ✓ Successfully stored 15 vectors in 1234ms
-
上传 PDF
- PDF 元数据和文本存到 Redis
- 文本分块后生成向量
- 向量自动存到 Pinecone
-
提问
- 问题转换为向量
- Pinecone 搜索相似向量
- 返回最相关的文档片段
- AI 基于文档生成回答
-
删除 PDF
- 自动清理 Redis 数据
- 自动清理 Pinecone 向量
如果 Pinecone 不可用(未配置或出错),系统会自动降级:
Pinecone 搜索失败
↓
使用内存向量存储
↓
如果内存没有,从 Redis 恢复
↓
重新生成向量(会调用 AI API)
- 索引数量: 1 个
- 向量数量: 100,000 个
- 查询次数: 无限制
- 存储时间: 永久
假设每个 PDF:
- 平均 10 页
- 生成 20 个 chunks
- 每个 chunk 1 个向量
100,000 向量 ÷ 20 向量/PDF = 5,000 个 PDF
结论: 免费版足够存储 5,000 个 PDF 文档!
-
Starter: $70/月
- 1 个索引
- 100,000 个向量
- 更高性能
-
Standard: 按需付费
- 多个索引
- 无限向量
- 企业级性能
不是必须的。如果不配置 Pinecone,系统会使用内存存储,但有以下限制:
- ❌ 服务器重启后数据丢失
- ❌ 无法跨实例共享(Vercel 多实例部署)
- ❌ 需要重新生成向量(消耗 AI API 配额)
| 用途 | Pinecone | Redis |
|---|---|---|
| 向量存储 | ✅ 推荐 | |
| 元数据存储 | ✅ 推荐 | |
| 文本存储 | ❌ 不适合 | ✅ 推荐 |
| 相似度搜索 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
最佳实践: Pinecone 存向量,Redis 存文本和元数据
如果你之前使用 Redis 存储向量,现在想迁移到 Pinecone:
- 配置 Pinecone 环境变量
- 重新上传 PDF 文件
- 系统会自动存到 Pinecone
旧的 Redis 向量数据可以保留(不影响),也可以手动清理。
如果创建索引时 Dimensions 设置错了,需要:
- 删除旧索引
- 创建新索引(Dimensions = 1536)
- 重新上传 PDF
注意: 删除索引会丢失所有向量数据!
- 登录 Pinecone 控制台
- 查看 "Usage" 页面
- 可以看到:
- 向量数量
- 查询次数
- 存储大小
原因: 未设置 PINECONE_API_KEY
解决:
# .env.local
PINECONE_API_KEY=your-api-key-here原因: 索引名称不匹配
解决:
# .env.local
PINECONE_INDEX_NAME=pdf-chat # 必须和 Pinecone 控制台的索引名一致原因: 索引 Dimensions 不是 1536
解决: 删除索引,重新创建(Dimensions = 1536)
可能原因:
- PDF 向量未上传成功
- 查询向量生成失败
- 相似度阈值太高
排查:
# 查看日志
[Pinecone] Storing 15 vectors for PDF: abc-123 # 应该看到这个
[Pinecone] ✓ Successfully stored 15 vectors # 确认上传成功
[Pinecone] Searching for "..." in PDF: abc-123 # 搜索日志
[Pinecone] ✓ Found 4 results in 234ms # 确认找到结果系统已自动实现批量上传(每次 100 个向量),无需手动优化。
- 内存缓存:单次请求内复用
- Pinecone:跨请求持久化
- Redis:文本内容备份
如果需要处理大量 PDF,可以并行上传:
const pdfs = ['pdf1', 'pdf2', 'pdf3'];
await Promise.all(pdfs.map(pdf => uploadPDF(pdf)));- ✅ 配置 Pinecone
- ✅ 测试上传和搜索
- ⬜ 监控使用量
- ⬜ 优化搜索参数(topK, threshold)
- ⬜ 考虑升级到付费版(如果需要)
最后更新: 2025-03-08 版本: 1.0.0