跳到主要内容

AI 知识库中的溯源债务:当 RAG 系统开始检索自身的输出

· 阅读需 10 分钟
Tian Pan
Software Engineer

你的 RAG 系统很可能正在把自己的输出编入索引。只是你还不知道而已。

一切往往从一件看似无害的事开始:有人把一份季度总结文档添加到了知识库。而这份总结,正是由查询该知识库的同一个 LLM 生成的。六个月后,开发者又加入了 AI 生成的版本说明,随后是自动生成的支持 FAQ,再然后是合成的入职指南。这些文档没有任何一份被标注为 AI 生成。对于检索系统而言,它们与人工撰写的一手资料看起来别无二致。于是,当你的模型检索上下文来回答问题时,其中相当一部分上下文是之前某次模型运行所输出的压缩版、甚至可能已经失真的结果——而你的准确率指标依然绿灯常亮。

这就是溯源债务:在检索语料库中,AI 生成的内容在没有来源标记的情况下不断累积,形成一个反馈循环——每一代模型的输出,都成为下一代模型的原始素材。

为什么这个问题不会出现在你的仪表板上

溯源债务的阴险之处在于它会无声无息地失效。标准的 RAG 评估衡量的是检索准确率、答案相关性以及对检索上下文的忠实度。这些指标都无法检测语料库的构成情况。

关于检索坍缩的研究让这一点变得具体:当 AI 生成内容占语料库可用文档的 50% 时,BM25 检索结果中已有超过 68% 来自 AI 生成的来源;当语料库污染率达到 67% 时,超过 80% 的检索结果都是合成内容。但衡量出来的检索准确率依然平稳。你的仪表板显示系统健康——但系统其实并不健康。

更深层的问题在于,AI 生成的内容在检索时往往具有结构上的优势:内容密集、格式规范、关键词丰富,且抽象层次恰好适合你的典型查询。它在相关性排名中往往胜过杂乱的人工撰写原始资料。因此,污染不只是在增长——它还在主动排挤一手来源,占据检索结果的前排位置。

复合误差机制

溯源债务的危险之处,不仅在于你的语料库中包含了 AI 生成的内容,更在于这些内容中的误差会在检索循环中不断叠加。

设想这样一个场景:一个模型对三份关于某技术主题的源文档进行了摘要。摘要的准确率为 90%——这是一个合理的结果。该摘要随后被加入知识库。六个月后,一次新的查询将这份摘要作为顶级来源之一检索出来。模型生成的答案对摘要的忠实度为 90%。此时,你对原始来源的保真度已变为 90% × 90% = 81%,而且你已经无法追溯误差的源头。再叠加一代,保真度降至 73%。如此循环往复。

这并非假设。模型坍缩研究在训练规模上精确地展示了这一机制:当模型在前代模型生成的文本上进行训练时,连续迭代过程中词汇、句法和语义多样性会持续下降。早期坍缩尤其难以检测,因为即便模型在少数数据和长尾分布上的保真度已经丧失,聚合性能指标也可能还在改善。

这套机制在 RAG 层面的表现就是检索时的模型坍缩:你的系统已将其有效知识收窄为一个经过过滤、压缩的反射——它只映照出此前模型运行认为值得表达的内容。

溯源债务在哪里积累

有必要具体说明哪类文档的风险最高,因为不同类型的文档对应不同的修复策略。

AI 生成的摘要是最常见的来源。当团队将执行摘要、季度汇总或主题概览添加到知识库时,这些文档没有任何标记能将它们与一手研究区分开来。它们以同等的权威性被检索出来。

自动生成的文档是第二大向量。由 LLM 生成的版本说明、API 参考摘要,以及由 AI 写作工具撰写的入职指南,都和人工编写的规范落入同一个检索池。

支持与 FAQ 内容的风险尤为突出,因为它往往包含模型生成的模糊措辞和限定语,而这些内容在下一代摘要中会被去掉。"这可能因你的配置而有所不同",到了下一代合成中,变成了"具体工作方式如下"。

合成分析报告——竞品研究、趋势总结、借助 LLM 撰写的技术评估——还带来一个额外风险:原始分析师的不确定性无法传递。模型会针对不确定的结论生成充满自信的措辞。

防止反馈循环的检索策略

解决方案不是禁止 AI 生成内容进入知识库,而是将来源类别视为每份文档的一等公民属性,并编写能够考量来源类别的检索策略。

在摄入时打上来源类别标签。 每份文档都应携带一个 source_class 元数据字段:human_primary(人工一手来源)、human_summary(人工摘要)、ai_generated(AI 生成)、ai_assisted(AI 辅助)、third_party(第三方)。这个字段在摄入时就应打上——而非事后推断。一旦内容在没有溯源元数据的情况下进入语料库,事后恢复这些信息既昂贵又不完整。在写入时打标签的成本几乎为零。

生成时的溯源注释。 当你的系统将内容写回知识库或文档存储时,应包含一个溯源块:生成时间戳、模型版本、生成时检索的源文档 ID,以及标记其为合成内容的标志位。这相当于 RAG 版的 git blame:你可以在查询时重建溯源链条。

按来源类别加权的检索策略。 你可以在重排序阶段实现这一点,而无需改变检索架构。在初次检索之后,当同一主题存在人工撰写来源时,对 AI 生成文档应用来源类别惩罚项。不要完全排除合成内容——对于某些查询,它可能确实是最佳可用答案。但要打破格式良好的合成文档所自动获得的优先级。

用于近似重复检测的内容指纹。 AI 生成的文档往往彼此近似重复,因为它们都在合成相同的源材料。在摄入时进行相似度检查,可以捕获这种情况:你有十份对同三篇论文的 AI 生成摘要——保留一份、丢弃其余,既能改善检索多样性,又不损失信息。

验证瓶颈

这里存在一个真实的张力:团队生成 AI 内容并将其添加到知识库,正是因为人工撰写的一手来源无法扩展。你的查询量超出了高质量文档的供应能力,合成内容填补了这个缺口。

模型坍缩研究指向了一种能化解这一张力的方法:将合成数据原始真实数据并列积累,而非让合成内容逐渐取代原始数据。那些将人工撰写的一手来源作为稳定骨干、并将 AI 生成内容作为补充而非权威来源添加的团队,避免了最严重的反馈循环。

在实践中,这意味着一种双层语料库结构。第一层是权威层:人工撰写的文档、官方规范、一手来源。这些内容单独建立索引,赋予高权威标签,绝不为了给合成内容让路而清除。第二层是增强层:摘要、FAQ、生成的分析报告。这些内容以明确的来源类别标签建立索引,当第一层结果可用时,检索权重更低。

这种结构让你既能获得 AI 生成内容在密度和覆盖率上的优势,又不会产生溯源债务带来的反馈循环。

检测现有污染

如果你从未对知识库进行过溯源债务审计,那么起点应该是语料库构成审计,而非准确率评估。

从检索语料库中抽样 500 份文档。对于每一份,尝试回答:这份文档衍生自哪份人工撰写的一手来源?如果有超过 30% 的文档你无法回答这个问题,那你就面临着严重的溯源债务。

下一个信号是检索多样性。针对你最常见的 50 种查询模式,查看检索出的前 10 个片段的来源分布。如果超过 60% 的检索片段来自过去 12 个月内添加的文档——而你的主要来源材料更为古老——这就证明合成内容已在检索排名中取代了一手来源。

还有一个更难发现的信号:检索上下文中的语言同质性。AI 生成内容在嵌入空间中会形成聚类,因为它使用一致的词汇和句子结构。如果你检索出的片段彼此间语义相似度异常高,那么你可能正在检索同一种合成声音的变体,而非多样化的一手视角。

随时间推移越来越难修复的部分

溯源债务有一个特性,使其有别于大多数技术债务:随着语料库的增长,修复难度也在增加——因为那些合成文档已经成为了更多合成文档的基础。

如果你发现知识库中一份被广泛引用的摘要文档是 AI 生成的,且包含错误,你不能简单地删除它。你需要审计每一份以该摘要为上下文生成的文档,以及从那些文档生成的每一份文档。这个依赖图几乎从未被追踪,这意味着现实可行的响应方式,是从一手来源重建受影响的语料库部分。

这就是将溯源追踪视为基础设施而非元数据清理工作的论据。在摄入时为每份文档打上来源类别和生成溯源标记的成本微乎其微。事后重建这些信息的代价——或者更糟,发现你根本无法重建——则完全不同。

先构建溯源层。让 AI 生成内容从进入系统的第一刻起就被清晰标记。这样,你的检索策略才能利用这个标签做出明智的决策,而不是把每一份文档都当成一手来源来对待,仅仅因为它们最终落入了同一个索引。

References:Let's stay in touch and Follow me for more thoughts and updates