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

193 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 维达系统设计文档
## 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. 系统中所有表、字段的说明和表关联
### 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
- 查询上传问答文件的任务状态。
**系统架构图**
```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"
```
---