GEO

检索增强生成(RAG)如何让AI大模型回答最新公司财报?

2026/4/16
检索增强生成(RAG)如何让AI大模型回答最新公司财报?

AI Summary (BLUF)

Retrieval-Augmented Generation (RAG) enhances LLMs by integrating external knowledge retrieval at query time, enabling accurate, context-aware responses for specific, current, or proprietary information. This guide explores RAG's evolution, core pipeline, advanced techniques, and practical implementation strategies.

原文翻译: 检索增强生成(RAG)通过在查询时集成外部知识检索来增强大型语言模型,使其能够针对特定、最新或专有信息生成准确、上下文感知的响应。本指南探讨了RAG的演进历程、核心流程、高级技术及实际实施策略。

大型语言模型是令人印象深刻的记忆者。在训练过程中,它们将海量文本压缩到数十亿参数中,以某种方式编码模式、事实和关系,使其能够生成极其连贯的回应。但长期记忆有其局限性。如果你向模型询问你公司的第三季度财报、上个月变更的政策,或者仅存在于你内部维基中的文档,你很可能会得到一个听起来自信但实为胡言乱语的答案,或者从更聪明的模型那里得到一句“我的训练数据截止于2025年6月”。模型只能基于其在训练期间吸收的内容工作,而你的特定上下文从未包含在那个图景中。

大型语言模型是令人印象深刻的记忆者。在训练过程中,它们将海量文本压缩到数十亿参数中,以某种方式编码模式、事实和关系,使其能够生成极其连贯的回应。但长期记忆有其局限性。如果你向模型询问你公司的第三季度财报、上个月变更的政策,或者仅存在于你内部维基中的文档,你很可能会得到一个听起来自信但实为胡言乱语的答案,或者从更聪明的模型那里得到一句“我的训练数据截止于2025年6月”。模型只能基于其在训练期间吸收的内容工作,而你的特定上下文从未包含在那个图景中。

A graphic displaying a purple and orange gradient sphere highlighting the concept of retrieval augmented generation

检索增强生成扩展了LLMs获取知识的方式。如果模型的训练是其长期记忆,那么RAG就是其短期记忆。RAG系统不完全依赖模型在训练期间记忆的内容,而是在查询时从外部源检索相关信息,并将该上下文与用户的问题一起输入到提示中。可以将其视为闭卷考试和开卷考试的区别:模型的基础能力保持不变,但现在它可以在回答前查阅参考资料。

检索增强生成扩展了LLMs获取知识的方式。如果模型的训练是其长期记忆,那么RAG就是其短期记忆。RAG系统不完全依赖模型在训练期间记忆的内容,而是在查询时从外部源检索相关信息,并将该上下文与用户的问题一起输入到提示中。可以将其视为闭卷考试和开卷考试的区别:模型的基础能力保持不变,但现在它可以在回答前查阅参考资料。

这种架构转变使得RAG成为构建需要基于特定、最新或专有信息的LLM应用程序的默认方法。这也解释了为什么RAG工程已经发展成为一个独立的学科,围绕着如何准备数据、如何搜索数据以及如何验证整个管道是否真正有效,有着独特的决策考量。

这种架构转变使得RAG成为构建需要基于特定、最新或专有信息的LLM应用程序的默认方法。这也解释了为什么RAG工程已经发展成为一个独立的学科,围绕着如何准备数据、如何搜索数据以及如何验证整个管道是否真正有效,有着独特的决策考量。

本指南将涵盖这些层面。您将了解RAG如何从其研究起源演变而来,如何为有效检索构建知识库,哪些搜索策略最适合不同的用例,以及如何衡量您的系统是否提供了准确、有根据的答案。

本指南将涵盖这些层面。您将了解RAG如何从其研究起源演变而来,如何为有效检索构建知识库,哪些搜索策略最适合不同的用例,以及如何衡量您的系统是否提供了准确、有根据的答案。

RAG的起源:从闭卷模型到检索增强生成

“检索增强生成”这一术语由Meta AI(当时是Facebook AI Research)的Patrick Lewis等人在2020年发表于NeurIPS的一篇论文中提出。该论文证明,与纯粹基于原始模型参数的输出相比,RAG模型能生成更具体、更多样化、更真实的语言。RAG技术在三个开放域问答基准测试中取得了最先进的结果。这项研究此后被引用数百次,并催生了一个基于RAG的技术、工具和生产系统快速增长的生态系统。

“检索增强生成”这一术语由Meta AI(当时是Facebook AI Research)的Patrick Lewis等人在2020年发表于NeurIPS的一篇论文中提出。该论文证明,与纯粹基于原始模型参数的输出相比,RAG模型能生成更具体、更多样化、更真实的语言。RAG技术在三个开放域问答基准测试中取得了最先进的结果。这项研究此后被引用数百次,并催生了一个基于RAG的技术、工具和生产系统快速增长的生态系统。

该研究的核心见解是,大型语言模型是强大的生成器,但它们作为“闭卷”系统运行,仅依赖于编码在其权重中的知识。对于需要特定、通常是利基信息的密集知识型任务,这种方法存在局限性。

该研究的核心见解是,大型语言模型是强大的生成器,但它们作为“闭卷”系统运行,仅依赖于编码在其权重中的知识。对于需要特定、通常是利基信息的密集知识型任务,这种方法存在局限性。

Lewis等人提出的框架结合了两种类型的记忆。参数记忆是存储在预训练序列到序列模型(在他们案例中是BART)中的知识。非参数记忆是一个外部知识库(例如,使用密集段落检索索引为密集向量的维基百科)。在推理时,系统从非参数记忆中检索相关文档,并将输出生成器同时基于输入查询和检索到的上下文。

Lewis等人提出的框架结合了两种类型的记忆。参数记忆是存储在预训练序列到序列模型(在他们案例中是BART)中的知识。非参数记忆是一个外部知识库(例如,使用密集段落检索索引为密集向量的维基百科)。在推理时,系统从非参数记忆中检索相关文档,并将输出生成器同时基于输入查询和检索到的上下文。

原始论文中的一个技术区别是RAG-SequenceRAG-Token模型之间的差异。在RAG-Sequence方法中,模型检索一组文档,并使用同一文档来调节整个输出序列。这保持了文档级别的一致性,适用于需要单一连贯叙事来源的任务,如摘要。在RAG-Token方法中,模型可以为生成的每个单独标记引用不同的检索文档。这使得能够跨多个来源进行综合,并且在需要桥接来自不同文档的事实的复杂问答任务上往往表现更好。

原始论文中的一个技术区别是RAG-SequenceRAG-Token模型之间的差异。在RAG-Sequence方法中,模型检索一组文档,并使用同一文档来调节整个输出序列。这保持了文档级别的一致性,适用于需要单一连贯叙事来源的任务,如摘要。在RAG-Token方法中,模型可以为生成的每个单独标记引用不同的检索文档。这使得能够跨多个来源进行综合,并且在需要桥接来自不同文档的事实的复杂问答任务上往往表现更好。

让我们从基础研究转向RAG的内部工作原理。

让我们从基础研究转向RAG的内部工作原理。

核心RAG管道:索引、检索、生成

每个RAG系统都遵循一个三步流程。在深入研究构建在其之上的更高级架构之前,理解这些步骤至关重要。

每个RAG系统都遵循一个三步流程。在深入研究构建在其之上的更高级架构之前,理解这些步骤至关重要。

索引是离线的准备阶段。您获取知识库(文档、维基、支持文章、产品手册等,根据您的应用需求),并将其转换为可搜索的格式。这通常意味着将文档分割成称为“块”的较小片段,使用嵌入模型将这些块转换为向量嵌入,并将它们存储在向量数据库中。索引的质量直接决定了系统性能的上限。

索引是离线的准备阶段。您获取知识库(文档、维基、支持文章、产品手册等,根据您的应用需求),并将其转换为可搜索的格式。这通常意味着将文档分割成称为“块”的较小片段,使用嵌入模型将这些块转换为向量嵌入,并将它们存储在向量数据库中。索引的质量直接决定了系统性能的上限。

检索发生在查询时。当用户发送一个问题时,系统使用相同的嵌入模型将该查询转换为向量,并对索引执行相似性搜索以找到最相关的块。前K个结果(通常是3到10个块)作为生成的上下文返回。

检索发生在查询时。当用户发送一个问题时,系统使用相同的嵌入模型将该查询转换为向量,并对索引执行相似性搜索以找到最相关的块。前K个结果(通常是3到10个块)作为生成的上下文返回。

生成是最后一步。检索到的上下文与用户的原始查询结合成一个提示,然后LLM基于该上下文生成响应。模型现在可以引用具体事实、引用相关段落,并生成反映您知识库当前状态的答案,而不是它在训练期间记忆的任何内容。

生成是最后一步。检索到的上下文与用户的原始查询结合成一个提示,然后LLM基于该上下文生成响应。模型现在可以引用具体事实、引用相关段落,并生成反映您知识库当前状态的答案,而不是它在训练期间记忆的任何内容。

这个基本循环有时被称为“朴素RAG”,对于简单的用例来说,它的效果出奇地好。但随着复杂性的增加,它会以可预测的方式出现问题。

这个基本循环有时被称为“朴素RAG”,对于简单的用例来说,它的效果出奇地好。但随着复杂性的增加,它会以可预测的方式出现问题。

朴素RAG的不足(以及后续发展)

原始的“检索-然后-生成”管道有两个主要的失败模式。第一个是检索噪声,即不相关的块进入了上下文窗口,从而降低了模型的专注度。如果你询问你公司的休假政策,而检索器返回了来自三家不同公司的休假政策块,模型可能会混淆它们或选择错误的一个。第二个是上下文碎片化,即关键信息在索引过程中被分割到两个独立的块中。答案存在于你的知识库中,但没有一个单独的块包含所有必要的上下文。

原始的“检索-然后-生成”管道有两个主要的失败模式。第一个是检索噪声,即不相关的块进入了上下文窗口,从而降低了模型的专注度。如果你询问你公司的休假政策,而检索器返回了来自三家不同公司的休假政策块,模型可能会混淆它们或选择错误的一个。第二个是上下文碎片化,即关键信息在索引过程中被分割到两个独立的块中。答案存在于你的知识库中,但没有一个单独的块包含所有必要的上下文。

这些局限性推动了RAG经历了几个日益复杂的阶段的演变。

这些局限性推动了RAG经历了几个日益复杂的阶段的演变。

高级RAG:检索前与检索后优化

高级RAG通过在检索前后添加处理步骤来解决朴素方法的弱点。检索前优化侧重于提高查询质量。查询重写、扩展和分解等技术有助于将用户的真实意图与信息在索引中的存储方式对齐。如果用户问“为什么我的应用很慢?”,系统可能会将其扩展为多个针对特定性能瓶颈的子查询。

高级RAG通过在检索前后添加处理步骤来解决朴素方法的弱点。检索前优化侧重于提高查询质量。查询重写、扩展和分解等技术有助于将用户的真实意图与信息在索引中的存储方式对齐。如果用户问“为什么我的应用很慢?”,系统可能会将其扩展为多个针对特定性能瓶颈的子查询。

检索后优化侧重于优化结果。重排序模型可以重新评分检索到的前N个块,将最相关的块推到顶部。上下文压缩可以去除其他相关块中的无关句子,减少生成提示中的噪声。这些技术会增加延迟,但准确性的提升通常足以证明其合理性。

检索后优化侧重于优化结果。重排序模型可以重新评分检索到的前N个块,将最相关的块推到顶部。上下文压缩可以去除其他相关块中的无关句子,减少生成提示中的噪声。这些技术会增加延迟,但准确性的提升通常足以证明其合理性。

模块化RAG:可组合、可交换的组件

模块化RAG通过将管道的每个组件视为独立的、可替换的模块,进一步优化。您的搜索模块可能结合向量搜索和关键词匹配。您的记忆模块可能维护对话历史。您的路由模块可能将不同类型的查询定向到不同的专用索引。每个模块都可以独立开发、测试和改进。

模块化RAG通过将管道的每个组件视为独立的、可替换的模块,进一步优化。您的搜索模块可能结合向量搜索和关键词匹配。您的记忆模块可能维护对话历史。您的路由模块可能将不同类型的查询定向到不同的专用索引。每个模块都可以独立开发、测试和改进。

这种可组合性使得现代RAG系统在生产中变得实用。一个医疗保健应用程序可能会将临床问题路由到医学知识库,同时将计费问题发送到完全不同的索引。一个法律研究工具可能会结合全文搜索来查找法规引用,并结合语义搜索来处理概念性查询。

这种可组合性使得现代RAG系统在生产中变得实用。一个医疗保健应用程序可能会将临床问题路由到医学知识库,同时将计费问题发送到完全不同的索引。一个法律研究工具可能会结合全文搜索来查找法规引用,并结合语义搜索来处理概念性查询。

智能体RAG:作为推理的检索

最新的演变是智能体RAG,其中检索过程由基于LLM的智能体驱动,该智能体就如何回答查询做出战略决策。智能体不是自动为每个问题检索上下文,而是首先决定检索是否必要。有些问题可以仅从模型的参数知识中得到回答。

最新的演变是智能体RAG,其中检索过程由基于LLM的智能体驱动,该智能体就如何回答查询做出战略决策。智能体不是自动为每个问题检索上下文,而是首先决定检索是否必要。有些问题可以仅从模型的参数知识中得到回答。

当需要检索时,智能体决定查询哪个数据源,如何将复杂问题分解为可管理的子查询,以及检索结果是否足够,或者是否需要额外的检索轮次。这种迭代的“检索-评估-优化”循环使智能体RAG系统能够处理需要跨多个文档或知识库综合信息的“多跳”查询。

当需要检索时,智能体决定查询哪个数据源,如何将复杂问题分解为可管理的子查询,以及检索结果是否足够,或者是否需要额外的检索轮次。这种迭代的“检索-评估-优化”循环使智能体RAG系统能够处理需要跨多个文档或知识库综合信息的“多跳”查询。

上下文工程:为RAG准备数据的科学

如果底层索引构建不当,世界上最复杂的检索算法也无济于事。在索引之前准备、分割和丰富文档的方式对检索质量有着巨大的影响。这门学科通常被称为上下文工程,其主要杠杆是您的分块策略。

如果底层索引构建不当,世界上最复杂的检索算法也无济于事。在索引之前准备、分割和丰富文档的方式对检索质量有着巨大的影响。这门学科通常被称为上下文工程,其主要杠杆是您的分块策略。

选择RAG分块方法

  • 固定大小分块:按照硬性的字符或标记限制(例如,每512个标记)分割文档。它在计算上很简单,并产生统一大小的块,这简化了向量存储。其代价是它没有文档结构意识。它会轻易地切断一个表格、分割一个句子,或者将一个定义与其定义的术语分开。

    Fixed-size chunking splits documents at a hard character or token limit (e.g., every 512 tokens). It’s computationally trivial and produces uniform chunk sizes, which simplifies vector storage. The trade-off is that it has no awareness of document structure. It will happily sever a table, split a sentence, or separate a definition from the term it defines.

  • 递归分块:使用一个优先级分隔符列表(段落分隔符,然后是换行符,然后是句子边界)来分割文本,同时尊重自然的文档结构。这是大多数RAG框架中的默认方法,原因很充分:它在广泛的文档类型上都能很好地工作,无需任何文档特定的配置。

    Recursive chunking uses a prioritized list of separators (paragraph breaks, then line breaks, then sentence boundaries) to split text while respecting natural document structure. This is the default in most RAG frameworks for good reason: it works well across a wide range of document types without requiring any document-specific configuration.

  • 语义分块:使用嵌入模型来检测文档内的主题转换。当连续段落之间的语义相似度低于阈值时,分块器会引入一个分割。这会产生内部连贯性高的块,但它需要每个文档进行多次嵌入传递,并且在规模上计算成本可能很高。

    Semantic chunking uses embedding models to detect topic shifts within a document. When the semantic similarity between consecutive passages drops below a threshold, the chunker introduces a split. This produces chunks with high internal coherence, but it requires multiple embedding passes per document and can be computationally expensive at scale.

  • 基于文档的分块:尊重源材料的原生结构。它在标题处分割Markdown文件,在页面边界处分割PDF,在函数定义处分割代码文件。这种方法保留了结构上下文,但完全取决于源文档的格式良好程度。

    Document-based chunking respects the native structure of your source material. It splits Markdown files at headers, PDFs at page boundaries, and code files at function definitions. This approach preserves structural context but depends entirely on how well-formatted your source documents are.

上下文丰富化:解决“孤儿块”问题

即使有良好的分块,单个块在孤立状态下也常常缺乏所需的上下文。考虑一个内容如下的块:“该政策于2024年更新,以纳入远程工作者。”如果不了解这指的是哪项政策,检索器就没有可靠的方法将其与正确的查询匹配,生成器也无法产生准确的答案。

即使有良好的分块,单个块在孤立状态下也常常缺乏所需的上下文。考虑一个内容如下的块:“该政策于2024年更新,以纳入远程工作者。”如果不了解这指的是哪项政策,检索器就没有可靠的方法将其与正确的查询匹配,生成器也无法产生准确的答案。

上下文丰富化通过在索引前将全局上下文注入每个块来解决这个问题。一个轻量级的LLM(甚至是一个基于规则的系统)分析每个块,并在前面添加元数据,如文档标题、章节层次结构、关键实体以及整个文档的简要摘要。经过丰富化后,该块可能变为:“关于Acme Corp的HR政策3.2(福利资格):该政策于2024年更新,以纳入远程工作者。”

上下文丰富化通过在索引前将全局上下文注入每个块来解决这个问题。一个轻量级的LLM(甚至是一个基于规则的系统)分析每个块,并在前面添加元数据,如文档标题、章节层次结构、关键实体以及整个文档的简要摘要。经过丰富化后,该块可能变为:“关于Acme Corp的HR政策3.2(福利资格):该政策于2024年更新,以纳入远程工作者。”

这种技术确保即使在没有周围文档上下文的情况下检索到块,它们仍然有用。

常见问题(FAQ)

RAG技术如何解决大语言模型的知识局限性问题?

RAG通过查询时从外部知识库检索最新或专有信息,结合用户问题生成提示,使模型能基于特定上下文生成准确回答,弥补了模型训练数据之外的空白。

RAG的核心流程包含哪些关键步骤?

核心流程分为三步:索引阶段将文档分块并向量化存储;检索阶段根据查询匹配最相关块;生成阶段结合检索内容与问题提示LLM生成最终答案。

高级RAG相比朴素RAG有哪些改进方向?

高级RAG通过检索前优化(如数据预处理)和检索后优化(如结果重排序)提升效果,并发展出模块化RAG(可替换组件)和智能体RAG(推理式检索)等架构。

← 返回文章列表
分享到:微博

版权与免责声明:本文仅用于信息分享与交流,不构成任何形式的法律、投资、医疗或其他专业建议,也不构成对任何结果的承诺或保证。

文中提及的商标、品牌、Logo、产品名称及相关图片/素材,其权利归各自合法权利人所有。本站内容可能基于公开资料整理,亦可能使用 AI 辅助生成或润色;我们尽力确保准确与合规,但不保证完整性、时效性与适用性,请读者自行甄别并以官方信息为准。

若本文内容或素材涉嫌侵权、隐私不当或存在错误,请相关权利人/当事人联系本站,我们将及时核实并采取删除、修正或下架等处理措施。 也请勿在评论或联系信息中提交身份证号、手机号、住址等个人敏感信息。