RAG是一种无需微调即可扩充大模型知识的方法,通过检索外部文档增强回答准确性。文章详细讲解了RAG的构建流程(文档加载、分块、向量化存储)和检索生成过程,并深入探讨了文档分块策略、相似度计算算法、重排序技术及Graph RAG等进阶优化方法。最后分析了RAG系统的评估指标和常见缺点及解决方案,为构建高效可靠的RAG系统提供了全面指导。
RAG 介绍
RAG(Retrieval Augmented Generation) 是一种无需微调即可扩充模型知识的常用方法。 借助 RAG,LLM可以从数据库中检索上下文文档,以提高答案的准确性。
因为 LLM 大模型通过海量数据进行训练,数据是有时效性的。如果询问最新的文档或者一些专业领域的知识,LLM 是无法回答的。所以检索增强生成(RAG) 通过将你的数据添加到 LLM 已有的数据中来解决此问题。
RAG 解决了纯生成模型的局限性(如幻觉、知识过时等),通过动态检索外部知识增强生成结果的可信度和时效性。
RAG 流程
典型的 RAG 流程分为两个部分:
构建向量存储:创建向量存储是构建检索增强生成 (RAG) 流程的第一步。文档会被加载(Load)、拆分(Split)、Embedding 存储到向量数据库中。
加载文档 Load
加载各种非结构化的数据,例如:TXT 文本、PDF、JSON,HTML、Markdown 等。Langchain 封装了各种格式的DocumentLoaders文档加载器 。
切分文本 Split
将文本切分成更小的文本块(Chunk)。
转化向量 Embedding
使用 Embedding 模型将文本转换为向量(浮点数数组)表示
向量数据库 VectorStore :存储 Embedding 向量,能够基于向量相似度高效地检索与查询“最相似”的数据。
2. 检索生成:根据用户输入用向量数据库进行相似性搜索,让后把用户的question和搜索到的context作为上下文喂给 LLM 大模型,LLM 分析推理回答用户的问题。
我使用LangGraph构建了基本的 RAG 流程:
调用 Retrieval Tool 搜索相关文档,然后GradeDocument对文档进行评分:对从向量数据库检索到的文档进行评分: 如果检索到的文档与用户输入的内容相关,则 GenerateAnswer 生成答案返回,如果不相关,则 Rewrite 重新生成 query 进行检索。
代码已上传 Github:
https://github.com/Liu-Shihao/ai-agent-demo/tree/main/src/rag_agent
进阶 - RAG 优化
文档 Chunking
大模型对话的 token 数量是有限制的,文档切分是为了将文档切分为小的文本块,适合检索并且节省 token。切分的文本块长度也会影响 LLM 回答的质量。
常见的切分文档的方法:
固定长度切分(重叠分块边界)
:按照字符或者 Token 数(如 512 个 token)切分。重叠分块以避免边界信息丢失。这种方式最简单,但是有可能会截断语义。
按照句子边界
(标点符号)分块,例如使用 NLP 框架
SpaCy, 但是长段落可能语义断裂。自定义规则分割
:用正则表达式或者 DOM 解析器(如 BeautifulSoup)按照逻辑结构(标题,段落)分块。适合结构化文档,但是需要手动设计分割规则。
基于语义的分块
: 用 Transformer 模型分析语义关系分块。
优化原则:
- chunk 块大小需要匹配 embedding 模型和 llm 大模型的 tokne 限制。
- 关键信息(实体,关系)尽量保留在同一块中。
相似性算法
在 RAG(检索增强生成)和其他信息检索任务中,相似性算法用于衡量文本、向量或实体之间的关联程度。
欧氏距离(L2): 欧几里得距离测量连接两点的线段的长度(计算向量间的直线距离)。它是最常用的距离度量,当数据连续时非常有用。值越小,相似度越高。余弦相似度(COSINE): 余弦相似度使用两组向量之间夹角的余弦来衡量它们的相似程度。余弦相似度始终在区间[-1, 1]内。余弦值越大,两个向量之间的夹角越小,表明这两个向量彼此越相似。适合文本 embedding 比较。BM25((Best Matching 25)):BM25 基于词频(TF)和逆文档频率(IDF)。根据词频、倒排文档频率、文档规范化对相关性进行评分。用于评估文档与查询的相关性。 广泛应用于搜索引擎和问答系统。如 Elasticsearch 默认使用 BM25 排序。
词频(TF)
:衡量查询词在文档中的出现频率,但通过参数k1控制词频的饱和效应,避免高频词过度影响得分。
逆文档频率(IDF)
:惩罚常见词(如“的”“是”),提升罕见词的权重。反映某个术语在整个语料库中的重要性。出现在较少文档中的术语的 IDF 值较高,表明其对相关性的贡献较大。
文档长度归一化
:较长的文档由于包含更多术语,往往得分更高。BM25 通过归一化文档长度来缓解这种偏差。通过参数调整长文档的得分,避免因文档长度导致的词频偏差。
Jaccard相似度(Jaccard Index): 比较集合的交集与并集比例。适用场景:关键词集合、推荐系统(如用户兴趣匹配)。范围[0,1],值越小,相似度越高。
RAG 中的典型应用
- 初步检索:余弦相似度(快速筛选候选文档)。
- 重排序:交叉编码器(精细排序 Top-K 结果)。
- 去重:Jaccard 相似度(合并重复片段)。
通过灵活组合这些算法,可以优化 RAG 系统的召回率、准确率和响应速度。
余弦相似度(COSINE)的缺点
- 忽视向量长度信息:余弦相似度仅计算向量方向的夹角,忽略向量的长度(模)。这意味着
- 高频词干扰:TF-IDF或词频高的长文本可能主导方向,但实际语义不相关。会放大无关词的影响。
- 归一化依赖:未归一化的向量可能导致相似度计算偏差。长文本包含更多词汇,其向量各维度值累加后长度(模)显著大于短文本。
语义相似度 ≠ 相关性: 余弦相似度基于表面语义匹配。
表面匹配,但相关文档不一定语义相似: 如果两个文本共享许多相同的关键词(如“猫”“狗”“宠物”),即使逻辑不同,余弦相似度仍可能很高。 例如:
文档1:“猫和狗是常见的宠物。”(正向描述)
文档2:“猫和狗不适合作为宠物。”(负向观点)
余弦相似度高,但语义相反。
词序颠倒,但余弦相似度相同。示例:
句子A:“医生治疗病人。”
句子B:“病人治疗医生。”
解决方案:
- 向量归一化:强制所有向量的单位长度(如L2归一化)。
- 结合其他指标:如点积相似度(考虑长度)或BM25(词频加权)。
- 重排序(Re-rank):用交叉编码器(如MiniLM)精细化排序。
- 混合检索:结合关键词匹配(BM25)或知识图谱关系。
Rerank 重排序
重排序(Reranking)是对初步检索结果进行优化排序的技术,旨在提升结果的相关性和准确性。
初次检索(如余弦相似度)可能返回语义相关但冗余或低质量片段,重排序可结合更多特征优化顺序。
方法:
- 交叉编码器(Cross-Encoder):如 MiniLM-L6-v2,计算查询与每个文档的相关性分数(比嵌入模型更准但更慢)。
- 学习排序(Learning to Rank):训练模型综合多特征(如关键词匹配、点击率)排序。
- 规则调整:去除重复内容、优先新鲜度高的文档。
Graph RAG
使用知识图谱(Knowledge Graph, KG)增强 RAG(检索增强生成)可以显著提升复杂推理、多跳问答和关系挖掘的能力。 通过将文档中的实体(Entities)和关系(Relations)提取为知识图谱,在检索阶段不仅返回文本片段,还返回相关的子图结构,从而增强生成模型的上下文理解能力。
与传统 RAG 的区别:
| 特性 | 传统 RAG | GraphRAG |
|---|---|---|
| 检索单元 | 文本片段(Chunks) | 实体+关系子图 |
| 推理能力 | 单跳语义匹配 | 多跳推理(如 A→B→C) |
| 适用场景 | 简单问答 | 复杂关系查询 |
实现步骤:
实体识别(NER)
使用 SpaCy NLP 模型或者 LLM 大模型进行命名实体提取,从文本中识别提取人名,地名,组织名,地点,日期等实体。
关系抽取
可以利用 LLM 大模型抽取三元组(〈主体 (Subject), 关系 (Predicate), 客体 (Object)〉)。
图谱存储
将节点 Node 和关系 Relations 存储到图数据库中,如 Neo4j。
三元组(Triple)是知识图谱(Knowledge Graph)中的基本数据单元,用于表示实体(Entity)之间的关系(Relation),其结构为:〈主体 (Subject), 关系 (Predicate), 客体 (Object)〉
通过知识图谱的引入,RAG 系统能够从“平面检索”升级为“立体推理”,尤其适合需要深挖实体关系的复杂场景。
RAG Evaluate 评估
对RAG的评估可以从以下两个部分进行:
检索质量
- 上下文准确率(Context Precision):是衡量上下文中相关词块比例的指标。准确率是排名为 k 的相关词块数量与排名为 k 的词块总数之比。
- 上下文召回率(Context Recall):前K个结果中相关文档的比例。衡量成功检索到的相关文档(或信息片段)数量。更高的召回率意味着遗漏的相关文档更少。
生成质量
- 答案相关度 Response Relevancy:生成答案与问题的契合度。衡量答案与用户输入的相关性。分数越高,表示与用户输入的匹配度越高;如果生成答案不完整或包含冗余信息,则分数越低。
- 忠诚度 Faithfulness:衡量的是答案与检索内容的事实一致性。答案是否严格基于检索内容,减少幻觉。
RAG 有哪些缺点?
检索的质量依赖外部数据库:如果知识库不完整,过时,或者噪声多,检索到的内容可能不相关或者错误,导致生成的答案质量下降。
解决方案: 定期更新知识库(实时爬取权威数据源)
分块(Chunking)导致上下文碎片化:固定大小的分块可能截断关键信息。答案可能分散在多个 chunk 块中。
解决方案:动态分块(按照语义边界切分,如段落,章节·)
语义相关不等于答案相关::向量检索(如余弦相似度)可能返回语义相关但无实际答案的文档。(如查询“如何治疗感冒?”,可能检索到“感冒症状描述”而非治疗方案)。
解决方案: 引入重排序(Re-rank)模型(如交叉编码器);混合检索(结合关键词检索,如 BM25)。
生成模型忽视检索内容:生成模型可能忽略检索到的文档,仍依赖自身知识(幻觉)。
解决方案: 强化提示工程(如“严格基于以下上下文回答”)。
无法处理多跳推理:传统 RAG 难以回答需要多步推理的问题(如“A 公司的竞争对手的 CEO 是谁?”)。
解决方案: 引入知识图谱(GraphRAG)显式建模实体关系。
RAG 流程时间长:检索+生成两阶段流程导致响应时间较长(尤其涉及重排序时)。
解决方案:缓存高频查询结果。
| 缺点类别 | 具体问题 | 解决方案 |
|---|---|---|
| 检索质量 | 知识库不完整/碎片化 | 动态更新知识库、语义分块、重排序 |
| 生成偏差 | 忽视检索内容/幻觉 | 提示工程、模型微调 |
| 效率问题 | 高延迟/高计算成本 | 缓存、量化、分层检索 |
| 知识覆盖 | 领域盲区/偏见 | 多源数据融合、去偏处理 |
| 复杂推理 | 多跳推理困难 | GraphRAG、迭代检索 |
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】
为什么要学习大模型?
我国在A大模型领域面临人才短缺,数量与质量均落后于发达国家。2023年,人才缺口已超百万,凸显培养不足。随着AI技术飞速发展,预计到2025年,这一缺口将急剧扩大至400万,严重制约我国AI产业的创新步伐。加强人才培养,优化教育体系,国际合作并进是破解困局、推动AI发展的关键。
大模型入门到实战全套学习大礼包
1、大模型系统化学习路线
作为学习AI大模型技术的新手,方向至关重要。 正确的学习路线可以为你节省时间,少走弯路;方向不对,努力白费。这里我给大家准备了一份最科学最系统的学习成长路线图和学习规划,带你从零基础入门到精通!
2、大模型学习书籍&文档
学习AI大模型离不开书籍文档,我精选了一系列大模型技术的书籍和学习文档(电子版),它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。
3、AI大模型最新行业报告
2025最新行业报告,针对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
4、大模型项目实战&配套源码
学以致用,在项目实战中检验和巩固你所学到的知识,同时为你找工作就业和职业发展打下坚实的基础。
5、大模型大厂面试真题
面试不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我精心整理了一份大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
适用人群
第一阶段(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 的正确特征了。