检索增强生成(RAG, Retrieval-Augmented Generation)
检索增强生成(RAG, Retrieval-Augmented Generation)
RAG(Retrieval Augmented Generation)是一种人工智能技术框架,用于从外部知识库检索事实,以最准确、最新的信息为基础,来提高大型语言模型(LLMs)的生成质量。这种技术结合了预训练的大型语言模型与外部数据源,通过检索到的信息优化LLM的输出,而无需修改底层模型本身。
RAG的主要优点在于,它能够利用外部知识库中的最新信息来增强LLM的响应,从而减少生成错误信息和性能下降的问题。此外,由于LLM依赖于静态的参数知识,RAG允许模型直接访问最新信息,而不需要重新训练。这使得RAG特别适用于需要不断更新知识的场景。
完整的 RAG 应用流程主要包含两个阶段:
数据准备阶段:(A)数据提取–> (B)分块(Chunking)–> (C)向量化(embedding)–> (D)数据入库
检索生成阶段:(1)问题向量化–> (2)根据问题查询匹配数据–> (3)获取索引数据 --> (4)将数据注入Prompt–> (5)LLM生成答案
一、 RAG的工作架构
数据准备阶段
数据提取:从多种格式的数据源(如PDF、Word、Markdown、数据库和API等)提取数据,并进行过滤、压缩、格式化等处理。
分块(Chunking):将文档分割成一定大小的块,以保持语义完整。常见的分块方法有基于换行、标点符号或固定字符数的分块。
向量化(Embedding):将文本数据转换为向量,这一步骤对后续的检索效果至关重要。常用的嵌入模型包括moka-ai/m3e-base、GanymedeNil/text2vec-large-chinese等。
数据入库:将向量化后的数据构建索引,并存储到向量数据库中,如Facebook Research的Faiss、Chroma、Elasticsearch、Milvus等。
检索生成阶段
问题向量化:将用户的问题转换为向量形式。
数据检索:根据问题的向量,从向量数据库中检索最相关的数据。检索方法包括相似性检索(如余弦相似性、欧氏距离等)和全文检索。
获取索引数据:从数据库中获取检索到的数据的索引。
注入Prompt:将检索到的数据融入到Prompt中,为LLM生成答案提供上下文。
LLM生成答案:根据注入的Prompt,LLM生成答案。
数据处理阶段
二 、 RAG VS Finetune
在提升大语言模型效果中,RAG 和 微调(Finetune)是两种主流的方法。
微调: 通过在特定数据集上进一步训练大语言模型,来提升模型在特定任务上的表现。
特征比较 | RAG | 微调 |
---|---|---|
知识更新 | 直接更新检索知识库,无需重新训练。信息更新成本低,适合动态变化的数据。 | 通常需要重新训练来保持知识和数据的更新。更新成本高,适合静态数据。 |
外部知识 | 擅长利用外部资源,特别适合处理文档或其他结构化/非结构化数据库。 | 将外部知识学习到 LLM 内部。 |
数据处理 | 对数据的处理和操作要求极低。 | 依赖于构建高质量的数据集,有限的数据集可能无法显著提高性能。 |
模型定制 | 侧重于信息检索和融合外部知识,但可能无法充分定制模型行为或写作风格。 | 可以根据特定风格或术语调整 LLM 行为、写作风格或特定领域知识。 |
可解释性 | 可以追溯到具体的数据来源,有较好的可解释性和可追踪性。 | 黑盒子,可解释性相对较低。 |
计算资源 | 需要额外的资源来支持检索机制和数据库的维护。 | 依赖高质量的训练数据集和微调目标,对计算资源的要求较高。 |
推理延迟 | 增加了检索步骤的耗时 | 单纯 LLM 生成的耗时 |
降低幻觉 | 通过检索到的真实信息生成回答,降低了产生幻觉的概率。 | 模型学习特定领域的数据有助于减少幻觉,但面对未见过的输入时仍可能出现幻觉。 |
伦理隐私 | 检索和使用外部数据可能引发伦理和隐私方面的问题。 | 训练数据中的敏感信息需要妥善处理,以防泄露。 |