# 企业知识库 **Repository Path**: MingByte_729316231/enterprise-knowledge-base ## Basic Information - **Project Name**: 企业知识库 - **Description**: 这是一个基于Milvus向量数据库和大语言模型(通义千问、DeepSeek)的文档知识库问答系统。系统支持多种文档格式的上传、向量化存储、语义搜索和智能问答,帮助用户快速从大量文档中获取精准信息。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-01 - **Last Updated**: 2025-09-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文档知识库问答系统 ## 项目概述 这是一个基于Milvus向量数据库和大语言模型(通义千问、DeepSeek)的文档知识库问答系统。系统支持多种文档格式的上传、向量化存储、语义搜索和智能问答,帮助用户快速从大量文档中获取精准信息。 ## 功能特性 ### 核心功能 - **多格式文档处理**:支持PDF、DOCX、DOC、TXT、MD等常见文档格式 - **向量存储与检索**:基于Milvus向量数据库实现高效的语义检索 - **智能问答**:结合大语言模型提供准确、专业的回答 - **双模式交互**:支持命令行交互和API接口调用 ### 技术优势 - **高性能**:利用Milvus向量数据库实现毫秒级相似性搜索 - **灵活扩展**:支持多种大语言模型集成 - **易于部署**:提供Docker容器化部署方案 - **安全可靠**:环境变量管理API密钥,避免硬编码 ## 系统架构 ### 主要组件 - **document_upload_api.py**:文档上传API服务,负责接收文档并存储到Milvus - **query_api.py**:文档查询API服务,提供HTTP接口进行问答 - **query.py**:命令行交互式问答工具 - **dashscope_milvus_integration.py**:文档处理和Milvus集成工具 ### 技术栈 - **向量数据库**:Milvus - **API框架**:FastAPI - **大语言模型**:通义千问(dashscope)、DeepSeek - **文档处理**:PyPDF2、docx2txt、python-docx等 - **部署工具**:Docker、Docker Compose - **向量嵌入**:通义千问text-embedding-v2模型 ## 环境准备 ### 前置条件 1. 已安装Python 3.9或更高版本 2. 已安装Docker和Docker Compose(如需容器化部署) 3. 已安装并运行Milvus向量数据库 4. 获取通义千问API密钥(DASHSCOPE_API_KEY)和DeepSeek API密钥(DEEPSEEK_API_KEY) ### 环境变量配置 在项目根目录下创建`.env`文件,配置以下环境变量: ```env # Milvus Configuration MILVUS_HOST=localhost MILVUS_PORT=19530 MILVUS_COLLECTION_NAME=bge_docs # API Keys DASHSCOPE_API_KEY=your_dashscope_api_key_here DEEPSEEK_API_KEY=your_deepseek_api_key_here ``` 请将`your_dashscope_api_key_here`和`your_deepseek_api_key_here`替换为您实际的API密钥。 ## 安装部署 ### 本地开发环境部署 1. 克隆项目代码 2. 安装依赖 ```bash pip install -r requirements.txt ``` 3. 启动Milvus服务 确保本地已经启动Milvus服务,或按照Milvus官方文档进行安装配置。 4. 初始化知识库 运行文档处理脚本,将文档导入到Milvus: ```bash python dashscope_milvus_integration.py ``` 5. 启动API服务 启动文档上传API: ```bash uvicorn document_upload_api:app --host 0.0.0.0 --port 8002 ``` 启动文档查询API: ```bash uvicorn query_api:app --host 0.0.0.0 --port 8001 ``` 6. 使用命令行工具 直接运行交互式问答工具: ```bash python query.py ``` ### Docker容器化部署 1. 确保已配置好`.env`文件 2. 构建和启动Docker容器 ```bash docker-compose up -d --build ``` 3. 验证服务状态 ```bash docker-compose ps ``` ## 使用指南 ### API接口使用 #### 文档上传API - 地址:http://localhost:8002/upload-document/ - 方法:POST - 参数:`file`(上传的文档文件) - 响应:JSON格式,包含上传状态和消息 #### 文档查询API - 地址:http://localhost:8001/query - 方法:POST - 参数:`question`(用户问题)、`top_k`(返回结果数量,默认3) - 响应:JSON格式,包含答案、参考来源和状态 ## 支持的文档格式 - PDF文件 (.pdf) - Word文档 (.docx, .doc) - 文本文件 (.txt) - Markdown文件 (.md) ## 常见问题与解决方案 ### Milvus连接失败 - 检查Milvus服务是否正常运行 - 确认.env文件中的MILVUS_HOST和MILVUS_PORT配置正确 - 检查网络连接和防火墙设置 ### API密钥错误 - 确认.env文件中API密钥配置正确 - 检查API密钥是否过期 - 验证网络连接是否可以访问大模型服务 ### 文档处理失败 - 确认文档格式受支持 - 检查文档是否损坏 - 对于.doc文件,建议安装pywin32或转换为.docx格式 ## 开发说明 ### 项目结构 ``` ├── .env # 环境变量配置文件 ├── Dockerfile # Docker构建文件 ├── docker-compose.yml # Docker Compose配置 ├── query.py # 命令行交互式问答工具 ├── query_api.py # 文档查询API服务 ├── document_upload_api.py # 文档上传API服务 ├── dashscope_milvus_integration.py # 文档处理和Milvus集成 ├── requirements.txt # Python依赖列表 └── milvus/ # Milvus配置目录 ``` ### 向量模型 系统使用通义千问的text-embedding-v2模型生成文本向量,向量维度为1536。 ### 文本分块 系统使用langchain的RecursiveCharacterTextSplitter进行智能文本分块,配置如下: - chunk_size: 800(每个文本块的最大字符数) - chunk_overlap: 100(相邻文本块的重叠字符数) 这种分块方式能够保留文本的上下文信息,同时确保每个块的大小适合向量嵌入和后续处理。 ## 文档处理流程 系统处理文档的完整流程如下: 1. **文档扫描**:从指定目录递归扫描所有支持格式的文档 2. **格式识别**:根据文件扩展名识别文档类型 3. **文本提取**: - PDF文件:使用PyPDF2逐页提取文本 - DOCX文件:使用docx2txt提取文本内容 - TXT/MD文件:直接读取文本内容 4. **文本分块**:对提取的文本进行智能分块,确保上下文完整性 5. **向量生成**:调用通义千问的Embedding API为每个文本块生成向量 6. **数据存储**:将文件名称、文本内容和向量存储到Milvus向量数据库 ## Milvus集合结构 系统在Milvus中创建的集合包含以下字段: - `id`:主键,自动生成的64位整数 - `file_name`:文件名,VARCHAR类型,最大长度200 - `text_chunk`:文本块内容,VARCHAR类型,最大长度65535 - `vector`:文本向量,FLOAT_VECTOR类型,维度1536 集合使用HNSW索引类型,L2距离度量方式,索引参数配置为`M: 8, efConstruction: 128`。 ## 向量搜索参数 系统使用以下参数进行向量相似度搜索: - 度量类型:L2距离 - 搜索参数:`ef: 64` - 结果处理: - 获取top_k*2个结果以确保去重后仍有足够数量 - 基于文本内容进行去重 - 按相似度分数(1-L2距离)排序 - 最终返回top_k个最相关的结果 ## 注意事项 1. 确保您的网络环境可以访问通义千问和DeepSeek的API服务 2. 对于大型文档集,初次导入可能需要较长时间 3. Docker部署时,Milvus服务需要在宿主机上运行或在Docker网络中可访问 4. API密钥请妥善保管,避免泄露 ## 更新日志 - 支持多种文档格式的上传和处理 - 实现向量存储和相似度搜索 - 集成大语言模型生成智能回答 - 提供命令行和API两种交互方式 - 支持Docker容器化部署