Embeddings / ANN / Vector Search:FAISS、HNSW 与 RAG 检索底座
一句话:
Embeddings / ANN / Vector Search 解读
面向对象: AI PM / AI Architect / Data Product / RAG Engineer / Platform PM。 核心问题: 企业 RAG、语义搜索、推荐、去重和相似案例检索为什么依赖 embedding 与近似最近邻检索?为什么“向量库”不是完整知识架构? 学习目标: 理解 Word2Vec、Sentence-BERT、FAISS、HNSW 的机制直觉,并把 embedding、ANN、rerank、metadata、权限、eval 和成本治理转成 AI 产品架构决策。
Source Anchors
| Source | Link | 用途 |
|---|---|---|
| Word2Vec | https://arxiv.org/abs/1301.3781 | 理解分布式词向量和语义空间的早期基础 |
| Sentence-BERT | https://arxiv.org/abs/1908.10084 | 理解句向量、bi-encoder 和语义检索效率 |
| FAISS | https://arxiv.org/abs/1702.08734 | 理解大规模相似度搜索和向量索引 |
| FAISS GitHub | https://github.com/facebookresearch/faiss | 理解工程生态和索引类型 |
| HNSW | https://arxiv.org/abs/1603.09320 | 理解图结构近似最近邻检索 |
| MTEB | https://arxiv.org/abs/2210.07316 | 理解 embedding benchmark 和任务多样性 |
一句话:
Embedding 把文本、图片、用户、案例或交易映射到向量空间;ANN 索引用可接受的近似误差换取大规模检索速度;企业架构必须用 metadata、权限、rerank、eval 和 lineage 控制它们。
1. 为什么 PM/架构师要懂 Embeddings
Embedding 是很多 AI 产品的底层连接层:
- RAG 文档召回。
- 相似案例检索。
- 客服问题聚类。
- 投诉和工单去重。
- 商品、商户、客户、交易相似度。
- Fraud / AML network 中的近邻候选。
- 推荐和 personalization。
- 多模态搜索。
如果只知道“向量数据库可以语义搜索”,会忽略关键风险:
| 风险 | 例子 |
|---|---|
| 相似不等于正确 | “费用减免”相似于“费用投诉”,但业务动作完全不同 |
| 语义相似不等于有权限 | 检索到另一个客户的 case note |
| embedding 旧版本不可比较 | 新 embedding model 重新索引后结果分布改变 |
| top-k 不是证据 | 排名前 3 不代表支撑回答的关键事实 |
| benchmark 高不代表领域好 | 通用 embedding 在 AML typology、KYC 政策缩写上可能弱 |
2. Word2Vec 的底层直觉
Word2Vec 的核心是:
一个词的意义可以从它经常出现的上下文中学习出来。
两种常见训练目标:
| 模式 | 直觉 |
|---|---|
| CBOW | 用上下文预测中心词 |
| Skip-gram | 用中心词预测上下文 |
产品层面的意义:
- 语义不是手写规则,而是从共现模式中学习。
- 向量空间能表达相似性、类比和聚类。
- 但词级向量无法很好表示句子、上下文、否定和复杂业务条件。
金融例子:
chargeback、dispute、refund 可能在空间中接近,但它们在支付规则中不是同义词。产品架构不能只靠 embedding 相似度决定下一步动作。
3. Sentence-BERT 和 Bi-Encoder 检索
普通 BERT 做句子对比较时,如果每个 query 都和所有文档 pairwise 编码,成本太高。
Sentence-BERT 的实用价值在于:
Document -> encoder -> vector -> index
Query -> encoder -> vector -> nearest neighbors
这就是 bi-encoder 检索:
- 文档向量可提前算好。
- 查询时只算 query vector。
- 可用向量索引快速找候选。
- 适合 RAG 第一阶段召回。
但 bi-encoder 常见局限:
| 局限 | 影响 |
|---|---|
| query 和文档独立编码 | 对精细条件和否定不敏感 |
| 压缩成固定向量 | 长文档多事实容易丢信息 |
| 相似度只是一阶信号 | 不能证明 citation 支撑 claim |
| domain shift | 专有缩写、政策术语、金融规则可能召回差 |
因此生产级架构通常是:
bi-encoder retrieve
-> metadata / permission filter
-> reranker or cross-encoder
-> context packing
-> answer generation
-> citation verification
4. FAISS / HNSW: 为什么需要 ANN
当向量数量很大时,精确比较 query 与所有向量成本高。
ANN = Approximate Nearest Neighbor:
不保证找到绝对最近邻,但用较高召回率换取数量级速度提升。
FAISS 的产品含义
FAISS 提供多种索引和压缩策略,用于大规模相似度搜索。
产品架构要关注:
- 延迟。
- 召回率。
- 内存。
- 索引构建时间。
- 动态更新。
- 多租户隔离。
- 回滚和版本。
HNSW 的直觉
HNSW 可以理解成多层小世界图:
高层: 快速跳到大致区域
低层: 在邻近节点精细搜索
优点:
- 查询快。
- 召回通常高。
- 工程生态成熟。
风险:
- 参数影响 recall/latency/memory。
- 动态删除和权限过滤可能复杂。
- 图索引不是知识图谱,不能表达业务语义关系。
5. Vector Search 不是 Knowledge Governance
| 向量检索能做 | 向量检索不能单独保证 |
|---|---|
| 找语义相近片段 | 来源权威 |
| 找相似案例 | 客户权限 |
| 找候选政策条款 | 条款是否当前有效 |
| 聚类反馈和投诉 | 业务根因因果 |
| 降低关键词搜索漏召回 | citation 是否支持回答 |
高级原则:
Vector index 是候选生成层,不是事实层、权限层或决策层。
生产 RAG 要把向量检索放在完整控制面内:
Source Registry
-> Chunk / Entity / Claim
-> Embedding Model Version
-> Vector Index Version
-> Metadata + ACL Filter
-> ANN Retrieval
-> Rerank
-> Citation + Answer Eval
-> Audit Trace
6. Embedding Architecture Decisions
| 决策 | 选项 | 判断标准 |
|---|---|---|
| embedding model | 通用 / 领域 / 多语种 / 小模型 / vendor API | 任务、语言、隐私、成本、延迟、领域术语 |
| vector granularity | chunk / sentence / section / claim / entity | 需要引用、召回、上下文长度、更新频率 |
| distance metric | cosine / dot product / L2 | 模型训练方式和索引支持 |
| index type | flat / IVF / HNSW / PQ / hybrid | 数据规模、延迟、内存、召回要求 |
| filtering | pre-filter / post-filter / hybrid | 权限、metadata 高选择性、性能 |
| rerank | none / cross-encoder / LLM judge / rules | 质量要求、延迟预算 |
| refresh | batch / near real-time / event-driven | 知识更新频率和 stale 风险 |
| versioning | in-place / blue-green index / shadow index | 回滚、A/B、审计回放 |
7. Eval: 不要只看 Recall@K
向量检索 eval 要按任务分层。
| Metric | 说明 | 风险 |
|---|---|---|
| recall@k | gold evidence 是否在 top-k | top-k 里可能混入危险噪声 |
| precision@k | top-k 相关比例 | 对开放问题标注难 |
| MRR | 第一个正确结果排位 | 不保证证据完整 |
| nDCG | 排序质量 | 仍不判断回答是否 grounded |
| hard negative avoidance | 是否避开相似但错误文档 | 金融政策特别重要 |
| permission correctness | 无权文档召回为 0 | 高风险必须强门禁 |
| freshness correctness | 当前问题是否召回当前版本 | 过期政策风险 |
| citation support | 检索片段是否真正支撑 claim | 连接 RAG answer eval |
Hard Negative 示例
| Query | Gold | Hard negative |
|---|---|---|
| “非居民企业 KYC 需要什么文件?” | KYC Policy v6.1 非居民企业条款 | 居民企业条款、旧版本 v5.4、培训 FAQ |
| “信用卡年费能否减免?” | 当前费率和减免政策 | 客服话术示例、历史活动 |
| “dispute 是否可临时入账?” | 网络规则和内部 SOP | refund FAQ、merchant refund policy |
8. 金融零售场景
8.1 KYC Policy Assistant
Embedding 用途:
- 政策条款召回。
- 同义词和缩写匹配。
- 历史 analyst 问题聚类。
必要控制:
- jurisdiction metadata。
- effective date filter。
- role-based ACL。
- hard negative eval。
- citation support。
8.2 AML Similar Case Retrieval
Embedding 用途:
- 找相似交易叙事。
- 找相似 typology。
- 聚类 analyst narrative。
必要控制:
- 不跨权限泄露客户身份。
- 区分事实相似、风险类型相似、话术相似。
- 结果用于参考,不自动决定 disposition。
8.3 Customer Service Intent and Knowledge
Embedding 用途:
- 客户问题语义路由。
- FAQ 召回。
- 投诉主题聚类。
必要控制:
- 费用、退款、信贷、投诉权利等高风险主题强制权威来源。
- 相似问题不能直接复用客户特定答案。
- 低信心时追问或升级人工。
9. 作品集输出
| Artifact | 内容 |
|---|---|
| Embedding Model Scorecard | 任务、语言、领域、成本、延迟、隐私、benchmark、内部 eval |
| Vector Index ADR | index type、参数、metadata、权限、版本、回滚 |
| Retrieval Eval Pack | query set、gold evidence、hard negatives、permission/freshness tests |
| Rerank Strategy Memo | 何时用 cross-encoder、LLM judge 或规则 rerank |
| Index Release Gate | shadow index、A/B、rollback、SLO、audit |
| Financial RAG Case Study | KYC / AML /客服场景的端到端检索架构 |
10. 面试表达
30 秒版本
Embedding 把文本或业务对象映射成向量,ANN 用近似搜索在大规模向量中快速找相似候选。它是 RAG 和语义搜索的召回层,但不能单独保证权威、权限、版本或事实正确。
2 分钟版本
Word2Vec 证明语义可以从上下文共现中学习,Sentence-BERT 让句子和文档可以提前编码成向量,FAISS 和 HNSW 让大规模相似度检索可用。企业架构里,我会把向量检索定位为候选生成层,再用 metadata、ACL、freshness、reranker、citation verifier 和 eval 控制结果。金融零售里尤其要做 hard negative,比如同样是“费用减免”,旧政策、FAQ 和正式条款风险完全不同。
CTO 深挖
我会为 embedding 和 index 建版本化 release gate。每次更换 embedding model、chunking、index 参数或 reranker,都要跑 retrieval eval、permission tests、freshness tests、hard negatives 和 answer-level regression。否则 RAG 质量变化不可控,事故后也无法审计回放。
11. 复习问题
- Word2Vec 和 Sentence-BERT 的核心差异是什么?
- 为什么 bi-encoder 适合作为 RAG 第一阶段召回?
- ANN 为什么不是精确最近邻?它换来了什么?
- HNSW 和知识图谱有什么本质差异?
- 向量检索为什么不能替代权限和来源治理?
- 如何设计 KYC RAG 的 hard negative eval?
- 更换 embedding model 为什么要重新评估和版本化索引?