feat: 增加数据库文档
This commit is contained in:
parent
e5c0720650
commit
5025efd2ab
|
|
@ -0,0 +1,311 @@
|
|||
# Luxx 数据库设计文档
|
||||
|
||||
## 1. 数据库概述
|
||||
|
||||
- **类型**: SQLite
|
||||
- **ORM**: SQLAlchemy 2.0
|
||||
- **连接字符串**: `sqlite:///./chat.db`
|
||||
|
||||
## 2. ER 关系图
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
USER {
|
||||
int id PK
|
||||
string username UK
|
||||
string email UK
|
||||
string password_hash
|
||||
string role
|
||||
int permission_level
|
||||
string workspace_path
|
||||
bool is_active
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
LLM_PROVIDER {
|
||||
int id PK
|
||||
int user_id FK
|
||||
string name
|
||||
string provider_type
|
||||
string base_url
|
||||
string api_key
|
||||
string default_model
|
||||
int max_tokens
|
||||
bool is_default
|
||||
bool enabled
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
PROJECT {
|
||||
string id PK
|
||||
int user_id FK
|
||||
string name
|
||||
string description
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
CONVERSATION {
|
||||
string id PK
|
||||
int user_id FK
|
||||
int provider_id FK
|
||||
string title
|
||||
string model
|
||||
text system_prompt
|
||||
float temperature
|
||||
bool thinking_enabled
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
MESSAGE {
|
||||
string id PK
|
||||
string conversation_id FK
|
||||
string role
|
||||
text content
|
||||
int token_count
|
||||
string usage
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
AGENT {
|
||||
string id PK
|
||||
string name
|
||||
string role
|
||||
string avatar
|
||||
text system_prompt
|
||||
int provider_id FK
|
||||
string model
|
||||
string tools
|
||||
bool is_active
|
||||
int priority
|
||||
bool auto_response
|
||||
bool mention_trigger
|
||||
float temperature
|
||||
int max_tokens
|
||||
}
|
||||
|
||||
CHAT_ROOM {
|
||||
string id PK
|
||||
string name
|
||||
string description
|
||||
int owner_id FK
|
||||
bool is_active
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
CHAT_ROOM_AGENT {
|
||||
string id PK
|
||||
string chat_room_id FK
|
||||
string agent_id FK
|
||||
bool is_active
|
||||
datetime joined_at
|
||||
}
|
||||
|
||||
CHAT_ROOM_MESSAGE {
|
||||
string id PK
|
||||
string room_id FK
|
||||
string sender_type
|
||||
string sender_id
|
||||
string sender_name
|
||||
text content
|
||||
string mentions
|
||||
string parent_id
|
||||
int token_count
|
||||
datetime created_at
|
||||
}
|
||||
|
||||
USER ||--o{ LLM_PROVIDER : has
|
||||
USER ||--o{ PROJECT : owns
|
||||
USER ||--o{ CONVERSATION : creates
|
||||
USER ||--o{ CHAT_ROOM : owns
|
||||
USER ||--o{ AGENT : creates
|
||||
LLM_PROVIDER ||--o{ CONVERSATION : powers
|
||||
LLM_PROVIDER ||--o{ AGENT : configures
|
||||
CONVERSATION ||--o{ MESSAGE : contains
|
||||
CHAT_ROOM ||--o{ CHAT_ROOM_MESSAGE : contains
|
||||
CHAT_ROOM ||--o{ CHAT_ROOM_AGENT : has
|
||||
AGENT ||--o{ CHAT_ROOM_AGENT : joins
|
||||
```
|
||||
|
||||
## 3. 表设计
|
||||
|
||||
### users 用户表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK | 用户 ID |
|
||||
| username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 |
|
||||
| email | VARCHAR(120) | UNIQUE | 邮箱 |
|
||||
| password_hash | VARCHAR(255) | - | 密码哈希 |
|
||||
| role | VARCHAR(20) | DEFAULT 'user' | 角色 |
|
||||
| permission_level | INTEGER | DEFAULT 1 | 权限等级 |
|
||||
| workspace_path | VARCHAR(500) | - | 工作空间路径 |
|
||||
| is_active | BOOLEAN | DEFAULT 1 | 是否激活 |
|
||||
| created_at | DATETIME | - | 创建时间 |
|
||||
|
||||
**权限等级:** 1=READ_ONLY, 2=WRITE, 3=EXECUTE, 4=ADMIN
|
||||
|
||||
### llm_providers LLM 提供商表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PK | 提供商 ID |
|
||||
| user_id | INTEGER | FK(users.id) | 所属用户 |
|
||||
| name | VARCHAR(100) | NOT NULL | 提供商名称 |
|
||||
| provider_type | VARCHAR(50) | NOT NULL | 类型 |
|
||||
| base_url | VARCHAR(500) | NOT NULL | API 地址 |
|
||||
| api_key | VARCHAR(500) | NOT NULL | API 密钥 |
|
||||
| default_model | VARCHAR(100) | NOT NULL | 默认模型 |
|
||||
| max_tokens | INTEGER | DEFAULT 8192 | 最大 token |
|
||||
| is_default | BOOLEAN | DEFAULT 0 | 是否默认 |
|
||||
| enabled | BOOLEAN | DEFAULT 1 | 是否启用 |
|
||||
|
||||
### projects 项目表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | 项目 ID |
|
||||
| user_id | INTEGER | FK(users.id) | 所属用户 |
|
||||
| name | VARCHAR(255) | NOT NULL | 项目名称 |
|
||||
| description | TEXT | - | 描述 |
|
||||
| created_at | DATETIME | - | 创建时间 |
|
||||
|
||||
### conversations 会话表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | 会话 ID |
|
||||
| user_id | INTEGER | FK(users.id) | 所属用户 |
|
||||
| provider_id | INTEGER | FK(llm_providers.id) | LLM 提供商 |
|
||||
| title | VARCHAR(255) | NOT NULL | 会话标题 |
|
||||
| model | VARCHAR(64) | NOT NULL | 模型名称 |
|
||||
| system_prompt | TEXT | NOT NULL | 系统提示词 |
|
||||
| temperature | FLOAT | DEFAULT 0.7 | 温度参数 |
|
||||
| max_tokens | INTEGER | DEFAULT 2000 | 最大 token |
|
||||
| thinking_enabled | BOOLEAN | DEFAULT 0 | 思维链开关 |
|
||||
|
||||
### messages 消息表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | 消息 ID |
|
||||
| conversation_id | VARCHAR(64) | FK(conversations.id) | 所属会话 |
|
||||
| role | VARCHAR(16) | NOT NULL | user/assistant/system/tool |
|
||||
| content | TEXT | NOT NULL | JSON 格式内容 |
|
||||
| token_count | INTEGER | DEFAULT 0 | Token 数 |
|
||||
| usage | TEXT | - | Token 使用统计 |
|
||||
| created_at | DATETIME | - | 创建时间 |
|
||||
|
||||
**content 格式:** `{"text": "...", "steps": [...]}`
|
||||
|
||||
### agents Agent 表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | Agent ID |
|
||||
| name | VARCHAR(50) | NOT NULL | 名称 |
|
||||
| role | VARCHAR(50) | NOT NULL | 角色类型 |
|
||||
| avatar | VARCHAR(500) | - | 头像 URL |
|
||||
| system_prompt | TEXT | NOT NULL | 系统提示词 |
|
||||
| provider_id | INTEGER | FK(llm_providers.id) | LLM 提供商 |
|
||||
| model | VARCHAR(100) | - | 模型 |
|
||||
| tools | TEXT | - | 工具列表(JSON 数组) |
|
||||
| is_active | BOOLEAN | DEFAULT 1 | 是否启用 |
|
||||
| priority | INTEGER | DEFAULT 5 | 优先级 |
|
||||
| auto_response | BOOLEAN | DEFAULT 1 | 自动响应 |
|
||||
| mention_trigger | BOOLEAN | DEFAULT 0 | @ 触发 |
|
||||
| temperature | FLOAT | DEFAULT 0.7 | 温度 |
|
||||
| max_tokens | INTEGER | DEFAULT 2048 | 最大 token |
|
||||
|
||||
### chat_rooms 聊天室表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | 聊天室 ID |
|
||||
| name | VARCHAR(100) | NOT NULL | 聊天室名称 |
|
||||
| description | TEXT | - | 描述 |
|
||||
| owner_id | INTEGER | FK(users.id) | 所有者 |
|
||||
| is_active | BOOLEAN | DEFAULT 1 | 是否启用 |
|
||||
| created_at | DATETIME | - | 创建时间 |
|
||||
|
||||
### chat_room_agents 聊天室成员表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | 关联 ID |
|
||||
| chat_room_id | VARCHAR(64) | FK(chat_rooms.id) | 聊天室 ID |
|
||||
| agent_id | VARCHAR(64) | FK(agents.id) | Agent ID |
|
||||
| is_active | BOOLEAN | DEFAULT 1 | 是否启用 |
|
||||
| joined_at | DATETIME | - | 加入时间 |
|
||||
|
||||
### chat_room_messages 聊天室消息表
|
||||
|
||||
| 字段 | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | VARCHAR(64) | PK | 消息 ID |
|
||||
| room_id | VARCHAR(64) | FK(chat_rooms.id) | 聊天室 ID |
|
||||
| sender_type | VARCHAR(16) | NOT NULL | user/agent/system |
|
||||
| sender_id | VARCHAR(64) | NOT NULL | 发送者 ID |
|
||||
| sender_name | VARCHAR(50) | NOT NULL | 发送者名称 |
|
||||
| content | TEXT | NOT NULL | 消息内容 |
|
||||
| mentions | TEXT | - | @ 提及列表(JSON) |
|
||||
| parent_id | VARCHAR(64) | - | 回复的消息 ID |
|
||||
| token_count | INTEGER | DEFAULT 0 | Token 数 |
|
||||
| created_at | DATETIME | - | 创建时间 |
|
||||
|
||||
## 4. 流程图
|
||||
|
||||
### 消息流
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as 用户
|
||||
participant WS as WebSocket
|
||||
participant R as ChatRoomService
|
||||
participant A as Agent
|
||||
participant LLM as LLM
|
||||
|
||||
U->>WS: 发送消息
|
||||
WS->>R: dispatch
|
||||
R->>A: 触发 Agent
|
||||
A->>LLM: stream_call
|
||||
LLM-->>A: SSE 流
|
||||
A-->>WS: process_step
|
||||
WS-->>U: 实时推送
|
||||
```
|
||||
|
||||
### Agent 调度
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[用户消息] --> B{有 @ 提及?}
|
||||
|
||||
B -->|是| C[触发指定 Agent]
|
||||
B -->|否| D[触发 auto_response Agent]
|
||||
|
||||
C --> E[并行调用]
|
||||
D --> E
|
||||
E --> F[流式响应]
|
||||
F --> G[聚合结果]
|
||||
G --> H[WebSocket 推送]
|
||||
```
|
||||
|
||||
## 5. 索引
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
subgraph indexes[推荐索引]
|
||||
I1[users.username UNIQUE]
|
||||
I2[users.email UNIQUE]
|
||||
I3[conversations.user_id]
|
||||
I4[messages.conversation_id]
|
||||
I5[chat_rooms.owner_id]
|
||||
I6[chat_room_messages.room_id]
|
||||
end
|
||||
```
|
||||
|
||||
## 6. 迁移
|
||||
|
||||
```python
|
||||
from luxx.core.database import init_db
|
||||
init_db() # 创建所有表
|
||||
```
|
||||
Loading…
Reference in New Issue