花了太长时间调试RAG,后来才意识到分块一直是问题所在

Reddit r/ArtificialInteligence 工具

摘要

一位开发者回顾调试RAG系统的经历,发现固定大小分块会破坏句子边界,向量搜索无法处理精确标识符(用BM25解决),以及过时索引导致自信的错误答案。

我跟随的每个教程可能只用一段篇幅讨论分块,然后就继续了。我以为这很简单。实际上并非如此。固定大小分块根据 token 数量切分,而不是根据一个思路实际结束的地方。所以你会检索到一个大致相关的块,但包含实际答案的句子被切到了下一个块,而这个块没有被检索到。模型只获得了一半的上下文,剩下的就靠编造。我花了数周时间以为这是嵌入的问题。最终有帮助的不是改变什么,而是实际去阅读那些失败查询返回的结果。答案几乎总是在那里,只是被切错了位置。向量搜索也无法处理精确标识符,我是通过惨痛教训才发现这一点的。有人查询特定的版本号或产品代码,语义搜索返回的是“接近”的结果,而“接近”就是错误的。将 BM25 与向量结合使用解决了这个问题,但在我之前接触过的任何入门材料中都没有提到过这一点。过时索引是另一个问题。更新了一个文档,忘记重新索引,在两天里给出了自信的错误答案,直到我弄明白发生了什么。这不是一个难题,但没有人提醒过你。
查看原文

相似文章