Skip to content

第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 模型调度策略

  1. 默认模型:优先使用标记为 default 的模型
  2. 负载均衡:多个模型同时启用时,按优先级和成功率分配
  3. 健康检查:定期检测模型可用性,标记异常模型
  4. 自动切换:主模型异常时自动切换到备用模型
  5. 熔断器:连续失败 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 密钥类型支持

类型密钥长度安全性推荐场景
RSA2048/4096通用场景
ED25519256极高推荐首选
ECDSA256/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 模型

步骤

  1. 在 AI 模型管理页面点击"新增模型"
  2. 填写信息:
    • 名称:本地 Ollama
    • 提供商:local
    • API Base:http://192.168.1.100:11434
    • 模型名称:qwen2.5:72b
    • API Key:(留空)
  3. 点击"测试连接"验证配置
  4. 保存并设为默认模型

案例 2:批量导入服务器

场景:新采购 100 台服务器需要录入系统

步骤

  1. 下载 CSV 模板
  2. 在 Excel 中填写 100 台服务器信息
  3. 上传 CSV 文件
  4. 查看导入报告(成功 98 台,失败 2 台)
  5. 修正失败的 2 台后重新导入

案例 3:数据库恢复

场景:误操作删除了重要配置,需要从备份恢复

步骤

  1. 进入备份管理页面
  2. 选择最近的备份文件(变更前备份)
  3. 点击"恢复"
  4. 确认恢复操作
  5. 等待系统自动重启
  6. 验证数据已恢复

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 本章回顾

关键知识点

  1. AI 模型池的架构、调度和健康检查机制
  2. 数据导入导出的完整流程和事务保证
  3. 备份恢复的完整性校验和自动重启机制
  4. 大屏仪表盘的设计和实现
  5. SSH 密钥的安全管理和分发

相关章节

  • 第17章 知识库与 RAG 系统
  • 第18章 AI Copilot 实现原理
  • 第19章 Docker 容器化与部署
  • 第20章 安全机制深度解析

延伸阅读

基于 MPL-2.0 许可证发布