1. 什么是 Embedding(向量化)?

Embedding:把文本转换成一串数字(向量,如 1024 维),使语义相近的文本向量也相近——"学校创建于 1952 年"和"建校时间是 1952"的向量距离很近。

相似度计算:余弦相似度(cosine)、内积、欧氏距离。向量夹角越小越相似。

Embedding API 调用
from openai import OpenAI
client = OpenAI()
resp = client.embeddings.create(
    model="text-embedding-3-small",
    input=["校史馆建于 1998 年", "学校创建于 1952 年"]
)
vec1, vec2 = resp.data[0].embedding, resp.data[1].embedding
# 中文也可用开源模型:BAAI/bge-small-zh、moka-ai/m3e

🎯 面试要点

  • Embedding 模型选择:中文场景用中文模型(bge/m3e)通常比通用模型好
  • 向量维度与精度:维度高信息多但存储/计算贵,100~1536 维常见
  • 建库和查询必须用同一个 Embedding 模型(不同模型向量空间不兼容)

2. 向量数据库怎么选?

方案 特点 适合
FAISSMeta 开源库,内存索引,极快,无服务单机/原型/百万级以内
Milvus分布式向量库,亿级,云原生生产大规模
pgvectorPostgreSQL 扩展,向量+关系数据同库已有 PG、中小规模
ElasticsearchkNN 检索 + 关键词检索天然混合需要混合检索、已有 ES
Qdrant/Weaviate专业向量库,Rust/Go 实现中等规模独立部署

🎯 面试要点

  • 选型看三点:数据量、是否需要混合检索、是否已有一套数据库
  • 中小项目最省事组合:pgvector(或 ES)+ 现成编排框架
  • HNSW(图索引)是主流近似最近邻算法——能说出索引类型是加分项

3. 为什么需要混合检索?怎么做?

纯向量检索的短板:

混合检索 = 向量检索(语义)+ 关键词检索(精确)并行,再融合结果:

RRF 融合示例
# 向量检索排名 [docA, docB, docC],关键词排名 [docC, docB, docE]
# RRF: score(doc) = Σ 1 / (k + rank),k=60 常数
# docA: 1/(60+1)              = 0.016393
# docB: 1/(60+2) + 1/(60+2)  = 0.032258  (两榜都第 2)
# docC: 1/(60+3) + 1/(60+1)  = 0.032266  (一榜第 1、一榜第 3)→ 最高
# docE: 1/(60+3)              = 0.015873
# 结论:docC 险胜 docB。RRF 只看排名——「一个榜第 1 + 另一个榜第 3」
#       可以压过「两个榜都第 2」,这正是倒数排名的特点
# 工程上:分别取 Top10,融合后取 Top3~5 进提示词

🎯 面试要点

  • 混合检索是"语义 + 精确"双保险,能明显提升命中率——高级面试加分点
  • RRF 不需要调权重参数,比加权求和省心

4. 重排序(Rerank)解决什么问题?

问题:向量检索的"粗排"结果可能顺序不佳——最相关的片段没排第一,甚至混入无关片段。直接全塞给 LLM 会污染答案。

Rerank:用专门的重排序模型对"问题 + 每个候选片段"打分(交叉编码器,比向量相似度更精细),重排后取 Top-K。

🎯 面试要点

  • 检索管线三层:过滤(元数据)→ 粗排(向量+关键词)→ 精排(Rerank)
  • 回答质量差时先查检索:把"检索到的片段"打出来人工看,多半是检索问题不是模型问题
⚠️ 本页面由 AI 生成,内容仅供参考,请以官方文档和实际源码为准。