一、什么是 Embedding

Embedding 可以理解为:把文本、图片、音频或视频映射成一组数值向量
这些数值不是给人直接阅读的,而是给模型和检索系统计算“相似度”用的。

举个最简单的例子:

  • “苹果手机”
  • “iPhone”

虽然文本不同,但语义接近,所以它们生成出来的向量通常也会更接近。

这就是 Embedding 的核心价值:让机器能计算语义上的相近程度

1.1 Embedding 常见类型

  • 文本 Embedding:最常见,用于搜索、推荐、RAG
  • 图片 Embedding:用于以图搜图、图像相似检索
  • 多模态 Embedding:把文本和图片映射到同一语义空间

二、为什么需要向量数据库

如果只有少量数据,向量可以直接存在内存或普通数据库里。
但一旦数据规模变大,就会遇到两个问题:

  1. 向量维度高,普通精确检索成本高
  2. 相似度搜索会随着数据量增加而变慢

这时就需要向量数据库,或者带向量索引能力的数据库。

它们的主要作用是:

  • 高效存储向量
  • 支持相似度搜索
  • 提供 ANN(近似最近邻)索引
  • 搭配元数据过滤做更实用的检索

三、向量数据库到底在查什么

本质上不是“按关键词匹配”,而是在查:

哪些向量和当前查询向量距离最近

所以向量检索更偏语义,而关键词检索更偏字面。

3.1 常见距离度量

1. 余弦相似度

衡量两个向量方向是否接近。
文本语义检索中非常常见。

2. 欧氏距离

衡量两个点在空间中的直线距离。

3. 点积

在一些模型和实现里也常被使用。

不同模型、不同库,对距离度量支持会不同,不能混用。

四、向量数据库的工作流

一条典型链路通常是:

  1. 准备原始文本
  2. 切分文档
  3. 调 Embedding 模型把每个 chunk 编码成向量
  4. 把向量和元数据写入数据库
  5. 查询时把用户问题也编码成向量
  6. 到数据库里做 Top-K 相似检索
  7. 返回最相关片段给上层应用

如果用于 RAG,最后还会多一步:

  1. 把检索结果拼进 Prompt,再交给大模型生成答案

五、为什么 RAG 离不开 Embedding

RAG 的关键不是“把文档塞给模型”,而是:

  • 先从大量文档里找到真正相关的片段
  • 再把这些片段作为上下文提供给大模型

而这个“找到相关片段”的过程,最主流的实现方式就是:

Embedding + 向量检索

所以可以简单记成:

  • Embedding 负责“表示语义”
  • 向量数据库负责“高效召回”
  • LLM 负责“基于召回结果组织答案”

六、主流向量数据库与方案

6.1 专用向量数据库

代表:

  • Milvus
  • Weaviate
  • Qdrant
  • Pinecone

优点:

  • 向量检索能力强
  • 索引与检索能力成熟
  • 适合大规模语义搜索

缺点:

  • 系统栈更复杂
  • 运维与学习成本更高

6.2 带向量能力的通用数据库

代表:

  • PostgreSQL + pgvector
  • Elasticsearch / OpenSearch
  • Redis Vector Similarity

优点:

  • 可以和现有业务数据放在一起
  • 上手门槛更低
  • 便于做结构化过滤

缺点:

  • 在超大规模纯向量检索场景下,可能不如专用方案

七、如何选择方案

7.1 小规模项目

如果你是:

  • 个人项目
  • 内部知识库
  • 文档量有限

优先建议:

  • PostgreSQL + pgvector
  • Elasticsearch / OpenSearch

原因是:

  • 部署简单
  • 成本低
  • 和现有业务系统更容易集成

7.2 中大规模检索系统

如果你是:

  • 大规模知识库
  • 高并发搜索
  • 多租户 RAG 平台

可以考虑:

  • Qdrant
  • Milvus
  • Weaviate

重点看:

  • 检索延迟
  • 索引能力
  • 过滤能力
  • 运维复杂度

八、做 Embedding 时最容易踩的坑

8.1 文档不切分,直接整篇编码

问题:

  • 向量过粗
  • 检索命中不精准

正确做法:

  • 按语义或长度切 chunk
  • 控制 chunk size
  • 保留适度 overlap

8.2 混用不同模型的向量

不同模型生成的向量空间通常不兼容。

所以:

  • 入库和查询必须使用同一个 Embedding 模型

8.3 只存向量,不存元数据

检索结果真正可用,往往依赖元数据:

  • 标题
  • 来源
  • 页码
  • 时间
  • 作者
  • 业务标签

元数据会直接影响检索后的可解释性和可过滤性。

九、和关键词搜索的关系

向量检索不一定替代关键词搜索,很多场景里它们是互补关系。

9.1 关键词搜索适合

  • 查专有名词
  • 查准确字段
  • 查编号、产品名、报错码

9.2 向量检索适合

  • 查语义近义表达
  • 用户问题表达不标准
  • 需要召回“意思接近”的内容

9.3 实践建议

很多成熟系统会做“混合检索”:

  • BM25 / 关键词检索
  • 向量检索
  • 最后再融合排序

这通常比单一方案更稳。

十、总结

Embedding 和向量数据库不是“高深黑盒”,它们可以简单记成:

  • Embedding:把内容变成可计算语义相似度的向量
  • 向量数据库:把这些向量高效存起来,并支持相似度检索

如果你想真正学好 RAG,这一块是绕不过去的基础。

延伸阅读