Retrieval / Top-K

检索

用用户问题的向量在库里查最相似的 K 个块。

详解

Retrieval(检索)是 RAG 的运行时核心:用户提问后,系统先把问题转成向量,再在向量数据库里通过 ANN 索引查找语义距离最近的文档块,取前 K 条作为参考资料(Top-K)。这里的“最近”通常用余弦相似度或点积衡量,分数越高表示语义越接近。它不是把数据库结果原样回答,而是为生成阶段挑选证据;后续模型是否答得好,往往先取决于这里找得准不准。K 常取 3–10:太小可能漏掉关键证据,太大又会把噪声塞进 Prompt 干扰回答。生产系统还会叠加元数据过滤(权限、时间、文档类型)和去重,避免检索到用户无权看的内容或重复片段。检索质量主要看召回率(相关内容有没有被找回)和精度(找回的内容是否真的相关)。

一个类比
就像在一堆圆形磁铁中拿一块新磁铁去扫:它会被和自己磁极最像的那几块吸过来。"K"就是你决定只捡起最强吸引力的几块,忽略吸力微弱的那些。
举个例子
用户问"RAG 怎么分块",系统流程:
1. 把问题嵌入成向量:embed("RAG 怎么分块") → [0.12, -0.34, ...]
2. 在向量库中计算余弦相似度,召回相似度最高的 K=3 条:
   - 块A: "Chunking 是 RAG 索引的第一步..."  相似度 0.91
   - 块B: "chunk_size 推荐 512 token..."     相似度 0.87
   - 块C: "递归分块防止语义截断..."          相似度 0.83
3. 把这 3 块拼进 Prompt 发给 LLM 生成最终回答。
PYTHON 示例
相关概念