检索增强生成 (RAG) 项目
项目链接:https://github.com/bRAGAI/bRAG-langchain/tree/main
bRAGAI 的官方平台即将上线。加入等待列表,成为早期使用者之一!
本仓库包含了对检索增强生成 (RAG) 在各种应用中的全面探索。
每个笔记本都提供了从入门级到高级实现的详细实践指南,包括多查询和自定义 RAG 构建。
项目结构
如果你想直接开始,请查看文件 full_basic_rag.ipynb
-> 这个文件将为你提供一个完全可定制的 RAG 聊天机器人的样板代码。
确保在虚拟环境中运行你的文件(查看 开始使用
部分)。
以下笔记本可以在 tutorial_notebooks/
目录下找到。
[1]_rag_setup_overview.ipynb
这个入门笔记本提供了 RAG 架构及其基础设置的概述。
笔记本内容包括:
- 环境设置:配置环境、安装必要的库和 API 设置。
- 初始数据加载:基本的文档加载器和数据预处理方法。
- 嵌入生成:使用各种模型生成嵌入,包括 OpenAI 的嵌入。
- 向量存储:设置向量存储(ChromaDB/Pinecone)以实现高效的相似性搜索。
- 基本 RAG 管道:创建一个简单的检索和生成管道作为基线。
[2]_rag_with_multi_query.ipynb
在基础之上,这个笔记本介绍了 RAG 管道中的多查询技术,探索内容包括:
- 多查询设置:配置多个查询以多样化检索。
- 高级嵌入技术:使用多个嵌入模型来优化检索。
- 多查询管道:实现多查询处理以提高响应生成的相关性。
- 比较与分析:与单查询管道进行比较并分析性能改进。
[3]_rag_routing_and_query_construction.ipynb
这个笔记本深入探讨了自定义 RAG 管道。
内容包括:
- 逻辑路由:实现基于函数的路由,根据编程语言将用户查询分类到适当的数据源。
- 语义路由:使用嵌入和余弦相似性将问题引导到数学或物理提示,优化响应准确性。
- 元数据过滤器的查询结构:定义结构化搜索模式以处理 YouTube 教程元数据,实现高级过滤(例如,按观看次数、发布日期)。
- 结构化搜索提示:利用 LLM 提示生成数据库查询,根据用户输入检索相关内容。
- 与向量存储的集成:将结构化查询与向量存储连接,以实现高效的数据检索。
[4]_rag_indexing_and_advanced_retrieval.ipynb
继续之前的自定义内容,这个笔记本探讨了:
- 文档分块前言:指向外部资源以了解文档分块技术。
- 多表示索引:设置多向量索引结构以处理具有不同嵌入和表示的文档。
- 摘要的内存存储:使用 InMemoryByteStore 存储文档摘要以及父文档,实现高效检索。
- 多向量检索器设置:集成多个向量表示以根据用户查询检索相关文档。
- RAPTOR 实现:探索 RAPTOR,一种高级索引和检索模型,链接到深入资源。
- ColBERT 集成:演示基于 ColBERT 的令牌级向量索引和检索,捕捉细粒度的上下文含义。
- ColBERT 的维基百科示例:使用 ColBERT 检索模型检索有关宫崎骏的信息进行演示。
[5]_rag_retrieval_and_reranking.ipynb
这个最后的笔记本将 RAG 系统组件结合在一起,重点关注可扩展性和优化:
- 文档加载和拆分:加载并分块文档以进行索引,准备将其存储到向量存储中。
- 使用 RAG-Fusion 的多查询生成:使用基于提示的方法从单个输入问题生成多个搜索查询。
- 互惠排名融合 (RRF):实现 RRF 以重新排序多个检索列表,合并结果以提高相关性。
- 检索器和 RAG 链设置:构建检索链以回答查询,使用融合排名和 RAG 链提取上下文相关信息。
- Cohere 重新排序:演示使用 Cohere 模型进行重新排序,以进行额外的上下文压缩和优化。
- CRAG 和 Self-RAG 检索:探索 CRAG 和 Self-RAG 等高级检索方法,并链接到示例。
- 长上下文影响的探索:链接到解释长上下文检索对 RAG 模型影响的资源。
开始使用
前提条件:Python 3.11.7(推荐)
-
克隆仓库:
git clone https://github.com/bRAGAI/bRAG-langchain.git cd bRAG-langchain
-
创建虚拟环境
python -m venv venvsource venv/bin/activate
-
安装依赖:确保安装
requirements.txt
中列出的所需包。pip install -r requirements.txt
-
运行笔记本:
从[1]_rag_setup_overview.ipynb
开始,熟悉设置过程。按顺序继续其他笔记本,以构建和实验更高级的 RAG 概念。 -
设置环境变量:
-
复制根目录中的
.env.example
文件并将其命名为.env
,并包含以下键(替换为你的实际键):#LLM 模型 OPENAI_API_KEY="your-api-key"#LangSmith LANGCHAIN_TRACING_V2=true LANGCHAIN_ENDPOINT="https://api.smith.langchain.com" LANGCHAIN_API_KEY="your-api-key" LANGCHAIN_PROJECT="your-project-name"#Pinecone 向量数据库 PINECONE_INDEX_NAME="your-project-index" PINECONE_API_HOST="your-host-url" PINECONE_API_KEY="your-api-key"
-
-
笔记本顺序:
为了按结构化方式跟进项目:-
从
[1]_rag_setup_overview.ipynb
开始 -
继续
[2]_rag_with_multi_query.ipynb
-
然后阅读
[3]_rag_routing_and_query_construction.ipynb
-
继续
[4]_rag_indexing_and_advanced_retrieval.ipynb
-
最后完成
[5]_rag_retrieval_and_reranking.ipynb
-