当前位置: 首页 > news >正文

检索增强生成:RAG(Retrieval Augmented Generation)

  • 什么是 RAG?
  • 为什么使用 RAG?
  • LLM 微调 和 RAG?
  • 实战

什么是 RAG?

RAG 在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中被引入,原论文是这样描述的:

探索了一种 通用的 检索增强生成(RAG)微调方案 —— 这种模型结合了 预训练的参数化记忆非参数化记忆,用于语言生成。提出的 RAG 模型中,参数化记忆是一个预训练的 seq2seq 模型,而 非参数化记忆是一个由预训练神经检索器访问的维基百科稠密向量索引

在这里插入图片描述
图 1:概览。将一个预训练的检索器(查询编码器 + 文档索引)与一个 预训练的 seq2seq 模型(生成器)相结合,并进行端到端微调。对于查询 xxx,我们使用 最大内积搜索(MIPS)找到前 KKK 篇文档 ziz_izi。在得到最终预测 yyy 时,将 zzz 视为潜在变量,并对不同文档下的 seq2seq 预测结果进行边际化处理。

每个步骤可以大致分解为:

  • 检索:根据查询从源中寻找相关信息。例如,根据问题从数据库中获取相关的维基百科文本段落。
    • 构建/索引文档库(预处理):把外部知识源(比如维基百科)拆分成文档/段落编码成向量建立检索索引(如向量索引,支持 MIPS/ANN 查询)。
    • 查询编码与检索把输入查询 xxx 用检索器的查询编码器编码,进行向量检索,返回前 KKK 个最相关的文档 z1,...,zKz_1,...,z_Kz1,...,zK
  • 增强:使用相关检索到的信息来修改输入到生成模型(例如 LLM)中的内容。将检索到的文档与生成器结合,即把检索到的文档作为 条件信息 喂入 预训练的 seq2seq 生成器。这里有两种常见形式:
    • RAG-Sequence(或 RAG-固定):对整个输出序列都使用同一组检索段落作为上下文。
    • RAG-Token(或 RAG-逐 token):生成每个 token 时可使用不同的检索段落(更细粒度)。
  • 生成:根据输入生成输出。例如,在 LLM 的情况下,根据输入提示生成一段文本。
    • 生成与边际化(推理):将文档 zzz 视为潜在变量,计算最终输出的概率为对不同检索文档的边际化 p(y∣x)=∑zp(z∣x)p(y∣x,z)\;p(y|x)=\sum_z p(z|x)\,p(y|x,z)p(yx)=zp(zx)p(yx,z)。实现上可以对每个 ziz_izi 生成 p(y∣x,zi)p(y|x,z_i)p(yx,zi) 再加权求和,得到最终预测。
    • 端到端微调(训练):将检索器(查询编码器)和生成器一起端到端微调,使得检索更契合生成任务、生成更能利用检索到的证据。训练时通常会最大化边际似然或相应损失。
    • (可选)输出后处理与可追溯性:返回生成文本同时附加证据来源(即用到的检索片段),便于验证与更新知识库。

为什么使用 RAG?

RAG 的主要目标是 提高 LLMs 的生成输出

可以看到两个主要改进:

  • 防止幻觉。LLMs 非常出色,但它们容易产生潜在的幻觉,也就是说,生成看似正确但实际上不正确的内容。RAG 管道可以通过提供事实性(检索到的)输入来帮助 LLMs 生成更符合事实的输出。即使从 RAG 管道生成的答案看起来不正确,由于检索功能,也可以获取其来源的资料。
  • 使用自定义数据。许多 基础 LLMs 使用互联网规模文本数据进行训练。这意味着它们具有强大的语言建模能力,然而,它们 通常缺乏特定领域的知识。RAG 系统可以向 LLMs 提供 特定领域的数据,如医疗信息或公司文档,从而 根据特定用例定制它们的输出

RAG 也可以是一个比在特定数据上微调 LLM 更快的解决方案。

LLM 微调 和 RAG?

LLM 微调(Fine-tuning)在下游数据上更新模型参数,使模型直接 在内部参数中编码任务或领域知识。包括全量微调,也包括参数高效微调(如 LoRA、Prompt-Tuning、Adapters 等,统称 PEFT)。LoRA 是典型方法之一,能显著减少可训练参数并节省显存。

RAG(Retrieval-Augmented Generation):把 外部非参数化知识库(文档/段落向量索引)与生成模型结合,在 推理时检索相关文档并以此条件化生成,生成端对不同检索结果做边际化或融合以产出答案;检索库可以独立更新,从而实现 更新知识而不重训模型。RAG 在知识密集型任务上被提出并验证效果优于仅参数化模型。

维度LLM 微调(全量/PEFT)RAG(检索增强生成)
知识存储位置模型参数(内隐)外部索引(显式)+ 模型(局部决策)
更新知识需重训或增量微调更新索引即可(无需重训模型
推理延迟较低(单次前向)增加检索与文档处理延迟(检索/编码/聚合)。
计算/成本(训练)全量微调高;PEFT 低(显存 & 存储节省)检索器训练 + 生成器微调(可仅微调生成器或与检索器联合微调),索引构建有成本
可解释性 / 溯源较差(内部权重难溯源)好:可返回支持文档作证据
抗幻觉 / 事实准确性依赖模型及数据;难以快速修正错误更易 grounding,若检索到高质量文档,生成更事实性
小样本/数据效率PEFT 在少数据下表现好依赖检索质量;在少标注下可借外部知识补充
工程复杂度相对简单(若仅单模型部署)复杂:需索引/检索服务、向量数据库、检索器与生成器协同
最佳适用场景任务固定、知识静态、可承受模型更新成本知识频繁更新、需要来源/可解释性、知识密集型 QA 与事实生成

实战

本地 RAG 教程
使用智能体库 smolagents、LlamaIndex、LangGraph 来构建 RAG 工具的完整例子,见 HF Agent Course 创建宾客信息检索生成(RAG)工具。

http://www.lryc.cn/news/614933.html

相关文章:

  • 如何在linux(CentOS7)上面安装 jenkins?
  • 【Vapor Mode】Vue 从“运行时“优化转向“编译时“优化的范式跃迁
  • 浏览器自动播放策略
  • OpenAI发布的GPT-5 更新了哪些内容,它的核心能力有哪些?AI编码能力这么强,前端程序员何去何从?
  • FreeRTOS学习笔记:任务通知和软件定时器
  • SpringBoot学习日记 Day6:解锁微服务与高效任务处理
  • 39.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--调整发布脚本
  • 24SpringCloud黑马商城微服务整合Seata重启服务报错的解决办法
  • Web3: DeFi借贷的安全基石, 了解喂价与清算机制的原理与重要性
  • 递归---记忆化搜索
  • 八、Linux Shell 脚本:变量与字符串
  • ESP32之wifi_HTTP
  • 商品、股指及ETF期权五档盘口Tick级与分钟级历史行情数据多维解析
  • 网盘短剧资源转存项目源码 支持垮克 带后台 附教程
  • 深入解析 Apache APISIX 在微服务网关中的性能优化实践指南
  • LeetCode 面试经典 150_数组/字符串_分发糖果(15_135_C++_困难)(贪心算法)
  • Swift 实战:秒算两个数组的交集(LeetCode 349)
  • 海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)
  • 基于开源AI大模型、AI智能名片与S2B2C商城小程序的零售智能化升级路径研究
  • Selenium使用超全指南
  • Linux运维新手的修炼手扎之第27天
  • 【无标题】AI 赋能日常效率:实用案例与操作心得分享
  • vulhub-Beelzebub靶机
  • 【LeetCode 热题 100】(五)普通数组
  • 版本控制的详细说明介绍(已有github账号版)
  • 【数学归纳法】证明数列极限
  • 模拟人脑处理文本——从分句到分词,从段落到时间线叙事
  • 小米开源大模型 MiDashengLM-7B:不仅是“听懂”,更能“理解”声音
  • 力扣前200题字符串总结
  • Effective C++ 条款31: 将文件间的编译依存关系降至最低