人人都会AI编程

8.1 基础向量检索:Top-K 相似度检索

更新时间:2026-07-12

在 RAG 系统中,检索环节的核心任务是从海量的文档片段中快速找到与用户问题最相关的那些内容。实现这一任务的技术基础,就是向量检索,而最常用、最直接的用法就是 Top-K 相似度检索

8.1.1 什么是向量检索

向量检索的思路并不复杂。首先,通过嵌入模型(embedding model)将文本(包括查询和所有文档片段)转换成一组固定长度的浮点数向量。这个过程将语义信息“压缩”进了向量的方向与距离中:语义越相近的文本,它们对应向量在高维空间中的方向就越接近,距离也越短。

当用户提出问题时,系统将问题也转换为一个向量,然后在向量数据库中进行搜索,找出与问题向量最相似的那些文档片段向量。这种基于向量相似度的搜索,就是向量检索。

8.1.2 Top-K 检索的基本流程

Top-K 检索中的“K”是一个由开发者设定的参数,代表“返回最相似的前 K 个结果”。它的流程十分直白:

  1. 构建索引:在系统搭建或知识更新时,将所有文档片段通过嵌入模型转为向量,保存在向量数据库中并建立索引,以便快速查找。
  2. 编码查询:用户输入问题后,用同一个嵌入模型将其转换成向量。这一步很重要,因为不同嵌入模型产生的向量空间不兼容,查询和文档必须使用同一个模型编码。
  3. 相似度计算:将查询向量与数据库中所有文档向量的相似度逐一计算(实际中用近似算法加速,详见下文)。
  4. 排序与截断:对相似度从高到低排序,截取前 K 个相似度最高的文档片段作为检索结果。
  5. 返回结果:将这 K 个片段及其原始文本返回,送入后续的生成环节。

8.1.3 相似度度量方式

向量检索中,衡量“相似度”有多种数学方法,最常用的有两种:

  • 余弦相似度:计算两个向量夹角的余弦值,取值范围 [-1,1],值越大越相似。它只关注方向,不受向量长度影响,在文本语义检索中最为常用。通常嵌入模型都是通过余弦相似度进行训练的,因此默认采用余弦相似度是最安全的选择。
  • 欧氏距离:计算两个向量之间的直线距离,距离越小越相似。它对向量的绝对数值敏感,当嵌入模型没有对向量进行归一化处理时,欧氏距离可能会被向量的“强度”影响,导致相似度排序不够准确。在 NLP 领域使用较少,但仍在部分场景(如图像检索)中应用。

实操建议:绝大多数主流嵌入模型(如 OpenAI 的 text-embedding-ada-002,开源的 bge-large-zh 等)都经过 L2 归一化处理,余弦相似度与归一化后的欧氏距离等价。这种情况下可以直接使用余弦相似度,性能与效果都有保证。如果不确定模型是否归一化,优先使用余弦相似度。

8.1.4 K 值的选择如何影响效果

K 的大小直接影响生成的质量和开销:

  • K 太小(如 1~2):检索覆盖不足,可能漏掉关键信息,导致模型只能基于片面信息回答,甚至回答“不知道”。
  • K 太大(如 20 及以上):虽然覆盖全面,但会把大量相关性不高的噪声片段也塞进提示词,分散模型注意力,还可能导致超出模型上下文窗口限制。同时,过多的无关信息反而可能诱发模型产生幻觉。
  • 建议的 K 值范围:通常情况下,K 取 3~8 是比较平衡的选择。可以结合具体场景进行试验:对于简单的事实型问题,较小的 K(3~5)往往足够;对于需要综合多份文档的归纳型问题,适当增大到 8~10 可能效果更好。关键是根据实际问答测试,观察生成质量和延迟,逐步调整。

8.1.5 检索速度与近似搜索

在真实应用中,文档片段数量很容易达到数万甚至数百万。如果每次查询都要与所有向量计算精确相似度(暴力检索),延迟会高到不可接受。因此,实际使用的向量数据库(如 Milvus、Pinecone、Weaviate 等)普遍采用近似最近邻搜索 算法,通过建立索引(如 HNSW、IVF、PQ 等)来快速定位最可能的相似向量,从而在毫秒级完成大规模检索。

近似搜索会牺牲非常少量的精度(比如召回率从 100% 略微下降到 99.9%),但换来了极大的速度提升。对于 RAG 场景而言,这种精度损失通常可以完全忽略,因为相似度排名靠前的文档基本都能被正确命中。

8.1.6 相似度阈值过滤(可选)

有时,即使召回了 Top-K 个结果,也可能出现所有片段都与问题不太相关的情况(例如用户问了一个知识库完全没包含的问题)。这时,强制将不相关内容塞给模型会增大幻觉风险。一种改良做法是设置相似度阈值

  • 计算每个检索片段的相似度分数;
  • 只保留相似度 高于设定阈值(如 0.7)的片段;
  • 如果最终有效片段数量不足,可以直接回复“未找到相关信息”,或触发后续流程。

这种做法可以进一步提升系统的可靠度,避免模型“无中生有”。不过阈值的设定需要根据嵌入模型的特性和业务容忍度反复调试,不宜一开始就设置得过严。

8.1.7 朴素的 Top-K 检索作为基石

基础的 Top-K 向量检索是整个 RAG 检索环节的起点。它实现简单、理解直观,许多原型系统只用它就达到了不错的效果。在后续章节中,我们会看到如何通过混合检索、重排序(rerank)、查询改写等手段,在基础向量检索之上进一步提升召回质量。但无论如何优化,核心的向量相似度匹配和 Top-K 截断逻辑始终贯穿始终。理解这一基础,是掌握更复杂检索策略的前提。