237 lines
6.8 KiB
Markdown
237 lines
6.8 KiB
Markdown
# 模型健康检测功能实现文档
|
||
|
||
## 📋 功能概述
|
||
|
||
为模型服务页面添加了"健康检测"功能,可以对服务中的所有模型进行可用性测试,自动过滤不可用的模型。
|
||
|
||
## 🎯 功能特性
|
||
|
||
### 1. 健康检测
|
||
- **批量检测**: 自动测试服务中所有模型的可用性
|
||
- **实时进度**: 显示当前检测进度和正在测试的模型
|
||
- **详细结果**: 展示每个模型的健康状态、延迟时间和错误信息
|
||
- **自动过滤**: 检测完成后自动更新服务配置,只保留可用模型
|
||
|
||
### 2. 检测按钮
|
||
- **表单检测**: API Key 输入框旁边的"检测"按钮,用于添加/编辑服务时快速验证
|
||
- **健康检测**: 服务卡片下拉菜单中的"健康检测"选项,用于已配置服务的模型筛选
|
||
|
||
## 🔧 实现细节
|
||
|
||
### 后端服务 (`modelServiceManager.ts`)
|
||
|
||
#### 1. 单模型健康检测
|
||
```typescript
|
||
async testModelHealth(service: ModelService, modelId: string): Promise<{
|
||
modelId: string
|
||
available: boolean
|
||
latency?: number
|
||
error?: string
|
||
}>
|
||
```
|
||
|
||
**功能**:
|
||
- 发送最小测试请求 (消息: "hi")
|
||
- 记录响应延迟
|
||
- 捕获错误信息
|
||
|
||
**返回**:
|
||
- `modelId`: 模型ID
|
||
- `available`: 是否可用
|
||
- `latency`: 响应延迟(毫秒)
|
||
- `error`: 错误信息(如果失败)
|
||
|
||
#### 2. 批量健康检测
|
||
```typescript
|
||
async healthCheckAllModels(
|
||
service: ModelService,
|
||
onProgress?: (current: number, total: number, modelId: string) => void
|
||
): Promise<{
|
||
availableModels: string[]
|
||
unavailableModels: string[]
|
||
results: Array<{...}>
|
||
}>
|
||
```
|
||
|
||
**功能**:
|
||
- 遍历所有模型进行测试
|
||
- 实时回调进度信息
|
||
- 添加200ms延迟避免请求过快
|
||
- 统计可用和不可用模型
|
||
|
||
**返回**:
|
||
- `availableModels`: 可用模型列表
|
||
- `unavailableModels`: 不可用模型列表
|
||
- `results`: 详细测试结果
|
||
|
||
### 前端组件 (`ModelService.vue`)
|
||
|
||
#### 1. 状态管理
|
||
```typescript
|
||
const healthCheckResult = reactive({
|
||
status: 'idle' | 'checking' | 'success' | 'error',
|
||
currentService: ModelService | null,
|
||
progress: { current: 0, total: 0, modelId: '' },
|
||
availableModels: string[],
|
||
unavailableModels: string[],
|
||
results: Array<{...}>
|
||
})
|
||
```
|
||
|
||
#### 2. 健康检测函数
|
||
```typescript
|
||
const healthCheckModels = async (service: ModelService) => {
|
||
// 1. 显示检测模态框
|
||
showHealthCheckModal.value = true
|
||
healthCheckResult.status = 'checking'
|
||
|
||
// 2. 执行批量检测
|
||
const result = await modelServiceManager.healthCheckAllModels(
|
||
service,
|
||
(current, total, modelId) => {
|
||
// 更新进度
|
||
healthCheckResult.progress = { current, total, modelId }
|
||
}
|
||
)
|
||
|
||
// 3. 更新服务配置
|
||
service.models = result.availableModels
|
||
saveServices()
|
||
|
||
// 4. 显示结果
|
||
healthCheckResult.status = 'success'
|
||
}
|
||
```
|
||
|
||
#### 3. UI 组件
|
||
|
||
**健康检测模态框**:
|
||
- **检测中状态**:
|
||
- 加载动画
|
||
- 进度条
|
||
- 当前测试模型信息
|
||
|
||
- **完成状态**:
|
||
- 汇总卡片 (可用/不可用数量)
|
||
- 可用模型列表 (带延迟时间)
|
||
- 不可用模型列表 (带错误信息)
|
||
- 自动更新提示
|
||
|
||
## 📊 使用流程
|
||
|
||
### 1. 添加服务时检测
|
||
```
|
||
1. 点击"添加服务"
|
||
2. 填写服务信息
|
||
3. 点击 API Key 旁的"检测"按钮
|
||
4. 查看检测到的模型列表
|
||
5. 保存服务
|
||
```
|
||
|
||
### 2. 健康检测已有服务
|
||
```
|
||
1. 找到已配置的服务卡片
|
||
2. 点击右上角的"..."菜单
|
||
3. 选择"健康检测"
|
||
4. 等待检测完成
|
||
5. 查看详细结果
|
||
6. 自动更新为只包含可用模型
|
||
```
|
||
|
||
## 🎨 UI 设计
|
||
|
||
### 检测进度界面
|
||
```
|
||
┌─────────────────────────────────┐
|
||
│ 模型健康检测 │
|
||
├─────────────────────────────────┤
|
||
│ │
|
||
│ [Loading Spinner] │
|
||
│ 正在检测模型健康状态... │
|
||
│ │
|
||
│ 当前进度: 25 / 135 │
|
||
│ 当前模型: qwen-max │
|
||
│ │
|
||
│ ████████░░░░░░░░░░ 18.5% │
|
||
│ │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
### 检测结果界面
|
||
```
|
||
┌─────────────────────────────────┐
|
||
│ 模型健康检测 │
|
||
├─────────────────────────────────┤
|
||
│ ✓ │
|
||
│ 健康检测完成 │
|
||
│ │
|
||
│ ┌──────────┐ ┌──────────┐ │
|
||
│ │ ✓ │ │ ✗ │ │
|
||
│ │ 120 │ │ 15 │ │
|
||
│ │ 可用模型 │ │不可用模型 │ │
|
||
│ └──────────┘ └──────────┘ │
|
||
│ │
|
||
│ ✓ 可用模型 (120) │
|
||
│ [qwen-max 250ms] [gpt-4 180ms] │
|
||
│ [claude-3 320ms] ... │
|
||
│ │
|
||
│ ✗ 不可用模型 (15) │
|
||
│ [old-model] [deprecated] ... │
|
||
│ │
|
||
│ ℹ️ 已自动更新服务配置,只保留 │
|
||
│ 可用模型 │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
## 💡 技术亮点
|
||
|
||
### 1. 进度追踪
|
||
- 实时更新检测进度
|
||
- 显示当前测试的模型
|
||
- 进度条可视化
|
||
|
||
### 2. 性能优化
|
||
- 添加200ms延迟避免过快请求
|
||
- 异步处理不阻塞UI
|
||
- 支持大量模型检测
|
||
|
||
### 3. 用户体验
|
||
- 清晰的状态反馈
|
||
- 详细的错误信息
|
||
- 自动保存检测结果
|
||
|
||
### 4. 数据统计
|
||
- 可用/不可用模型计数
|
||
- 响应延迟统计
|
||
- 错误原因记录
|
||
|
||
## 🔍 参考实现
|
||
|
||
本功能参考了 Cherry Studio 的健康检测功能:
|
||
- 位置: API 地址输入框旁边的"健康检测"按钮
|
||
- 功能: 测试所有模型并过滤不可用的
|
||
|
||
## 📝 注意事项
|
||
|
||
1. **测试时间**: 模型数量较多时检测时间较长
|
||
2. **API 限制**: 注意服务商的 API 调用频率限制
|
||
3. **网络稳定**: 需要稳定的网络连接
|
||
4. **自动更新**: 检测后会自动更新模型列表
|
||
|
||
## 🚀 未来优化
|
||
|
||
1. **并发检测**: 支持多模型并发测试(需控制并发数)
|
||
2. **缓存结果**: 缓存检测结果避免重复测试
|
||
3. **定时检测**: 支持定时自动健康检测
|
||
4. **通知提醒**: 检测完成后发送通知
|
||
|
||
## 📌 更新日志
|
||
|
||
**v1.0.0** (2025-10-14)
|
||
- ✅ 实现单模型健康检测
|
||
- ✅ 实现批量健康检测
|
||
- ✅ 添加进度追踪界面
|
||
- ✅ 添加详细结果展示
|
||
- ✅ 自动过滤不可用模型
|
||
- ✅ 集成到服务下拉菜单
|