# rag实验 **Repository Path**: AIexperment/rag-experiment ## Basic Information - **Project Name**: rag实验 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-09 - **Last Updated**: 2026-04-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 实验一:构建你的第一个朴素RAG问答系统 ## 📋 实验目标 本实验将帮助你: - 理解RAG系统的三个核心阶段:**索引**、**检索**、**生成** - 掌握使用LangChain框架快速搭建RAG原型的基本流程 - 直观体验RAG如何让大模型基于指定文本回答问题 ## 🛠️ 所需工具 - Python 3.8+ 编程环境 - OpenAI API密钥 ## 📦 安装依赖 1. 安装所需的Python库: ```bash pip install -r requirements.txt ``` 2. 设置OpenAI API密钥: **Windows PowerShell:** ```powershell $env:OPENAI_API_KEY="your-api-key-here" ``` **Windows CMD:** ```cmd set OPENAI_API_KEY=your-api-key-here ``` **或在代码中直接设置(不推荐用于生产环境):** 在 `rag_experiment.py` 文件开头添加: ```python import os os.environ['OPENAI_API_KEY'] = 'your-api-key-here' ``` ## 🚀 运行实验 ```bash python rag_experiment.py ``` ## 📁 项目结构 ``` rag1/ ├── knowledge.txt # 知识库文本文件 ├── rag_experiment.py # RAG系统主程序 ├── requirements.txt # Python依赖包 ├── chroma_db/ # 向量数据库(运行后自动生成) └── README.md # 本说明文件 ``` ## 🔬 实验步骤详解 ### 步骤1: 准备知识库 `knowledge.txt` 文件包含了关于法国的知识: - 法国的首都是巴黎 - 巴黎的别称和地标 - 法国的文化特色等 你可以修改这个文件,添加任何你想让系统了解的知识。 ### 步骤2: 数据加载与分块 程序会使用 `TextLoader` 加载文本文件,并用 `CharacterTextSplitter` 将其分割成小的文本块(chunks)。 关键参数: - `chunk_size=100`: 每个文本块的大小 - `chunk_overlap=20`: 文本块之间的重叠部分 ### 步骤3: 创建向量索引 - 使用 OpenAI 的嵌入模型(text-embedding-ada-002)将文本块转换为向量 - 将向量存储到 Chroma 向量数据库中 - 这相当于为图书馆建立了索引系统 ### 步骤4: 构建检索问答链 - 从向量数据库创建检索器(retriever) - 初始化 ChatOpenAI 语言模型(GPT-3.5-Turbo) - 使用 RetrievalQA 链将两者连接 ### 步骤5: 提问与观察 程序会自动测试三个问题: 1. **"法国的首都是哪里?"** - 知识库中存在的事实 - 预期:给出准确答案并引用源文档 2. **"巴黎被称为什么?"** - 知识库中的另一个事实 - 预期:给出准确答案并引用源文档 3. **"日本的首都是哪里?"** - 知识库中不存在的问题 - 预期:观察模型如何反应(可能基于训练数据回答或表示无法找到答案) ## 💡 观察要点 运行实验时,请注意观察: 1. **索引阶段** - 文档如何被分割成小块 - 向量化过程是如何进行的 2. **检索阶段** - 系统返回了哪些相关文档 - 这些文档是否与问题相关 3. **生成阶段** - 模型如何基于检索到的文档生成答案 - 答案是否准确引用了源文档 4. **对比测试** - 对于知识库内的问题 vs 知识库外的问题,系统表现有何不同 - RAG如何解决大模型的知识截止问题 ## 🔧 自定义实验 ### 修改知识库 编辑 `knowledge.txt` 文件,添加你感兴趣的主题内容,例如: - 公司信息 - 产品文档 - 个人笔记 - 任何私有数据 ### 调整参数 在 `rag_experiment.py` 中可以调整: ```python # 文本块大小和重叠 chunk_size=100 # 尝试改为50或200 chunk_overlap=20 # 尝试改为10或50 # 检索数量 search_kwargs={"k": 2} # 尝试改为3或5 # 语言模型 model_name="gpt-3.5-turbo" # 可改为 "gpt-4" temperature=0 # 尝试改为0.7以获得更有创造性的回答 ``` ## 📝 核心概念总结 **RAG (Retrieval-Augmented Generation)** 的三个核心阶段: 1. **索引 (Indexing)** - 加载文档 → 分割成块 → 向量化 → 存入向量数据库 - 相当于建立图书馆的索引系统 2. **检索 (Retrieval)** - 将问题转换为向量 → 在向量数据库中搜索相似文档 - 相当于在图书馆中查找相关书籍 3. **生成 (Generation)** - 将检索到的文档和问题一起发送给LLM → 生成答案 - 相当于阅读找到的书籍后回答问题 ## ⚠️ 注意事项 1. 需要有效的OpenAI API密钥才能运行 2. 首次运行会下载嵌入模型,可能需要一些时间 3. 向量数据库会保存在 `chroma_db` 目录中,可以重复使用 4. 使用API会产生费用,请注意控制使用量 ## 🎯 下一步 完成本实验后,你可以尝试: - 实验二:优化检索策略(不同的分块方法、重排序等) - 实验三:添加对话历史,实现多轮对话 - 实验四:处理更复杂的文档格式(PDF、Word等) ## 📚 参考资料 - [LangChain官方文档](https://python.langchain.com/) - [Chroma向量数据库](https://www.trychroma.com/) - [OpenAI API文档](https://platform.openai.com/docs)