# test_rag **Repository Path**: fatgrass/test_rag ## Basic Information - **Project Name**: test_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**: 2025-10-12 - **Last Updated**: 2025-10-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RAG 知识问答系统 基于检索增强生成(RAG)技术的智能问答系统,支持文档上传、语义检索和基于知识库的智能回答。 ## 功能特性 - 📄 **文档处理**: 支持 PDF、TXT、MD 等格式文档上传和处理 - 🔍 **语义检索**: 基于 BAAI/bge-small-zh-v1.5 嵌入模型的高效语义检索 - 🤖 **智能问答**: 使用 DeepSeek-Chat 生成基于知识库的准确回答 - 💬 **友好界面**: Streamlit Web 应用,支持实时问答和对话历史 - 📊 **数据可视化**: 实时显示知识库统计和检索性能指标 ## 技术栈 - **LLM**: DeepSeek-Chat - **向量数据库**: Qdrant - **嵌入模型**: BAAI/bge-small-zh-v1.5 - **Web 框架**: Streamlit - **文本处理**: LangChain, PyPDF2, pdfplumber ## 快速开始 ### 方式 A: 一键安装(推荐) **Linux/Mac:** ```bash ./setup.sh ``` **Windows:** ```batch setup.bat ``` 脚本会自动完成: - ✅ 创建虚拟环境 - ✅ 安装所有依赖(使用国内镜像加速) - ✅ 创建必要的目录 - ✅ 复制环境变量模板 - ✅ 运行系统验证 ### 方式 B: 手动安装 #### 1. 环境设置 ```bash # 创建虚拟环境 python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate # 安装依赖(使用国内镜像加速) pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` ### 2. 配置环境变量 复制 `.env.example` 到 `.env` 并配置: ```bash cp .env.example .env ``` 编辑 `.env` 文件: ```env # DeepSeek API 配置 DEEPSEEK_API_KEY=sk-your-api-key-here # Qdrant 配置 QDRANT_HOST=10.211.55.20 QDRANT_PORT=6333 QDRANT_COLLECTION_NAME=rag_documents # 其他配置项... ``` ### 3. 启动应用 ```bash streamlit run app.py ``` 应用将在 `http://localhost:8501` 启动。 ## 使用方法 ### 文档上传和索引 1. 在侧边栏选择文档文件(PDF、TXT 或 MD) 2. 点击"📥 索引文档"按钮 3. 等待文档处理完成,系统会自动分块并建立向量索引 ### 智能问答 1. 在对话框中输入问题 2. 系统自动检索相关文档片段 3. 基于检索结果生成准确回答 4. 查看参考来源和性能指标 ### 高级设置 - **检索文档数量**: 调整每次检索返回的文档数量(1-10) - **清空知识库**: 删除所有已索引的文档 ## 项目结构 ``` test_rag/ ├── app.py # Streamlit 应用入口 ├── requirements.txt # Python 依赖 ├── .env.example # 环境变量模板 ├── config/ │ └── settings.py # 配置管理 ├── src/ │ ├── document_processor/ # 文档处理模块 │ │ ├── loader.py # 文档加载器 │ │ ├── cleaner.py # 文本清洗 │ │ └── chunker.py # 文本分块 │ ├── vectorstore/ # 向量存储模块 │ │ ├── embeddings.py # 嵌入模型 │ │ └── qdrant_db.py # Qdrant 客户端 │ ├── qa/ # 问答模块 │ │ ├── retriever.py # 文档检索器 │ │ ├── generator.py # 答案生成器 │ │ └── rag_pipeline.py # RAG 管道 │ └── utils/ │ └── helpers.py # 工具函数 └── tests/ # 测试文件 ``` ## 性能指标 根据需求文档的验收标准: - ✅ 支持 10MB 以内的 PDF 文档 - ✅ 检索响应时间 < 100ms - ✅ 回答生成时间 < 5秒 - ✅ 支持中文问答 - ✅ 界面响应时间 < 1秒 - ✅ 批量上传优化:支持上传任意数量文档(默认100个/批) ## API 使用示例 ### 命令行使用 ```python from pathlib import Path from src.qa.rag_pipeline import RAGPipeline # 初始化管道 pipeline = RAGPipeline() # 索引文档 result = pipeline.index_document(Path("document.pdf")) print(f"索引完成: {result['total_chunks']} 个文档块") # 问答 answer = pipeline.ask("这篇文档的主要内容是什么?") print(f"回答: {answer['answer']}") print(f"来源: {answer['sources']}") ``` ## 常见问题 ### Q: 如何更换 LLM 模型? 修改 `.env` 文件中的 `LLM_MODEL_NAME` 配置项。 ### Q: 如何调整文本分块大小? 修改 `.env` 中的 `CHUNK_SIZE` 和 `CHUNK_OVERLAP` 参数。 ### Q: Qdrant 连接失败怎么办? 1. 确认 Qdrant 服务正常运行 2. 检查 `QDRANT_HOST` 和 `QDRANT_PORT` 配置 3. 验证网络连接 ### Q: 嵌入模型下载慢? 首次运行会自动下载 BAAI/bge-small-zh-v1.5 模型,可以: 1. 使用国内镜像源 2. 手动下载并指定本地路径 ### Q: 上传大文件时出现超时错误? 系统已实现批量上传机制。如果仍然超时: 1. 调整 `.env` 中的 `QDRANT_BATCH_SIZE`(默认100,可改为50) 2. 检查网络连接到 Qdrant 服务器 3. 查看详细说明:[BATCH_UPLOAD_FIX.md](BATCH_UPLOAD_FIX.md) ## 开发和测试 ### 运行测试 ```bash # 单元测试 pytest tests/ pytest tests/test_specific.py -v # 系统验证 python scripts/verify_setup.py # 批量上传测试 python scripts/test_batch_upload.py # API 测试 python scripts/test_api.py # 检索诊断 python scripts/diagnose_retrieval.py ``` ### 开发模式 ```bash # 使用 --logger.level=debug 查看详细日志 streamlit run app.py --logger.level=debug ``` ## 许可证 本项目仅用于演示和学习目的。 ## 贡献 欢迎提交 Issue 和 Pull Request!