花了太长时间调试RAG,后来才意识到分块一直是问题所在
摘要
一位开发者回顾调试RAG系统的经历,发现固定大小分块会破坏句子边界,向量搜索无法处理精确标识符(用BM25解决),以及过时索引导致自信的错误答案。
我跟随的每个教程可能只用一段篇幅讨论分块,然后就继续了。我以为这很简单。实际上并非如此。固定大小分块根据 token 数量切分,而不是根据一个思路实际结束的地方。所以你会检索到一个大致相关的块,但包含实际答案的句子被切到了下一个块,而这个块没有被检索到。模型只获得了一半的上下文,剩下的就靠编造。我花了数周时间以为这是嵌入的问题。最终有帮助的不是改变什么,而是实际去阅读那些失败查询返回的结果。答案几乎总是在那里,只是被切错了位置。向量搜索也无法处理精确标识符,我是通过惨痛教训才发现这一点的。有人查询特定的版本号或产品代码,语义搜索返回的是“接近”的结果,而“接近”就是错误的。将 BM25 与向量结合使用解决了这个问题,但在我之前接触过的任何入门材料中都没有提到过这一点。过时索引是另一个问题。更新了一个文档,忘记重新索引,在两天里给出了自信的错误答案,直到我弄明白发生了什么。这不是一个难题,但没有人提醒过你。
相似文章
调试一个2021年废弃的API调用,花了三小时
一位开发者描述,由于AI工具Cursor产生幻觉,使用了已废弃的代码,导致调试一个API调用花费数小时,生产力下降,最终回归手动编码。
你的 RAG 管道究竟是在检索还是生成环节出错?
本文探讨了 RAG 系统中区分检索和生成失败的挑战,并探索了独立测量每个组件的实用方法。
参数与上下文:面向鲁棒检索增强生成的TRACE微调
本文提出TRACE,这是一个用于检索增强生成(RAG)的微调框架,它使用多智能体辩论轨迹和答案完整性正则化来处理知识冲突,从而提高对误导性上下文的鲁棒性并减少不完整答案。
在生产环境的AI代理中,如何防止幻觉转化为实际行动?
这篇文章探讨了AI代理中幻觉可能导致意外行动的问题,建议将推理与执行分离,并征求社区对于在生产环境中实施安全措施的见解。
@jerryjliu0: 如果这个火了,那我早了4年 https://x.com/jerryjliu0/status/1590192512639332353… 只有老玩家还记得…
研究人员开发了一种新的RAG方法,称为PageIndex,它绕过了传统的依赖项,如向量数据库和嵌入,有可能颠覆RAG行业。