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,适合表达不同但语义相近的问题。
例如:
如何请假?
年假申请流程是什么?语义检索更容易认为它们相关。
实际项目中经常使用 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。