第28章 AI模型管理与数据治理
本章导读
学习目标
完成本章学习后,你将能够:
- ✅ 理解 AI 模型池的架构和管理机制
- ✅ 掌握多 AI 提供商的配置和切换方法
- ✅ 理解数据导入导出、备份恢复等数据治理机制
- ✅ 掌握大屏仪表盘的设计和实现
- ✅ 掌握 SSH 密钥的安全管理和分发
前置知识
- 已完成第17章(知识库与 RAG 系统)
- 已完成第18章(AI Copilot 实现原理)
- 已完成第19章(Docker 容器化与部署)
预计学习时间
60-90 分钟
28.1 AI 模型管理
28.1.1 多模型架构
┌──────────────────────────────────────────┐
│ AI 模型池 (ai_models 表) │
│ ┌─────────┐ ┌─────────┐ ┌────────────┐ │
│ │ Doubao │ │ OpenAI │ │ Local AI │ │
│ │ 豆包 │ │ GPT-4o │ │ Ollama │ │
│ └─────────┘ └─────────┘ └────────────┘ │
└──────────────────┬───────────────────────┘
│
┌──────────────────▼───────────────────────┐
│ 模型调度 (aiModelService.ts) │
│ - 健康检查 │
│ - 负载均衡 │
│ - 自动切换 │
│ - 降级策略 │
└──────────────────┬───────────────────────┘
│
┌──────────────────▼───────────────────────┐
│ LLM 服务 (llmService.ts) │
│ - 统一调用接口 │
│ - 熔断器 │
│ - 重试机制 │
│ - Token 计数 │
└──────────────────────────────────────────┘28.1.2 模型管理数据结构
typescript
interface AIModel {
id: number;
name: string;
provider: 'doubao' | 'openai' | 'local';
api_base: string;
api_key: string; // AES-256-GCM 加密存储
model_name: string;
enabled: boolean;
is_default: boolean;
priority: number; // 优先级,用于负载均衡
health_status: 'healthy' | 'degraded' | 'error';
last_health_check: string;
// 统计信息
total_requests: number;
total_tokens: number;
success_rate: number;
avg_response_time: number;
created_at: string;
updated_at: string;
}28.1.3 支持的 AI 提供商
| 提供商 | 部署方式 | 适用场景 | 成本 |
|---|---|---|---|
| 豆包 (Doubao) | 云端 API | 通用对话、知识库问答 | 按 Token 计费 |
| OpenAI | 云端 API | 高质量对话、代码生成 | 按 Token 计费 |
| Ollama | 本地部署 | 数据敏感场景、离线使用 | 免费(本地 GPU) |
| LM Studio | 本地部署 | 开发测试环境 | 免费(本地 GPU) |
| vLLM | 本地部署 | 生产环境高并发场景 | 免费(本地 GPU) |
28.1.4 模型调度策略
- 默认模型:优先使用标记为 default 的模型
- 负载均衡:多个模型同时启用时,按优先级和成功率分配
- 健康检查:定期检测模型可用性,标记异常模型
- 自动切换:主模型异常时自动切换到备用模型
- 熔断器:连续失败 5 次后触发熔断,30 秒后恢复
28.1.5 健康检查机制
检查流程:
1. 定时任务触发(每 5 分钟)
↓
2. 对每个启用的模型发送测试请求
↓
3. 记录响应时间和成功率
↓
4. 更新健康状态
├── healthy: 响应正常,成功率 > 95%
├── degraded: 响应慢或成功率 80-95%
└── error: 连续失败或成功率 < 80%
↓
5. 如果主模型变为 error,自动切换到备用模型28.1.6 前端管理 (AIModels.tsx)
- 模型列表展示
- 新增/编辑/删除模型
- 健康状态可视化(绿色/黄色/红色指示器)
- 统计信息展示(请求数、成功率、响应时间)
- 默认模型切换
- API 配置测试按钮
28.2 数据导入导出
28.2.1 导入功能详解
支持格式:
- CSV:Excel 可直接打开的标准格式
- JSON:结构化数据,适合程序处理
导入流程:
1. 上传文件(CSV/JSON)
↓
2. 解析文件
↓
3. 数据验证
├── 必填字段检查
├── 格式验证(IP 地址、端口号等)
└── SSH 连通性测试(可选)
↓
4. 去重检查(hostname + name 联合去重)
↓
5. 事务导入(全成功或全失败)
↓
6. 返回导入报告
├── 成功数量
├── 失败数量
└── 每行错误详情关键实现 (serverImportService.ts):
- 使用事务保证数据一致性
- 逐行验证,详细错误报告
- 智能去重算法
- 孤儿数据清理
28.2.2 CSV 导入格式要求
服务器列表 CSV 模板:
csv
name,hostname,ip,port,os,username,password,tags,description
Web-Server-01,web01,192.168.1.10,22,Ubuntu 22.04,root,password123,web;prod,主 Web 服务器
DB-Server-01,db01,192.168.1.20,22,CentOS 8,root,password456,db;prod,MySQL 数据库服务器必填字段:
name:服务器名称(唯一)hostname:主机名ip:IP 地址(格式验证)
可选字段:
port:SSH 端口(默认 22)os:操作系统username:SSH 用户名password:SSH 密码(AES-256 加密存储)tags:标签(分号分隔)description:描述
28.2.3 导出功能详解
支持导出的数据:
| 数据类型 | 格式 | 用途 |
|---|---|---|
| 服务器列表 | CSV/JSON | 资产管理、批量导入 |
| 告警数据 | CSV/JSON | 告警分析、报告 |
| 审计日志 | CSV/JSON | 审计、合规检查 |
| 报表 | CSV/JSON | 汇报、归档 |
CSV 导出特性:
- UTF-8 BOM 头(Excel 中文不乱码)
- 日期格式标准化
- 字段名使用中文(便于理解)
28.3 备份恢复
28.3.1 备份机制
备份流程:
1. 触发备份(手动/定时)
↓
2. 导出数据库(SQLite 文件)
↓
3. Gzip 压缩
↓
4. 完整性校验(文件大小验证)
↓
5. 存储到备份目录
↓
6. 记录备份元数据备份管理:
- 手动备份:用户手动触发
- 定时备份:通过定时任务自动执行
- 压缩存储:gzip 压缩节省空间
- 完整性校验:恢复前验证备份文件
28.3.2 恢复流程
1. 选择备份文件
↓
2. 完整性校验
↓
3. 解压备份文件
↓
4. 替换当前数据库
↓
5. 清理临时文件
↓
6. 自动优雅重启(确保数据一致性)安全机制:
- 恢复前自动验证备份完整性
- 恢复后自动重启服务
- 30 秒超时保护(防止重启卡死)
- 恢复操作审计记录
28.3.3 跨平台兼容
- Windows:使用 Node.js 内置
zlib库(避免spawn('gzip')依赖) - Linux/macOS:同样使用
zlib库,保持全平台一致 - 全平台可用:无需额外依赖
28.3.4 备份策略建议
| 场景 | 频率 | 保留时间 | 存储位置 |
|---|---|---|---|
| 开发环境 | 每周 | 30 天 | 本地 |
| 测试环境 | 每天 | 7 天 | 本地 |
| 生产环境 | 每天 + 变更前 | 90 天 | 本地 + 远程 |
28.4 大屏仪表盘
28.4.1 设计目标
- 全可视化:一屏展示系统全貌
- 实时数据:WebSocket 推送实时更新
- 美观展示:适合大屏展示和监控
28.4.2 展示内容
| 模块 | 指标 | 更新频率 |
|---|---|---|
| 服务器统计 | 总数、在线率、资源使用 | 30 秒 |
| 告警统计 | 新建、已确认、已解决 | 实时 |
| 任务执行 | 成功率、平均耗时 | 1 分钟 |
| Agent 调用 | 调用次数、成功率 | 1 分钟 |
| 工作流执行 | 执行次数、趋势 | 1 分钟 |
| 核心指标 | CPU/内存/磁盘曲线 | 30 秒 |
28.4.3 技术实现 (BigScreenDashboard.tsx)
- 全屏模式(F11 或按钮切换)
- 响应式布局(适配不同分辨率)
- 动态图表(使用 Chart.js / ECharts)
- WebSocket 实时推送
- JSON 数据容错(try-catch 防护)
28.4.4 布局设计
┌─────────────────────────────────────────────┐
│ 标题栏:系统运行状态大屏 │
├─────────┬─────────┬─────────┬───────────────┤
│ 服务器 │ 告警 │ 任务 │ Agent 调用 │
│ 总览 │ 统计 │ 统计 │ 统计 │
├─────────┴─────────┴─────────┴───────────────┤
│ 服务器资源使用趋势图(实时) │
├─────────────────────────┬───────────────────┤
│ 告警趋势图(24小时) │ 工作流执行统计 │
├─────────────────────────┴───────────────────┤
│ 最近告警列表(实时滚动) │
└─────────────────────────────────────────────┘28.5 SSH 密钥管理
28.5.1 密钥管理架构
- 存储:
ssh_keys表,私钥 AES-256-GCM 加密 - 分发:服务器关联密钥,执行时自动解密
- 审计:密钥使用记录
- 轮换:支持密钥更新和过期管理
28.5.2 密钥类型支持
| 类型 | 密钥长度 | 安全性 | 推荐场景 |
|---|---|---|---|
| RSA | 2048/4096 | 高 | 通用场景 |
| ED25519 | 256 | 极高 | 推荐首选 |
| ECDSA | 256/384/521 | 高 | 兼容场景 |
28.5.3 密钥生命周期
1. 生成/导入密钥
↓
2. 加密存储(AES-256-GCM)
↓
3. 关联服务器
↓
4. 使用时自动解密
↓
5. 审计记录(谁在何时使用)
↓
6. 轮换/过期更新
↓
7. 废弃清理28.5.4 前端管理 (SSHKeys.tsx)
- 密钥列表展示(名称、类型、创建时间)
- 新增密钥(上传私钥文件或生成新密钥)
- 关联服务器(批量关联)
- 密钥使用统计(使用次数、最近使用时间)
- 密钥轮换(生成新密钥,更新关联服务器)
28.6 实战案例
案例 1:配置本地 AI 模型
场景:公司要求数据不出内网,需使用本地 Ollama 模型
步骤:
- 在 AI 模型管理页面点击"新增模型"
- 填写信息:
- 名称:
本地 Ollama - 提供商:
local - API Base:
http://192.168.1.100:11434 - 模型名称:
qwen2.5:72b - API Key:(留空)
- 名称:
- 点击"测试连接"验证配置
- 保存并设为默认模型
案例 2:批量导入服务器
场景:新采购 100 台服务器需要录入系统
步骤:
- 下载 CSV 模板
- 在 Excel 中填写 100 台服务器信息
- 上传 CSV 文件
- 查看导入报告(成功 98 台,失败 2 台)
- 修正失败的 2 台后重新导入
案例 3:数据库恢复
场景:误操作删除了重要配置,需要从备份恢复
步骤:
- 进入备份管理页面
- 选择最近的备份文件(变更前备份)
- 点击"恢复"
- 确认恢复操作
- 等待系统自动重启
- 验证数据已恢复
28.7 最佳实践与注意事项
28.7.1 AI 模型管理建议
- 多模型冗余:至少配置 2 个模型(云端 + 本地),互为备份
- 定期健康检查:确保模型可用性,建议每 5 分钟检查一次
- 成本控制:设置 Token 使用量告警阈值
- 模型评估:定期评估各模型的输出质量和响应速度
28.7.2 数据导入导出建议
- 导入前备份:批量导入前先导出当前数据
- 分批导入:大量数据分批次导入,每批不超过 500 条
- 数据验证:导入后抽查验证数据准确性
- 定期导出:每周导出重要数据作为额外备份
28.7.3 备份管理建议
- 3-2-1 备份原则:3 份备份、2 种介质、1 份异地
- 定期演练:每月测试一次恢复流程
- 变更即备份:任何变更前自动触发备份
- 监控备份状态:备份失败时发送告警通知
28.7.4 SSH 密钥安全建议
- 优先 ED25519:比 RSA 更安全且性能更好
- 密钥轮换:建议每 90 天轮换一次
- 最小权限:不同服务器使用不同密钥
- 审计记录:定期检查密钥使用记录
28.7.5 常见错误
| 问题 | 原因 | 解决方案 |
|---|---|---|
| AI 模型连接失败 | API Key 错误或网络不通 | 检查 API Key 和网络连通性 |
| CSV 导入乱码 | 文件编码不是 UTF-8 | 使用 UTF-8 编码保存 CSV |
| 备份恢复失败 | 备份文件损坏或版本不匹配 | 选择其他备份文件,检查文件完整性 |
| SSH 密钥认证失败 | 密钥格式错误或已过期 | 检查密钥格式,重新生成密钥 |
28.8 本章回顾
关键知识点:
- AI 模型池的架构、调度和健康检查机制
- 数据导入导出的完整流程和事务保证
- 备份恢复的完整性校验和自动重启机制
- 大屏仪表盘的设计和实现
- SSH 密钥的安全管理和分发
相关章节:
- 第17章 知识库与 RAG 系统
- 第18章 AI Copilot 实现原理
- 第19章 Docker 容器化与部署
- 第20章 安全机制深度解析
延伸阅读:
- AI_MODEL_POOL_DEVELOPMENT.md
- SERVER_MANAGEMENT.md
- 源码:
backend/src/services/aiModelService.ts - 源码:
backend/src/services/serverImportService.ts - 源码:
backend/src/services/backupService.ts
