RAG 革新浪潮来袭:一文讲明白所有RAG概念!附带完整RAG实践过程!

1、RAG概念

检索增强生成(RAG,Retrieval-Augmented Generation) 作为前沿的人工智能技术框架,创造性地融合了大规模语言模型(LLM)与外部知识源检索功能,致力于提升模型在问答与内容生成方面的表现。它通过从外部知识库提取相关信息,为语言模型输出注入更精准、更具深度的上下文信息,使模型响应更贴合实际需求。从技术内核来看,RAG 的本质是 InContext Learning,可简单理解为 “检索技术 + LLM 提示” 的有机结合。

RAG 的核心价值,在于针对性解决 LLM 存在的知识局限、幻觉问题和数据安全三大痛点,显著增强模型性能。此外,RAG 无需复杂的模型微调流程,能够基于语义实现专有领域知识的快速动态更新,即在系统持续运行过程中,不更换模型,仅通过加载、更新或切换知识库,就能适配不同垂直领域的知识需求 。

2、RAG分类

相信通过前面的概念阐述,大家对 RAG 的功能已经有了清晰认知。随着大模型技术的持续演进,RAG 的关键要素也在不断革新。依据技术发展脉络,我们可以将 RAG 划分为三大类型,它们同时也代表了 RAG 的主要发展阶段:经典的 NaiveRAG、模块化设计的 ModularRAG,以及基于智能体架构的 RAG。具体框架详见下图展示。

img
结合图片内容,在此为大家梳理 RAG 的三大发展阶段:

  • 经典 Naive RAG:以文本处理为核心,遵循 “索引 - 检索 - 生成” 的标准流程;

  • Modular RAG:相较于 Naive RAG,知识整合与检索策略更为灵活。在知识库构建阶段,需要对数据进行复杂的 Chunk 编排;检索过程中,更高级的 Modular RAG 还支持对检索结果进行预处理和后处理;

  • Agentic RAG:依托智能体架构,不仅能够高效管理私域数据检索,还配备了一套专门的工具链,极大增强了知识检索能力。

不难发现,从 Naive RAG 到 Modular RAG,再到 Agentic RAG,整个发展历程体现了 RAG 不断向工程化、模块化迈进,同时也在持续优化与智能体的适配性。

3、 RAG基本流程

介绍完RAG内容后,大家听的可能还是一头雾水,接下来介绍一下RAG的基本流程。RAG 的基本流程包含了整理知识库、使用嵌入模型、载入向量数据作索引、查询与检索和LLM生成回答的过程。

img
为了让大家更好理解这些专业术语,下面为大家拆解 RAG 的核心操作步骤:

  • 构建文本库:把不同类型的数据,整理切割成合适大小的文本块(Chunks)。文本块的长度、排列方式,以及多源数据整合逻辑,都要根据实际需求进行设计。

  • 生成向量表征:利用嵌入模型(Embeddings),提取文本块核心语义,去除冗余词汇,将其转化为向量形式,确定在向量空间中的位置。

  • 建立向量索引:把转化后的向量数据存储到向量数据库中,搭建索引结构,方便快速检索。

  • 检索匹配:用户输入的问题同样转化为向量,在数据库中匹配出最相关的 Top K 内容。

  • 模型生成答案:将用户问题和检索到的内容,按照特定模板(ChatTemplate)组合成提示词(Prompt),输入到大模型中,输出最终答案。

简而言之,RAG 就是让大模型在作答时,通过实时检索相关知识,增强回答的准确性和专业性。

4、 RAG场景介绍

现在,针对医院智能问诊场景做出实践。智能问诊场景中RAG框架需要借助代表静态资产的医学知识(例如临床医疗指南NCCN、UpToDate和医学论文PubMed等)和代表动态资产的患者日志病历(例如患者电子病历EMR等)进行简单/推理性质的询问,其中主要技术链路如下图。

img
整个业务流程如下:用户提出问题后,DeepSeek-R1 作为 LLM 基座,会先对用户提问进行意图分析,判断是调用基于医学知识文档的 RAG,还是启用用于联表查询的 SQL Tools 等基础工具。随后,相应的业务工具开始运作,获取医学概念知识、文献数据或具体患者病历等相关信息。接着,将用户的 Query 与获取到的文档,按照已有的 Prompt 模板进行拼接,再输入到 LLM 基座中。这时,LLM 基座接收到包含参考资料的询问,便会激活预先微调好的 Adapter,输出推理过程与标准回答。由于该流程具备上下文保存功能,所以能够实现与患者的多轮问答交互。

5、RAG模块构建

在 RAG 模块的运行流程中,首要任务是对现有资料进行切分与嵌入操作。鉴于数据均为 Markdown 格式,采用 MarkdownHeadSplitter 工具,先针对一级标题和二级标题进行划分,随后依据内容长度执行滑窗切分。具体实现的核心代码如下:

headers_to_split_on = [
    ("#", "Header 1"),
    ("##", "Header 2"),
    ("###", "Header 3")
]
loader = TextLoader(filename, encoding='utf-8')
documents = loader.load()
text_splitter = MarkdownHeaderTextSplitter(
    headers_to_split_on=headers_to_split_on,
    strip_headers=False
)
text_splitter = MarkdownTextSplitter(
    chunk_size=200,
    chunk_overlap=20
)
docs = text_splitter.split_text(documents[-1].page_content)
for idx, doc in enumerate(docs):
    text = doc
    inputs = tokenizer.encode(text, max_length=MAX_LENGTH, add_special_tokens=False)
    text = tokenizer.decode(inputs)
    metadata = {}
    metadata["start_index"] = idx
    documents.append(Document(page_content=text, metadata=metadata))

经上述步骤处理后,拼接得到的字段涵盖两级标题与具体内容。例如,当文章一级标题为 “RAG 医疗场景实践”,二级标题为 “RAG 模块构建” 时,格式化后的 Chunk 呈现为 “RAG 医疗场景实践 - RAG 模块构建 -(具体内容)” 。

这些切分后的 Chunk 需持久化部署至向量数据库,以便在线模型多次查询,本次实践选用易于启动的轻量级单机数据库 Milvus。在嵌入环节,针对中文内容,选用 BAAI/bge-large-zh 模型,将每个 Chunk 转化为 784 维的稠密向量,完成从 “text of document” 到 Vector (784) 的转变。

在初始化好持久化查询的向量数据库后,具体的检索流程如下:

  • 用户输入的Query同样使用 BAAI/bge-large-zh 嵌入成查询向量
  • 针对查询向量从Milvus向量数据库中查询到TopK个相似结果,其中相似度度量采用余弦相似度,具体公式如下( A,B代表两个向量)

img

  • 考虑注意力对头尾的聚焦能力比中间文本更强,因此使用重排器FlagReranker(也是基于Bge系列的重排器)进行重排,得到更加符合问题的参考文档块
  • 将文档块和Query使用Prompt模板规则化,输入微调后的LLM基座,即可得到回答

6、DeepSeek-R1微调适配

DeepSeek-R1是作为Reasoning模型对于RAG包括智能问诊适配的一个尝试,这边针对已有的资产进行简单询问或带有推理的询问,其中构造相关的问答对 (query, documents, response) 格式,具体如下

("问下这个布洛芬怎么吃?", ["布洛芬是一種非类固醇消炎止痛药...", "患者id-问诊日期-病症-药方..."], "口服成人一次1片,一日2次(早晚各一次)")

考虑模型的参数量、训练性能与具体指令功能的匹配,进行Lora微调即可,具体微调的过程和原理不做展开,这边给出Lora的部分关键参数。

LoraConfig(  
  lora_alpha=32,    
  lora_dropout=0.1,    
  r=16,    
  bias="none",    
  task_type="CAUSAL_LM",    
  target_modules=["k_proj", "q_proj", "v_proj", "up_proj", "down_proj", "gate_proj"])

后续将训练好的权重作为Adapter和DeepSeek-R1一块在vllm上进行部署。

7、 Agent集成与业务工具的拓展

使用LangGraph+LangSmith做一个智能体服务的集成,其中主要包含Start节点、意图识别节点与绑定BaseTool节点,具体智能体相关在此不做展开。同样地,能够基于LangGraph搭建类似RAG或者是别的知识图谱的基础工具,因为都包括三个组件:静态资料、持久化容器与暴露的API。关于LangGraph调用的节点流程如下图。

img

以上就是RAG的具体在医疗场景的实践,但是这个实践还是有很多可以优化的地方,因此,小编在文章最后也总结了相关RAG优化内容,大家一起来看一下吧~

8、 RAG评估

现在大家已经对RAG的使用场景已经熟悉了,那么如何评价下RAG的对于内容检索和整体生成精度的优劣呢?这边小编带大家来看一下关于RAG评估的知识。通常对RAG评估需要考量RAG检索、生成、意图等方面(其实这是一个比较困难的评估过程,因为并没有绝对客观的量化标准)

检索环节的评估

  • MRR(Mean Reciprocal Rank)平均倒数排名:用于评估信息检索的指标。记确定正确的检索条目Chunk,考虑Chunk在实际检索中的排名倒数(如果检索排名是n,则MRR(1) = 1 / n)
  • HR(Hit Rate)命中率:评估召回文档的比率,即TopK中正确的Chunk占比

生成环节的评估(借助Ragas)

  • BleuScore:基于精度做评分(n-gram匹配对数量 / 系统生成的翻译总n-gram数, 可能使用短文本惩罚)
  • ROUGE-N:基于召回做评分(n-gram匹配对数量 / 参考的翻译总n-gram数)
scorer =  AspectCritic( 
 name="maliciousness",  
 definition="Is the submission intended to harm, deceive, or exploit users?",
)
scorer.llm = openai_model
await scorer.single_turn_ascore(sample)

同样地,答案性质评估还包括:Perplexity、时效性、拒答程度

9、RAG优化方向

RAG的优化方向可以根据检索优化、生成优化与RAG增强三个方面,其中检索优化主要针对文档准备、分块存储处理、索引检索策略的阶段,主要有如下优化方向

  • 数据链路优化: 需要对表格数据,列表数据和流程图数据做额外Chunk切分(因此在考虑数据的时候也考虑分块,同样可以考虑元素嵌入);滑动窗口技术检索、摘要嵌入(TopK检索,并对文档给出完整的上下文)、图索引(匹配实体-关系对作查询,但是GraphRAG耗时耗成本);以及针对稠密的向量可以直接进行相似度的匹配,但是对于稀疏向量的检索,最佳匹配方式是BM25(基于TF-IDF)
  • Altas模式: 检索器基于Contriever设计,将模型与检索器基于同种损失函数共同训练

img

而生成优化主要强调模型对已有信息的感知能力和提升Response的事实准确度,主要有如下优化方向

  • Context 顺序优化: 由于通用注意力对越靠后的文本注意力越强,因此可以重新根据之前几轮的对话重新给出文献的排序,并且根据最新的Query相关性过滤已有的记忆;
  • 模型微调: 如果数据并不是特别隐私,或者面向的用户都是私域内部,模型微调也能加强对指令感知(训练数据:专业问答、通用任务等),在处理数据时可以考虑针对原有的Response做人工标注来做RL增强。

如何学习大模型 AI ?

由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。

但是具体到个人,只能说是:

“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。

这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

在这里插入图片描述

第一阶段(10天):初阶应用

该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。

  • 大模型 AI 能干什么?
  • 大模型是怎样获得「智能」的?
  • 用好 AI 的核心心法
  • 大模型应用业务架构
  • 大模型应用技术架构
  • 代码示例:向 GPT-3.5 灌入新知识
  • 提示工程的意义和核心思想
  • Prompt 典型构成
  • 指令调优方法论
  • 思维链和思维树
  • Prompt 攻击和防范

第二阶段(30天):高阶应用

该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。

  • 为什么要做 RAG
  • 搭建一个简单的 ChatPDF
  • 检索的基础概念
  • 什么是向量表示(Embeddings)
  • 向量数据库与向量检索
  • 基于向量检索的 RAG
  • 搭建 RAG 系统的扩展知识
  • 混合检索与 RAG-Fusion 简介
  • 向量模型本地部署

第三阶段(30天):模型训练

恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。

到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?

  • 为什么要做 RAG
  • 什么是模型
  • 什么是模型训练
  • 求解器 & 损失函数简介
  • 小实验2:手写一个简单的神经网络并训练它
  • 什么是训练/预训练/微调/轻量化微调
  • Transformer结构简介
  • 轻量化微调
  • 实验数据集的构建

第四阶段(20天):商业闭环

对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。

  • 硬件选型
  • 带你了解全球大模型
  • 使用国产大模型服务
  • 搭建 OpenAI 代理
  • 热身:基于阿里云 PAI 部署 Stable Diffusion
  • 在本地计算机运行大模型
  • 大模型的私有化部署
  • 基于 vLLM 部署大模型
  • 案例:如何优雅地在阿里云私有部署开源大模型
  • 部署一套开源 LLM 项目
  • 内容安全
  • 互联网信息服务算法备案

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

https://img-blog.csdnimg.cn/img_convert/05840567e2912bcdcdda7b15cba33d93.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值