知识管理与检索系统,基于大模型和向量数据库构建的智能文档管理和问答平台。
Knowledge Hub 是一个现代化的知识管理平台,允许用户上传、组织、搜索和检索各种知识文档。系统使用先进的NLP技术和大模型进行文档处理、语义搜索和智能问答,支持多种文档格式,包括PDF、Word和文本文件。
- 文档管理:上传、查看和删除多种格式的文档
- 文本提取:自动从PDF、Word等文档中提取文本和元数据
- OCR处理:支持扫描文档的文本识别
- 向量化存储:使用先进的嵌入模型将文档内容向量化
- 多模式搜索:支持关键词搜索、语义搜索和混合搜索
- 智能问答:基于RAG(检索增强生成)的智能问答系统
- 引用追踪:问答结果自动提供信息来源
- Web界面:直观的用户界面,支持文档管理和问答
- 后端框架: FastAPI
- 搜索引擎: Elasticsearch
- 向量数据库: Milvus
- 大模型集成: Mistral AI API
- OCR处理: Mistral Vision API
- 文本处理: PyPDF2, python-docx
- 前端界面: Streamlit
- 部署: Docker, Docker Compose
knowledge_hub/
├── app/ # 应用代码
│ ├── api/ # API路由
│ │ ├── admin.py # 管理API
│ │ ├── chat.py # 问答API
│ │ ├── dependencies.py # API依赖
│ │ ├── documents.py # 文档API
│ │ └── search.py # 搜索API
│ ├── core/ # 核心模块
│ │ ├── config.py # 配置管理
│ │ ├── document_processor.py # 文档处理
│ │ ├── rag_engine.py # RAG引擎
│ │ ├── search_engine.py # 搜索引擎
│ │ └── vector_store.py # 向量存储
│ ├── models/ # 数据模型
│ │ └── document.py # 文档模型
│ ├── services/ # 服务层
│ │ ├── elasticsearch_service.py # ES服务
│ │ ├── embedding_service.py # 嵌入服务
│ │ ├── llm_service.py # 大模型服务
│ │ ├── ocr_service.py # OCR服务
│ │ ├── pdf_service.py # PDF处理
│ │ ├── text_extractor.py # 文本提取
│ │ └── word_service.py # Word处理
│ ├── static/ # 静态文件
│ ├── templates/ # HTML模板
│ └── streamlit_app.py # Streamlit前端
├── data/ # 数据存储
│ ├── documents/ # 原始文档
│ ├── processed/ # 处理后的文档
│ ├── vectors/ # 向量存储
│ └── embedding_cache/ # 嵌入缓存
├── docker/ # Docker配置
│ ├── docker-compose.yml # 服务编排
│ ├── Dockerfile # API服务镜像
│ └── Dockerfile.streamlit # 前端服务镜像
├── notebooks/ # Jupyter笔记本
├── tests/ # 测试代码
├── .env.example # 环境变量示例
├── .gitignore # Git忽略文件
├── main.py # API应用入口
├── requirements.txt # 依赖项
├── README.md # 项目说明
└── start.sh # 启动脚本
- Docker 和 Docker Compose
- 至少4GB内存(推荐8GB以上)
- 足够的磁盘空间(至少10GB)
-
克隆仓库:
git clone https://github.com/yourusername/knowledge_hub.git cd knowledge_hub
-
配置环境变量:
cp .env.example .env # 编辑.env文件设置您的配置,特别是API密钥
-
使用启动脚本部署:
chmod +x start.sh ./start.sh start
-
访问应用:
- API服务: http://localhost:8000
- API文档: http://localhost:8000/docs
- Streamlit前端: http://localhost:8501
- Kibana (Elasticsearch管理): http://localhost:5601
-
创建必要的目录:
mkdir -p data/documents data/processed data/vectors data/embedding_cache
-
构建并启动服务:
docker-compose -f docker/docker-compose.yml build docker-compose -f docker/docker-compose.yml up -d
-
查看服务状态:
docker-compose -f docker/docker-compose.yml ps
-
创建虚拟环境:
python -m venv venv source venv/bin/activate # 在Windows上使用: venv\Scripts\activate
-
安装依赖:
pip install -r requirements.txt
-
运行API服务:
uvicorn main:app --reload
-
运行Streamlit前端:
streamlit run app/streamlit_app.py
- 在Streamlit界面的"文档管理"页面上传文档
- 支持的文档格式: PDF, Word (.doc, .docx), 文本文件 (.txt, .md)
- 上传后,系统会自动提取文本、分块并索引
- 在"搜索"页面输入关键词或问题
- 选择搜索类型:
- 关键词搜索: 基于文本匹配
- 语义搜索: 基于向量相似度
- 混合搜索: 结合关键词和语义搜索
- 选择搜索目标:
- 文档: 搜索整个文档
- 文档块: 搜索文档的特定部分
- 在"问答"页面输入问题
- 系统会基于知识库内容生成回答
- 回答会包含引用来源,可以展开查看详情
- 在"系统管理"页面查看系统状态
- 可以执行以下操作:
- 重建索引: 重新创建Elasticsearch索引
- 清除缓存: 清除嵌入缓存
使用启动脚本管理系统:
./start.sh [命令]
可用命令:
start
: 启动所有服务stop
: 停止所有服务restart
: 重启所有服务status
: 显示服务状态logs
: 显示所有服务的日志logs <服务>
: 显示指定服务的日志build
: 构建服务help
: 显示帮助信息
主要配置项在.env
文件中:
LLM_API_KEY
: Mistral AI API密钥OCR_API_KEY
: OCR服务API密钥ELASTICSEARCH_HOSTS
: Elasticsearch主机地址VECTOR_DB_HOST
: 向量数据库主机地址
- 遵循PEP 8编码规范
- 使用依赖注入模式设计服务
- 为新功能编写测试
- 使用分支开发新功能
MIT