273 lines
13 KiB
Markdown
273 lines
13 KiB
Markdown
|
|
# AI-Ops 智能运维 — 竞品分析报告
|
|||
|
|
|
|||
|
|
## 1. 竞品范围
|
|||
|
|
|
|||
|
|
| 竞品 | 项目地址 | 技术栈 | 相关能力 |
|
|||
|
|
|-------|---------|--------|---------|
|
|||
|
|
| **LiteLLM** | berriai/litellm | Python/FastAPI | 告警系统(SlackAlerting)、健康检查、自动路由、容灾切换 |
|
|||
|
|
| **Sub2API** | Wei-Shaw/sub2api | Go/Gin/Ent | 基础代理健康、用量统计 |
|
|||
|
|
| **NewAPI / OneAPI** | Calcium-Ion/new-api | Go/Gin/GORM | 渠道监控、状态切换 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 核心能力对标
|
|||
|
|
|
|||
|
|
### 2.1 告警系统
|
|||
|
|
|
|||
|
|
#### LiteLLM SlackAlerting(实现最完整)
|
|||
|
|
|
|||
|
|
LiteLLM 的告警系统是当前开源 LLM Gateway 中最成熟的,其核心设计包括:
|
|||
|
|
|
|||
|
|
**告警类型(12+种)**:
|
|||
|
|
```python
|
|||
|
|
class AlertType(str, Enum):
|
|||
|
|
# LLM 相关
|
|||
|
|
llm_exceptions = "llm_exceptions" # LLM 调用异常
|
|||
|
|
llm_too_slow = "llm_too_slow" # 响应超时
|
|||
|
|
llm_requests_hanging = "llm_requests_hanging" # 请求悬停
|
|||
|
|
# 资源与成本
|
|||
|
|
budget_alerts = "budget_alerts" # 预算超支
|
|||
|
|
spend_reports = "spend_reports" # 消耗报告
|
|||
|
|
failed_tracking_spend = "failed_tracking_spend" # 成本跟踪失败
|
|||
|
|
# 数据库
|
|||
|
|
db_exceptions = "db_exceptions" # 数据库异常
|
|||
|
|
# 运营报告
|
|||
|
|
daily_reports = "daily_reports" # 每日运营报告
|
|||
|
|
# 部署与模型
|
|||
|
|
cooldown_deployment = "cooldown_deployment" # 部署冷却
|
|||
|
|
new_model_added = "new_model_added" # 新模型上线
|
|||
|
|
# 故障与容灾
|
|||
|
|
outage_alerts = "outage_alerts" # 模型故障
|
|||
|
|
region_outage_alerts = "region_outage_alerts" # 区域故障
|
|||
|
|
fallback_reports = "fallback_reports" # 容灾切换报告
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**关键技术细节**:
|
|||
|
|
- **批量化与性能优化**: 采用 `CustomBatchLogger` 基类,告警批量发送(10秒或超过 X 事件触发),避免高并发下的性能瓶颈
|
|||
|
|
- **消息摘要(Digest)模式**: 支持按 `(alert_type, model, api_base)` 聚合告警,默认 24h 窗口期,避免滥发
|
|||
|
|
- **多渠道分发**: 支持按告警类型路由到不同 Webhook,如 `alert_to_webhook_url = {AlertType.outage_alerts: "#ops-channel", AlertType.budget_alerts: "#finance-channel"}`
|
|||
|
|
- **告警阈值细分**: 悬停检测阈值可配置(默认 300s),故障检测分为 minor(5 次错误)和 major(10 次错误)
|
|||
|
|
- **区域故障检测**: 同一区域内 2+ 模型报告错误时触发 region_outage_alerts
|
|||
|
|
- **告警 TTL 缓解**: budget_alert_ttl=24h,outage_alert_ttl=1min,防止重复骚扰
|
|||
|
|
|
|||
|
|
**健康检查端点**:
|
|||
|
|
- `/health` — 综合健康(可选择性检查已配置模型)
|
|||
|
|
- `/health/liveliness` / `/health/liveness` — 进程存活
|
|||
|
|
- `/health/readiness` — 依赖就绪(Redis、DB、Cache)
|
|||
|
|
- `/health/services?service=datadog` — 第三方服务健康
|
|||
|
|
- `/health/history` — 历史健康状态
|
|||
|
|
- `/health/latest` — 最新健康状态
|
|||
|
|
- `/health/backlog` — 请求队列积压
|
|||
|
|
- `/health/test_connection` — 测试特定模型连通性
|
|||
|
|
|
|||
|
|
#### Sub2API / NewAPI / OneAPI
|
|||
|
|
- Sub2API: 仅提供基础代理状态查询,无结构化告警系统
|
|||
|
|
- NewAPI/OneAPI: 有渠道状态监控,支持切换上游,但缺乏自动化告警和根因分析
|
|||
|
|
|
|||
|
|
### 2.2 自动路由与容灾
|
|||
|
|
|
|||
|
|
#### LiteLLM Router Strategy
|
|||
|
|
LiteLLM 提供多种路由策略:
|
|||
|
|
- **lowest_latency**: 选择响应最快的部署
|
|||
|
|
- **lowest_cost**: 选择成本最低的部署
|
|||
|
|
- **lowest_tpm_rpm**: 选择 TPM/RPM 最低的部署
|
|||
|
|
- **least_busy**: 选择当前负载最低的部署
|
|||
|
|
- **auto_router**: 基于语义路由(使用 `SemanticRouter` 和向量编码器匹配请求到最适合的模型)
|
|||
|
|
- **budget_limiter**: 按 key/team 限制预算
|
|||
|
|
|
|||
|
|
**容灾机制**:
|
|||
|
|
- **Cooldown**: 当部署连续失败时自动进入 cooldown 状态,暂时从路由池中移除
|
|||
|
|
- **Fallback**: 主模型失败时自动切换到备用模型
|
|||
|
|
- **Retries**: 配置重试次数和策略
|
|||
|
|
|
|||
|
|
### 2.3 成本跟踪
|
|||
|
|
|
|||
|
|
#### LiteLLM Cost Tracking
|
|||
|
|
- 维护 `model_prices_and_context_window_backup.json` 主数据库,包含所有支持模型的 input_cost_per_token / output_cost_per_token
|
|||
|
|
- 支持分层定价(tiered_pricing)、批量定价(batch pricing)、音频 token 定价
|
|||
|
|
- 每次请求完成后计算并记录成本
|
|||
|
|
- 支持自定义成本覆盖
|
|||
|
|
|
|||
|
|
#### Sub2API Pricing Service
|
|||
|
|
- 从 LiteLLM 上游镜像 `model_prices_and_context_window.json`
|
|||
|
|
- 支持模型家族回退(如 gpt-5.3 未知时回退到 gpt-5.1)
|
|||
|
|
- 本地 fallback 文件缓存
|
|||
|
|
- 支持动态价格字段优先级
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 差距分析(我们的机会)
|
|||
|
|
|
|||
|
|
| 能力维度 | 竞品现状 | 我们的机会 |
|
|||
|
|
|---------|---------|---------|
|
|||
|
|
| **告警渠道** | LiteLLM 仅支持 Slack/Webhook,无企微/钉钉/飞书 | 全面支持中国企业常用渠道 +通用 Webhook |
|
|||
|
|
| **根因分析** | 竞品仅提供原始错误数据,无自动根因分析 | AI 驱动的根因分析,自动归类故障类型 |
|
|||
|
|
| **自愈能力** | LiteLLM 仅有 cooldown 和 fallback,无可编程自愈 | 可编程自愈脚本,支持自定义操作(切换供应商、限流、重启) |
|
|||
|
|
| **智能升级** | 竞品告警阈值是静态配置 | 基于历史数据自动建议/调整阈值 |
|
|||
|
|
| **多维度健康** | LiteLLM 健康检查偏重连通性 | 连通性 + 配额 + 延迟 + 错误率 + 成功率综合健康指标 |
|
|||
|
|
| **运维大盘** | LiteLLM 有 daily_reports,但无运维大盘概念 | 统一运维大盘,汇总所有指标与异常 |
|
|||
|
|
| **预测性运维** | 竞品均为事后告警 | 基于趋势预测的预警(如配额耗尽预测、故障趋势预测) |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 对产品规划的影响
|
|||
|
|
|
|||
|
|
### 强化方向
|
|||
|
|
|
|||
|
|
1. **告警系统设计参考 LiteLLM 的多类型分类**,但扩展为 15+ 种类型,增加:
|
|||
|
|
- 配额耗尽预警(监测余额趋势)
|
|||
|
|
- 响应时间 P99 突变预警
|
|||
|
|
- 模型质量跳水预警
|
|||
|
|
- 安全异常预警(密钥泄露、异常访问模式)
|
|||
|
|
|
|||
|
|
2. **批量化与摘要机制**参考 LiteLLM 的 `CustomBatchLogger` 和 DigestEntry 设计:
|
|||
|
|
- 告警批量发送(含压缩)
|
|||
|
|
- 按 (alert_type, model, api_base) 聚合
|
|||
|
|
- 可配置摘要窗口(默认 24h,支持 5min/1h/24h)
|
|||
|
|
|
|||
|
|
3. **健康检查端点**参考 LiteLLM 的多层级设计:
|
|||
|
|
- `/health` 综合健康
|
|||
|
|
- `/health/live` 进程存活
|
|||
|
|
- `/health/ready` 依赖就绪
|
|||
|
|
- `/health/backlog` 队列积压
|
|||
|
|
- `/health/test_connection` 模型连通性测试
|
|||
|
|
|
|||
|
|
4. **自愈能力**超越竞品:
|
|||
|
|
- LiteLLM 的 cooldown 只是"移除故障节点",我们应提供"程序化自愈",允许用户配置自定义动作
|
|||
|
|
- 参考 LiteLLM 的 fallback 机制,但增加"智能切换策略"(根据成本/质量/位置综合决策)
|
|||
|
|
|
|||
|
|
### 新增差异化能力
|
|||
|
|
|
|||
|
|
5. **AI 驱动的根因分析**:竞品不具备,是核心差异化
|
|||
|
|
6. **运维大盘概念**:竞品无统一运维视图,我们应提供类似 Grafana Dashboard 的一体化运维大盘
|
|||
|
|
7. **预测性运维**:基于时序分析的预警,而不是事后告警
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 对技术规划的影响
|
|||
|
|
|
|||
|
|
### 应引入的设计模式
|
|||
|
|
|
|||
|
|
| 设计模式 | 来源 | 应用场景 |
|
|||
|
|
|---------|------|---------|
|
|||
|
|
| **CustomBatchLogger** | LiteLLM | 告警事件批量处理,避免高并发下的 IO 瓶颈 |
|
|||
|
|
| **DualCache** | LiteLLM | 告警状态缓存(内存 + Redis),确保告警可靠性 |
|
|||
|
|
| **DigestEntry** | LiteLLM | 告警聚合,避免滥发 |
|
|||
|
|
| **AlertType + AlertTypeConfig** | LiteLLM | 可扩展的告警类型系统,支持按类型配置不同策略 |
|
|||
|
|
| **OutageModel + ProviderRegionOutageModel** | LiteLLM | 故障状态机,支持模型级和区域级故障检测 |
|
|||
|
|
| **DeploymentMetrics** | LiteLLM | 每部署的运行时指标(failed_request, latency_per_output_token) |
|
|||
|
|
| **Cooldown 机制** | LiteLLM | 故障部署自动移除,作为自愈动作的一种 |
|
|||
|
|
|
|||
|
|
### 技术避坑
|
|||
|
|
|
|||
|
|
1. **不重复造轮子**: LiteLLM 的告警系统已经很成熟,我们不需要重新设计整套机制,而是将其思想迁移到 Go 技术栈,并增加本地化适配
|
|||
|
|
2. **性能优先**: LiteLLM 的批量处理机制是关键,告警系统不能成为性能瓶颈
|
|||
|
|
3. **可观测性**: 参考 LiteLLM 的健康端点设计,确保所有依赖都有对应的就绪检查
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 附:FreeRide — OpenClaw 自动模型切换插件(市场调研)
|
|||
|
|
|
|||
|
|
### 1. 基本信息
|
|||
|
|
|
|||
|
|
| 项目 | 内容 |
|
|||
|
|
|-----|------|
|
|||
|
|
| **名称** | FreeRide |
|
|||
|
|
| **类型** | OpenClaw Skill(插件) |
|
|||
|
|
| **定位** | 自动模型选择 + Fallback 链管理 |
|
|||
|
|
| **技术栈** | Shell + OpenClaw 原生 API |
|
|||
|
|
| **开源地址** | `openclaw/skills/tree/main/skills/shaivpidadi/free-ride` |
|
|||
|
|
| **安装方式** | `/learn @openclaw/freeride` |
|
|||
|
|
|
|||
|
|
### 2. 核心功能
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
FreeRide 做的事:
|
|||
|
|
1. 实时拉取 OpenRouter 免费模型列表(30+ 免费模型)
|
|||
|
|
2. 按社区 ELO 评分排序,选出当前最强免费模型
|
|||
|
|
3. 将最强模型设为主模型
|
|||
|
|
4. 自动配置 5 个高质量备用模型作为 Fallback 链
|
|||
|
|
5. 主模型限速 → 自动切换下一个,用户无感知
|
|||
|
|
6. 只修改 openclaw.json 中的 model 相关字段,不触碰其他配置
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 实测数据
|
|||
|
|
|
|||
|
|
- **每日完成**:200~500+ 次高质量对话
|
|||
|
|
- **覆盖场景**:写文章、代码调试、数据分析、日常聊天
|
|||
|
|
- **成本**:零(全部使用 OpenRouter 免费额度)
|
|||
|
|
|
|||
|
|
### 4. 技术分析
|
|||
|
|
|
|||
|
|
#### 4.1 设计哲学
|
|||
|
|
|
|||
|
|
| 维度 | FreeRide | LiteLLM | 我们的 AI-Ops |
|
|||
|
|
|-----|---------|---------|--------------|
|
|||
|
|
| **目标用户** | 个人用户/极客 | 企业 | 企业运维团队 |
|
|||
|
|
| **模型来源** | OpenRouter 免费模型 | 任意 OpenAI兼容API | 多供应商中转 |
|
|||
|
|
| **核心价值** | 零成本用最强模型 | 企业级稳定性 | 供应商智能切换 + 运维自动化 |
|
|||
|
|
| **Failover 机制** | 简单的模型列表轮询 | cooldown + fallback + retries | 智能化 failover + 自愈 |
|
|||
|
|
|
|||
|
|
#### 4.2 技术亮点
|
|||
|
|
|
|||
|
|
**亮点1:实时模型排行**
|
|||
|
|
```bash
|
|||
|
|
# FreeRide 实时拉取 OpenRouter 免费模型,按 ELO 排序
|
|||
|
|
curl -s "https://openrouter.ai/models?free=true" | jq '.data | sort_by(.rating) | reverse'
|
|||
|
|
```
|
|||
|
|
→ **借鉴点**:可用类似思路监控各供应商的模型质量变化,自动发现"性价比突变"模型
|
|||
|
|
|
|||
|
|
**亮点2:非破坏性配置更新**
|
|||
|
|
```bash
|
|||
|
|
# FreeRide 只更新 model 相关的 key
|
|||
|
|
jq ".model = \"$BEST_MODEL\"" openclaw.json > tmp.json && mv tmp.json openclaw.json
|
|||
|
|
```
|
|||
|
|
→ **借鉴点**:热切换配置时,先写入临时文件再原子替换,避免损坏配置文件
|
|||
|
|
|
|||
|
|
**亮点3:Fallback 链自动编排**
|
|||
|
|
```bash
|
|||
|
|
# FreeRide 默认配置 5 个备用模型
|
|||
|
|
FALLBACK_MODELS="model_a,model_b,model_c,model_d,model_e"
|
|||
|
|
```
|
|||
|
|
→ **借鉴点**:供应商层面也可以做类似的多级 fallback,而不是单层 failover
|
|||
|
|
|
|||
|
|
#### 4.3 不足与局限
|
|||
|
|
|
|||
|
|
| 问题 | 说明 |
|
|||
|
|
|-----|------|
|
|||
|
|
| **无监控告警** | FreeRide 没有告警概念,模型挂了用户需要自己发现 |
|
|||
|
|
| **无用量统计** | 没有成本追踪,不知道花了多少钱 |
|
|||
|
|
| **无自愈脚本** | 只是切换模型,不能执行重启/通知等操作 |
|
|||
|
|
| **依赖 OpenRouter** | 只适合 OpenRouter,中国用户无法直接使用 |
|
|||
|
|
| **免费模型质量不稳定** | OpenRouter 免费模型 ELO 排名波动大,不适合企业生产 |
|
|||
|
|
|
|||
|
|
### 5. 对 AI-Ops 的借鉴
|
|||
|
|
|
|||
|
|
#### 5.1 可复用的设计
|
|||
|
|
|
|||
|
|
| FreeRide 思路 | AI-Ops 如何借鉴 |
|
|||
|
|
|--------------|----------------|
|
|||
|
|
| 实时模型排行 | **供应商模型质量监控**:定时拉取各中转的模型列表,按响应速度/成功率排序 |
|
|||
|
|
| Fallback 链 | **多级降级策略**:主供应商 → 备供应商 → 降级回复(而不是简单的一层 failover) |
|
|||
|
|
| 非破坏性配置 | **配置热切换规范**:所有配置更新走原子替换,不直接改原文件 |
|
|||
|
|
| 限速自动切换 | **速率限制自适应**:监控各供应商 TPM/QPM 限制,预估耗尽时间并提前切换 |
|
|||
|
|
|
|||
|
|
#### 5.2 AI-Ops 应超越 FreeRide 的地方
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
FreeRide 做到了: AI-Ops 应做到:
|
|||
|
|
✅ 模型自动切换 ✅ 供应商整体健康度评估(不止模型)
|
|||
|
|
✅ Fallback 链 ✅ 切换策略可配置(成本优先/质量优先/延迟优先)
|
|||
|
|
❌ 无监控告警 ✅ 多渠道告警(企微/飞书/钉钉/Slack)
|
|||
|
|
❌ 无用量统计 ✅ 成本分摊到部门/项目/用户
|
|||
|
|
❌ 无自愈能力 ✅ 可编程自愈(切换 + 通知 + 锁定 + 升级)
|
|||
|
|
❌ 无运维大盘 ✅ 统一运维视图(健康/配额/成本/故障)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. 结论
|
|||
|
|
|
|||
|
|
FreeRide 是一个优秀的**个人用户工具**,核心价值是"零成本 + 自动切换"。它的设计哲学(自动选择 + 智能降级)对 AI-Ops 有参考价值,但企业级需求(监控/告警/成本/自愈)是它完全不覆盖的领域。
|
|||
|
|
|
|||
|
|
**AI-Ops 的差异化定位**:不做 FreeRide 的企业版,而是做一个有**自愈能力的智能运维平台**,FreeRide 的思路是其中一个模块(供应商切换策略)。
|
|||
|
|
|