向量数据库基础
向量数据库用于存储和检索高维向量。在 RAG 中,文档 Chunk 会被转换为向量并写入向量库,用户问题也会向量化后用于相似度搜索。
# 1. 向量库保存什么
id: chunk_001
vector: [0.12, -0.08, 0.33, ...]
metadata:
title: 文档标题
source: 文档路径
page: 12
version: v3
acl: team-a
content: Chunk 正文
向量库不仅存向量,还要存元数据和原文片段,否则无法做权限、引用和排查。
# 2. 基本能力
| 能力 | 说明 |
|---|---|
| 向量写入 | 保存文档向量 |
| 相似度搜索 | 查找最接近的问题向量 |
| 元数据过滤 | 按版本、权限、文档类型过滤 |
| 删除更新 | 文档变更后同步索引 |
| 批量导入 | 支持大规模文档入库 |
# 3. 近似最近邻
高维向量精确搜索成本高,向量库通常使用近似最近邻算法提升性能。
精确搜索:结果更准,但成本高
近似搜索:速度更快,但可能有少量召回损失
工程上要在召回质量、延迟和成本之间做平衡。
# 4. 索引更新
RAG 系统必须处理文档变化:
文档新增 -> 解析 -> 切分 -> 向量化 -> 写入
文档修改 -> 删除旧 Chunk -> 写入新 Chunk
文档删除 -> 删除对应向量和元数据
权限变化 -> 更新元数据或重建索引
如果索引不更新,模型会回答过期内容。
# 5. 选型关注点
| 关注点 | 问题 |
|---|---|
| 数据规模 | Chunk 数量和向量维度多大 |
| 查询延迟 | 是否满足交互要求 |
| 过滤能力 | 是否支持复杂元数据过滤 |
| 更新能力 | 是否支持高频增删改 |
| 运维成本 | 自建还是托管 |
| 权限隔离 | 是否支持租户或集合隔离 |
# 6. 常见坑
| 问题 | 后果 |
|---|---|
| 只存向量不存来源 | 无法展示引用 |
| 不做删除更新 | 过期知识污染答案 |
| 元数据设计太少 | 无法做权限和版本过滤 |
| 盲目追求 Top K | 返回大量噪声 |
| 不做备份 | 索引重建成本高 |
# 7. Tips 快问快答
Q:向量数据库能替代传统数据库吗?
A:不能。向量库适合相似度检索,传统数据库适合事务、约束和结构化查询。
Q:文档原文要不要存在向量库?
A:可以存 Chunk 原文,也可以只存引用 ID 再从文档库取。关键是能返回可追溯内容。
Q:向量索引要不要重建?
A:当 Embedding 模型、切分策略或大量文档发生变化时,通常需要重建或分批迁移索引。
上次更新: 2026/06/25, 17:53:09