跳到正文

更多文章

影响力日常操作系统:21天习惯养成计划 从技能雇佣者到价值创造者 互惠账户的运营 影响力的三层架构 组织的注意力经济学
向量数据库与RAG工程实践 - 让AI真正懂你的数据

本文来源于数据从业者全栈知识库,更多体系化内容请访问知识库。

学习目标
  • 理解 Embedding 的本质与 ANN 算法的工程原理
  • 掌握主流向量数据库的技术差异与选型逻辑
  • 深入理解 Naive RAG 的局限与 Advanced RAG 的改进方向
  • 掌握企业知识库的工程实践:数据处理、质量管理、增量更新
  • 明确数据工程师在 RAG 系统中的核心职责
核心洞察

RAG 不是一个模型问题,而是一个数据工程问题。决定 RAG 系统质量的 80% 因素来自数据侧:文档切割策略、Embedding 质量、数据清洗程度、检索排序逻辑。大模型只是最后的”答题者”,前面所有的工程工作决定了它能看到什么题目材料。


一、Embedding 的本质:把语义变成数字

1.1 从词袋模型到语义向量

传统搜索用关键词匹配——“苹果手机”搜不到”iPhone”的结果,因为字面上不相似。Embedding 技术的突破在于:把语义相似的内容映射到向量空间中相近的位置

graph LR
    A["原始文本/图片/音频"] --> B["Embedding模型<br/>BERT/E5/BGE/CLIP"]
    B --> C["高维向量<br/>如 1536维的浮点数组"]
    C --> D["向量空间<br/>语义相近 = 距离相近"]

    subgraph "向量空间示意"
        E["苹果 iPhone"]
        F["Apple手机"]
        G["手机评测"]
        H["水果苹果"]
        E --- F
        F --- G
        H
    end

相似度度量方式

方法公式理解适用场景
余弦相似度两个向量夹角的余弦值,范围 [-1, 1]文本语义相似性,最常用
内积(Dot Product)向量点积,与向量模长相关归一化向量时等价余弦,OpenAI 推荐
L2 欧氏距离向量空间中的直线距离图像检索,对量纲敏感

1.2 主流 Embedding 模型选型

模型维度特点适用场景
OpenAI text-embedding-3-large3072效果最佳,付费 API预算充裕,对效果要求高
BGE-M3 (BAAI)1024开源最佳,支持中文,多语言中文企业知识库首选
E5-mistral-7b4096指令微调,效果优秀英文场景,GPU资源充足
M3E-base768中文专用,轻量级中文场景,资源受限
Nomic-embed-text768完全开源,可商用开源替代方案
选型原则

中文场景优先选 BGE 系列(北京智源研究院出品),MTEB 中文排行榜持续领先。不要盲目追求高维度,768 维对大多数企业应用完全够用,更高维度带来的收益递减但存储和计算成本线性增加。


二、ANN 算法:向量检索的工程核心

2.1 为什么不能用暴力搜索

假设知识库有 100 万条文档,每条 Embedding 是 768 维的 float32:

  • 存储:768 × 4 bytes × 1,000,000 ≈ 3GB(还算可以)
  • 暴力检索:每次查询需要计算 100 万次余弦相似度,每次约需 3~10ms,完全不可用

近似最近邻(ANN, Approximate Nearest Neighbor) 算法通过牺牲极小精度换取巨大的速度提升。

2.2 三种主流 ANN 算法

HNSW(Hierarchical Navigable Small World)

HNSW 是目前工业界最广泛使用的算法,类似”高速公路 + 省道 + 小路”的多层导航结构:

  • 最顶层:稀疏长程连接,快速定位大致区域
  • 底层:密集短程连接,精确找到最近邻
  • 查询复杂度:O(log N),几乎不随数据规模增长
  • 缺点:构建索引时内存消耗大(约原始数据的 4~8 倍)

IVF-PQ(Inverted File Index + Product Quantization)

  • IVF:先把向量空间聚类为 K 个簇,查询时只搜索最近的几个簇
  • PQ:把高维向量压缩编码,大幅减少内存占用(通常 8~32 倍压缩)
  • 适合:数据量超过千万,内存有限,可接受略低的召回率

FAISS(Facebook AI Similarity Search)

  • Meta 开源的向量检索库,包含多种 ANN 算法实现
  • 优势:GPU 加速支持,超大规模检索(亿级)
  • 定位:算法库而非完整数据库,常作为 Milvus 等向量数据库的底层

2.3 精度与速度的权衡

graph LR
    A["暴力搜索<br/>Brute Force"] --> B{"精度 100%<br/>速度极慢"}
    C["IVF-Flat"] --> D{"精度 95%+<br/>速度快 10-100x"}
    E["HNSW"] --> F{"精度 95%+<br/>速度快 100-1000x"}
    G["IVF-PQ"] --> H{"精度 85-95%<br/>速度极快<br/>内存最省"}

    subgraph "工程选择"
        B
        D
        F
        H
    end

三、主流向量数据库对比

3.1 全景对比

维度MilvusPineconeWeaviateChromapgvector
类型开源自托管全托管云服务开源自托管开源嵌入式PostgreSQL扩展
规模上限亿级+亿级(付费)亿级百万级千万级
混合检索支持(标量过滤)支持(Metadata过滤)强(BM25+向量融合)有限支持(SQL过滤)
部署复杂度高(依赖etcd/minio/kafka)零运维中等极低(嵌入式)低(PostgreSQL插件)
成本开源免费,运维成本高按用量付费,较贵开源免费开源免费开源免费
最适场景大规模生产,有运维能力快速上线,预算充裕知识图谱+向量混合原型开发,本地应用已有PG,数据量适中
中国企业的额外选项

国内还有 Zilliz Cloud(Milvus 的商业化版本,Milvus 作者团队出品)、腾讯云 VectorDB、阿里云 DashVector 等选项,在合规性和访问速度上有优势。

3.2 向量数据库 vs 传统数据库的定位差异

这是一个常见的认知误区:向量数据库不是来”替代”传统数据库的,它们解决的是完全不同的问题。

对比维度传统数据库(MySQL/ES)向量数据库(Milvus/Pinecone)
查询方式精确匹配、模糊匹配语义相似性检索
擅长问题”查询年龄=25的用户""找和这段描述意思相近的文档”
索引结构B-Tree、倒排索引HNSW、IVF-PQ
存储单元结构化行列数据高维浮点向量
事务支持强ACID保证通常不支持复杂事务

实际生产中,向量数据库往往与传统数据库配合使用:向量数据库做语义检索,传统数据库存储结构化元数据,通过 ID 关联。


四、RAG 架构深度解析

4.1 Naive RAG 的工作流程与局限

Naive RAG 是最基础的实现,理解其局限是进阶的前提:

sequenceDiagram
    participant U as 用户
    participant R as 检索层
    participant V as 向量数据库
    participant L as 大模型

    U->>R: 原始问题
    R->>R: 问题向量化 (Embedding)
    R->>V: TopK 检索 (默认K=3~5)
    V-->>R: 返回相似文档片段
    R->>L: 拼接 Prompt = 问题 + 检索结果
    L-->>U: 生成回答

Naive RAG 的三大痛点

  1. 召回率问题:用户问”如何申请差旅报销?“但文档里写的是”出差费用报销流程”,语义相近但词汇不同,向量检索可能召回不准
  2. 上下文窗口限制:检索到的片段可能缺少关键的上下文,大模型看到的是碎片化信息
  3. 无法处理多跳推理:当问题需要综合多个文档的信息才能回答时,简单 TopK 检索效果很差

4.2 Advanced RAG 的改进策略

改进方向一:查询优化(Query Enhancement)

HyDE(Hypothetical Document Embeddings): 先让大模型根据问题”假设”生成一段理想答案,再用这段假设答案去检索,而不是直接用原始问题检索。因为答案的语义空间与文档更接近。

def hyde_retrieval(question: str, llm, vector_store, k: int = 5):
# Step 1: 让LLM生成假设文档
hyde_prompt = f"""请根据以下问题,生成一段可能的答案文档(不需要完全准确,只需要语义相近):
问题:{question}
假设答案:"""
hypothetical_doc = llm.generate(hyde_prompt)
# Step 2: 用假设文档做检索(而不是用原始问题)
results = vector_store.similarity_search(hypothetical_doc, k=k)
return results

PRO 会员专属

本文为 PRO 会员专属内容,成为会员即可阅读全文。

PRO ¥199/年 · Pro 专属文章 + 2300+ 知识文档 + 会员社群

Elazer (石头)
Elazer (石头)

11 年数据老兵,从分析师到架构专家。用真实经历帮数据人少走弯路。

加入免费社群

和数据从业者一起交流成长

了解详情 →

成为会员

解锁全部内容 + 知识库

查看权益 →
← 上一篇 职场认知 29|同一个 offer 多拿 30%-50%:数据人薪酬谈判的策略与技巧 下一篇 → 职场认知 30|数据人的可持续发展:工作与生活如何真正实现平衡