Hermes Agent 具备三层弹性机制,在提供商出现问题时保持会话正常运行:1.
凭据池 — 在同一提供商的多个 API 密钥之间轮换(优先尝试) 2.
主模型备用 — 当主模型失败时,自动切换到不同的提供商:模型
3.
辅助任务备用 — 针对视觉、压缩、网页提取等附属任务的独立提供商解析
凭据池处理同一提供商内的轮换(例如多个 OpenRouter 密钥)。本页介绍跨提供商的备用机制。两者均为可选,且相互独立。主模型备用#
当主 LLM 提供商遇到错误——速率限制、服务器过载、认证失败、连接中断——Hermes 可以在会话中途自动切换到备用提供商:模型对,且不会丢失对话内容。hermes fallback 复用 hermes model 的提供商选择器——相同的提供商列表、相同的凭据提示、相同的验证流程。使用子命令 add、list(别名 ls)、remove(别名 rm)和 clear 来管理备用链。更改会持久化到 config.yaml 顶层的 fallback_providers: 列表中。如果你更倾向于直接编辑 YAML,可在 ~/.hermes/config.yaml 中添加 fallback_model 部分:provider 和 model 均为必填项。若任一缺失,备用功能将被禁用。:::note fallback_model 与 fallback_providers
fallback_model(单数)是旧版单备用键——Hermes 仍支持以保持向后兼容。fallback_providers(复数,列表)支持按顺序尝试多个备用;hermes fallback 写入此键。当两者同时设置时,Hermes 会合并它们,fallback_providers 优先。
:::支持的提供商#
| 提供商 | 值 | 要求 |
|---|
| OpenRouter | openrouter | OPENROUTER_API_KEY |
| Nous Portal | nous | hermes setup --portal(全新安装)或 hermes auth add nous(OAuth) |
| OpenAI Codex | openai-codex | hermes model(ChatGPT OAuth) |
| GitHub Copilot | copilot | COPILOT_GITHUB_TOKEN、GH_TOKEN 或 GITHUB_TOKEN |
| GitHub Copilot ACP | copilot-acp | 外部进程(编辑器集成) |
| Anthropic | anthropic | ANTHROPIC_API_KEY 或 Claude Code 凭据 |
| z.ai / GLM | zai | GLM_API_KEY |
| Kimi / Moonshot | kimi-coding | KIMI_API_KEY |
| MiniMax | minimax | MINIMAX_API_KEY |
| MiniMax(中国) | minimax-cn | MINIMAX_CN_API_KEY |
| DeepSeek | deepseek | DEEPSEEK_API_KEY |
| NVIDIA NIM | nvidia | NVIDIA_API_KEY(可选:NVIDIA_BASE_URL) |
| GMI Cloud | gmi | GMI_API_KEY(可选:GMI_BASE_URL) |
| StepFun | stepfun | STEPFUN_API_KEY(可选:STEPFUN_BASE_URL) |
| Ollama Cloud | ollama-cloud | OLLAMA_API_KEY |
| Google Gemini(OAuth) | google-gemini-cli | hermes model(Google OAuth;可选:HERMES_GEMINI_PROJECT_ID) |
| Google AI Studio | gemini | GOOGLE_API_KEY(别名:GEMINI_API_KEY) |
| xAI(Grok) | xai(别名 grok) | XAI_API_KEY(可选:XAI_BASE_URL) |
| xAI Grok OAuth(SuperGrok) | xai-oauth(别名 grok-oauth) | hermes model → xAI Grok OAuth(浏览器登录;需 SuperGrok 订阅) |
| AWS Bedrock | bedrock | 标准 boto3 认证(AWS_REGION + AWS_PROFILE 或 AWS_ACCESS_KEY_ID) |
| Qwen Portal(OAuth) | qwen-oauth | hermes model(Qwen Portal OAuth;可选:HERMES_QWEN_BASE_URL) |
| MiniMax(OAuth) | minimax-oauth | hermes model(MiniMax 门户 OAuth) |
| OpenCode Zen | opencode-zen | OPENCODE_ZEN_API_KEY |
| OpenCode Go | opencode-go | OPENCODE_GO_API_KEY |
| Kilo Code | kilocode | KILOCODE_API_KEY |
| Xiaomi MiMo | xiaomi | XIAOMI_API_KEY |
| Arcee AI | arcee | ARCEEAI_API_KEY |
| GMI Cloud | gmi | GMI_API_KEY |
| Alibaba / DashScope | alibaba | DASHSCOPE_API_KEY |
| Alibaba Coding Plan | alibaba-coding-plan | ALIBABA_CODING_PLAN_API_KEY(回退到 DASHSCOPE_API_KEY) |
| Kimi / Moonshot(中国) | kimi-coding-cn | KIMI_CN_API_KEY |
| StepFun | stepfun | STEPFUN_API_KEY |
| Tencent TokenHub | tencent-tokenhub | TOKENHUB_API_KEY |
| Microsoft Foundry | azure-foundry | AZURE_FOUNDRY_API_KEY + AZURE_FOUNDRY_BASE_URL |
| LM Studio(本地) | lmstudio | LM_API_KEY(本地可不填)+ LM_BASE_URL |
| Hugging Face | huggingface | HF_TOKEN |
| 自定义端点 | custom | base_url + key_env(见下文) |
自定义端点备用#
对于兼容 OpenAI 的自定义端点,添加 base_url 并可选填 key_env:备用触发条件#
服务器错误(HTTP 500、502、503)——耗尽重试次数后
认证失败(HTTP 401、403)——立即触发(重试无意义)
切换是无感知的——对话历史、工具调用和上下文均被保留。Agent 从中断处继续,只是使用了不同的模型。:::info 按轮次,而非按会话
备用机制的作用域为单次轮次:每条新用户消息都从主模型重新开始。若主模型在某轮次中途失败,备用仅对该轮次生效。下一条消息时,Hermes 会再次尝试主模型。在单次轮次内,备用最多激活一次——若备用也失败,则进入常规错误处理流程(重试,然后返回错误消息)。这既防止了单轮次内的级联故障转移循环,又让主模型在每轮次都有重新尝试的机会。
:::以 OpenRouter 作为 Anthropic 原生的备用:以 Nous Portal 作为 OpenRouter 的备用:备用适用范围#
| 场景 | 是否支持备用 |
|---|
| CLI 会话 | ✔ |
| 消息网关(Telegram、Discord 等) | ✔ |
| 子 Agent 委派 | ✘(子 Agent 不继承备用配置) |
| Cron 任务 | ✘(使用固定提供商运行) |
| 辅助任务(视觉、压缩等) | ✘(使用各自的提供商链——见下文) |
fallback_model 没有对应的环境变量——它只能通过 config.yaml 配置。这是有意为之:备用配置是一个经过深思熟虑的选择,不应被过期的 shell 导出变量覆盖。
辅助任务备用#
Hermes 为附属任务使用独立的轻量级模型。每个任务都有自己的提供商解析链,充当内置的备用系统。具有独立提供商解析的任务#
| 任务 | 功能说明 | 配置键 |
|---|
| 视觉 | 图像分析、浏览器截图 | auxiliary.vision |
| 网页提取 | 网页内容摘要 | auxiliary.web_extract |
| 压缩 | 上下文压缩摘要 | auxiliary.compression |
| Skills Hub | 技能搜索与发现 | auxiliary.skills_hub |
| MCP | MCP 辅助操作 | auxiliary.mcp |
| 审批 | 智能命令审批分类 | auxiliary.approval |
| 标题生成 | 会话标题摘要 | auxiliary.title_generation |
| Triage Specifier | hermes kanban specify / 看板(kanban)✨ 按钮——将单行 triage 任务扩展为完整规格 | auxiliary.triage_specifier |
自动检测链#
当任务的提供商设置为 "auto"(默认值)时,Hermes 按顺序尝试各提供商,直到找到可用的:OpenRouter → Nous Portal → 自定义端点 → Codex OAuth →
API 密钥提供商(z.ai、Kimi、MiniMax、Xiaomi MiMo、Hugging Face、Anthropic)→ 放弃
主提供商(若支持视觉)→ OpenRouter → Nous Portal →
Codex OAuth → Anthropic → 自定义端点 → 放弃
若解析到的提供商在调用时失败,Hermes 还有内部重试机制:若该提供商不是 OpenRouter 且未设置显式 base_url,则尝试以 OpenRouter 作为最后备用。配置辅助提供商#
每个任务可在 config.yaml 中独立配置:以上每个任务均遵循相同的 provider / model / base_url 模式。上下文压缩在 auxiliary.compression 下配置:三者——辅助任务、压缩、备用——工作方式相同:设置 provider 指定处理请求的提供商,model 指定使用的模型,base_url 指向自定义端点(会覆盖 provider)。辅助任务的提供商选项#
以下选项仅适用于 auxiliary:、compression: 和 fallback_model: 配置——"main" 不是顶层 model.provider 的有效值。对于自定义端点,请在 model: 部分使用 provider: custom(参见 AI 提供商)。| 提供商 | 说明 | 要求 |
|---|
"auto" | 按顺序尝试各提供商直到找到可用的(默认) | 至少配置一个提供商 |
"openrouter" | 强制使用 OpenRouter | OPENROUTER_API_KEY |
"nous" | 强制使用 Nous Portal | hermes auth |
"codex" | 强制使用 Codex OAuth | hermes model → Codex |
"main" | 使用主 Agent 当前的提供商(仅限辅助任务) | 已配置活跃的主提供商 |
"anthropic" | 强制使用 Anthropic 原生 | ANTHROPIC_API_KEY 或 Claude Code 凭据 |
直接端点覆盖#
对于任意辅助任务,设置 base_url 将完全绕过提供商解析,直接向该端点发送请求:base_url 优先于 provider。Hermes 使用配置的 api_key 进行认证,若未设置则回退到 OPENAI_API_KEY。对于自定义端点,不会复用 OPENROUTER_API_KEY。
辅助任务容量错误备用#
当你设置了显式的辅助提供商(例如 auxiliary.vision.provider: glm)时,Hermes 将其视为首选——但若该提供商因容量错误(HTTP 402 付款要求、HTTP 429 每日配额耗尽、连接失败)而无法处理请求,Hermes 会通过分层链进行备用,而不是静默失败:2.
auxiliary.<task>.fallback_chain — 你的每任务覆盖列表(若已配置)
3.
主 Agent 提供商 + 模型 — 最后的安全网(始终尝试,即使未配置链)
4.
警告 + 重新抛出 — 若所有层均失败,Hermes 以 WARNING 级别记录 Auxiliary <task>: ... all fallbacks exhausted 并重新抛出原始错误
瞬时 HTTP 429 速率限制(Retry-After: ...)被视为请求约束,而非容量问题——它们遵守你的显式提供商选择,不会触发备用链。只有每日/每月配额耗尽、付款错误和连接失败才会绕过显式提供商限制。对于使用 provider: auto(无显式辅助提供商)的用户,现有的自动检测链将替代步骤 2–3 运行。其第一步已经是主 Agent 模型,因此 auto 用户无需任何配置即可获得相同效果。可选:每任务备用链#
若你希望使用与"主 Agent 模型优先"不同的备用顺序,可显式配置 fallback_chain。每个条目至少需要 provider;model、base_url 和 api_key 为可选。你不需要配置 fallback_chain 才能获得备用功能——主 Agent 安全网无论如何都会运行。仅当你明确希望使用与默认不同的顺序时才需配置。触发备用的提供商配额错误#
Hermes 将以下情况识别为等同于 402 额度耗尽的容量错误(而非瞬时速率限制):Bedrock / LiteLLM:Too many tokens per day、daily limit、tokens per day
Vertex AI / GCP:quota exceeded、resource exhausted、RESOURCE_EXHAUSTED
通用:daily quota、quota_exceeded
若你的提供商对每日配额耗尽返回不同的错误信息,而 Hermes 未触发备用,这是一个 bug——请附上确切的错误字符串提交 issue。
上下文压缩备用#
上下文压缩使用 auxiliary.compression 配置块来控制处理摘要的模型和提供商:旧版配置中的 compression.summary_model / compression.summary_provider / compression.summary_base_url 会在首次加载时自动迁移到 auxiliary.compression.*(配置版本 17)。
若压缩没有可用的提供商,Hermes 会直接丢弃中间对话轮次而不生成摘要, 而不是让会话失败。
委派提供商覆盖#
由 delegate_task 生成的子 Agent 不会使用主备用模型。但可以将它们路由到不同的提供商:模型对以优化成本:
Cron 任务提供商#
Cron 任务使用执行时配置的提供商运行,不支持备用模型。若要为 Cron 任务使用不同的提供商,请在 Cron 任务本身上配置 provider 和 model 覆盖:
| 功能 | 备用机制 | 配置位置 |
|---|
| 主 Agent 模型 | fallback_model(config.yaml 中)——出错时按轮次故障转移(每轮次恢复主模型) | fallback_model:(顶层) |
| 辅助任务(任意)— auto 用户 | 容量错误时完整自动检测链(主 Agent 模型优先,然后提供商链) | auxiliary.<task>.provider: auto |
| 辅助任务(任意)— 显式提供商 | fallback_chain(若已设置)→ 主 Agent 模型 → 警告 + 抛出,仅在容量错误时触发 | auxiliary.<task>.fallback_chain |
| 视觉 | 分层(见上文)+ 内部 OpenRouter 重试 | auxiliary.vision |
| 网页提取 | 分层(见上文)+ 内部 OpenRouter 重试 | auxiliary.web_extract |
| 上下文压缩 | 分层(见上文);所有层不可用时降级为无摘要 | auxiliary.compression |
| Skills Hub | 分层(见上文) | auxiliary.skills_hub |
| MCP 辅助 | 分层(见上文) | auxiliary.mcp |
| 审批分类 | 分层(见上文) | auxiliary.approval |
| 标题生成 | 分层(见上文) | auxiliary.title_generation |
| Triage Specifier | 分层(见上文) | auxiliary.triage_specifier |
| 委派 | 仅提供商覆盖(无自动备用) | delegation.provider / delegation.model |
| Cron 任务 | 仅每任务提供商覆盖(无自动备用) | 每任务 provider / model |