193 lines
6.1 KiB
Markdown
193 lines
6.1 KiB
Markdown
|
# 维达系统设计文档
|
|||
|
|
|||
|
## 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"
|
|||
|
```
|
|||
|
|
|||
|
---
|