# all-rag-techniques **Repository Path**: dachong/all-rag-techniques ## Basic Information - **Project Name**: all-rag-techniques - **Description**: all-rag-techniques - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 2 - **Created**: 2025-06-23 - **Last Updated**: 2025-12-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 所有 RAG 技术:一种更简单、亲身实践的方法 ✨ 用您喜欢的语言阅读本文: [Deutsch](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=de) | [Español](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=es) | [Français](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=fr) | [日本語](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=ja) | [한국어](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=ko) | [Português](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=pt) | [Русский](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=ru) | [中文](https://www.readme-i18n.com/FareedKhan-dev/all-rag-techniques?lang=zh) [![Python 3.7+](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/release/python-370/) [![Nebius AI](https://img.shields.io/badge/Nebius%20AI-API-brightgreen)](https://cloud.nebius.ai/services/llm-embedding) [![OpenAI](https://img.shields.io/badge/OpenAI-API-lightgrey)](https://openai.com/) [![Medium](https://img.shields.io/badge/Medium-Blog-black?logo=medium)](https://medium.com/@fareedkhandev/testing-every-rag-technique-to-find-the-best-094d166af27f) 本代码库采用清晰、亲身实践的方法来讲解**检索增强生成 (RAG)**,将先进技术分解为直接、易于理解的实现。这里的所有内容都是使用我们熟悉的 Python 库(如 `openai`、`numpy`、`matplotlib` 等)构建的,而不是依赖于 `LangChain` 或 `FAISS` 等框架。 目标很简单:提供可读、可修改和具有教育意义的代码。通过专注于基础知识,该项目有助于揭开 RAG 的神秘面紗,并使其更容易理解其真正的工作原理。 ## 更新:📢 - (2025年5月12日) 添加了关于如何使用知识图谱处理大数据的新 notebook。 - (2025年4月27日) 添加了一个新的 notebook,可以为给定查询找到最佳 RAG 技术(简单 RAG + Reranker + 查询重写)。 - (2025年3月20日) 添加了关于使用强化学习的 RAG 的新 notebook。 - (2025年3月7日) 向代码库中添加了 20 种 RAG 技术。 ## 🚀 内容一览 本代码库包含一系列 Jupyter Notebooks,每个 Notebook 都专注于一种特定的 RAG 技术。每个 Notebook 提供: - 对技术的简洁解释。 - 从头开始的逐步实现。 - 带有内联注释的清晰代码示例。 - 评估和比较,以展示该技术的有效性。 - 可视化结果的可视化图表。 以下是所涵盖技术的一瞥: | Notebook | 描述 | | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | [1. 简单 RAG](01_simple_rag.ipynb) | 一个基本的 RAG 实现。一个很好的起点! | | [2. 语义分块](02_semantic_chunking.ipynb) | 根据语义相似性分割文本,以获得更有意义的切块。 | | [3. 分块大小选择器](03_chunk_size_selector.ipynb) | 探讨不同切块大小对检索性能的影响。 | | [4. 上下文丰富 RAG](04_context_enriched_rag.ipynb) | 检索相邻切块以提供更多上下文。 | | [5. 上下文块标题](05_contextual_chunk_headers_rag.ipynb) | 在嵌入前为每个切块添加描述性标题。 | | [6. 文档增强 RAG](06_doc_augmentation_rag.ipynb) | 从文本切块中生成问题以增强检索过程。 | | [7. 查询转换](07_query_transform.ipynb) | 重写、扩展或分解查询以改善检索。包括**退后提示(Step-back Prompting)**和**子查询分解(Sub-query Decomposition)**。 | | [8. 重排器](08_reranker.ipynb) | 使用 LLM 对初步检索到的结果进行重新排序,以获得更好的相关性。 | | [9. RSE](09_rse.ipynb) | 相关片段提取:识别并重建连续的文本片段,保留上下文。 | | [10. 上下文压缩](10_contextual_compression.ipynb) | 实现上下文压缩以过滤和压缩检索到的切块,最大化相关信息。 | | [11. 反馈循环 RAG](11_feedback_loop_rag.ipynb) | 整合用户反馈以随时间学习和改进 RAG 系统。 | | [12. 自适应 RAG](12_adaptive_rag.ipynb) | 根据查询类型动态选择最佳检索策略。 | | [13. Self RAG](13_self_rag.ipynb) | 实现 Self-RAG,动态决定何时以及如何检索,评估相关性,并评估支持性和实用性。 | | [14. 命题分块](14_proposition_chunking.ipynb) | 将文档分解为原子性的、事实性的陈述,以实现精确检索。 | | [15. 多模态 RAG](15_multimodel_rag.ipynb) | 结合文本和图像进行检索,使用 LLaVA 为图像生成标题。 | | [16. 融合 RAG](16_fusion_rag.ipynb) | 将向量搜索与基于关键字 (BM25) 的检索相结合以改善结果。 | | [17. 图 RAG](17_graph_rag.ipynb) | 将知识组织为图,从而能够遍历相关概念。 | | [18. 层次 RAG](18_hierarchy_rag.ipynb) | 构建分层索引(摘要+详细切块)以实现高效检索。 | | [19. HyDE RAG](19_HyDE_rag.ipynb) | 使用假设性文档嵌入 (HyDE) 来改善语义匹配。 | | [20. CRAG](20_crag.ipynb) | 纠正性 RAG:动态评估检索质量,并使用网络搜索作为后备。 | | [21. Rag with RL](21_rag_with_rl.ipynb) | 使用强化学习最大化 RAG 模型的回报。 | | [最佳 RAG 查找器](best_rag_finder.ipynb) | 使用简单 RAG + Reranker + 查询重写为给定查询找到最佳 RAG 技术。 | | [22. 使用知识图谱处理大数据](22_Big_data_with_KG.ipynb) | 使用知识图谱处理大型数据集。 | ## 🗂️ 代码库结构 ``` fareedkhan-dev-all-rag-techniques/ ├── README.md <- 您在这里! ├── 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 ├── best_rag_finder.ipynb ├── requirements.txt <- Python 依赖 └── data/ └── val.json <- 示例验证数据(查询和答案) └── AI_Information.pdf <- 用于测试的示例 PDF 文档。 └── attention_is_all_you_need.pdf <- 用于测试多模态 RAG 的示例 PDF 文档。 ``` ## 🛠️ 入门指南 1. **克隆代码库:** ```bash git clone https://github.com/FareedKhan-dev/all-rag-techniques.git cd all-rag-techniques ``` 2. **安装依赖:** ```bash pip install -r requirements.txt ``` 3. **设置您的 OpenAI API 密钥:** - 从 [Nebius AI](https://studio.nebius.com/) 获取 API 密钥。 - 将 API 密钥设置为环境变量: ```bash export OPENAI_API_KEY='YOUR_NEBIUS_AI_API_KEY' ``` 或者 ```bash setx OPENAI_API_KEY "YOUR_NEBIUS_AI_API_KEY" # 在 Windows 上 ``` 或者,在您的 Python 脚本/notebook 中: ```python import os os.environ["OPENAI_API_KEY"] = "YOUR_NEBIUS_AI_API_KEY" ``` 4. **运行 notebooks:** 使用 Jupyter Notebook 或 JupyterLab 打开任何 Jupyter Notebooks(`.ipynb` 文件)。每个 notebook 都是自包含的,可以独立运行。这些 notebook 被设计为在每个文件内按顺序执行。 **注意:** `data/AI_Information.pdf` 文件提供了一个用于测试的示例文档。您可以用自己的 PDF 替换它。`data/val.json` 文件包含用于评估的示例查询和理想答案。'attention_is_all_you_need.pdf' 用于测试多模态 RAG Notebook。 ## 💡 核心概念 - **嵌入 (Embeddings):** 捕捉文本语义的数值表示。我们使用 Nebius AI 的嵌入 API,并且在许多 notebook 中也使用 `BAAI/bge-en-icl` 嵌入模型。 - **向量存储 (Vector Store):** 一个用于存储和搜索嵌入的简单数据库。我们使用 NumPy 创建自己的 `SimpleVectorStore` 类,以实现高效的相似度计算。 - **余弦相似度 (Cosine Similarity):** 衡量两个向量之间相似度的指标。值越高表示相似度越大。 - **分块 (Chunking):** 将文本分割成更小、更易于管理的部分。我们探讨了各种分块策略。 - **检索 (Retrieval):** 为给定查询查找最相关文本块的过程。 - **生成 (Generation):** 使用大型语言模型 (LLM) 根据检索到的上下文和用户查询创建响应。我们通过 Nebius AI 的 API 使用 `meta-llama/Llama-3.2-3B-Instruct` 模型。 - **评估 (Evaluation):** 评估 RAG 系统响应的质量,通常通过将其与参考答案进行比较或使用 LLM 对相关性进行评分。 ## 🤝 贡献 欢迎贡献!