Skip to content

dfg-ai/-AI

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 

Repository files navigation

🚀 Advanced RAG System - 工业级检索增强生成问答系统

Python Streamlit LangChain License GitHub stars

一个基于多知识库融合、BGE重排序和多轮对话的工业级RAG(检索增强生成)问答系统,支持PDF/TXT文档上传、智能检索和精准问答。

✨ 核心特性

🚀 并行检索优化

多查询并行检索,大幅提升检索速度

智能任务调度,支持可配置的线程池

进度实时监控,直观展示检索状态

🔍 智能去重机制

基于MD5哈希的精确去重

元数据优先级保留,自动选择信息最丰富的文档

可扩展的语义相似度去重接口

📈 BGE重排序

集成BGE-Reranker-v2-m3精排模型

基于语义相似度的文档重排序

支持FP16精度,平衡性能与精度

💬 多轮对话管理

完整的对话上下文管理

可配置的上下文长度限制

对话历史持久化支持

🎯 Query Transformation

口语化查询自动转换

多维度专业查询生成(原理、实操、报错)

提升复杂问题检索效果

📊 答案质量评估

忠实度评估:检查答案与上下文一致性

相关性评估:衡量答案对问题的解决程度

自动评分系统,提供量化反馈

📈 系统架构

整体架构用户界面层 (Streamlit) → 应用服务层 (MultiKBSystem) → 检索增强层 (EnhancedRetriever) → 数据存储层 (ChromaDB)

↓ ↓ ↓ ↓

用户交互 对话管理 向量检索 文档存储

文件上传 配置管理 重排序 元数据

结果展示 错误处理 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.配置模型

设置HuggingFace镜像(国内用户)

export HF_ENDPOINT=https://hf-mirror.com

下载Embedding模型(自动)

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/

🎯 使用指南

1. 文档上传

  1. 启动应用后,点击侧边栏的"上传文档"
  2. 选择PDF或TXT文件(支持多选)
  3. 点击"构建索引"按钮
  4. 系统会自动处理文档并创建向量索引

2. 智能问答

  1. 在知识库选择区选择要查询的知识库
  2. 在问题输入框中输入您的问题
  3. 点击"开始精准问答"按钮
  4. 查看AI生成的回答和参考来源
  5. 系统将展示完整处理流程:

🔄 Query Transformation

🚀 并行检索

🧹 智能去重

⚖️ BGE重排序

📊 质量评估

3. 功能特性说明

多知识库融合

  • 支持同时查询多个知识库
  • 使用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准确率

多维度查询:覆盖不同信息需求

上下文重排:减少模型遗忘

🔌 API接口

初始化系统

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")

📊 评估指标

系统内置答案质量评估功能:

  1. 忠实度 (Faithfulness)

定义:答案是否完全来自检索到的上下文

计算:信息点在上下文中的覆盖率

范围:0.0 - 1.0

  1. 答案相关性 (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兼容性问题

系统已内置Windows兼容性处理

自动检测并跳过不兼容的模块

日志查看

实时查看日志

tail -f logs/rag_system.log

📄 支持的文档格式 PDF--支持中文PDF解析 TXT--UTF-8编码 🔄 计划中

🔄 工作流程详解

  1. 文档处理流程 上传文档 → 文本提取 → 智能分块 → 向量化 → 存储索引

2.查询处理流程 用户输入 → Query转换 → 并行检索 → 智能去重 → BGE重排序 → 上下文构建 → LLM生成 → 质量评估

  1. 多轮对话流程 历史记录 → 上下文管理 → 查询增强 → 检索优化 → 连贯回答

    🎯 使用场景 📚 学术研究

文献综述自动生成

研究问题解答

知识发现与关联

💼 企业知识库

内部文档问答

员工培训助手

技术支持系统

🎓 教育学习

课程材料问答

知识点查询

学习辅助工具

🔧 技术文档

API文档查询

错误排查助手

最佳实践推荐

🤝 贡献指南

我们欢迎所有形式的贡献!请阅读以下指南:

开发流程

  1. Fork 本仓库
  2. 创建功能分支

git checkout -b feature/amazing-feature

  1. 提交更改

git commit -m 'Add some amazing feature'

  1. 推送分支

git push origin feature/amazing-feature

  1. 开启 Pull Request

代码规范

  • 遵循 PEP 8 代码规范
  • 使用类型提示
  • 添加适当的文档字符串
  • 编写单元测试
  • 更新相关文档

提交信息规范

使用约定式提交:

  • feat: 新功能
  • fix: 修复bug
  • docs: 文档更新
  • style: 代码格式
  • refactor: 重构代码
  • test: 添加测试
  • chore: 构建/工具更新

📄 许可证

本项目基于 MIT 许可证 - 查看 LICENSE 文件了解详情。

🙏 致谢

本项目基于以下优秀开源项目构建:

📞 支持与反馈

  • 问题报告GitHub Issues
  • 功能建议GitHub Discussions
  • 文档更新:提交Pull Request修改文档
  • 紧急支持:通过GitHub Issues标签紧急问题

📈 路线图

  • 基础RAG系统实现
  • 多知识库支持
  • BGE重排序集成
  • 多轮对话功能
  • Streamlit界面优化
  • 知识图谱增强检索
  • 实时学习与反馈
  • 多模态文档支持
  • 分布式部署支持
  • 移动端适配

⭐ 如果这个项目对您有帮助,请给我们一个Star!您的支持是我们持续改进的动力。

开始使用快速开始 | 在线演示 | API文档

About

工业级RAG问答系统,支持多知识库融合、BGE重排序和多轮对话

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages