微信扫码
添加专属顾问
我要投稿
深入了解RAG技术,探索其在增强大型语言模型中的应用和优化技巧。 核心内容: 1. RAG技术的定义及其解决的问题 2. RAG流程的详细解析,包括文档处理和检索生成 3. RAG优化实战,包括代码实现和性能评估
本篇文章来详细介绍什么是 RAG?RAG 的流程以及RAG 进阶优化
干货满满,相信你看完文章之后会对 RAG 有更深入的理解。
RAG
(Retrieval Augmented Generation) 是一种无需微调即可扩充模型知识的常用方法。 借助 RAG,LLM 可以从数据库中检索上下文文档,以提高答案的准确性。
因为 LLM 大模型通过海量数据进行训练,数据是有时效性的。如果询问最新的文档或者一些专业领域的知识,LLM 是无法回答的。所以 检索增强生成 (RAG) 通过将你的数据添加到 LLM 已有的数据中来解决此问题。
RAG 解决了纯生成模型的局限性(如幻觉、知识过时等),通过动态检索外部知识增强生成结果的可信度和时效性。
典型的 RAG 流程分为两个部分:
构建向量存储
:创建向量存储是构建检索增强生成 (RAG) 流程的第一步。文档会被加载(Load)、拆分(Split)、Embedding 存储到向量数据库中。
2. 检索生成
:根据用户输入用向量数据库进行相似性搜索,让后把用户的 question 和搜索到的context 作为上下文喂给 LLM 大模型,LLM 分析推理回答用户的问题。
我使用LangGraph构建了基本的 RAG 流程:
调用 Retrieval Tool 搜索相关文档,然后 GradeDocument 对文档进行评分:对从向量数据库检索到的文档进行评分: 如果检索到的文档与用户输入的内容相关,则 GenerateAnswer 生成答案返回,如果不相关,则 Rewrite 重新生成 query 进行检索。
代码已上传 Github:
Agent-demo/tree/main/src/rag_agent" style="box-sizing: border-box !important;overflow-wrap: break-word;text-decoration: none;color: rgb(87, 107, 149);font-weight: 600;">https://github.com/Liu-Shihao/ai-agent-demo/tree/main/src/rag_agent
大模型对话的 token 数量是有限制的,文档切分是为了将文档切分为小的文本块,适合检索并且节省 token。 切分的文本块长度也会影响 LLM 回答的质量。
常见的切分文档的方法:
SpaCy
, 但是长段落可能语义断裂。优化原则:
在 RAG(检索增强生成)和其他信息检索任务中,相似性算法用于衡量文本、向量或实体之间的关联程度。
欧氏距离(L2)
: 欧几里得距离测量连接两点的线段的长度(计算向量间的直线距离)。它是最常用的距离度量,当数据连续时非常有用。值越小,相似度越高。
余弦相似度(COSINE)
: 余弦相似度使用两组向量之间夹角的余弦来衡量它们的相似程度。余弦相似度始终在 区间[-1, 1]内。余弦值越大,两个向量之间的夹角越小,表明这两个向量彼此越相似。 适合文本 embedding 比较。
BM25((Best Matching 25))
:BM25 基于词频(TF) 和逆文档频率(IDF)。根据词频、倒排文档频率、文档规范化对相关性进行评分。用于评估文档与查询的相关性。 广泛应用于搜索引擎和问答系统。如 Elasticsearch 默认使用 BM25 排序。
Jaccard相似度(Jaccard Index)
: 比较集合的交集与并集比例。适用场景:关键词集合、推荐系统(如用户兴趣匹配)。范围[0,1],值越小,相似度越高。
RAG 中的典型应用
通过灵活组合这些算法,可以优化 RAG 系统的召回率、准确率和响应速度。
忽视向量长度信息:余弦相似度仅计算向量方向的夹角,忽略向量的长度(模)。这意味着
语义相似度 ≠ 相关性: 余弦相似度基于表面语义匹配。
表面匹配,但相关文档不一定语义相似: 如果两个文本共享许多相同的关键词(如“猫”“狗”“宠物”),即使逻辑不同,余弦相似度仍可能很高。 例如:
文档1:“猫和狗是常见的宠物。”(正向描述)
文档2:“猫和狗不适合作为宠物。”(负向观点)
余弦相似度高,但语义相反。
词序颠倒,但余弦相似度相同。 示例:
句子A:“医生治疗病人。”
句子B:“病人治疗医生。”
解决方案:
重排序(Reranking)是对初步检索结果进行优化排序的技术,旨在提升结果的相关性和准确性。
初次检索(如余弦相似度)可能返回语义相关但冗余或低质量片段,重排序可结合更多特征优化顺序。
方法:
使用知识图谱(Knowledge Graph, KG)增强 RAG(检索增强生成)可以显著提升复杂推理、多跳问答和关系挖掘的能力。 通过将文档中的 实体(Entities) 和 关系(Relations) 提取为知识图谱,在检索阶段不仅返回文本片段,还返回相关的子图结构,从而增强生成模型的上下文理解能力。
与传统 RAG 的区别:
实现步骤:
三元组(Triple)是知识图谱(Knowledge Graph)中的基本数据单元,用于表示实体(Entity)之间的关系(Relation),其结构为:〈主体 (Subject), 关系 (Predicate), 客体 (Object)〉
通过知识图谱的引入,RAG 系统能够从 “平面检索” 升级为 “立体推理” ,尤其适合需要深挖实体关系的复杂场景。
答案相关度 Response Relevancy:生成答案与问题的契合度。衡量答案与用户输入的相关性。分数越高,表示与用户输入的匹配度越高;如果生成答案不完整或包含冗余信息,则分数越低。
忠诚度 Faithfulness:衡量的是 答案 与 检索内容 的事实一致性。答案是否严格基于检索内容,减少幻觉。
检索的质量依赖外部数据库:如果知识库不完整,过时,或者噪声多,检索到的内容可能不相关或者错误,导致生成的答案质量下降。
解决方案: 定期更新知识库(实时爬取权威数据源)
分块(Chunking)导致上下文碎片化:固定大小的分块可能截断关键信息。答案可能分散在多个 chunk 块中。
解决方案:动态分块(按照语义边界切分,如段落,章节·)
语义相关不等于答案相关: :向量检索(如余弦相似度)可能返回语义相关但无实际答案的文档。(如查询“如何治疗感冒?”,可能检索到“感冒症状描述”而非治疗方案)。
解决方案: 引入重排序(Re-rank)模型(如交叉编码器);混合检索(结合关键词检索,如 BM25)。
生成模型忽视检索内容:生成模型可能忽略检索到的文档,仍依赖自身知识(幻觉)。
解决方案: 强化提示工程(如“严格基于以下上下文回答”)。
无法处理多跳推理:传统 RAG 难以回答需要多步推理的问题(如“A 公司的竞争对手的 CEO 是谁?”)。
解决方案: 引入知识图谱(GraphRAG)显式建模实体关系。
RAG 流程时间长:检索+生成两阶段流程导致响应时间较长(尤其涉及重排序时)。
解决方案:缓存高频查询结果。
缺点类别 | 具体问题 | 解决方案 |
---|---|---|
检索质量 | ||
生成偏差 | ||
效率问题 | ||
知识覆盖 | ||
复杂推理 |
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-10-27
2024-09-04
2024-05-05
2024-07-18
2024-06-20
2024-06-13
2024-07-09
2024-07-09
2024-05-19
2024-07-07
2025-06-06
2025-05-30
2025-05-29
2025-05-29
2025-05-23
2025-05-16
2025-05-15
2025-05-14