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"
|
||
```
|
||
|
||
--- |