记录了不断破坏我的RAG系统的故障模式:分块、过期索引、混合搜索等

Reddit r/ArtificialInteligence 工具

摘要

一位开发者分享了调试RAG系统时遇到的故障模式,包括分块、过期索引和混合搜索的问题,以及滑动窗口分块和上下文检索等实用修复方法。

在花了太多时间调试一个总是给出自信错误答案的RAG系统后,我终于坐下来实际绘制了它出问题的每一个地方。结果发现,我的大部分问题都出在分块上,而我之前确实低估了这一点。我之前使用固定大小分割,没有太多思考。问题是:分块太小,没有上下文幸存。检索到“退款在5天内处理”,但完全没有周围信息。LLM回答了,但丢失了周围句子中的所有细微差别。分块太大,正确的部分被检索到了,但实际答案被太多无关文本埋没,质量降低且成本上升。改用带有重叠的滑动窗口后,情况明显好转。语义分块效果最好,但每次索引运行的成本增加,所以我只对最重要的文档使用它。其他让我头疼的事情:过期索引很隐蔽,文档在更新,但我没有设置自动重新索引。旧信息不断被检索,我无法理解为什么答案在漂移。语义搜索在精确字符串上完全失效。产品代码、型号、特定ID。我不得不在语义搜索旁边添加关键词搜索,并合并结果。事后看来很明显,但在用户开始抱怨之前我没考虑到。LLM从最近的分块中产生幻觉,即使答案不在你的文档中。我不得不在系统提示中非常明确:如果答案不在检索到的上下文中,就说不知道。没有这个指令,它就会根据找到的内容随意发挥。除了分块之外,最有帮助的是上下文检索,在生成上下文前缀时,将每个分块与完整文档一起传递,而不是仅对分块进行摘要。这在较长文档上会产生有意义的差异,因为分块会携带其位置和目的。无论如何,我很好奇其他人是否遇到过同样的问题,或者找到了不同的修复方法,尤其是在过期索引问题上。我目前的解决方案感觉有点粗糙。
查看原文

相似文章

Adaptive Chunking:为RAG优化分块方法选择

Papers with Code Trending

介绍Adaptive Chunking,一个利用五项文档内在指标为RAG选择最佳分块策略的框架,将答案正确率从62-64%提升至72%,并将问题解决率提高超过30%。

CHOP: 多文档RAG的分块式上下文保留框架

arXiv cs.CL

CHOP是一个通过使用上下文感知元数据和基于大语言模型的分块相关性评估来改进多文档检索RAG系统的框架,可以减少语义冲突和幻觉现象。该方法通过智能分块和上下文保留策略实现了90.77%的Top-1命中率。