更大的上下文窗口无法修复 RAG — 所以我构建了一个可以修复 RAG 的系统

增加 RAG 系统中的上下文大小并不会提高聚合任务的准确性 - 它会使错误更难以检测。在本文中,我针对跨 100,000 行的确定性全扫描引擎对基于检索的管道进行了基准测试,并展示了为什么计算查询必须完全路由远离 RAG。更大的上下文窗口不修复 RAG — 所以我构建了一个可以修复 RAG 的帖子首先出现在《走向数据科学》上。

来源:走向数据科学

TL;DR

  • 我构建了一个数据集问答系统,并信任一个不到一半正确的 RAG 答案。
  • 我在 100,000 行的 7 种查询类型和 5 种上下文大小中测量了这一点。
  • 查询完全远离 RAG。
  • 我相信了错误的号码

    上个月,我正在埋头为 EmiTechLogic 构建一个新功能。学习者现在可以上传自己混乱的 CSV 文件,并用简单的英语提出有关其数据的问题。听起来很适合 RAG,所以我全力以赴——嵌入、检索、漂亮的响应。

    前几个演示看起来棒极了。干净的表格、自信的数字、专业的格式。实际上,我在内部测试中开始信任该系统。

    然后我选择了一个数字来仔细检查。

    数据集中的真实杂货支出:$1,140,033.24。

    该模型按类别为我提供了精美的细分。它看起来合法。我把它返回的数字加起来。

    还不到一半。

    我坐在那里盯着屏幕思考“这不可能是正确的。”所以我做了任何工程师都会做的事情。我增加了上下文窗口。 4k…16k…32k…128k 代币。每次答案都变得更长、更详细,而且更肯定是错误的。

    就在那时,它终于成功了。这不是检索问题。我要求检索系统对它只看到部分内容的数据执行大量计算。该模型并没有说它不确定或缺少信息,而是生成了看起来正确的精致、结构化的答案。

    为什么 RAG 无法聚合

    RAG 管道并不能真正理解结构化数据。它所做的就是获取每个 CSV 行并将其展平为纯文本。就是这样。对于模型来说,一行看起来像这样:

    “2019-01-01grocery_pos 107.23 F NC 詹妮弗·班克斯...”

    对于像“按类别划分的总支出是多少?”这样的查询,RAG 管道会执行以下操作:

    1. Tokenise:[“总计”,“支出”,“类别”]

    2. 按关键字重叠对所有 100,000 行进行评分

    3. 以序列化纯文本形式返回前 N 行4. 要求法学硕士对该文本进行求和和分组完整代码:https://github.com/Emmimal/context-window-engine/测试套件