weida_doc/维达文档.md
2024-12-16 11:22:52 +08:00

6.1 KiB
Raw Permalink Blame History

维达系统设计文档

1. 系统架构设计

描述系统各模块之间的数据交互与流程,需标注数据交互模块的名称和方式,具体设计如下:

  • 数据交互模块
    • 模块间通过 RESTful API 实现数据交互。
    • 数据传输方式采用 JSON 格式。
  • 关键模块
    • 用户管理模块:包括用户注册、登录和权限分配。
    • 问答知识库模块:提供问答记录存储、查询和更新功能。
    • 文件管理模块:实现文件的上传、解析和存储。
    • 向量化模块:将文本内容进行向量化处理,便于相似度计算。
    • 任务管理模块:负责异步任务的状态跟踪。

2. 系统部署的服务器架构

系统基于分布式部署,架构如下:

  • 应用服务器:运行 Flask 应用,提供 API 服务。
  • 数据库服务器:采用 MySQL存储用户数据、知识库数据和日志记录。
  • 端口分配
    • 应用服务器端口:5103
    • 数据库服务端口:默认 MySQL 端口 3306

相关源代码文件

  • mainserver.pyFlask 应用的入口文件。
  • 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. 系统中所有表、字段的说明和表关联

1Roles 表

  • 表名roles
  • 字段描述
    • id (int):主键,角色 ID。
    • name (string):角色名称。

2Users 表

  • 表名users
  • 字段描述
    • id (int):主键,用户 ID。
    • account (string):用户账号。
    • password_hash (string):用户密码哈希。
    • roles (int):关联的角色 ID。

3History 表

  • 表名history
  • 字段描述
    • id (int):主键,历史记录 ID。
    • account (string):用户账号。
    • history (JSON):操作历史。
    • datetime (datetime):操作时间。
    • uuid (string):操作标识符。

4LocalKnowledge 表

  • 表名local_knowledge
  • 字段描述
    • id (int):主键,知识库 ID。
    • name (string):知识库名称。
    • files (JSON):文件列表。
    • create_id (int):创建者 ID。
    • private_flag (boolean):是否为私有。

5QAKnowledge 表

  • 表名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

  • 查询上传问答文件的任务状态。

系统架构图

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

  • 负责处理核心路由和业务逻辑。
  • 示例代码:
@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

  • 定义所有数据库表结构。
  • 示例代码:
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

  • 示例配置:
class Config:
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://user:password@localhost/dbname"
    SECRET_KEY = "your_secret_key"