加载中

检索增强生成简介

第 32 课5 分钟

检索增强生成(Retrieval Augmented Generation,RAG)是一种技术,可帮助您处理过大而无法放入单个提示中的大型文档。RAG不是将所有内容塞进一个庞大的提示中,而是将文档分解成多个块,并在回答问题时只包含最相关的部分。

大型文档的问题

假设您有一份800页的财务文档,想向Claude询问有关它的具体问题,比如"这家公司有哪些风险因素?"您需要以某种方式将文档中的相关信息传递给Claude,但您在提示中可以包含的文本量是有限的。

方案一:在提示中包含所有内容

第一种方法很直接——从文档中提取所有文本,并将其与用户的问题一起塞入您的提示中。您的提示可能如下所示:

Answer the user's question about the financial document.

<user_question>
{user_question}
</user_question>

<financial_document>
{financial_document}
</financial_document>

这种方法存在严重的局限性:

  • 提示长度存在硬性限制——您的文档可能太长
  • 在非常长的提示下,Claude的效果会变差
  • 更大的提示处理成本更高
  • 更大的提示处理时间更长

方案二:将文档分解成块

RAG采用了更智能的方法。首先,您在预处理步骤中将文档分解成较小的块。然后,当用户提出问题时,您找到与其问题最相关的块,并只将这些块包含在提示中。

其工作原理如下:如果有人问"这家公司面临哪些风险?",您会在您的块中进行搜索,找到"风险因素"部分,并仅将该相关块包含在您的提示中。

RAG的优势

  • Claude可以只专注于最相关的内容
  • 可扩展到非常大的文档
  • 适用于多个文档
  • 更小的提示成本更低、运行更快

RAG的挑战

  • 需要一个预处理步骤来对文档进行分块
  • 需要一种搜索机制来找到"相关"的块
  • 包含的块可能不包含Claude所需的全部上下文
  • 分块文本的方式有很多种——哪种方法最好?

例如,您可以将文档拆分成大小相等的部分,也可以根据文档结构(如标题和章节)创建块。每种方法都有需要您针对特定用例进行评估的权衡。

何时使用RAG

RAG涉及许多技术决策,并且比简单地将所有内容包含在提示中需要更多的工作。您需要分析对于您的特定应用而言,这些好处是否超过了复杂性。当处理非常大的文档、多个文档,或者当您需要优化成本和性能时,RAG尤其有价值。

关键的洞见是,RAG以简单性换取可扩展性和效率。尽管它需要更多的前期工作才能正确实现,但它使您能够处理那些用简单的提示填充方式根本无法处理的文档集合。