forked from xiaohei/taiji-AI-PAD
fix: 修复MCP Agent注册数据库问题并添加数据库设计文档
任务1: 修复Agent注册找不到库的问题 - 问题: agents表不存在,导致Agent注册失败 - 解决: 手动执行数据库初始化,创建所有表 - 结果: 所有核心表已创建(users, agents, tools, sessions, executions, api_keys, billing, audit_logs) 任务2: 创建数据库设计文档 - 文档位置: Docs/项目文档/数据库设计文档.md - 内容包含: * 数据库架构概述(PostgreSQL、Redis、NATS) * 8个核心数据表详细设计(字段、索引、关联关系) * Redis缓存设计和Key规范 * NATS消息队列主题设计 * 数据流转和处理流程 * 数据库使用场景 * 数据库初始化和维护指南 * 数据安全和备份策略 数据库系统: - PostgreSQL: 主数据库,存储持久化数据(8个核心表) - Redis: 缓存和会话存储 - NATS: 消息队列和事件流 修复结果: - agents表已创建,Agent注册功能正常 - 所有数据库表结构已文档化
This commit is contained in:
@@ -0,0 +1,687 @@
|
||||
# taiji-AI-PAD 数据库设计文档
|
||||
|
||||
**版本**: v1.0
|
||||
**创建时间**: 2025年12月23日
|
||||
**最后更新**: 2025年12月23日
|
||||
|
||||
---
|
||||
|
||||
## 📋 目录
|
||||
|
||||
1. [数据库架构概述](#数据库架构概述)
|
||||
2. [PostgreSQL 数据库设计](#postgresql-数据库设计)
|
||||
3. [Redis 缓存设计](#redis-缓存设计)
|
||||
4. [NATS 消息队列](#nats-消息队列)
|
||||
5. [数据库使用场景](#数据库使用场景)
|
||||
6. [数据流转和处理](#数据流转和处理)
|
||||
7. [数据库初始化](#数据库初始化)
|
||||
|
||||
---
|
||||
|
||||
## 1. 数据库架构概述
|
||||
|
||||
### 1.1 使用的数据库系统
|
||||
|
||||
taiji-AI-PAD 系统使用三种数据库/存储系统:
|
||||
|
||||
| 数据库系统 | 用途 | 端口 | 容器名称 |
|
||||
|-----------|------|------|----------|
|
||||
| **PostgreSQL** | 关系型数据库,存储持久化数据 | 5432 | taiji-postgres |
|
||||
| **Redis** | 缓存和会话存储 | 6379 | taiji-redis |
|
||||
| **NATS** | 消息队列和事件流 | 4222 | taiji-nats |
|
||||
|
||||
### 1.2 数据库架构图
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ 应用服务层 │
|
||||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||||
│ │ MCP Server │ │ Data Ingestion│ │ LiteLLM │ │
|
||||
│ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │
|
||||
└─────────┼──────────────────┼──────────────────┼─────────┘
|
||||
│ │ │
|
||||
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
|
||||
│ PostgreSQL │ │ Redis │ │ NATS │
|
||||
│ (主数据库) │ │ (缓存) │ │ (消息队列) │
|
||||
└────────────┘ └───────────┘ └───────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. PostgreSQL 数据库设计
|
||||
|
||||
### 2.1 数据库信息
|
||||
|
||||
- **数据库名**: `taiji_db`
|
||||
- **用户名**: `taiji_user`
|
||||
- **密码**: `taiji_pass`
|
||||
- **字符集**: UTF-8
|
||||
- **时区**: UTC
|
||||
|
||||
### 2.2 数据表设计
|
||||
|
||||
#### 2.2.1 users (用户表)
|
||||
|
||||
**用途**: 存储系统用户信息
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 用户ID | PRIMARY KEY |
|
||||
| username | VARCHAR(50) | 用户名 | UNIQUE, NOT NULL |
|
||||
| email | VARCHAR(255) | 邮箱 | UNIQUE, NOT NULL |
|
||||
| hashed_password | VARCHAR(255) | 加密密码 | NOT NULL |
|
||||
| full_name | VARCHAR(100) | 全名 | |
|
||||
| is_active | BOOLEAN | 是否激活 | DEFAULT TRUE |
|
||||
| is_admin | BOOLEAN | 是否管理员 | DEFAULT FALSE |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_user_username` (username)
|
||||
- `idx_user_email` (email)
|
||||
|
||||
**关联关系**:
|
||||
- 一对多: `agents` (用户拥有的Agent)
|
||||
- 一对多: `sessions` (用户的会话)
|
||||
|
||||
**处理逻辑**:
|
||||
- 密码使用 bcrypt 加密存储
|
||||
- 创建时自动生成 UUID
|
||||
- 支持软删除(通过 is_active 字段)
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.2 agents (Agent表)
|
||||
|
||||
**用途**: 存储AI Agent的定义和配置
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | Agent ID | PRIMARY KEY |
|
||||
| name | VARCHAR(100) | Agent名称 | NOT NULL |
|
||||
| description | TEXT | 描述 | |
|
||||
| role | VARCHAR(200) | Agent角色定义 | NOT NULL |
|
||||
| goal | TEXT | Agent目标 | NOT NULL |
|
||||
| config | JSON | Agent配置信息 | DEFAULT {} |
|
||||
| tools | JSON | 授权使用的工具列表 | DEFAULT [] |
|
||||
| capabilities | JSON | Agent能力列表 | DEFAULT [] |
|
||||
| status | VARCHAR(20) | 状态 | DEFAULT 'active' |
|
||||
| version | VARCHAR(20) | 版本号 | DEFAULT '1.0.0' |
|
||||
| total_executions | INTEGER | 总执行次数 | DEFAULT 0 |
|
||||
| success_rate | FLOAT | 成功率 | DEFAULT 0.0 |
|
||||
| avg_execution_time | FLOAT | 平均执行时间(ms) | DEFAULT 0.0 |
|
||||
| owner_id | UUID | 所有者ID | FOREIGN KEY, NOT NULL |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_agent_name` (name)
|
||||
- `idx_agent_owner` (owner_id)
|
||||
- `idx_agent_status` (status)
|
||||
- `uq_agent_name_owner` (name, owner_id) - 唯一约束
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `users` (所有者)
|
||||
- 一对多: `executions` (执行记录)
|
||||
|
||||
**处理逻辑**:
|
||||
- 每个用户在同一名称下只能有一个Agent(唯一约束)
|
||||
- status 字段: `active`, `inactive`, `error`
|
||||
- tools 和 capabilities 以 JSON 数组存储
|
||||
- 自动统计执行次数和成功率
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.3 tools (工具表)
|
||||
|
||||
**用途**: 存储可用的工具定义(API、函数等)
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 工具ID | PRIMARY KEY |
|
||||
| name | VARCHAR(100) | 工具名称 | NOT NULL |
|
||||
| description | TEXT | 描述 | |
|
||||
| category | VARCHAR(50) | 分类 | |
|
||||
| schema | JSON | OpenAPI/Pydantic schema | NOT NULL |
|
||||
| endpoint | VARCHAR(500) | API端点URL | |
|
||||
| method | VARCHAR(10) | HTTP方法 | DEFAULT 'POST' |
|
||||
| auth_type | VARCHAR(20) | 认证类型 | |
|
||||
| auth_config | JSON | 认证配置 | DEFAULT {} |
|
||||
| rate_limit | INTEGER | 速率限制(次/分钟) | DEFAULT 100 |
|
||||
| cost_per_call | FLOAT | 每次调用成本(EU) | DEFAULT 0.0 |
|
||||
| timeout | INTEGER | 超时时间(秒) | DEFAULT 30 |
|
||||
| is_active | BOOLEAN | 是否激活 | DEFAULT TRUE |
|
||||
| is_public | BOOLEAN | 是否公开 | DEFAULT FALSE |
|
||||
| total_calls | INTEGER | 总调用次数 | DEFAULT 0 |
|
||||
| success_rate | FLOAT | 成功率 | DEFAULT 0.0 |
|
||||
| avg_response_time | FLOAT | 平均响应时间 | DEFAULT 0.0 |
|
||||
| owner_id | UUID | 所有者ID | FOREIGN KEY |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_tool_name` (name)
|
||||
- `idx_tool_category` (category)
|
||||
- `idx_tool_active` (is_active)
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `users` (所有者,可选)
|
||||
|
||||
**处理逻辑**:
|
||||
- schema 字段存储完整的工具定义(参数、返回值等)
|
||||
- 支持多种认证类型: `api_key`, `oauth`, `basic`
|
||||
- 自动统计调用次数和成功率
|
||||
- is_public 控制工具是否对所有用户可见
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.4 sessions (会话表)
|
||||
|
||||
**用途**: 存储用户会话和上下文信息
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 会话ID | PRIMARY KEY |
|
||||
| session_id | VARCHAR(100) | 会话标识符 | UNIQUE, NOT NULL |
|
||||
| context | JSON | 会话上下文 | DEFAULT {} |
|
||||
| session_metadata | JSON | 元数据 | DEFAULT {} |
|
||||
| status | VARCHAR(20) | 状态 | DEFAULT 'active' |
|
||||
| user_id | UUID | 用户ID | FOREIGN KEY, NOT NULL |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_session_id` (session_id)
|
||||
- `idx_session_user` (user_id)
|
||||
- `idx_session_status` (status)
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `users` (用户)
|
||||
- 一对多: `executions` (执行记录)
|
||||
|
||||
**处理逻辑**:
|
||||
- context 存储会话的上下文信息(对话历史等)
|
||||
- status 字段: `active`, `completed`, `failed`
|
||||
- session_metadata 存储额外的元数据信息
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.5 executions (执行记录表)
|
||||
|
||||
**用途**: 存储Agent执行记录和资源消耗
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 执行ID | PRIMARY KEY |
|
||||
| execution_id | VARCHAR(100) | 执行标识符 | UNIQUE, NOT NULL |
|
||||
| method | VARCHAR(50) | MCP方法名 | NOT NULL |
|
||||
| params | JSON | 执行参数 | DEFAULT {} |
|
||||
| result | JSON | 执行结果 | DEFAULT {} |
|
||||
| error | TEXT | 错误信息 | |
|
||||
| started_at | TIMESTAMP | 开始时间 | NOT NULL |
|
||||
| completed_at | TIMESTAMP | 完成时间 | |
|
||||
| execution_time | FLOAT | 执行时间(毫秒) | |
|
||||
| status | VARCHAR(20) | 状态 | NOT NULL |
|
||||
| cpu_usage | FLOAT | CPU使用率 | DEFAULT 0.0 |
|
||||
| memory_usage | FLOAT | 内存使用(MB) | DEFAULT 0.0 |
|
||||
| network_io | FLOAT | 网络IO(KB) | DEFAULT 0.0 |
|
||||
| eu_consumed | FLOAT | 消耗的执行单元 | DEFAULT 0.0 |
|
||||
| agent_id | UUID | Agent ID | FOREIGN KEY, NOT NULL |
|
||||
| session_id | UUID | 会话ID | FOREIGN KEY |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_execution_id` (execution_id)
|
||||
- `idx_execution_agent` (agent_id)
|
||||
- `idx_execution_status` (status)
|
||||
- `idx_execution_started` (started_at)
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `agents` (所属Agent)
|
||||
- 多对一: `sessions` (所属会话,可选)
|
||||
- 一对多: `billing` (计费记录)
|
||||
|
||||
**处理逻辑**:
|
||||
- 记录每次Agent执行的详细信息
|
||||
- 跟踪资源消耗(CPU、内存、网络、存储)
|
||||
- status 字段: `running`, `completed`, `failed`
|
||||
- eu_consumed 用于计费系统
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.6 api_keys (API密钥表)
|
||||
|
||||
**用途**: 存储用户API密钥
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 密钥ID | PRIMARY KEY |
|
||||
| name | VARCHAR(100) | 密钥名称 | NOT NULL |
|
||||
| key_hash | VARCHAR(255) | 哈希后的密钥 | NOT NULL |
|
||||
| prefix | VARCHAR(20) | 密钥前缀 | NOT NULL |
|
||||
| scopes | JSON | 权限范围 | DEFAULT [] |
|
||||
| rate_limit | INTEGER | 速率限制 | DEFAULT 1000 |
|
||||
| is_active | BOOLEAN | 是否激活 | DEFAULT TRUE |
|
||||
| expires_at | TIMESTAMP | 过期时间 | |
|
||||
| last_used_at | TIMESTAMP | 最后使用时间 | |
|
||||
| total_requests | INTEGER | 总请求数 | DEFAULT 0 |
|
||||
| user_id | UUID | 用户ID | FOREIGN KEY, NOT NULL |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_api_key_hash` (key_hash)
|
||||
- `idx_api_key_prefix` (prefix)
|
||||
- `idx_api_key_user` (user_id)
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `users` (所有者)
|
||||
|
||||
**处理逻辑**:
|
||||
- 密钥以哈希形式存储,不存储明文
|
||||
- prefix 用于快速识别密钥类型
|
||||
- scopes 定义密钥的权限范围
|
||||
- 支持过期时间和使用统计
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.7 billing (计费记录表)
|
||||
|
||||
**用途**: 存储执行单元的计费记录
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 计费ID | PRIMARY KEY |
|
||||
| eu_consumed | FLOAT | 消耗的执行单元 | NOT NULL |
|
||||
| cost | FLOAT | 成本 | NOT NULL |
|
||||
| currency | VARCHAR(3) | 货币 | DEFAULT 'USD' |
|
||||
| cpu_time | FLOAT | CPU时间(秒) | DEFAULT 0.0 |
|
||||
| memory_max | FLOAT | 峰值内存(MB) | DEFAULT 0.0 |
|
||||
| network_io | FLOAT | 网络IO(KB) | DEFAULT 0.0 |
|
||||
| storage_io | FLOAT | 存储IO(KB) | DEFAULT 0.0 |
|
||||
| execution_id | UUID | 执行ID | FOREIGN KEY, NOT NULL |
|
||||
| user_id | UUID | 用户ID | FOREIGN KEY, NOT NULL |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_billing_execution` (execution_id)
|
||||
- `idx_billing_user` (user_id)
|
||||
- `idx_billing_created` (created_at)
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `executions` (执行记录)
|
||||
- 多对一: `users` (用户)
|
||||
|
||||
**处理逻辑**:
|
||||
- 每条执行记录对应一条计费记录
|
||||
- eu_consumed 基于资源消耗计算
|
||||
- 支持多货币计费
|
||||
|
||||
---
|
||||
|
||||
#### 2.2.8 audit_logs (审计日志表)
|
||||
|
||||
**用途**: 存储系统操作审计日志
|
||||
|
||||
| 字段名 | 类型 | 说明 | 约束 |
|
||||
|--------|------|------|------|
|
||||
| id | UUID | 日志ID | PRIMARY KEY |
|
||||
| action | VARCHAR(50) | 操作类型 | NOT NULL |
|
||||
| resource_type | VARCHAR(50) | 资源类型 | NOT NULL |
|
||||
| resource_id | VARCHAR(100) | 资源ID | |
|
||||
| details | JSON | 操作详情 | DEFAULT {} |
|
||||
| ip_address | VARCHAR(45) | IP地址 | |
|
||||
| user_agent | TEXT | 用户代理 | |
|
||||
| success | BOOLEAN | 是否成功 | NOT NULL |
|
||||
| error_message | TEXT | 错误信息 | |
|
||||
| user_id | UUID | 用户ID | FOREIGN KEY |
|
||||
| created_at | TIMESTAMP | 创建时间 | NOT NULL |
|
||||
| updated_at | TIMESTAMP | 更新时间 | NOT NULL |
|
||||
|
||||
**索引**:
|
||||
- `idx_audit_action` (action)
|
||||
- `idx_audit_resource` (resource_type, resource_id)
|
||||
- `idx_audit_user` (user_id)
|
||||
- `idx_audit_created` (created_at)
|
||||
|
||||
**关联关系**:
|
||||
- 多对一: `users` (操作用户,可选)
|
||||
|
||||
**处理逻辑**:
|
||||
- 记录所有关键操作(创建、更新、删除等)
|
||||
- details 字段存储操作的详细信息
|
||||
- 支持成功和失败两种状态记录
|
||||
|
||||
---
|
||||
|
||||
### 2.3 LiteLLM 相关表
|
||||
|
||||
PostgreSQL 中还包含 LiteLLM Gateway 使用的表:
|
||||
|
||||
- **LiteLLM_Config**: LiteLLM 配置信息
|
||||
- **LiteLLM_UserTable**: LiteLLM 用户表
|
||||
- **LiteLLM_VerificationToken**: LiteLLM 验证令牌表
|
||||
|
||||
这些表由 LiteLLM 自动管理,用于模型网关的用户管理和配置。
|
||||
|
||||
---
|
||||
|
||||
## 3. Redis 缓存设计
|
||||
|
||||
### 3.1 Redis 用途
|
||||
|
||||
Redis 在系统中主要用于:
|
||||
|
||||
1. **Token 缓存**: 存储 JWT Token 和 Refresh Token
|
||||
2. **会话缓存**: 缓存用户会话信息
|
||||
3. **工具定义缓存**: 缓存工具定义,减少数据库查询
|
||||
4. **API 响应缓存**: 缓存 API 调用结果
|
||||
5. **速率限制**: 实现 API 速率限制
|
||||
6. **实时数据**: 存储实时统计数据
|
||||
|
||||
### 3.2 Redis Key 设计规范
|
||||
|
||||
```
|
||||
# Token 相关
|
||||
token:access:{user_id}:{token_hash} # Access Token
|
||||
token:refresh:{user_id}:{token_hash} # Refresh Token
|
||||
token:blacklist:{token_hash} # Token 黑名单
|
||||
|
||||
# 会话相关
|
||||
session:{session_id} # 会话信息
|
||||
session:user:{user_id} # 用户会话列表
|
||||
|
||||
# 工具相关
|
||||
tool:def:{tool_id} # 工具定义
|
||||
tool:cache:{tool_name} # 工具缓存
|
||||
|
||||
# API 缓存
|
||||
api:cache:{endpoint}:{params_hash} # API 响应缓存
|
||||
|
||||
# 速率限制
|
||||
rate:limit:{user_id}:{endpoint} # 速率限制计数
|
||||
|
||||
# 统计数据
|
||||
stats:agent:{agent_id}:executions # Agent 执行统计
|
||||
stats:user:{user_id}:usage # 用户使用统计
|
||||
```
|
||||
|
||||
### 3.3 Redis 配置
|
||||
|
||||
- **数据库**: 默认使用 db 0
|
||||
- **持久化**: 根据配置启用 RDB 或 AOF
|
||||
- **过期策略**: 使用 TTL 自动过期
|
||||
- **连接池**: 最大连接数 20
|
||||
|
||||
### 3.4 缓存策略
|
||||
|
||||
1. **Token 缓存**:
|
||||
- Access Token: TTL = 60 分钟
|
||||
- Refresh Token: TTL = 7 天
|
||||
|
||||
2. **工具定义缓存**:
|
||||
- TTL = 1 小时
|
||||
- 工具更新时自动失效
|
||||
|
||||
3. **API 响应缓存**:
|
||||
- TTL = 5 分钟
|
||||
- 根据 endpoint 和参数生成 key
|
||||
|
||||
---
|
||||
|
||||
## 4. NATS 消息队列
|
||||
|
||||
### 4.1 NATS 用途
|
||||
|
||||
NATS 在系统中用于:
|
||||
|
||||
1. **事件发布/订阅**: Agent 执行事件、系统事件
|
||||
2. **异步任务处理**: 长时间运行的任务
|
||||
3. **服务间通信**: 微服务之间的消息传递
|
||||
4. **实时通知**: WebSocket 消息推送
|
||||
|
||||
### 4.2 NATS 主题设计
|
||||
|
||||
```
|
||||
# Agent 相关事件
|
||||
agent.execution.start.{agent_id} # Agent 执行开始
|
||||
agent.execution.complete.{agent_id} # Agent 执行完成
|
||||
agent.execution.error.{agent_id} # Agent 执行错误
|
||||
|
||||
# 计费相关事件
|
||||
billing.record.{user_id} # 计费记录
|
||||
billing.quota.exceeded.{user_id} # 配额超限
|
||||
|
||||
# 系统事件
|
||||
system.health.check # 健康检查
|
||||
system.config.update # 配置更新
|
||||
system.alert.{level} # 系统告警
|
||||
|
||||
# 工具相关事件
|
||||
tool.call.{tool_id} # 工具调用
|
||||
tool.update.{tool_id} # 工具更新
|
||||
```
|
||||
|
||||
### 4.3 NATS 配置
|
||||
|
||||
- **端口**: 4222 (客户端连接)
|
||||
- **JetStream**: 启用,用于持久化消息
|
||||
- **监控端口**: 8222
|
||||
- **路由端口**: 6222
|
||||
|
||||
---
|
||||
|
||||
## 5. 数据库使用场景
|
||||
|
||||
### 5.1 MCP Server 使用场景
|
||||
|
||||
**PostgreSQL**:
|
||||
- 存储用户、Agent、工具、会话、执行记录等核心数据
|
||||
- 支持复杂查询和关联查询
|
||||
- 保证数据一致性和完整性
|
||||
|
||||
**Redis**:
|
||||
- 缓存 Agent 配置和工具定义
|
||||
- 存储 WebSocket 会话信息
|
||||
- 实现速率限制
|
||||
|
||||
**NATS**:
|
||||
- 发布 Agent 执行事件
|
||||
- 处理异步任务
|
||||
- 实时通知 WebSocket 客户端
|
||||
|
||||
### 5.2 Data Ingestion 使用场景
|
||||
|
||||
**PostgreSQL**:
|
||||
- 存储 API 文档和工具定义(可选)
|
||||
|
||||
**Redis**:
|
||||
- 缓存 API 文档处理结果
|
||||
- 缓存工具定义
|
||||
- 存储处理队列
|
||||
|
||||
**NATS**:
|
||||
- 发布新工具注册事件
|
||||
- 通知工具更新
|
||||
|
||||
### 5.3 LiteLLM Gateway 使用场景
|
||||
|
||||
**PostgreSQL**:
|
||||
- 存储 LiteLLM 配置
|
||||
- 存储用户和密钥信息
|
||||
|
||||
**Redis**:
|
||||
- 缓存模型响应
|
||||
- 实现速率限制
|
||||
|
||||
---
|
||||
|
||||
## 6. 数据流转和处理
|
||||
|
||||
### 6.1 Agent 注册流程
|
||||
|
||||
```
|
||||
1. 用户请求创建 Agent
|
||||
↓
|
||||
2. MCP Server 验证请求
|
||||
↓
|
||||
3. 写入 PostgreSQL (agents 表)
|
||||
↓
|
||||
4. 缓存到 Redis (tool:def:{agent_id})
|
||||
↓
|
||||
5. 发布事件到 NATS (agent.created)
|
||||
↓
|
||||
6. 返回 Agent Card
|
||||
```
|
||||
|
||||
### 6.2 Agent 执行流程
|
||||
|
||||
```
|
||||
1. 用户请求执行 Agent
|
||||
↓
|
||||
2. 创建执行记录 (PostgreSQL: executions)
|
||||
↓
|
||||
3. 发布开始事件 (NATS: agent.execution.start)
|
||||
↓
|
||||
4. 执行 Agent 逻辑
|
||||
↓
|
||||
5. 更新执行记录 (PostgreSQL: executions)
|
||||
↓
|
||||
6. 创建计费记录 (PostgreSQL: billing)
|
||||
↓
|
||||
7. 发布完成事件 (NATS: agent.execution.complete)
|
||||
↓
|
||||
8. 更新统计信息 (Redis: stats:agent:{agent_id})
|
||||
↓
|
||||
9. 返回执行结果
|
||||
```
|
||||
|
||||
### 6.3 工具调用流程
|
||||
|
||||
```
|
||||
1. Agent 请求调用工具
|
||||
↓
|
||||
2. 检查 Redis 缓存 (tool:def:{tool_id})
|
||||
↓
|
||||
3. 如果未命中,从 PostgreSQL 查询 (tools 表)
|
||||
↓
|
||||
4. 缓存到 Redis
|
||||
↓
|
||||
5. 执行工具调用
|
||||
↓
|
||||
6. 更新工具统计 (PostgreSQL: tools)
|
||||
↓
|
||||
7. 发布事件 (NATS: tool.call.{tool_id})
|
||||
↓
|
||||
8. 返回结果
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. 数据库初始化
|
||||
|
||||
### 7.1 初始化流程
|
||||
|
||||
1. **创建数据库表**:
|
||||
- 使用 SQLAlchemy 的 `Base.metadata.create_all()` 创建所有表
|
||||
- 自动创建索引和约束
|
||||
|
||||
2. **创建初始数据**:
|
||||
- 创建默认管理员用户 (username: admin, password: admin123)
|
||||
- 创建默认工具 (web_search, text_completion, weather_api)
|
||||
|
||||
3. **初始化检查**:
|
||||
- 检查用户表是否为空
|
||||
- 检查工具表是否为空
|
||||
- 只在首次初始化时创建初始数据
|
||||
|
||||
### 7.2 初始化代码位置
|
||||
|
||||
- **文件**: `services/mcp-server/database.py`
|
||||
- **函数**: `init_db()` 和 `create_initial_data()`
|
||||
- **调用时机**: MCP Server 启动时自动调用
|
||||
|
||||
### 7.3 数据库迁移
|
||||
|
||||
当前使用 SQLAlchemy 的自动建表功能。未来可以使用 Alembic 进行数据库迁移管理。
|
||||
|
||||
---
|
||||
|
||||
## 8. 数据库维护
|
||||
|
||||
### 8.1 备份策略
|
||||
|
||||
- **PostgreSQL**: 定期备份(建议每日)
|
||||
- **Redis**: 根据持久化配置自动备份
|
||||
- **NATS**: JetStream 数据自动持久化
|
||||
|
||||
### 8.2 性能优化
|
||||
|
||||
1. **索引优化**: 所有外键和常用查询字段已建立索引
|
||||
2. **连接池**: PostgreSQL 连接池大小 20
|
||||
3. **查询优化**: 使用异步查询,避免阻塞
|
||||
4. **缓存策略**: 热点数据缓存到 Redis
|
||||
|
||||
### 8.3 监控指标
|
||||
|
||||
- PostgreSQL: 连接数、查询性能、表大小
|
||||
- Redis: 内存使用、命中率、连接数
|
||||
- NATS: 消息吞吐量、连接数、JetStream 状态
|
||||
|
||||
---
|
||||
|
||||
## 9. 数据安全
|
||||
|
||||
### 9.1 数据加密
|
||||
|
||||
- **密码**: 使用 bcrypt 加密存储
|
||||
- **API Key**: 使用哈希存储,不存储明文
|
||||
- **敏感配置**: 存储在环境变量中
|
||||
|
||||
### 9.2 访问控制
|
||||
|
||||
- **数据库访问**: 使用专用用户和密码
|
||||
- **网络隔离**: 数据库仅在 Docker 网络内可访问
|
||||
- **权限控制**: 应用层实现细粒度权限控制
|
||||
|
||||
### 9.3 审计日志
|
||||
|
||||
- 所有关键操作记录到 `audit_logs` 表
|
||||
- 记录操作时间、用户、IP、结果等信息
|
||||
- 支持查询和分析
|
||||
|
||||
---
|
||||
|
||||
## 10. 总结
|
||||
|
||||
### 10.1 数据库选择理由
|
||||
|
||||
- **PostgreSQL**:
|
||||
- 强大的关系型数据库功能
|
||||
- 支持 JSON 字段,灵活存储配置
|
||||
- 良好的性能和可靠性
|
||||
|
||||
- **Redis**:
|
||||
- 高性能缓存
|
||||
- 支持复杂数据结构
|
||||
- 适合实时数据存储
|
||||
|
||||
- **NATS**:
|
||||
- 轻量级消息队列
|
||||
- 支持发布/订阅模式
|
||||
- 低延迟,高吞吐量
|
||||
|
||||
### 10.2 数据一致性
|
||||
|
||||
- **强一致性**: PostgreSQL 保证数据一致性
|
||||
- **最终一致性**: Redis 缓存可能短暂不一致,通过 TTL 和失效机制保证最终一致
|
||||
- **事件驱动**: NATS 事件保证系统间数据同步
|
||||
|
||||
---
|
||||
|
||||
**文档版本**: v1.0
|
||||
**最后更新**: 2025年12月23日
|
||||
**维护者**: taiji-AI-PAD 开发团队
|
||||
|
||||
Reference in New Issue
Block a user