十、向量知识库
← 上一章:九、RAG 框架 | 返回总览 | 下一章:十一、Embedding 模型 →
主流向量数据库
| 数据库 | 类型 | 特点 |
|---|---|---|
| Pinecone | 云服务 | 全托管,企业级,易上手 |
| Milvus / Zilliz | 开源/云服务 | 生产级,大规模向量检索,云原生架构 |
| Qdrant | 开源/云服务 | Rust 编写,高性能,支持过滤 |
| Weaviate | 开源/云服务 | 内置向量化模块,GraphQL API |
| Chroma | 开源 | 轻量级,适合原型和中小规模 |
向量数据库选型对比
| 数据库 | 部署 | 性能 | 规模 | 过滤能力 | 上手难度 | 成本 |
|---|---|---|---|---|---|---|
| Pinecone | 全托管云 | 高 | 十亿级 | 强(元数据过滤) | 低 | 偏高 |
| Milvus/Zilliz | 自托管/云 | 极高 | 百亿级 | 强(标量+向量混合) | 中 | 自托管免费,云付费 |
| Qdrant | 自托管/云 | 极高(Rust) | 十亿级 | 强(高级过滤) | 中 | 自托管免费,云付费 |
| Weaviate | 自托管/云 | 高 | 亿级 | 强(GraphQL) | 中 | 自托管免费,云付费 |
| Chroma | 自托管 | 中 | 百万级 | 基础 | 极低 | 免费 |
选型建议
- 原型验证(<1M 向量) → Chroma:零配置,Python 一行启动
- 生产环境(千万-亿级) → Milvus / Qdrant:性能最强,社区大
- 不想管运维 → Pinecone / Zilliz Cloud:全托管,开箱即用
- GraphQL 技术栈 → Weaviate:原生 GraphQL API
- Rust 技术栈 + 极致性能 → Qdrant:Rust 编写,高并发
核心概念
向量索引类型
| 索引类型 | 原理 | 查询速度 | 召回率 | 内存占用 | 适用场景 |
|---|---|---|---|---|---|
| HNSW | 基于图的近似最近邻,多层跳表导航 | 极快 | 高 | 较高 | 生产环境首选,延迟敏感 |
| IVF | 先聚类再搜索,只查相关聚类 | 快 | 中 | 低 | 大规模数据,可接受精度换速度 |
| Flat(暴力) | 逐个比较,精确搜索 | 慢 | 100% | 低 | 小数据集(<10万),需要精确结果 |
选择建议:<100 万向量用 Flat(精确);100 万-1 亿用 HNSW(又快又准);>1 亿用 IVF + HNSW 组合。
混合检索
纯向量检索可能遗漏关键词精确匹配,混合检索同时使用向量+关键词,兼顾语义和精确匹配:
用户查询:"Python 3.12 新特性"
├── 向量检索 → 找到语义相关的文档
├── 关键词检索(BM25)→ 精确匹配"Python 3.12"
└── 融合排序(RRF)→ 综合两路结果,重排输出Milvus、Qdrant、Weaviate 都原生支持混合检索。
过滤策略
在向量检索前/后加上元数据过滤(如时间、类别、权限),缩小检索范围:
- 预过滤:先过滤元数据,再在子集中做向量搜索。适合过滤后数据量仍较大的场景
- 后过滤:先做向量搜索,再过滤不满足条件的结果。可能丢失结果,需增大 top-k
相关文章
- 向量数据库全面解析:从原理到选型:CSDN
