# 维达系统设计文档 ## 1. 系统架构设计 描述系统各模块之间的数据交互与流程,需标注数据交互模块的名称和方式,具体设计如下: - **数据交互模块**: - 模块间通过 RESTful API 实现数据交互。 - 数据传输方式采用 JSON 格式。 - **关键模块**: - 用户管理模块:包括用户注册、登录和权限分配。 - 问答知识库模块:提供问答记录存储、查询和更新功能。 - 文件管理模块:实现文件的上传、解析和存储。 - 向量化模块:将文本内容进行向量化处理,便于相似度计算。 - 任务管理模块:负责异步任务的状态跟踪。 --- ## 2. 系统部署的服务器架构 系统基于分布式部署,架构如下: - **应用服务器**:运行 Flask 应用,提供 API 服务。 - **数据库服务器**:采用 MySQL,存储用户数据、知识库数据和日志记录。 - **端口分配**: - 应用服务器端口:`5103` - 数据库服务端口:默认 MySQL 端口 `3306` **相关源代码文件**: - `mainserver.py`:Flask 应用的入口文件。 - `config.py`:存储配置文件,包括数据库连接等信息。 --- ## 3. 系统功能的业务流程和标准流程步骤 ### 核心功能: #### (1)用户管理 - **业务流程**: 1. 用户通过 `/regist` 进行注册。 2. 系统校验用户输入信息,若无冲突则写入数据库。 3. 用户通过 `/login` 登录,返回权限标识。 - **实现文件**: - `mainserver.py`:包含用户注册和登录的逻辑。 - 数据表: - `users`:存储用户账号及密码。 #### (2)问答知识库管理 - **业务流程**: 1. 用户上传问答文件,通过 `/upload_qa` 接口。 2. 系统解析文件,分割内容并存储到数据库。 3. 用户通过 `/operate_qa` 查询、编辑、删除问答记录。 4. 问答检索通过 `/chat_qa` 完成,支持模糊查询。 - **实现文件**: - `mainserver.py`:包含问答知识库的解析和存储逻辑。 - 数据表: - `qa_knowledge`:存储问答记录。 #### (3)向量化处理 - **业务流程**: 1. 上传的文本内容由 `add_qa_task_` 方法解析。 2. 使用 FAISS 向量化文本并存储。 3. 系统通过 `task_status` 查询向量化任务状态。 - **实现文件**: - `mainserver.py`:包含向量化处理的异步逻辑。 - 数据表: - `qa_knowledge`:存储向量化的文本及相关元数据。 --- ## 4. 系统中所有表、字段的说明和表关联 ### (1)Roles 表 - **表名**:`roles` - **字段描述**: - `id` (int):主键,角色 ID。 - `name` (string):角色名称。 ### (2)Users 表 - **表名**:`users` - **字段描述**: - `id` (int):主键,用户 ID。 - `account` (string):用户账号。 - `password_hash` (string):用户密码哈希。 - `roles` (int):关联的角色 ID。 ### (3)History 表 - **表名**:`history` - **字段描述**: - `id` (int):主键,历史记录 ID。 - `account` (string):用户账号。 - `history` (JSON):操作历史。 - `datetime` (datetime):操作时间。 - `uuid` (string):操作标识符。 ### (4)LocalKnowledge 表 - **表名**:`local_knowledge` - **字段描述**: - `id` (int):主键,知识库 ID。 - `name` (string):知识库名称。 - `files` (JSON):文件列表。 - `create_id` (int):创建者 ID。 - `private_flag` (boolean):是否为私有。 ### (5)QAKnowledge 表 - **表名**:`qa_knowledge` - **字段描述**: - `sys_id` (int):主键,系统 ID。 - `question` (text):问题内容。 - `answer` (LONGTEXT):答案内容。 - `source` (string):来源。 - `qa_name` (string):问答库名称。 - `create_id` (int):创建者 ID。 - `private_flag` (boolean):是否为私有。 - `delete_flag` (boolean):是否被删除。 - `hash` (string):哈希值。 - `raw_text` (text):原始文本。 - `score` (float):相似度得分。 - `answer_type` (string):回答类型。 - `category` (string):问题分类。 --- ## 5. 接口之间交互设计 ### 接口设计文档: #### (1)/upload_qa - 用于上传问答文件,返回处理任务 ID。 #### (2)/operate_qa - 对问答库进行操作,包括增删改查。 #### (3)/task_status - 查询上传问答文件的任务状态。 **系统架构图**: ```mermaid graph TD; A[前端] -->|API 请求| B[Flask 应用] B -->|数据库交互| C[MySQL 数据库] B -->|文件处理| D[文件存储] ``` --- ## 6. 相关代码 ### 1. **核心 Flask 应用文件** - **文件名**:`mainserver.py` - **功能**:处理 API 路由逻辑,包含核心业务流程的实现,包括用户验证、问答逻辑、文件上传处理、异步任务管理等。 ### 2. **数据库模型定义文件** - **文件名**:`db_models.py` - **功能**:定义系统所用的数据库表结构及模型,包括用户表、问答知识库表、历史记录表等。 ### 3. **配置文件** - **文件名**:`config.py` - **功能**:存储系统的全局配置参数,包括数据库连接信息、API 密钥等。 --- ## 代码清单 ### **主文件:mainserver.py** - 负责处理核心路由和业务逻辑。 - 示例代码: ```python @app.route("/chat_qa", methods=['POST']) def chat_qa(): token = request.headers.get('token') auth_dict = authaccess(token) if auth_dict['code'] != 200: return {"code": auth_dict['code'], "message": auth_dict['msg']}, auth_dict['code'] # 核心逻辑省略... ``` ### **数据库模型:db_models.py** - 定义所有数据库表结构。 - 示例代码: ```python class QAKnowledge(db.Model): __tablename__ = 'qa_knowledge' sys_id = db.Column(db.Integer, primary_key=True) question = db.Column(db.Text, comment="问题文本") answer = db.Column(LONGTEXT, comment="答案文本") # 其他字段... ``` ### **配置文件:config.py** - 示例配置: ```python class Config: SQLALCHEMY_DATABASE_URI = "mysql+pymysql://user:password@localhost/dbname" SECRET_KEY = "your_secret_key" ``` ---