Skip to content

Embedding 与向量检索

Embedding 是什么?

Embedding 是把文本、图片、代码等内容转换成向量表示。

语义相近的内容,在向量空间中的距离通常更近。

在 RAG 中,Embedding 常用于:

  • 文档向量化
  • 用户问题向量化
  • 语义检索
  • 相似内容推荐
  • 聚类和去重

一句话:Embedding 让机器可以用数学方式比较语义相似度。

向量数据库是什么?

向量数据库用于存储和检索向量。

它能根据相似度快速找到和查询向量最接近的文档片段。

常见能力:

  • 向量写入
  • 相似度检索
  • metadata 过滤
  • 删除和更新
  • top-k 查询
  • 混合检索

常见产品包括 Milvus、Pinecone、Weaviate、Qdrant、Chroma、pgvector 等。

向量数据库面试重点有哪些?

核心知识点:

  • 向量索引:如何让相似度检索更快。
  • 距离度量:余弦相似度、点积、欧氏距离。
  • metadata 过滤:权限、时间、来源、类型过滤。
  • 增量更新:文档更新、删除、版本管理。
  • 混合检索:关键词检索和向量检索结合。
  • 召回与精排:先召回,再 rerank。
  • 多租户隔离:不同用户或企业的数据隔离。
  • 可观测性:记录 query、召回片段、命中率和延迟。

面试时可以补充:向量数据库不是“存向量的数据库”这么简单,它决定 RAG 的召回质量、权限边界和可维护性。

余弦相似度、点积、欧氏距离有什么区别?

常见向量相似度计算:

  • 余弦相似度:关注方向是否相似
  • 点积:受方向和向量长度影响
  • 欧氏距离:计算空间距离

实际使用时,要看 embedding 模型和向量库推荐哪种距离。

如果模型输出已经归一化,余弦相似度和点积的效果可能接近。

top-k 怎么选择?

top-k 是一次检索返回多少个候选片段。

top-k 太小:

  • 可能漏掉答案
  • 召回不足

top-k 太大:

  • 噪声增加
  • Prompt 变长
  • 成本和延迟上升

常见做法是先召回较多候选,再通过 rerank 或规则筛选出少量高质量片段放入上下文。

语义检索和关键词检索有什么区别?

关键词检索依赖字面匹配,适合编号、精确术语、专有名词。

语义检索依赖 embedding,适合表达不同但语义相近的问题。

例如:

text
如何请假?
年假申请流程是什么?

语义检索更容易认为它们相关。

实际项目中经常使用 hybrid search,把关键词检索和向量检索结合起来。

Hybrid Search 是什么?

Hybrid Search 是混合检索,通常结合:

  • 关键词检索
  • 向量检索
  • metadata 过滤
  • rerank

它适合企业知识库,因为企业文档里经常有产品型号、合同编号、错误码、接口名等精确词。

纯向量检索可能对精确编号不敏感,关键词检索可以补上这部分能力。

metadata 有什么作用?

metadata 是文档片段的附加信息。

常见 metadata:

  • 文档标题
  • 来源 URL
  • 页码
  • 创建时间
  • 部门
  • 权限
  • 文档类型
  • 版本号

metadata 可以用于过滤、展示引用来源、权限控制和结果解释。

不要只存文本内容。没有 metadata 的 RAG 系统后期很难排查和治理。

向量库中的文档如何更新?

常见策略:

  • 全量重建索引
  • 增量更新变更文档
  • 删除旧版本后写入新版本
  • 使用文档 ID 和版本号管理
  • 定期清理失效数据

面试时可以补充:文档更新不仅是重新 embedding,还要处理权限、缓存、引用来源和旧版本答案的可追溯性。

向量数据库如何做权限隔离?

常见做法:

  • 每条 chunk 写入 owner、department、tenant、role 等 metadata。
  • 检索时根据当前用户身份加过滤条件。
  • 不同租户使用不同 collection 或 namespace。
  • 高敏数据不进入通用知识库。
  • 检索结果进入模型前再做一次权限校验。

权限隔离必须发生在服务端和检索层,不能只依赖前端隐藏入口。

向量检索为什么会召回错误?

常见原因:

  • 文档切分破坏语义。
  • embedding 模型不适合当前语言或领域。
  • 查询太短或有歧义。
  • 只用语义相似度,忽略关键词和编号。
  • top-k 太大引入噪声。
  • 没有 rerank。
  • 文档版本混乱或脏数据太多。

排查时先看检索结果,而不是直接调 Prompt。

Built with VitePress and GitHub Pages.