首页/AI/RAG 与向量库速查/多路召回合并与去重
本包目录(229 条)
架构与流程30 条解析与切分33 条
Embedding 与检索50 条
向量数据库49 条重排与生成32 条评估与优化35 条

多路召回合并与去重

多路召回从不同通道(向量、关键词、字段检索、多模型、查询改写变体)各取候选后合并去重:按内容 hash 与父文档 id 去重,再统一打分或交给重排,避免同一段内容占满上下文。

RAG 与向量库速查AI更新于 2026-10-12

候选合并去重

候选合并去重
def merge(candidates):
    seen, merged = set(), []
    for c in candidates:
        key = c.meta.get("chunk_uid") or hash(c.text)
        if key in seen:
            continue
        seen.add(key)
        merged.append(c)
    return merged

# 不同查询改写的结果也常一起合并:
# all_hits = merge(hits_original + hits_rewrite1 + hits_rewrite2)

合并策略

策略适用
按 uid 去重后交给重排候选来自同一文档的不同路径
RRF 融合排名多路分数不可直接比较
按父文档聚合选代表块小块密集命中同一长文
多路召回会把候选量放大数倍,检索与重排的耗时、费用都要按放大后估算。

易错点

  • 只按文本前 N 字符去重,措辞相近的重复段落仍会重复进上下文
  • 多路候选简单相加不去重,同一文档占满全部上下文位置

数据来源与参考

  • Gao et al., Retrieval-Augmented Generation for Large Language Models: A Survey (arXiv:2312.10997)
  • LlamaIndex 官方文档(QueryFusionRetriever)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌