游乐游手机版
首页/AI热点日报/热点详情

二十三种RAG技巧简单易懂实现方法

类型:热点整理2026-07-14
从零开始使用Python基础库实现23种检索增强生成(RAG)技术,涵盖简单RAG、语义分块、查询转换、重排序、多模态RAG、图RAG等。无需复杂框架即可掌握核心原理与实战技巧,提升AI知识检索的精准性和效率。

本教程将引领你从零起步,运用Python基础库逐步拆解并实现23种检索增强生成(RAG)技术。即便你缺乏复杂的AI框架使用经验,也能借助清晰易懂的代码与讲解,掌握RAG的核心原理与实战技巧,使你的AI知识检索更加精准、高效。

一、RAG技术概述

检索增强生成(RAG)是一种将信息检索与语言生成深度结合的技术。其核心思路是:在生成回答之前,先从外部知识库中检索相关材料,然后将这些材料作为上下文输入到语言模型中,从而生成更准确、更具事实依据的答复。

与传统的预训练语言模型不同,RAG系统能够动态获取最新知识,无需重新训练模型即可更新知识储备,这使得它在处理需要实时信息或专业领域知识的任务时展现出显著优势。

小提示: 初学者建议从“简单RAG”入手,理解基本流程后再逐步探索高级技术,这样能更快掌握RAG的演进脉络。

二、基础RAG技术

2.1 简单RAG(Simple RAG)

简单RAG是最基础的RAG实现,也是理解RAG技术的绝佳起点。它的核心流程包括:

  • 将文档分割成小块
  • 为每个块生成嵌入向量
  • 存储这些嵌入向量到向量数据库
  • 对于用户查询,找到最相似的文档块
  • 将检索到的文档块与查询一起输入到LLM生成回答

这种方法虽然简单,但奠定了RAG技术的基本框架,后续的各种优化技术都是在这个基础上发展而来的。

常见问题: 简单RAG中块大小如何选择?
答:一般建议从512-1024个字符开始尝试,具体取决于你的文档类型。如果内容密集(如法律文书),可适当减小块大小;如果内容松散(如对话记录),可适当增大。最终要通过实验对比不同块大小下的检索精度来确认。

2.2 语义分块(Semantic Chunking)

传统的文本分块通常基于固定长度或标点符号,而语义分块则是基于语义相似性进行文本分割。这种方法能够将语义相关的内容划分为一个块,避免了固定长度分块可能导致的语义断裂问题。

通过语义分块,检索系统能够获取更完整、更有意义的上下文,从而提高回答的准确性。

2.3 块大小选择器(Chunk Size Selector)

块大小是RAG系统中的重要参数,它直接影响检索效果和回答质量。块太小可能导致上下文不足,块太大则可能包含过多无关信息。

块大小选择器技术通过实验和评估,探索不同块大小对检索性能的影响,帮助找到最适合特定任务的块大小。

小提示: 使用块大小选择器时,建议设定一个候选集合(如256、512、768、1024),然后对每个候选值运行一个小型验证集,观察检索召回率的变化,选择表现最优的尺寸。

三、文本处理与上下文增强技术

3.1 上下文丰富RAG(Context Enriched RAG)

在传统RAG中,通常只检索与查询最相似的单个文档块。上下文丰富RAG则更进一步,它不仅检索最相关的块,还会检索该块的相邻块,以提供更完整的上下文。

这种方法能够捕获文档中的前后关系,避免因孤立地使用单个块而导致的理解偏差。

3.2 上下文块头(Contextual Chunk Headers)

上下文块头技术在对文档块进行嵌入之前,为每个块添加描述性的标题。这些标题能够提供额外的上下文信息,帮助模型更好地理解块的内容和主题。

通过这种方式,检索系统能够更准确地匹配查询与文档块,提高检索的相关性。

3.3 文档增强RAG(Document Augmentation RAG)

文档增强RAG不是直接使用文档内容进行检索,而是从文本块中生成相关问题,然后使用这些问题来增强检索过程。

这种方法能够从不同角度表示文档内容,提高检索的全面性和准确性,尤其在处理复杂查询时效果显著。

常见问题: 文档增强RAG会生成大量问题导致存储开销大,如何处理?
答:可以对每个文本块只生成2-3个高质量问题,通过LLM筛选或模板生成。同时可以设置阈值,只保留与原文语义相似度较高的问题,避免冗余。

四、查询优化技术

4.1 查询转换(Query Transform)

查询转换技术通过重写、扩展或分解查询来提高检索效果。它包括:

  • 回溯提示(Step-back Prompting):将查询转换为更广泛的问题,获取更全面的信息
  • 子查询分解(Sub-query Decomposition):将复杂查询分解为多个简单子查询,分别检索后再整合结果

通过优化查询表示,这种技术能够提高检索系统对用户意图的理解,从而返回更相关的结果。

4.2 重排序器(Reranker)

重排序器是一种后处理技术,它使用LLM对初始检索结果进行重新排序,以提高结果的相关性。

初始检索通常基于向量相似度,而重排序器能够从语义和语境角度评估结果的相关性,从而在初始检索的基础上进一步优化结果排序。

4.3 相关段提取(RSE - Relevant Segment Extraction)

相关段提取技术不仅能够找到相关的文档块,还能识别和重建连续的文本段,保持上下文的完整性。

这种方法能够避免传统分块方法可能导致的上下文碎片化问题,提供更连贯、更完整的检索结果。

小提示: 使用RSE时,可以先通过向量检索找到候选块,然后根据块之间的位置关系(如前后顺序)合并相邻块,形成更长的连续段落,再送入重排序器。

五、高级RAG技术

5.1 上下文压缩(Contextual Compression)

上下文压缩技术对检索到的文档块进行过滤和压缩,以最大化相关信息的同时减少冗余。

通过去除无关信息和压缩冗余内容,这种技术能够提高输入到LLM的上下文质量,从而生成更简洁、更准确的回答。

5.2 反馈循环RAG(Feedback Loop RAG)

反馈循环RAG将用户反馈整合到系统中,使系统能够通过学习不断改进。

当用户对回答给出反馈(如指出错误或不相关的内容)时,系统会利用这些反馈来调整检索策略和模型参数,从而在后续交互中提供更好的回答。

5.3 自适应RAG(Adaptive RAG)

自适应RAG能够根据查询类型动态选择最佳的检索策略。不同类型的查询(如事实性查询、解释性查询、复杂查询等)可能需要不同的检索方法。

通过分析查询特征并自适应地调整检索策略,这种技术能够提高RAG系统的灵活性和有效性。

5.4 自我RAG(Self RAG)

自我RAG是一种更智能的RAG实现,它能够动态决定何时以及如何进行检索,评估检索结果的相关性,并评估信息的支持度和实用性。

这种方法使RAG系统具有更强的自主性和智能性,能够更有效地处理复杂查询和动态信息需求。

常见问题: 自我RAG如何判断何时不需要检索?
答:自我RAG通常使用一个“是否需要检索”的分类器,基于查询的简单性(如已知事实问答)或LLM的内部知识充分性(如常识问题)来决定。如果LLM自身能高置信度回答,则跳过检索步骤。

六、多模态与混合RAG技术

6.1 命题分块(Proposition Chunking)

命题分块将文档分解为原子性的事实陈述,而不是传统的文本块。每个命题都是一个独立的、可验证的事实单元。

通过这种方法,检索系统能够实现更精确的匹配,尤其在处理需要事实性回答的查询时效果显著。

6.2 多模态RAG(Multimodel RAG)

多模态RAG将文本和图像等多种模态的信息结合起来进行检索。它使用LLaVA等模型为图像生成字幕,然后将这些字幕与文本信息一起进行嵌入和检索。

这种方法扩展了RAG的应用范围,使它能够处理包含图像的多模态查询和文档。

6.3 融合RAG(Fusion RAG)

融合RAG将向量搜索与基于关键词的(BM25)检索相结合,充分利用两种方法的优势。

向量搜索擅长捕捉语义相似性,而BM25在处理精确关键词匹配时表现更好。融合这两种方法能够提高检索的全面性和准确性。

小提示: 在融合RAG中,推荐使用加权平均或基于排名的融合策略(如Reciprocal Rank Fusion),这样能让两种方法的结果互相补充,避免单一方法的主导偏差。

七、知识组织与大数据处理技术

7.1 图RAG(Graph RAG)

图RAG将知识组织成图结构,使系统能够遍历相关概念,获取更全面的上下文。

通过构建知识图,这种方法能够捕捉概念之间的关系,从而在检索时不仅能够找到直接相关的信息,还能发现相关的扩展知识。

7.2 层次RAG(Hierarchy RAG)

层次RAG构建分层索引,包括摘要和详细块,以实现高效检索。

这种方法在处理大型文档集合时特别有用,它允许系统先从高层摘要开始检索,然后根据需要深入到详细块,从而提高检索效率。

7.3 HyDE RAG

HyDE RAG使用假设文档嵌入来改进语义匹配。它不是直接使用查询生成嵌入,而是生成一个假设的相关文档的嵌入,然后使用这个嵌入进行检索。

这种方法能够提高检索的语义准确性,尤其在处理复杂或模糊查询时效果显著。

7.4 CRAG(Corrective RAG)

CRAG是一种纠正性RAG技术,它能够动态评估检索质量,并在必要时使用网络搜索作为后备。

当系统发现检索到的信息不充分或不准确时,CRAG会触发网络搜索,获取最新的信息来补充或纠正回答,从而提高回答的准确性和时效性。

7.5 强化学习RAG(Rag with RL)

强化学习RAG使用强化学习来最大化RAG模型的奖励。它将RAG系统的性能指标(如回答准确性、相关性等)作为奖励信号,通过训练优化系统的参数和策略。

这种方法能够使RAG系统在实际应用中不断学习和优化,提高整体性能。

7.6 最佳RAG查找器(Best RAG Finder)

最佳RAG查找器是一种元技术,它能够为给定的查询找到最佳RAG技术组合。它结合了简单RAG、重排序器和查询重写等技术,通过评估不同组合的效果,选择最适合特定查询的RAG策略。

这种方法提高了RAG系统的适应性和效率,使它能够根据不同的查询类型和需求选择最佳的处理方式。

7.7 知识图大数据处理(Big Data with Knowledge Graphs)

知识图大数据处理技术使用知识图来处理大规模数据集。它能够有效地组织和管理海量知识,支持高效的检索和查询,即使在处理TB级别的数据时也能保持良好的性能。

常见问题: 知识图大数据处理技术对硬件要求高吗?
答:相对于全量向量存储,知识图可以分层索引,减少全量匹配的计算量。不过构建图结构本身需要一定的预处理计算资源。对于TB级数据,建议采用分布式键值存储(如Neo4j或ArangoDB)配合批量处理框架,单机内存建议至少64GB。



通过以上23种RAG技术的系统学习,你不仅掌握了从基础到高级的各种检索增强生成方法,还了解了如何针对不同场景选择合适的技巧。无论是简单的问答系统,还是复杂的大规模知识检索应用,这些技术都能为你提供坚实的理论基础和可落地的代码实践。

小提示: 建议从“简单RAG”对应的notebook开始运行,然后依次尝试“查询转换”和“重排序器”,再逐步挑战“图RAG”和“强化学习RAG”。按顺序阅读代码注释,能帮助你更快理解每个技术的设计意图。

完整项目代码清单(需替换为实际链接):
├── 01_simple_rag.ipynb
├── 02_semantic_chunking.ipynb
├── 03_chunk_size_selector.ipynb
├── 04_context_enriched_rag.ipynb
├── 05_contextual_chunk_headers_rag.ipynb
├── 06_doc_augmentation_rag.ipynb
├── 07_query_transform.ipynb
├── 08_reranker.ipynb
├── 09_rse.ipynb
├── 10_contextual_compression.ipynb
├── 11_feedback_loop_rag.ipynb
├── 12_adaptive_rag.ipynb
├── 13_self_rag.ipynb
├── 14_proposition_chunking.ipynb
├── 15_multimodel_rag.ipynb
├── 16_fusion_rag.ipynb
├── 17_graph_rag.ipynb
├── 18_hierarchy_rag.ipynb
├── 19_HyDE_rag.ipynb
├── 20_crag.ipynb
├── 21_rag_with_rl.ipynb
├── 22_big_data_with_KG.ipynb
├── 23_best_rag_finder.ipynb

来源:https://www.53ai.com/news/RAG/2025062017956.html

相关热点

继续查看同栏目近期热点。

延伸阅读

补充最近整理过的热点入口。