一个基于多知识库融合、BGE重排序和多轮对话的工业级RAG(检索增强生成)问答系统,支持PDF/TXT文档上传、智能检索和精准问答。
🚀 并行检索优化
多查询并行检索,大幅提升检索速度
智能任务调度,支持可配置的线程池
进度实时监控,直观展示检索状态
🔍 智能去重机制
基于MD5哈希的精确去重
元数据优先级保留,自动选择信息最丰富的文档
可扩展的语义相似度去重接口
📈 BGE重排序
集成BGE-Reranker-v2-m3精排模型
基于语义相似度的文档重排序
支持FP16精度,平衡性能与精度
💬 多轮对话管理
完整的对话上下文管理
可配置的上下文长度限制
对话历史持久化支持
🎯 Query Transformation
口语化查询自动转换
多维度专业查询生成(原理、实操、报错)
提升复杂问题检索效果
📊 答案质量评估
忠实度评估:检查答案与上下文一致性
相关性评估:衡量答案对问题的解决程度
自动评分系统,提供量化反馈
↓ ↓ ↓ ↓
用户交互 对话管理 向量检索 文档存储
文件上传 配置管理 重排序 元数据
结果展示 错误处理 Multi-Query 持久化
前端界面: Streamlit
后端框架: Python 3.8+
检索系统: LangChain + ChromaDB
嵌入模型: BGE-small-zh-v1.5
重排序模型: BGE-Reranker-v2-m3
大语言模型: 阿里云Qwen-Plus
对话管理: 双端队列(Deque)
部署方式: Docker + Streamlit Cloud
- Python 3.8 或更高版本
- 至少 4GB 可用内存
- 10GB 可用磁盘空间
- 稳定的网络连接
1.克隆仓库 git clone https://github.com/yourusername/advanced-rag-system.git cd advanced-rag-system
2.创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac
venv\Scripts\activate # Windows
3.安装依赖 pip install -r requirements.txt
4.配置模型
export HF_ENDPOINT=https://hf-mirror.com
python -c "from langchain_huggingface import HuggingFaceEmbeddings; HuggingFaceEmbeddings(model_name='BAAI/bge-small-zh-v1.5')"
5.运行系统 streamlit run advanced-rag-system.py
📁 项目结构
advanced-rag-system/
├── advanced_rag_system.py # 主程序文件
├── requirements.txt # 依赖包列表
├── logs/ # 日志目录
├── rrf_knowledge_bases/ # 知识库存储目录
│ ├── kb_1234567890/ # 知识库1
│ │ ├── document.pdf
│ │ └── chroma_db/
│ └── metadata.json # 知识库元数据
└── models/ # 模型缓存目录
└── embedding/
- 启动应用后,点击侧边栏的"上传文档"
- 选择PDF或TXT文件(支持多选)
- 点击"构建索引"按钮
- 系统会自动处理文档并创建向量索引
- 在知识库选择区选择要查询的知识库
- 在问题输入框中输入您的问题
- 点击"开始精准问答"按钮
- 查看AI生成的回答和参考来源
- 系统将展示完整处理流程:
🔄 Query Transformation
🚀 并行检索
🧹 智能去重
⚖️ BGE重排序
📊 质量评估
- 支持同时查询多个知识库
- 使用RRF算法智能融合结果
- 不同知识库权重可配置
- 基于BGE-Reranker的语义重排序
- 显著提升结果相关性
- 支持配置重排序开关
- 自动维护对话历史
- 上下文感知的问答
- 可配置历史轮数
⚙️ 配置选项 系统参数
MAX_WORKERS = 4 # 并行工作线程数 RECALL_K = 15 # 初始检索文档数 TOP_K = 5 # 最终返回文档数
MAX_CONTEXT_LENGTH = 5 # 最大对话轮次 ENABLE_QUERY_TRANSFORM = True # 启用查询转换
EMBEDDING_MODEL = "BAAI/bge-small-zh-v1.5" RERANKER_MODEL = "BAAI/bge-reranker-v2-m3" LLM_MODEL = "qwen-plus" # 通义千问模型
模型选择
系统支持多种模型配置:
Embedding模型:BGE系列、OpenAI、Cohere等
Reranker模型:BGE-Reranker、Cohere Rerank等
LLM模型:通义千问、GPT系列、Claude等
📈 性能优化 检索优化
并行化:多查询、多检索器并行执行
缓存机制:Embedding模型本地缓存
批量处理:文档分块和向量化批处理
内存管理
智能分块:500字符分块,50字符重叠
去重机制:减少重复文档存储
流式处理:大文档流式加载
精度提升
BGE重排序:显著提升top-k准确率
多维度查询:覆盖不同信息需求
上下文重排:减少模型遗忘
system = MultiKBSystem(storage_path="./knowledge_bases")
system.add_file(uploaded_file)
answer, docs, conv_id, queries, evaluation = system.ask( question="你的问题", kb_ids=["kb_1234567890"], conversation_id=None, enable_query_transform=True )
conversation_id = system.create_conversation()
success, message = system.delete_kb("kb_1234567890")
📊 评估指标
系统内置答案质量评估功能:
- 忠实度 (Faithfulness)
定义:答案是否完全来自检索到的上下文
计算:信息点在上下文中的覆盖率
范围:0.0 - 1.0
- 答案相关性 (Answer Relevance)
定义:答案是否直接解决了用户的问题
计算:LLM评估的相关性分数
范围:0.0 - 1.0
3.综合评分 总分 = (忠实度 + 相关性) / 2
🐛 故障排除 常见问题
1.模型下载失败
export HF_ENDPOINT=https://hf-mirror.com
2.内存不足
splitter = RecursiveCharacterTextSplitter( chunk_size=300, # 减小分块大小 chunk_overlap=30 )
3.检索速度慢
MAX_WORKERS = 2 # 减少并行线程
4.Windows兼容性问题
日志查看
tail -f logs/rag_system.log
📄 支持的文档格式 PDF--支持中文PDF解析 TXT--UTF-8编码 🔄 计划中
🔄 工作流程详解
- 文档处理流程 上传文档 → 文本提取 → 智能分块 → 向量化 → 存储索引
2.查询处理流程 用户输入 → Query转换 → 并行检索 → 智能去重 → BGE重排序 → 上下文构建 → LLM生成 → 质量评估
-
多轮对话流程 历史记录 → 上下文管理 → 查询增强 → 检索优化 → 连贯回答
🎯 使用场景 📚 学术研究
文献综述自动生成
研究问题解答
知识发现与关联
💼 企业知识库
内部文档问答
员工培训助手
技术支持系统
🎓 教育学习
课程材料问答
知识点查询
学习辅助工具
🔧 技术文档
API文档查询
错误排查助手
最佳实践推荐
我们欢迎所有形式的贡献!请阅读以下指南:
- Fork 本仓库
- 创建功能分支
git checkout -b feature/amazing-feature
- 提交更改
git commit -m 'Add some amazing feature'
- 推送分支
git push origin feature/amazing-feature
- 开启 Pull Request
- 遵循 PEP 8 代码规范
- 使用类型提示
- 添加适当的文档字符串
- 编写单元测试
- 更新相关文档
使用约定式提交:
feat:新功能fix:修复bugdocs:文档更新style:代码格式refactor:重构代码test:添加测试chore:构建/工具更新
本项目基于 MIT 许可证 - 查看 LICENSE 文件了解详情。
本项目基于以下优秀开源项目构建:
- LangChain - LLM应用开发框架
- ChromaDB - AI原生向量数据库
- BAAI/FlagEmbedding - 文本嵌入和重排序模型
- Streamlit - 快速构建数据应用的Python框架
- Hugging Face - 开源AI社区
- 问题报告:GitHub Issues
- 功能建议:GitHub Discussions
- 文档更新:提交Pull Request修改文档
- 紧急支持:通过GitHub Issues标签紧急问题
- 基础RAG系统实现
- 多知识库支持
- BGE重排序集成
- 多轮对话功能
- Streamlit界面优化
- 知识图谱增强检索
- 实时学习与反馈
- 多模态文档支持
- 分布式部署支持
- 移动端适配
⭐ 如果这个项目对您有帮助,请给我们一个Star!您的支持是我们持续改进的动力。