首页/AI/RAG 与向量库速查/上下文去重与修剪

上下文去重与修剪

进上下文前做两件事:跨片段去重(同一内容多分块命中)与冗余修剪(保留与问题最相关的句/段);修剪后的片段要保留来源锚点,引用才能回溯。

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

上下文去重与修剪是什么

检索回来的片段不能直接全部塞进上下文,进模型之前要做两件事:跨片段去重,同一段内容常被切成多块同时命中;冗余修剪,只保留与问题最相关的句子或段落。修剪后的片段必须保留来源锚点,否则引用无法回溯。这通常是提升答案质量最划算的一步——上下文更干净,模型的注意力也更集中,成本还同时下降。

基本信息

两件事跨片段去重与冗余修剪
去重手段相似度阈值(如 Jaccard)或内容哈希
修剪手段按句子与问题的相关性筛选
硬性要求保留来源锚点与原文范围
前置治理索引中的多版本片段先清理
观测指标进上下文前后的片段数、去重命中率

典型使用场景

  • 同一文档的多个分块命中同一段内容
  • 增量索引未替换旧版本,新旧片段同时被召回
  • 上下文预算紧张时优先保留最相关的句子
  • 精排之后仍有大量重复,需在进模型前再洗一遍
  • 多路召回融合后出现高度相似的片段

简单有效的去重

简单有效的去重
def dedupe(chunks, threshold=0.9):
    kept = []
    for c in chunks:
        if any(jaccard(c.text, k.text) > threshold for k in kept):
            continue          # 与已保留片段高度相似,丢弃
        kept.append(c)
    return kept
# 去重只做删减,不改写内容:改写会让引用与原文对不上

问题与处置

问题表现处置
重复片段同一内容被多次命中阈值去重或按来源合并
旧版本混入新旧版本片段同时被召回先治理索引,再做去重
长片段冗余片段大部分内容与问题无关句子级修剪,保留锚点
锚点丢失引用出来的段落不完整修剪后同步更新锚点范围
增量索引没做版本替换时,同一文档的多版本片段会同时命中;去重前先把索引治理干净,否则只是掩盖问题。
去重与修剪都只能删减、不能改写:一旦改写了片段内容,引用就对不上原文,溯源自此失效。

易错点

  • 去重阈值定得过高:近似重复的旧版本段落仍会混入上下文
  • 修剪只保留句子却不更新锚点范围:引用出来的段落不完整,用户核对不上
  • 阈值调得过低:互为补充的片段被误删,答案反而缺信息
  • 在去重阶段顺手改写片段内容:引用与原文不一致,溯源彻底失效

数据来源与参考

  • LangChain 官方文档(文档去重实践)
  • LlamaIndex 官方文档(节点后处理)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌