3.4 RAG 系统设计与优化

检索增强生成(RAG)是让大语言模型获取外部知识的核心技术。本节将深入探讨如何构建高质量的 RAG 系统。

3.4.1 核心思想

RAG 的核心思想是:在生成回答之前,先从外部知识库中检索相关信息,将检索到的内容作为上下文提供给大语言模型,从而生成更准确、更有依据的回答。

与直接依赖模型内部知识相比,RAG 具有以下优势:

  • 知识实时性:可以随时更新知识库,无需重新训练模型

  • 可追溯性:回答可以追溯到具体的文档来源

  • 降低幻觉:基于检索到的事实生成,减少模型"编造"内容的可能

3.4.2 基本流程

RAG 的工作流程可以分为三个核心步骤:嵌入检索增强生成。下图展示了从用户提问到最终回答的完整流程:

spinner

图 3-5:RAG 核心工作流程

3.4.3 简单实现

基本的 RAG 实现包括三个步骤:检索相关文档、将文档和查询组合成提示词、调用 LLM 生成回答。以下示例展示了这个核心流程。

接口建议:如果你使用的平台提供了新版结构化/统一接口,优先使用新接口;示例保留一种常见写法以便理解流程。

3.4.4 提升检索质量

基本的 RAG 实现,其检索质量通常不高,需要进行优化。以下是一些常用的优化方法:

文档切分策略

文档切分是 RAG 质量的关键。不良切分

优良切分

切分策略对比

策略
描述
适用场景

固定长度

按字符/token 数切分

格式统一的文档

句子边界

按句号分割

连贯性要求高

段落边界

按段落分割

结构化文档

语义切分

按主题/语义分割

长文档、复杂内容

递归切分

层级递归分割

通用场景

增强嵌入质量

查询扩展:将用户查询扩展为多个变体

假设文档嵌入(HyDE)

重排序

初次检索可能包含一些语义相似但实际无关的结果。重排序(Reranking)使用更精确的交叉编码器(Cross-Encoder)模型重新评估每个候选结果与查询的相关性,提高最终结果的准确性。

混合检索

向量检索擅长语义匹配,但可能遗漏关键词完全匹配的结果;关键词检索(如 BM25)擅长精确匹配,但无法理解语义。混合检索结合两者优势,通过加权融合分数得到更全面的结果。

检索问题排查指南

  1. 检索不到相关内容

    • 原因:嵌入 (Embedding) 模型与内容不匹配、文档切分不当、查询与文档表述差异大。

    • 解决:尝试不同的嵌入模型、调整切分策略、使用查询扩展或 HyDE。

  2. 检索到无关内容

    • 原因:相似度阈值过低、语义漂移。

    • 解决:设置相似度阈值过滤、使用重排序、添加元数据过滤。

3.4.5 提升生成质量

提示词工程

基础模板

带来源引用的模板

处理"不知道"

让模型诚实地表达不确定性:

长上下文处理

当检索结果过多时:

生成问题排查指南

  • 回答不基于资料(幻觉)

    • 原因:提示词约束不够、资料信息不足。

    • 解决:强化提示词约束(如"严禁编造")、检查检索质量、考虑利用 CoT 让模型先分析资料。

3.4.6 评估 RAG 系统

评估指标

指标
描述
计算方法

召回率

相关文档被检索到的比例

检索到的相关文档 / 所有相关文档

精确率

检索结果中相关的比例

相关文档 / 检索到的文档

MRR

第一个相关文档的排名倒数

1 / 相关文档排名

置信度

回答与资料的一致性/忠实度

LLM 评估或人工标注

相关性

回答与问题的相关性

LLM 评估

使用 RAGAS 评估

RAGAS 是一个用于评估 RAG 应用的开源框架。它利用 LLM 作为评判者(LLM-as-a-judge),能够自动化地计算包括置信度、相关性和上下文精确度在内的多种关键指标,帮助开发者无需大量人工标注即可量化评估系统的性能。


下一节: 3.5 图记忆与知识图谱

Last updated