6.1 KiB
6.1 KiB
维达系统设计文档
1. 系统架构设计
描述系统各模块之间的数据交互与流程,需标注数据交互模块的名称和方式,具体设计如下:
- 数据交互模块:
- 模块间通过 RESTful API 实现数据交互。
- 数据传输方式采用 JSON 格式。
- 关键模块:
- 用户管理模块:包括用户注册、登录和权限分配。
- 问答知识库模块:提供问答记录存储、查询和更新功能。
- 文件管理模块:实现文件的上传、解析和存储。
- 向量化模块:将文本内容进行向量化处理,便于相似度计算。
- 任务管理模块:负责异步任务的状态跟踪。
2. 系统部署的服务器架构
系统基于分布式部署,架构如下:
- 应用服务器:运行 Flask 应用,提供 API 服务。
- 数据库服务器:采用 MySQL,存储用户数据、知识库数据和日志记录。
- 端口分配:
- 应用服务器端口:
5103
- 数据库服务端口:默认 MySQL 端口
3306
- 应用服务器端口:
相关源代码文件:
mainserver.py
:Flask 应用的入口文件。config.py
:存储配置文件,包括数据库连接等信息。
3. 系统功能的业务流程和标准流程步骤
核心功能:
(1)用户管理
- 业务流程:
- 用户通过
/regist
进行注册。 - 系统校验用户输入信息,若无冲突则写入数据库。
- 用户通过
/login
登录,返回权限标识。
- 用户通过
- 实现文件:
mainserver.py
:包含用户注册和登录的逻辑。- 数据表:
users
:存储用户账号及密码。
(2)问答知识库管理
- 业务流程:
- 用户上传问答文件,通过
/upload_qa
接口。 - 系统解析文件,分割内容并存储到数据库。
- 用户通过
/operate_qa
查询、编辑、删除问答记录。 - 问答检索通过
/chat_qa
完成,支持模糊查询。
- 用户上传问答文件,通过
- 实现文件:
mainserver.py
:包含问答知识库的解析和存储逻辑。- 数据表:
qa_knowledge
:存储问答记录。
(3)向量化处理
- 业务流程:
- 上传的文本内容由
add_qa_task_
方法解析。 - 使用 FAISS 向量化文本并存储。
- 系统通过
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
- 查询上传问答文件的任务状态。
系统架构图:
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"