百炼免费模型自动切换定时任务

人只需做这三步,定时任务由openclaw/hermes-agent自动创建

步骤

1、先配置好一个额度充足的百炼的模型和apikey

2、发送该文章链接给openclaw/hermes-agent,让他参考文档实现自动切换模型逻辑

3、定期根据自己百炼模型的免费额度列表提供给智能体最新的模型列表更新到定时任务里

在这里插入图片描述

概述

本系统实现了一个智能的模型故障转移机制,用于解决阿里云百炼平台免费额度耗尽时出现的 403 错误问题。通过定时检测和自动轮换,确保服务持续可用。


背景

阿里云百炼(DashScope)平台提供多种免费模型供开发者使用,但每个模型都有免费额度限制(FreeTier)。当额度耗尽时,API 会返回 403 错误,提示 AllocationQuota.FreeTierOnly 或类似信息。

为避免手动干预,我们设计了自动切换机制:

  1. 定时检测会话记录和日志中的 403 错误
  2. 一旦发现额度耗尽,自动切换到下一个可用模型
  3. 循环轮换所有免费模型,最大化利用额度

系统架构

┌─────────────────────────────────────────────────────────────┐
│                     Hermes Agent                             │
├─────────────────────────────────────────────────────────────┤
│                                                              │
│  ┌──────────────┐    ┌───────────────────────────────────┐  │
│  │ Cron 定时器  │───▶│ model-failover.py 检测脚本       │  │
│  │  (每5分钟)   │    │                                  │  │
│  └──────────────┘    │  1. 检查会话记录                  │  │
│                      │  2. 检查日志文件                  │  │
│                      │  3. 检测 403 错误模式             │  │
│                      │  4. 自动切换模型                  │  │
│                      └───────────────────────────────────┘  │
│                              │                               │
│                              ▼                               │
│                      ┌───────────────────────────────────┐  │
│                      │ config.yaml 模型配置             │  │
│                      │  default: <当前模型>             │  │
│                      └───────────────────────────────────┘  │
│                                                              │
└─────────────────────────────────────────────────────────────┘

核心组件

1. 模型轮换脚本

位置: ~/.hermes/scripts/model-failover.py

功能:

  • 检测会话记录和日志中的 403 错误
  • 从免费模型列表中选择下一个模型
  • 更新 config.yaml 中的模型配置

2. 定时任务配置

位置: ~/.hermes/cron/jobs.json

任务名称: model-failover-check

执行频率: 每 5 分钟一次(可自定义)

3. 配置文件

位置: ~/.hermes/config.yaml

关键配置项:

model:
  default: glm-5          # 当前使用的模型
  provider: custom        # 使用自定义 provider
  base_url: https://dashscope.aliyuncs.com/compatible-mode/v1
  api_key: sk-xxx         # API 密钥

支持的免费模型列表

脚本内置以下免费模型,按优先级排序:(注意这里可能会更新,需要手动定期更新列表)

序号 模型名称 说明
1 tongyi-xiaomi-analysis-pro 通义小米分析增强版
2 qwen3.5-122b-a10b Qwen 3.5 122B
3 qwen3.5-35b-a3b Qwen 3.5 35B
4 qwen3.6-flash-2026-04-16 Qwen 3.6 Flash
5 qwen3.5-plus Qwen 3.5 Plus
6 qwen3.6-35b-a3b Qwen 3.6 35B
7 qwen3.5-plus-2026-02-15 Qwen 3.5 Plus 新版
8 glm-5 GLM-5(智谱)
9 qwen3-max-2026-01-23 Qwen 3 Max
10 qwen3.5-27b Qwen 3.5 27B
11 tongyi-xiaomi-analysis-flash 通义小米分析 Flash
12 glm-5.1 GLM-5.1(智谱)
13 qwen3.6-plus-2026-04-02 Qwen 3.6 Plus
14 qwen3-vl-flash-2026-01-22 Qwen 3 VL Flash(视觉)
15 qwen3.5-flash-2026-02-23 Qwen 3.5 Flash
16 qwen3.5-397b-a17b Qwen 3.5 397B
17 qwen3.6-flash Qwen 3.6 Flash
18 MiniMax-M2.5 MiniMax M2.5
19 qwen-flash-character-2026-02-26 Qwen 角色版
20 qwen-flash-character Qwen 角色版

总计: 20 个免费模型可供轮换


工作流程

┌─────────────────────────────────────────────────────────────────┐
│                     模型故障转移流程                             │
└─────────────────────────────────────────────────────────────────┘

        ┌──────────────────┐
        │  定时任务触发    │
        │  (每 5 分钟)     │
        └────────┬─────────┘
                 │
                 ▼
        ┌──────────────────┐
        │ 读取当前模型配置 │
        │ from config.yaml │
        └────────┬─────────┘
                 │
                 ▼
        ┌──────────────────┐
        │ 检查会话记录     │───────▶ sessions/*.jsonl
        │ (最近 10 分钟)   │        sessions/*.json
        └────────┬─────────┘
                 │
                 ▼
        ┌──────────────────┐
        │ 检查日志文件     │───────▶ agent.log
        │ (最近 100 行)    │        errors.log
        └────────┬─────────┘
                 │
                 ▼
        ┌──────────────────┐
        │ 搜索 403 错误    │
        │ 模式匹配:        │
        │ 403.*AllocationQuota
        │ 403.*FreeTierOnly│
        └────────┬─────────┘
                 │
        ┌────────┴─────────┐
        │                  │
        ▼                  ▼
   ┌─────────┐        ┌─────────┐
   │ 发现403 │        │ 无错误  │
   └─────────┘        └─────────┘
        │                  │
        ▼                  ▼
   ┌───────────────┐  ┌───────────────┐
   │ 选择下一个模型│  │ 输出 OK:      │
   │ (轮换索引)    │  │ no_error      │
   └────────┬──────┘  └───────────────┘
            │
            ▼
   ┌───────────────┐
   │ 更新 config   │
   │ default: 新模型│
   └────────┬──────┘
            │
            ▼
   ┌───────────────┐
   │ 输出 SWITCHED:│
   │ <新模型名称>  │
   └───────────────┘

输出状态码

脚本运行后会输出状态信息,供定时任务处理器判断:

状态码 格式 含义 处理建议
SWITCHED SWITCHED:<模型名> 模型已成功切换 向用户报告切换结果
FAILED FAILED:<原因> 切换失败 向用户报告错误
OK OK:<状态> 检查完成但无需切换 无需通知

安装与配置

步骤 1: 创建脚本目录

mkdir -p ~/.hermes/scripts
mkdir -p ~/.hermes/logs

步骤 2: 安装脚本

model-failover.py 放入 ~/.hermes/scripts/ 目录。

步骤 3: 配置定时任务

通过 Hermes 命令创建定时任务:

# 使用 Hermes cronjob 工具
hermes cron create \
  --name model-failover-check \
  --script model-failover.py \
  --schedule "every 5m"

或手动编辑 ~/.hermes/cron/jobs.json

{
  "jobs": [{
    "id": "model-failover",
    "name": "model-failover-check",
    "script": "model-failover.py",
    "schedule": {
      "kind": "interval",
      "interval": "5m"
    },
    "enabled": true
  }]
}

步骤 4: 验证配置

# 检查当前模型
grep "default:" ~/.hermes/config.yaml

# 检查定时任务状态
cat ~/.hermes/cron/jobs.json

# 手动测试脚本
python3 ~/.hermes/scripts/model-failover.py

日志记录

系统会自动记录运行日志:

日志位置: ~/.hermes/logs/model-failover.log

日志格式:

2026-04-19 01:05:00 INFO: ==================================================
2026-04-19 01:05:00 INFO: 开始模型故障转移检查
2026-04-19 01:05:00 INFO: 当前模型:glm-5 (provider: custom)
2026-04-19 01:05:01 INFO: 在 session_xxx.jsonl 中检测到 403 错误
2026-04-19 01:05:01 INFO: 选择新模型:qwen3.5-plus
2026-04-19 01:05:02 INFO: ✅ 模型切换成功:glm-5 -> qwen3.5-plus
2026-04-19 01:05:02 INFO: 模型故障转移检查完成

自定义配置

修改检测频率

编辑 jobs.json 中的 schedule 字段:

"schedule": {
  "kind": "interval",
  "interval": "10m"    // 改为 10 分钟
}

添加新模型

编辑 model-failover.py 中的 FREE_MODELS 列表:

FREE_MODELS = [
    "your-new-model",    # 添加新模型
    # ... 其他模型
]

调整检测窗口

修改脚本中的时间参数:

# 会话文件检测窗口(默认 10 分钟)
cutoff_time = datetime.now() - timedelta(minutes=10)

# 日志文件检测行数(默认 100 行)
lines = f.readlines()[-100:]

故障排除

问题: 脚本无法检测到 403 错误

检查项:

  1. 会话文件是否存在
  2. 日志文件是否更新
  3. 正则表达式是否匹配实际错误格式

解决方案:

# 查看最近的错误
grep -i "403" ~/.hermes/logs/agent.log | tail -20

# 查看会话文件
ls -la ~/.hermes/sessions/

问题: 模型切换后仍然报错

可能原因:

  1. 新模型额度也已耗尽
  2. API 配置错误

解决方案:

# 查看切换历史
cat ~/.hermes/logs/model-failover.log

# 检查当前配置
grep -A5 "^model:" ~/.hermes/config.yaml

问题: 定时任务未运行

检查项:

  1. Hermes gateway 服务是否运行
  2. 任务是否启用
# 检查 gateway 状态
cat ~/.hermes/gateway_state.json

# 检查任务状态
cat ~/.hermes/cron/jobs.json | grep -A10 "model-failover"

技术细节

错误检测模式

脚本使用正则表达式匹配以下模式:

error_pattern = re.compile(
    r"403.*AllocationQuota|AllocationQuota.*403|"
    r"403.*FreeTierOnly|FreeTierOnly.*403",
    re.IGNORECASE
)

轮换算法

模型轮换采用循环索引机制:

# 当前模型位置
current_pos = FREE_MODELS.index(current_model)

# 下一个索引(循环)
next_index = (current_pos + 1) % len(FREE_MODELS)

# 保存索引到 .model_index 文件

配置更新方法

使用正则表达式替换:

content = re.sub(
    r"default:\s*\S+",
    f"default: {new_model}",
    content
)

最佳实践

  1. 定期检查日志: 关注 model-failover.log 了解切换频率
  2. 监控模型使用: 记录每个模型的使用时长
  3. 及时更新模型列表: 百炼可能新增免费模型
  4. 设置合理检测频率: 5-10 分钟为宜,避免过于频繁
  5. 备用 API Key: 考虑配置多个账号的 API Key

相关文件清单

文件 路径 说明
检测脚本 ~/.hermes/scripts/model-failover.py 核心逻辑
配置文件 ~/.hermes/config.yaml 模型配置
定时任务 ~/.hermes/cron/jobs.json 任务定义
运行日志 ~/.hermes/logs/model-failover.log 切换记录
轮换索引 ~/.hermes/.model_index 当前索引
会话记录 ~/.hermes/sessions/*.jsonl 错误检测源
系统日志 ~/.hermes/logs/agent.log 错误检测源

更新历史

  • 2026-04-19: 初始版本,支持 20 个免费模型轮换

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐