# 🧠 智能知识库问答系统 一个基于 Flask 的企业/课程智能问答系统,支持上传自有文档并进行精准问答,减少人工答疑成本。 ## ✨ 核心功能 - 📚 **文档上传与管理**:支持上传 PDF、Word、TXT 等格式的文档,自动进行智能解析 - 🤖 **智能问答**:基于上传的文档内容,提供精准的问答服务 - 💾 **对话历史**:自动保存所有问答记录,方便回顾和查看 - 📱 **响应式设计**:完美支持桌面端和移动端访问 - 🎨 **美观界面**:现代化的 UI 设计,提供良好的用户体验 ## 🚀 快速开始 ### 环境要求 - Python 3.8+ - pip ### 安装步骤 1. **克隆项目** ```bash git clone cd 12 ``` 2. **安装依赖** ```bash pip install -r requirements.txt ``` 3. **配置环境变量** 创建 `.env` 文件并配置以下变量: ```env OPENAI_API_KEY=your_openai_api_key_here FLASK_SECRET_KEY=your_secret_key_here ``` 4. **初始化数据库** ```bash python app.py ``` 数据库会自动创建在项目根目录下的 `knowledge_base.db` 文件中。 5. **启动应用** ```bash python app.py ``` 应用将在 `http://localhost:5000` 启动。 ## 📖 使用指南 ### 1. 上传文档 - 点击左侧知识库面板的"📤 点击或拖拽上传文档"区域 - 选择要上传的文档(支持 PDF、Word、TXT 格式) - 系统会自动解析文档内容并建立知识库索引 ### 2. 提问 - 在右侧聊天输入框中输入问题 - 点击"发送"按钮或按 Enter 键提交问题 - 系统会基于上传的文档内容提供精准答案 - 答案会显示参考来源,包括文档名称和页码 ### 3. 管理文档 - 在知识库面板中查看所有已上传的文档 - 点击"🗑️ 删除"按钮可以删除不需要的文档 - 文档状态会显示处理进度(处理中/已完成) ### 4. 查看历史 - 所有问答记录会自动保存 - 刷新页面后会自动加载历史对话 - 可以随时查看之前的问答内容 ## 🎬 演示流程 ### 场景 1:课程答疑 1. **准备阶段** - 上传课程讲义 PDF 文件 - 等待系统完成文档解析(约 2-3 秒) 2. **提问演示** - 输入:"这门课程的主要学习目标是什么?" - 系统返回基于讲义的答案,并标注参考页码 - 继续提问:"如何完成期末作业?" - 系统提供详细的作业要求说明 3. **效果展示** - 展示答案的准确性和参考来源 - 展示对话历史的保存和加载 ### 场景 2:企业文档查询 1. **准备阶段** - 上传公司规章制度文档 - 上传产品说明书文档 2. **提问演示** - 输入:"公司的请假流程是怎样的?" - 系统从规章制度中提取相关内容 - 输入:"产品 A 的保修期是多久?" - 系统从产品说明书中找到答案 3. **效果展示** - 展示多文档知识库的整合能力 - 展示移动端的响应式设计 ## 🛠️ 技术架构 ### 后端技术栈 - **Flask**:轻量级 Web 框架 - **SQLite**:本地数据库,用于存储对话历史和文档信息 - **OpenAI API**:提供智能问答能力 - **LangChain**:文档处理和向量检索(计划中) - **ChromaDB**:向量数据库(计划中) ### 前端技术栈 - **HTML5**:页面结构 - **CSS3**:样式设计,包含响应式布局 - **JavaScript**:交互逻辑和 API 调用 ### 项目结构 ``` 12/ ├── app.py # Flask 应用主文件 ├── requirements.txt # Python 依赖 ├── Project_Design.md # 项目设计文档 ├── README.md # 项目说明文档 ├── knowledge_base.db # SQLite 数据库(自动生成) ├── templates/ │ └── index.html # 前端页面模板 └── static/ ├── style.css # 样式文件 └── script.js # JavaScript 脚本 ``` ## 🔧 API 接口 ### 上传文档 ``` POST /api/upload Content-Type: multipart/form-data Body: file (文件) Response: { id, name, status } ``` ### 获取文档列表 ``` GET /api/documents Response: [{ id, name, status, chunks, created_at }] ``` ### 删除文档 ``` DELETE /api/documents/{doc_id} Response: { success: true } ``` ### 提问 ``` POST /api/ask Content-Type: application/json Body: { question: "问题内容" } Response: { answer, sources: [{ name, page }] } ``` ### 获取对话历史 ``` GET /api/conversations Response: [{ id, question, answer, sources, created_at }] ``` ## 🎨 界面特性 ### 响应式设计 - **桌面端**(>1024px):双栏布局,左侧知识库,右侧聊天 - **平板端**(768px-1024px):单栏布局,优化间距 - **移动端**(<768px):全屏显示,垂直堆叠,大按钮设计 ### 交互反馈 - Toast 通知系统,实时显示操作状态 - 字符计数器,提示输入长度 - 加载状态指示,提升用户体验 - Emoji 图标,增强视觉识别 ## 📝 注意事项 1. **API 密钥**:确保正确配置 OpenAI API 密钥 2. **文档格式**:目前支持 PDF、Word、TXT 格式 3. **问题长度**:建议问题长度在 3-500 字之间 4. **数据库**:对话历史保存在本地 SQLite 数据库中 5. **浏览器兼容**:建议使用 Chrome、Firefox、Edge 等现代浏览器 ## 🚧 未来规划 - [ ] 集成 LangChain 进行更强大的文档处理 - [ ] 使用 ChromaDB 建立向量数据库 - [ ] 支持更多文档格式(Excel、PPT 等) - [ ] 添加文档预览功能 - [ ] 实现对话导出功能 - [ ] 添加用户认证和权限管理 - [ ] 支持多语言问答 ## 📄 许可证 MIT License ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📧 联系方式 如有问题或建议,请通过以下方式联系: - 提交 Issue - 发送邮件至:your-email@example.com --- **享受智能问答带来的便利!** 🎉