跳转至

第18章 向量数据库与索引算法


向量数据库承接 RAG 的检索执行:保存向量和 metadata,在给定权限、索引与过滤条件下返回近似最近邻。Embedding 生成、业务语义、最终权限裁决和答案正确性仍属于其他组件。

企业向量库事故很少表现为“数据库挂了”。更常见的是:无权文档进入候选、旧制度仍被召回、embedding 升级后新旧向量混在一起,或删除了源文件却没有删向量、缓存和评测样本。

向量库不是一个可随时清空的缓存,而是 RAG 证据链的一部分。它必须同时管理召回、权限、版本、删除、回滚和成本。

18.1 平台定位:先定义检索契约,再讨论产品

知识库、客服、法务和 DataAgent 都可能共享向量能力,但它们的权限、新鲜度和质量目标不同。平台至少要提供统一的写入、查询、版本和观测契约。

表18-1:向量库在企业平台中的职责。来源:本书整理。

职责 说明 不负责什么
向量索引 管理 embedding、metric、index type、namespace、版本 不负责生成 embedding
metadata 过滤 按租户、部门、权限、生效时间、文档状态过滤 不替代统一权限系统
近似检索 在延迟和召回之间折中 不保证最终答案正确
生命周期治理 重建、双写、灰度、回滚、压缩和归档 不替代数据血缘与审计
观测与成本 QPS、p95、召回、过滤命中、索引大小 不解释业务语义错误

图18-1:向量库在企业 Agent 平台中的位置

图18-1:向量库在企业 Agent 平台中的位置。来源:本书自绘。Alt text:分层图中向量库位于嵌入服务之下、RAG 与知识助手之上,存储向量与元数据并对外提供带权限过滤的检索接口,标出其"可检索知识存储"职责。

图18-2:企业向量库多租户控制台

图18-2:企业向量库多租户控制台。来源:产品界面截图。Alt text:控制台界面展示按租户划分的集合列表、向量规模、索引类型与权限配置,体现向量库以租户为单位做隔离与配额管理。

早期中小规模、强 SQL/事务需求可以从 pgvector 起步;当多个业务共享、大规模 ANN、高 QPS、多租户重建成为主要矛盾时,再评估专用向量系统。共享平台的触发条件是复用和治理复杂度,不是“向量数量看起来很多”。

18.2 ANN 算法:召回、内存、构建和更新之间没有免费午餐

少量向量可以做精确距离计算,规模扩大后通常使用 ANN。主流路线包括 HNSW、IVF、PQ/SQ 和磁盘索引。

表18-2:ANN 索引算法谱系。来源:本书整理。

算法路线 直觉 优势 代价
HNSW 多层近邻图中导航搜索 召回和延迟稳定、生态成熟 内存高、构建参数敏感
IVF 先聚类分桶,再搜索少量桶 大规模可控、易与压缩组合 需训练中心,参数不当会漏召回
PQ/SQ 低比特近似表示向量 显著降低内存/存储 分数精度下降,常需精排补偿
DiskANN/磁盘索引 以磁盘和缓存承载大索引 降低内存压力 延迟抖动、冷热和硬件更敏感
精确检索 全量计算距离 结果明确、小规模 baseline 好用 大规模不可扩展

图18-3:ANN 索引算法谱系图

图18-3:ANN 索引算法谱系图。来源:本书自绘。Alt text:树状谱系把 ANN 索引分为基于图(HNSW)、基于量化(IVF-PQ)、基于树/哈希等分支,每个叶子标注召回、延迟、内存特征,展示索引家族关系。

参数调优必须使用企业真实过滤条件和长尾样本。无过滤公开 benchmark 上表现很好的 HNSW 配置,在“租户 + 部门 + 生效时间”强过滤下可能完全不同。ef_search、IVF probe 数、量化精度、top-k 和 reranker 应放到一条质量—延迟—成本曲线上比较。

索引参数没有“最佳默认值”,只有在当前向量空间、数据分布、过滤和业务 SLO 下可接受的折中。

18.3 数据库选型:看系统边界,不看品牌排行榜

表18-3:主流向量库路线取舍表。来源:本书整理。

方案 优势 代价 适用场景 mini-platform 选择
pgvector PostgreSQL SQL、事务、权限和元数据统一 超大规模 ANN 能力有限 中小知识库、DataAgent 字段检索 默认 baseline
Milvus 大规模向量检索、分布式和索引类型丰富 组件和运维更多 大规模共享向量平台 大规模候选
Qdrant payload filtering、服务化 API 友好 要额外治理与业务库一致性 多租户 RAG、强过滤 服务化候选
Weaviate schema、模块化向量化、检索 API 完整 既有平台集成需评估 快速知识应用 产品化候选
Vespa 搜索、推荐、多阶段 ranking 表达强 学习与部署复杂 大规模搜索/推荐、复杂 ranking 高级搜索候选

真正需要比较的是:metadata filter 在 ANN 前后如何执行、索引能否不停服重建、租户隔离方式、备份恢复、删除语义、查询审计,以及能否稳定与 BM25、数据目录和 reranker 组合。

企业通常不应把传统搜索全部迁到向量库。编号、字段名、错误码和条款号更适合关键词检索,口语和同义表达更适合向量,后续再统一融合与重排。

一个单库 recall 更高但难以接入 ACL、混合检索和版本回滚的方案,未必比轻量、可治理的方案更适合生产。

18.4 Metadata filter 与多租户:权限要在候选空间里生效

向量相似度本身不理解租户、密级和生效时间。每条记录至少需要一套稳定 metadata。

表18-4:metadata 字段设计。来源:本书整理。

字段 用途 示例
tenant_id 租户隔离 tenant-a
acl 角色或部门权限 finance_manager
source_type 文档、字段、工单、图片 policy
source_version 文档版本 v3
effective_at 生效时间过滤 2026-01-01
index_version 索引治理 kb-hr-v7

图18-4:metadata filter 与多租户权限边界

图18-4:metadata filter 与多租户权限边界。来源:本书自绘。Alt text:检索请求带租户与权限标签进入向量库,过滤条件在 ANN 搜索阶段一同生效(而非先召回后过滤),箭头标出无权数据在检索时即被排除。

Pre-filter 安全边界更强,但候选过窄可能伤召回;post-filter 召回空间更大,却可能让无权内容先进入检索、重排、日志或 Trace。高风险场景应优先把租户、密级等硬边界前置,时间、状态等软条件再按质量折中。

空结果也要区分“没有相关知识”和“当前权限下没有可见证据”。这两个状态对应完全不同的用户恢复路径。

18.5 索引生命周期:模型、Chunk、Parser、ACL 都会触发重建

索引应被视为可发布资产,而不是一次生成的缓存。

表18-5:索引生命周期阶段。来源:本书整理。

阶段 关键动作 质量门禁
构建 编码、写向量/metadata、记录 lineage 维度、metric、model version 一致
离线评测 query 集测 recall、MRR、filter、latency 不低于 baseline,失败可解释
双写灰度 新旧索引接收更新,shadow query 对比 候选和权限差异可追踪
切流 小流量逐步全量 p95、错误、引用稳定
回滚 保留旧索引和旧模型 回滚路径可用
归档 下线旧索引,保留审计元数据 历史 Trace 可解释

触发重建的不只是 embedding 模型,还有 parser、chunk、metadata schema、ACL 和索引参数。生产版本最好用组合 ID 描述:

parser + chunk + embedding + metadata_schema + index_params + acl_policy

删除同样是全链路动作。一份文档撤回后,需要同步处理原文、chunk、向量、倒排索引、reranker 缓存和相关评测样本;租户删除、ACL 撤回也一样。

向量库应提供诸如 delete_by_sourcedelete_by_aclrebuild_by_source 的平台接口,而不是让各应用写临时清理脚本。

18.6 Benchmark 与运行回放:静态快不够,动态也要稳

选型 benchmark 应同时覆盖质量、系统和治理指标。

experiment: vectorstore_benchmark
query_set: data/eval/enterprise_queries.jsonl
models:
  - name: bge-m3-baseline
  - name: bge-m3-finetuned
stores:
  - provider: pgvector
    index: hnsw
  - provider: qdrant
    index: hnsw
metrics:
  quality: [recall@10, mrr@10, ndcg@10]
  system: [p50_latency_ms, p95_latency_ms, qps, index_size_mb]
  governance: [filter_hit_rate, acl_violation_count, rebuild_time_min]

图18-5:向量库 benchmark 报告总览

图18-5:向量库 benchmark 报告总览。来源:本书自绘。Alt text:报告页对比多个向量库在召回率、P95 延迟、写入吞吐、内存占用上的指标曲线,并标注不同索引参数下的取舍点。

除了静态查询,还要测试高频写入、批量删除、ACL 更新、夜间重建和紧急回滚。否则最漂亮的只读 benchmark 可能掩盖真实生产瓶颈。

一次检索回放至少应保存:原 query、query rewrite、embedding 版本、索引版本、filter、top-k、reranker、最终 chunk 以及被过滤候选数量。

“被过滤掉了多少、为什么被过滤”同样是检索证据。候选从 80 条过滤到 3 条,不能被误诊为 embedding 召回差。

缓存也必须绑定索引版本、用户权限和过滤条件。知识库重建或权限变化时,旧缓存必须失效,否则同一会话可能混用两套证据空间。

18.7 容量、灰度与退役:控制知识基础设施的长期复杂度

容量会因为文档版本、chunk 副本、多模型、多租户、灰度索引和缓存快速增长。成本治理不能只按“低频就删”,因为低频知识可能是关键合规证据。

可以按热知识、温知识、冷证据分层:高频知识保持在线高性能;温知识降低副本或使用更慢索引;冷证据保留原文与 metadata,需要时再进入在线检索。

索引变更应采用 shadow retrieval:线上继续用旧索引回答,新索引后台跑同一请求,比较候选、分数、权限和引用。稳定后按租户或知识域切流。

退役旧索引前要扫描调用日志、配置、缓存、评测和历史报告,确认是否仍有依赖。历史 Trace 需要保留旧版本参数,当前检索则停止引用旧资产。

向量平台的成熟度,不是“索引越来越多”,而是每个索引都知道为什么存在、谁在用、何时重建、怎样退出。

本章小结

向量数据库负责在受控候选空间里执行高效检索,不负责生成 embedding 或决定最终事实。HNSW、IVF、PQ 和磁盘索引需要在召回、内存、延迟、更新与过滤条件下联合评测。

Metadata filter 是企业检索的安全边界;索引版本必须绑定模型、解析、chunk 和 ACL;删除、灰度、回滚和缓存也要进入同一生命周期。

企业选向量库最终选的不是 ANN 算法,而是一套能稳定管理候选证据、权限和版本变化的知识基础设施。

参考文献

  • pgvector: https://github.com/pgvector/pgvector
  • Milvus Index Documentation: https://milvus.io/docs/index.md
  • Qdrant Filtering: https://qdrant.tech/documentation/search/filtering/
  • Weaviate Documentation: https://weaviate.io/developers/weaviate
  • Vespa Approximate Nearest Neighbor Search: https://docs.vespa.ai/en/nearest-neighbor-search.html
  • Azure AI Search Vector Search: https://learn.microsoft.com/en-us/azure/search/vector-search-overview