本章节介绍检索增强生成(Retrieval-Augmented Generation, RAG)技术。
RAG 是构建知识密集型 Agent 的核心技术。
通过结合向量检索与传统生成模型,RAG 使得 Agent 能够访问和利用外部知识。
RAG 基础原理
RAG 的核心思想是将信息检索与语言生成相结合。
当用户提出问题时,系统首先从知识库中检索相关信息。
然后将检索到的信息作为上下文,辅助生成模型产生更准确的回答。
为什么需要 RAG
语言模型有知识截止日期,无法获取最新信息。
模型参数有限,无法将所有知识都记忆其中。
直接让模型从参数中回忆知识,可能产生幻觉(hallucination)。
RAG 通过外部检索提供真实、可更新的知识来源。
核心架构
RAG 系统包含三个主要组件:
工作流程
第一步,索引阶段。将文档切分为 chunks(文本块),向量化后存入向量数据库。
第二步,检索阶段。用户查询到来时,将查询向量化,在向量数据库中进行相似度搜索。
第三步,增强阶段。将检索到的相关文档与原始查询一起发送给生成模型。
第四步,生成阶段。生成模型基于增强的上下文生成最终回答。
代码实现
基础 RAG 实现
Advanced RAG
基础 RAG 存在检索质量不高、上下文不连贯等问题。
Advanced RAG 通过多种技术手段进行优化,提升检索和生成效果。
重排序(Reranking)
初检后使用交叉编码器对结果进行更精确的排序。
重排序能够更好地理解查询和文档之间的语义匹配度。
带重排序的 RAG
混合检索
混合检索结合稠密检索与稀疏检索的优势。
稠密检索(dense retrieval)使用向量相似度,擅长语义匹配。
稀疏检索(如 BM25)基于词频统计,擅长关键词匹配。
混合检索 RAG
其他优化策略
查询扩展:通过同义词或相关词扩展查询,提升召回率。
查询改写:理解用户真实意图,改写查询表述。
上下文压缩:减少检索结果中的冗余信息,保留关键内容。
向量数据库
向量数据库是 RAG 系统的基础设施。
它负责存储和检索高维向量,支持大规模相似度搜索。
核心概念
嵌入(Embedding):将文本转换为稠密向量的过程。
向量维度:嵌入向量的长度,影响表示能力。
相似度度量:衡量向量之间相似程度的方法。
常用相似度度量
主流向量数据库对比
代码示例
使用 Chroma 向量数据库
GraphRAG
GraphRAG 将知识图谱与 RAG 相结合。
通过实体和关系图来增强检索和推理能力。
为什么需要 GraphRAG
传统 RAG 难以处理需要多跳推理的问题。
传统 RAG 不容易捕获实体间的语义关系。
GraphRAG 能够理解知识之间的结构化联系。
核心优势
捕获实体间的语义关系,形成知识网络。
支持基于路径的推理,回答复杂的关系型问题。
能够回答需要多跳(multi-hop)推理的复杂问题。
GraphRAG 实现
应用场景
GraphRAG 特别适合以下场景:
章节小结
本章节介绍了 RAG 与知识检索的核心技术。
RAG 基础原理 通过将检索与生成结合,让 Agent 能够利用外部知识。
Advanced RAG 通过重排序和混合检索等技术,提升检索质量。
向量数据库 是 RAG 的基础设施,负责存储和检索向量表示。
GraphRAG 结合知识图谱,增强关系推理和多跳问答能力。
选择合适的 RAG 方案需要根据具体场景和需求。
对于简单的问答场景,基础 RAG 即可满足需求。
对于需要精确检索的场景,可以加入重排序。
对于需要关系推理的场景,GraphRAG 是更好的选择。