RAG常见七大坑_软件工程

论文题目:《Seven Failure Points When Engineering a Retrieval Augmented Generation System》 

论文地址:Seven Failure Points When Engineering a Retrieval Augmented Generation System (arxiv.org)

RAG常见七大坑_信息检索_02

https://arxiv.org/pdf/2401.05856.pdf

这篇论文主要探讨了构建检索增强生成系统(Retrieval Augmented Generation, RAG)时可能遇到的七个失败点。论文通过三个案例研究来展示这些失败点,并分享了作者团队的经验和教训。

摘要

软件工程师越来越多地使用一种被称为检索增强生成(Retrieval Augmented Generation,RAG)的策略向应用程序添加语义搜索功能。RAG系统涉及查找在语义上与查询匹配的文档,然后将这些文档传递给大型语言模型(LLM),例如ChatGPT,以提取正确的答案。

RAG系统的目标是:a)减少LLM产生虚构响应的问题,b)将来源/参考链接到生成的响应,c)消除对文档进行元数据标注的需求。然而,RAG系统存在信息检索系统固有的局限性,并依赖于LLM。在本文中,我们通过三个来自不同领域的案例研究,即研究、教育和生物医学,提供了关于RAG系统失败点的经验报告。我们分享了所学到的教训,并提出了设计RAG系统时需要考虑的7个失败点。

我们的工作得出的两个主要结论是:1)只有在操作过程中才能验证RAG系统的可行性,2)RAG系统的健壮性是在运行过程中发展而非在开始时设计的。最后,我们总结了关于RAG系统的软件工程社区可能的研究方向的列表。

1 引言

大型语言模型(LLM)的新进展,包括ChatGPT,为软件工程师提供了构建新的人机交互解决方案、完成复杂任务、总结文件、在给定的文档中回答问题以及生成新内容的新能力。然而,LLMs在涉及到最新知识或目前在公司知识库中捕获的领域特定知识方面存在局限性。解决这个问题的两个选项是:a)对LLMs进行微调(使用领域特定工件继续训练LLM),这需要管理或提供已经过微调的LLM;或b)使用依赖LLMs的检索增强生成(RAG)系统,通过使用现有(可扩展的)知识工件生成答案。这两个选项在与数据隐私/安全性、可扩展性、成本、所需技能等相关的方面都有利弊。在本文中,我们关注RAG选项。

检索增强生成(RAG)系统为解决这一挑战提供了一个引人注目的解决方案。通过将检索机制与LLMs的生成能力结合起来,RAG系统能够合成具有上下文相关性、准确性和最新信息的信息。检索增强生成(RAG)系统结合了信息检索的能力和LLMs的生成能力。检索组件专注于从数据存储中检索用户查询的相关信息。生成组件专注于使用检索到的信息作为上下文生成用户查询的答案。RAG系统是一个重要的用例,因为现在可以对所有非结构化信息进行索引,并可供查询,从而减少了开发时间,无需创建知识图和进行有限的数据整理和清理。

构建RAG系统的软件工程师需要预处理以不同格式捕获的领域知识,将处理后的信息存储在适当的数据存储(向量数据库)中,实现或集成正确的查询-工件匹配策略,对匹配的工件进行排名,并调用LLMs API传递用户查询和上下文文档。不断涌现用于构建RAG系统的新进展[8, 12],但它们如何与特定应用上下文相关联和执行还有待发现。在这项工作中,我们提供了从三个案例研究中汲取的教训和7个失败点。本文的目的是为从业者提供1)一个参考和2)为RAG系统提供研究路线图。据我们所知,我们首次提供了关于创建健壮的RAG系统的挑战的经验性洞察。随着LLMs的不断进步,软件工程社区有责任提供如何实现具有LLMs的健壮系统的知识。这项工作是构建健壮RAG系统的重要一步。

本工作的研究问题包括: • 在工程化RAG系统时出现了哪些失败点?(第5节)我们进行了一次实证实验,使用BioASQ数据集报告潜在的失败点。实验涉及1.5万份文件和1,000个问题和答案对。我们索引了所有文件,然后运行了查询并使用GPT-4存储了生成的响应。然后,使用OpenAI evals验证了所有问题和答案对。通过手动检查(所有差异、所有标记为不正确的和一些正确标签的样本)来分析识别模式。

• 工程化RAG系统时的关键考虑因素是什么?(第6节)我们通过涉及实施RAG系统的三个案例研究的经验教训来回答这个问题。这呈现了所面临的挑战和获得的见解。由此工作产生的贡献包括:

• 在RAG系统中出现的失败点(FP)目录。
• 来自实施RAG系统的3个案例研究的经验报告。其中两个目前在迪肯大学运行。
• 基于3个案例研究所学到的经验的RAG系统的研究方向。

RAG 简介

Meta AI 的研究人员引入了一种叫做检索增强生成(Retrieval Augmented Generation,RAG)的方法来完成这类知识密集型的任务。RAG 把一个信息检索组件和文本生成模型结合在一起。RAG 可以微调,其内部知识的修改方式很高效,不需要对整个模型进行重新训练。RAG 会接受输入并检索出一组相关/支撑的文档,并给出文档的来源(例如维基百科)。这些文档作为上下文和输入的原始提示词组合,送给文本生成器得到最终的输出。这样 RAG 更加适应事实会随时间变化的情况。这非常有用,因为 LLM 的参数化知识是静态的。RAG 让语言模型不用重新训练就能够获取最新的信息,基于检索生成产生可靠的输出。

RAG常见七大坑_软件工程_03

RAG 系统的主要目的是:

  • a) 减少LLM的幻觉回答问题
  • b) 将来源/参考关联到大模型生成的回答
  • c) 消除使用元数据注释文档的需要。
  • RAG常见七大坑_软件工程_04

RAG坑点

然而,RAG 系统受到信息检索系统固有的限制以及对LLM能力的依赖,RAG 系统中存在一些可能的“坑点”。

  • 内容缺失——这是生产案例中最大的问题之一。用户假设特定问题的答案存在于知识库中。事实并非如此,系统也没有回应“我不知道”。相反,它提供了一个看似合理的错误答案,但实际是“毫无意义”。
  • 漏掉排名靠前的文档 - 检索器是小型搜索系统,要获得正确的结果并不简单。简单的嵌入查找很少能达到目的。有时,检索器返回的前 K 个文档中不存在正确答案,从而导致失败。
  • 不符合上下文 - 有时,RAG系统可能会检索到太多文档,并且还是强制根据上下文分割并输入文档。这意味着对问题的回答不在上下文中。有时,这会导致模型产生幻觉,除非系统提示明确指示模型不要返回不在上下文中的结果。
  • 未提取到有用信息 - 当LLM无法从上下文中提取答案时。当你塞满上下文并且LLM会感到困惑时,这往往会成为一个问题。不同大模型对背景信息的理解能力层次不齐。
  • 格式错误——虽然论文将这视为一种失败模式,但这种类型的功能并不是大型语言模型(LLM)的开箱即用功能。这种需要特定格式的输出,需要进行大量的系统提示和指令微调,以生成特定格式的信息。例如,使用Abacus AI,可以创建一个代理程序来以特定格式输出代码,并生成带有表格、段落、粗体文本等的Word文档。这种一般可以通过MarkDown输出来渲染!
  • 不合适的回答 -响应中返回答案,但不够具体或过于具体,无法满足用户的需求。当 RAG 系统设计者对给定问题(例如教师对学生)有期望的结果时,就会发生这种情况。在这种情况下,应该提供具体的教育内容和答案,而不仅仅是答案。当用户不确定如何提出问题并且过于笼统时,也会出现不正确的特异性。

总的来说,这意味着 RAG 系统在投入生产之前必须经过彻底的稳健性测试,并且很容易因为发布未经测试的代理或聊天机器人而搬起石头砸自己的脚。

结论

RAG系统是一种利用LLMs的新型信息检索系统。软件工程师越来越多地与RAG系统互动,无论是a)通过实施语义搜索,还是b)通过新的依赖代码的任务。本文从三个案例研究中汲取的经验,包括涉及1.5万份文件和1,000个问题的实证调查。我们的发现通过呈现在实施RAG系统时所面临的挑战,为从业者提供了一份指南。我们还提出了与RAG系统相关的未来研究方向,包括1)分块和嵌入,2)RAG与微调的比较,以及3)测试和监控。大型语言模型将继续获得工程师和研究人员感兴趣的新能力。本文从软件工程的角度首次对RAG系统进行了调查。