【All in RAG】检索增强生成 (RAG) 技术全栈指南(一)

@[TOC](检索增强生成 (RAG) 技术全栈指南 一)

0. 前言

RAG技术(检索增强生成)是大模型应用开发中必用技术之一,本文按照开源项目All in RAG 的目录进行学。
项目文档:https://datawhalechina.github.io/all-in-rag
GitHub: https://github.com/datawhalechina/all-in-rag

进度:

All-in-RAG 技术全栈指南 完整学习清单(带复选框)

第一部分:RAG基础入门

  • 第一章 解锁RAG
    • RAG简介 - RAG技术概述与应用场景
    • 准备工作 - 环境配置与工具准备
    • 四步构建RAG - 快速上手RAG开发
    • 附:环境部署 - Python虚拟环境部署方案补充
  • 第二章 数据准备
    • 数据加载 - 多格式文档处理与加载
    • 文本分块 - 文本切分策略与优化

第二部分:索引构建与优化

  • 第三章 索引构建
    • 向量嵌入 - 文本向量化技术详解
    • 多模态嵌入 - 图文多模态向量化
    • 向量数据库 - 向量存储与检索系统
    • Milvus实践 - Milvus多模态检索实战
    • 索引优化 - 索引性能调优技巧

第三部分:检索技术进阶

  • 第四章 检索优化
    • 混合检索 - 稠密+稀疏检索融合
    • 查询构建 - 智能查询理解与构建
    • Text2SQL - 自然语言转SQL查询
    • 查询重构与分发 - 查询优化策略
    • 检索进阶技术 - 高级检索算法

第四部分:生成与评估

  • 第五章 生成集成
    • 格式化生成 - 结构化输出与格式控制
  • 第六章 RAG系统评估
    • 评估介绍 - RAG系统评估方法论
    • 评估工具 - 常用评估工具与指标

第五部分:高级应用与实战

  • 第七章 高级RAG架构(拓展部分)
    • 基于知识图谱的RAG
  • 第八章 项目实战一
    • 环境配置与项目架构
    • 数据准备模块实现
    • 索引构建与检索优化
    • 生成集成与系统整合
  • 第九章 项目实战一优化(选修篇)
    • 图RAG架构设计
    • 图数据建模与准备
    • Milvus索引构建
    • 智能查询路由与检索策略
  • 第十章 项目实战二(选修篇)
    • 规划中

第六部分:知识拓展

  • 第十一章 Neo4J 简单应用
    • 知识图谱与 Neo4j 安装
    • Neo4j 基本使用

1. 文章目录

2. 第一章 解锁RAG

2.1 RAG简介 - RAG技术概述与应用场景

https://datawhalechina.github.io/all-in-rag/#/chapter1/01_RAG_intro

2.1.1 什么是RAG

RAG(Retrieval-Augmented Generation),即检索增强生成,其本质是一种 “内外结合” 的技术范式。它巧妙连接了两类知识:一类是 LLM 在训练过程中固化于模型权重的 “参数化知识”—— 就像我们大脑中长久记忆但可能模糊的知识;另一类是来自外部知识库、可随时更新的 “非参数化知识”—— 如同考试时可以查阅的精准参考资料。

简单来说,RAG 的核心逻辑是:在 LLM 生成回答前,先通过检索机制从外部知识库中找到与问题高度相关的信息,将这些 “参考资料” 与用户问题一同交给 LLM,引导其基于真实依据生成内容。这就像让 LLM 从 “闭卷考试” 变成 “开卷考试”,既发挥了模型的语言组织能力,又保证了输出的准确性。

2.1.2 技术原理

RAG 系统的运作的核心,是通过 “检索” 与 “生成” 两个关键阶段,实现内外知识的深度融合:

  1. 检索阶段:精准锁定 “参考资料”
    • 第一步是 “知识向量化”:借助嵌入模型(Embedding Model),将外部知识库中的所有文档都编码成计算机能理解的向量形式,形成向量索引(Index)并存入向量数据库—— 这相当于给所有资料做了 “语义标签”,方便快速查找。
    • 第二步是 “语义召回”:当用户发起查询时,同样用嵌入模型将问题转化为向量,通过相似度搜索技术,从向量数据库中精准筛选出与问题最相关的文档片段。这个过程就像一位细心的图书管理员,根据你的需求快速从海量书籍中找出核心参考资料。
  2. 生成阶段:融合知识产出答案
    • 首先进行 “上下文整合”:生成模块会接收两部分信息 —— 用户的原始问题和检索到的相关文档片段;
    • 随后进行 “指令引导生成”:按照预设的 Prompt 指令,LLM 会将问题与上下文信息有效结合,在可控范围内生成有理有据的回答,避免凭空捏造。

2.1.3 技术演进分类

2.1.4 为什么要使用 RAG? 技术选型:RAG vs. 微调

在选择具体的技术路径时,一个重要的考量是成本与效益的平衡。通常,我们应优先选择对模型改动最小、成本最低的方案,所以技术选型路径往往遵循的顺序是提示词工程(Prompt Engineering) -> 检索增强生成 -> 微调(Fine-tuning)。

我们可以从两个维度来理解这些技术的区别。如下图所示,横轴代表“LLM 优化”,即对模型本身进行多大程度的修改。从左到右,优化的程度越来越深,其中提示工程和 RAG 完全不改变模型权重,而微调则直接修改模型参数。 纵轴代表“上下文优化”,是对输入给模型的信息进行多大程度的增强。从下到上,增强的程度越来越高,其中提示工程只是优化提问方式,而 RAG 则通过引入外部知识库,极大地丰富了上下文信息。

基于此,我们的选择路径就清晰了:

  • 先尝试提示工程:通过精心设计提示词来引导模型,适用于任务简单、模型已有相关知识的场景。
  • 再选择 RAG:如果模型缺乏特定或实时知识而无法回答,则使用 RAG,通过外挂知识库为其提供上下文信息。
  • 最后考虑微调当目标是改变模型“如何做”(行为/风格/格式)而不是“知道什么”(知识)时,微调是最终且最合适的选择。例如,让模型学会严格遵循某种独特的输出格式、模仿特定人物的对话风格,或者将极其复杂的指令“蒸馏”进模型权重中。

RAG 的出现填补了通用模型与专业领域之间的鸿沟,它在解决如表所示 LLM 局限时尤其有效

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1156474.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超详细版Proteus元件库对照表之SOP与QFP封装对照

从仿真到实物:SOP与QFP封装在Proteus中的真实映射之路你有没有遇到过这种情况——在 Proteus 里画好原理图、跑通仿真,信心满满导出PCB,结果发现焊盘对不上?一查才发现,用错了封装模型。更糟的是,原本选的是…

STM32CubeMX安装包实战案例引导式入门教程

从零开始玩转STM32:CubeMX实战入门全攻略 你有没有过这样的经历?手握一块崭新的STM32开发板,满心期待地想点亮第一个LED,结果却被复杂的时钟树、寄存器配置和引脚复用搞得焦头烂额?翻开数据手册几百页,却不…

从安装到运行:jScope与STM32CubeIDE完整示例

从零开始:用 jScope 实时“看见”你的 STM32 系统行为 你有没有过这样的经历? PID 控制调了三天,输出波形还是震荡不止;电池电压偶尔掉线,但串口日志里什么也抓不到;负载一突变,系统就“抽风”…

常用注解有哪些?(@Configuration, @Bean, @Autowired, @Value等)

Spring Boot 常用注解详解一、核心注解分类1. 配置类注解Configuration用途:声明一个类为配置类,相当于XML配置文件特点:会被CGLIB代理,确保Bean方法返回单例Configuration public class AppConfig {// 内部可以定义Bean方法 }Bea…

QSPI时序参数详解:超详细版调试指南

QSPI时序调优实战:从寄存器配置到信号完整性的深度拆解你有没有遇到过这样的场景?系统上电后偶尔卡死,JTAG一接上去却发现程序指针跑飞到了非法地址;或者在OTA升级时,固件读出来校验失败,但换块板子又正常—…

结合Proteus 8 Professional下载开展的电子竞赛培训实战案例

从仿真到实战:用Proteus打造电子竞赛的“预演战场” 一次“没焊电路板”的完整项目开发 去年带学生备战全国大学生电子设计竞赛时,有个小组遇到了典型难题:他们要做一个基于单片机的温控系统,但手头没有DS18B20温度传感器模块&…

Keil安装与ST-Link驱动兼容性问题全面讲解

Keil与ST-Link调试环境搭建:从驱动冲突到稳定连接的实战指南 你有没有遇到过这样的场景?刚装好Keil,满怀期待地打开uVision准备烧录程序,结果点击“Download”却弹出一串红字:“No ST-Link Detected”、“Cortex-M Acc…

高速时钟稳定性设计:STM32CubeMX核心要点

高速时钟稳定性设计:STM32CubeMX实战精要你有没有遇到过这样的问题?系统冷启动偶尔“卡死”,ADC采样值莫名漂移,USB通信频繁断开……排查半天软硬件,最后发现——根源竟是时钟配置不当。在嵌入式开发中,CPU…

手把手教程:如何高效克隆一个Demo代码仓库!

克隆Demo代码仓库是参与开源项目或学习开发实践的关键起点。借助Git命令行或图形化工具,用户可以将远程仓库完整复制到本地。本文将以清晰的步骤引导你完成整个克隆流程,确保新手也能快速上手。 一、下载模组的示例代码 下载示例代码到一个合适的项目目录…

嵌入式C语言在Keil uVision5中的编译优化策略

如何在 Keil uVision5 中用好编译优化?别让“快”毁了你的代码! 你有没有遇到过这样的情况: 代码明明进了中断,标志也置位了,主循环却像没看见一样卡在 while(flag 0) ? 切到 -O2 编译后&#xff0c…

STM32 Keil5破解详细步骤:超详细版安装说明

STM32开发环境搭建:Keil MDK-ARM 5配置与授权管理实战指南 在嵌入式系统的世界里,如果你正在使用STM32系列MCU,那么几乎绕不开一个名字—— Keil MDK 。作为ARM生态中历史最悠久、稳定性最强的集成开发环境之一,Keil Vision ID…

hh的蓝桥杯每日一题(交换瓶子)

15.交换瓶子 - 蓝桥云课 方法一&#xff1a;贪心做法 对于位置 i&#xff0c;如果 a[i] ≠ i 就把 a[i] 和 a[a[i]] 交换&#xff08;把当前数字放到它应该去的位置&#xff09; 这样每次交换都能让至少一个数字归位 重复直到 a[i] i #include<iostream> using na…

实验一 Python开发环境语法基础

实验一 Python开发环境&语法基础一、实验基本原理运用Anaconda搭建的Jupyter notebook平台编写实例Python程序。二、实验目的1、熟悉Python集成开发系统背景。2、熟悉Jupyter Notebook开发环境。3、熟悉编写程序的基本过程。三、具体要求1、熟悉Python的基本语法&#xff0…

LuatOS系统消息处理机制深度解析!

在LuatOS嵌入式运行环境中&#xff0c;系统消息是实现模块间通信与事件响应的核心机制。其消息处理机制采用轻量级事件驱动模型&#xff0c;有效降低CPU占用并提升系统实时性。此处列举了LuatOS框架中自带的系统消息列表。一、sys文档链接&#xff1a;https://docs.openluat.co…

避坑指南:LuatOS-Air脚本移植至LuatOS常见问题!

在实际开发中&#xff0c;许多开发者在尝试将LuatOS-Air脚本运行于标准LuatOS环境时遭遇报错或功能异常。这些问题多源于对底层驱动抽象层理解不足以及对系统任务模型的误用。本文将梳理典型错误场景&#xff0c;并提供可落地的修复方案&#xff0c;助力实现平滑迁移。 一、lua…

eide环境下GD32固件下载失败问题全面讲解

eIDE烧录GD32失败&#xff1f;从底层机制到实战排错的全链路技术拆解你有没有遇到过这样的场景&#xff1a;代码编译通过&#xff0c;接线看似没问题&#xff0c;点击“Download”按钮后却弹出一串红字——“Target Not Responding”、“Connection Failed”或干脆卡在“Connec…

实验二 Python 控制结构与文件操作

实验二 Python 控制结构与文件操作一、实验基本原理运用 Anaconda 搭建的 Jupyter notebook 平台编写 Python 实例程序。二、实验目的1、理解 Python 的流程控制、文件操作的基本原理。2、通过实际案例编程&#xff0c;掌握 Python 的流程控制、文件的基本操作。三、具体要求1、…

核心要点:避免USB Serial驱动下载后被系统禁用

一次连接&#xff0c;永久可用&#xff1a;破解USB Serial驱动被系统禁用的底层真相 你有没有遇到过这样的场景&#xff1f; 刚插上开发板&#xff0c;驱动安装成功&#xff0c;PuTTY连上了&#xff0c;日志哗哗地刷出来——一切看起来都那么完美。可第二天重启电脑&#xff…

Opensearch数据迁移:CCR功能数据迁移完整操作指南(上)

#作者&#xff1a;stackofumbrella 文章目录使用CCR功能迁移数据功能概述约束限制在主集群中创建索引从集群中执行启用CCR复制功能在主集群中写入测试数据在从集群中查看同步状态查看从集群中的同步数据关闭CCR功能查看远程集群信息删除远程集群配置信息使用CCR功能迁移数据 功…

计算机毕业设计-课程设计-校园失物招领系统设计与实现-程序-文档-全套资料

摘要学校作为一个人流量非常大的场所&#xff0c;当我们的物品不小心遗失后&#xff0c;之后的找寻过程一定是非常困难的。而为了可以解决这中问题&#xff0c;就出现了校园失物招领网站&#xff0c;通过校园失物招领网站&#xff0c;可以减少我们因为失物而带来的不便和困扰。…