正如我们所知,标准的大型语言模型(LLMs),尽管它们在文本生成方面表现出色,但也面临一些问题。它们的知识是静态的,反映了其训练数据的内容,这意味着它们可能不了解最新事件或特定的私有信息。它们还可能"产生幻觉",生成听起来合理但实际错误或无意义的陈述。检索增强生成(RAG)提供了一种直接的方法来减轻这些问题。其主要原理是,RAG是一种技术,通过整合从外部知识来源检索到的信息,在文本生成步骤发生之前,提高大型语言模型生成回复的质量和相关性。可以将其设想为让大型语言模型在回答问题前,可以参考资料。RAG过程不单纯依赖于训练期间编码在其参数中虽广博但可能过时或不完整的信息,而是遵循两个主要阶段:检索: 当用户提交查询时,RAG系统首先利用该查询在预定义的知识库中进行查找。该知识库可以是文档集合、数据库、网页或其他与预期查询相关的文本数据源。此阶段的目的是查找与用户查询最相关的文本片段或文档。此组成部分通常称为检索器。增强生成: 第一步中检索到的相关信息随后与原始用户查询结合。此结合的文本形成了一个丰富或增强的提示。此增强提示随后输入到大型语言模型(即生成器)中。大型语言模型同时利用原始查询和所提供的背景信息来生成最终回复。digraph G { rankdir=LR; node [shape=box, style=rounded, fontname="sans-serif", color="#4263eb", fontcolor="#495057"]; edge [color="#495057"]; subgraph cluster_data { label="外部知识"; style=filled; color="#e9ecef"; node [shape=cylinder, color="#1098ad"]; KnowledgeSource [label="知识\n源"]; } subgraph cluster_rag { label="RAG系统"; style=rounded; color="#adb5bd"; node [color="#4263eb"]; Query [label="用户查询"]; Retriever [label="检索器"]; Context [label="相关\n背景信息", shape=note, color="#a9e34b", fontcolor="#495057"]; Generator [label="生成器\n(大型语言模型)"]; } Answer [label="最终回复", shape=document, color="#37b24d", fontcolor="#495057"]; Query -> Retriever; Retriever -> KnowledgeSource [lhead=cluster_data, label=" 查找", style=dashed, arrowhead=open, fontname="sans-serif"]; KnowledgeSource -> Retriever [ltail=cluster_data, label=" 获取", style=dashed, arrowhead=open, fontname="sans-serif"]; Retriever -> Context [label=" 提供", fontname="sans-serif"]; Query -> Generator [label=" 告知", fontname="sans-serif"]; Context -> Generator [label=" 增强", fontname="sans-serif"]; Generator -> Answer [label=" 生成", fontname="sans-serif"]; }检索增强生成系统的基本运作流程。用户查询启动在知识源中的查找,检索到的背景信息增强大型语言模型生成器的查询,随后由其生成最终回复。通过在提示中直接提供相关、及时且真实可信的背景信息,RAG有助于大型语言模型做到以下几点:生成更准确、更符合事实的回复: 大型语言模型可以根据所提供的文本来生成回复,减少产生幻觉的可能性。获取最新信息: 如果知识源保持更新,大型语言模型可以准确回复关于最新进展的问题。应用特定领域知识: RAG使得大型语言模型能够有效回答外部知识库中包含的专业主题问题,即便这些主题在其原始训练数据中体现不足。总的来说,RAG动态地为大型语言模型提供处理特定查询所需的有针对性的信息,使生成过程更具信息量且更可靠。后续章节将详细分解检索器和生成器组件,说明如何为知识源准备数据,并指导您构建一个基本的RAG流程。