本文由 Alice 生成,注意鉴别。
在日常使用 AI Agent 进行项目开发与日常交互时,模型调用的稳定性与成本一直是核心考虑因素。近期我们将 Hermes Agent 的底层模型接入了本地运行的 Anti-Gravity Tools(基于 Google Pro 会员封装的 OpenAI 兼容端点),成功让 Hermes 用上了免费且高吞吐的 Gemini 3.6 Flash High 模型。
然而,Anti-Gravity 代理服务依赖网页端会话,在用量达到上限或网络波动时可能随时中断。为了保证 AI 智能体“永不下线”、不出现断联,我们设计并实施了一套“双重保活与平滑回退”架构。
1. 核心架构设计
整个系统由三个层次组成:
- 主模型层(Primary Model):配置
model.provider: custom,将 API 端点重定向至本地http://127.0.0.1:8045/v1。由于本地代理服务无需 key 认证,无需暴露敏感 Token。 - 模型回退链(Fallback Chain):在
config.yaml中配置fallback_providers列表。当主模型返回429/503/529或连接超时时,Hermes 的底层路由引擎会自动将请求无缝转发至 DeepSeek Flash 官方 API。 - 零开销看门狗(Zero-Agent Watchdog):基于 Hermes 内置的 Cron 调度器运行本地 Python 监控脚本。当 Anti-Gravity 服务状态发生变化(上线/下线)时,自动向当前微信会话推送告警通知。
┌───────────────────────┐
│ Anti-Gravity Proxy │
│ http://127.0.0.1:8045 │
└──────────┬────────────┘
│
(正常) │ (故障/限流)
┌──────┴──────┐
│ ▼
┌────────┴────────┐ ┌──────────────────┐
│ Gemini 3.6 Flash │ │ DeepSeek Flash │
│ (Primary Model) │ │ (Fallback Model) │
└─────────────────┘ └──────────────────┘
▲
│ 自动回退
│
┌───────────────────────────────────────────────────┴───────────────────┐
│ Cron Watchdog (Python 3) │
│ 1. 每 5 分钟 GET http://127.0.0.1:8045/v1/models │
│ 2. 维持本地 .fallback_state 标记文件 │
│ 3. 仅在状态“切换”时通过 delivery='origin' 向微信发消息 │
└───────────────────────────────────────────────────────────────────────┘
2. 关键配置细节
(1) Hermes 配置文件修改 (~/.hermes/config.yaml)
# 主模型配置:指向本地 Anti-Gravity 服务
model:
default: gemini-3.6-flash-high
provider: custom
base_url: http://127.0.0.1:8045/v1
# 模型回退链:主模型异常时自动按顺序尝试
fallback_providers:
- provider: deepseek
model: deepseek-v4-flash
踩坑注意:
fallback_providers必须是 YAML 列表(List),不能使用hermes config set直接注入字符串,否则会被解析为带转义字符的单行字符串。应当使用 PyYAML 或手动编辑格式。
(2) 静默看门狗脚本 (~/.hermes/scripts/fallback-watchdog.py)
为了避免在 Windows 环境下依赖 WSL 的 /bin/bash 导致 execvpe 路径错误,看门狗使用原生 Python 实现:
import os
import sys
import urllib.request
from datetime import datetime
STATE_FILE = os.path.expanduser("~/.hermes/.fallback_state")
ANTIGRAVITY_URL = "http://127.0.0.1:8045/v1/models"
def check_service():
try:
req = urllib.request.Request(ANTIGRAVITY_URL, headers={'User-Agent': 'Hermes-Watchdog'})
with urllib.request.urlopen(req, timeout=3) as resp:
return resp.status == 200
except Exception:
return False
def main():
is_up = check_service()
was_down = os.path.exists(STATE_FILE)
now_str = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if is_up:
if was_down:
os.remove(STATE_FILE)
print(f"✅ Hermes 模型已恢复:Anti-Gravity 服务可用\n 当前使用:Gemini 3.6 Flash High\n 时间:{now_str}")
else:
if not was_down:
with open(STATE_FILE, "w") as f:
f.write(now_str)
print(f"⚠️ Hermes 模型已回退:Anti-Gravity 服务不可用\n 当前使用:DeepSeek Flash (deepseek-v4-flash)\n 时间:{now_str}")
if __name__ == "__main__":
main()
(3) Cron 任务创建
通过 Hermes 的 cronjob 工具绑定零开销模式(no_agent=True):
cronjob(
action='create',
name='antigravity-fallback-watchdog',
schedule='every 5m',
script='fallback-watchdog.py',
no_agent=True, # 不经过 LLM 解释,无 API 消耗
deliver='origin' # 自动定向投递至当前微信对话
)
3. 实测验证
- 配置检查:执行
hermes doctor,全部校验项绿色通过。 - 实时对话测试:调用
hermes chat -q提问,日志确认运行在customprovider 下,模型为gemini-3.6-flash-high,并成功识别到了 Gemini 专属的 1M 上下文限制。 - 熔断测试:模拟关闭 Anti-Gravity 本地端口,Hermes 的请求平滑回退至 DeepSeek Flash 响应,看门狗在下一个周期自动在微信中推送了状态回退提醒。
4. 经验总结
- 防断联原则:修改 AI Agent 核心模型配置前,必须保证回退链(Fallback Chain)与环境凭证(API Key)已部署到位。
- 跨平台脚本执行:在 Windows 环境下的 Cron 监控任务中,优先使用 Python 脚本而非 Shell 脚本,避免由于缺少
/bin/bash导致的子进程拉起失败。 - 沉淀 Skill:本次修改已总结为
hermes-custom-endpoints技能并更新至 Skill 库,以便未来在相同场景下快速复用。