Translates the full English docs corpus (335 files) into Simplified Chinese under website/i18n/zh-Hans/. Combined with PR #31895 (cross- locale link fix), the 简体中文 locale toggle now serves a complete Chinese site with working cross-page navigation. Pipeline: - Claude Sonnet 4.6 via OpenRouter, 8-way concurrent - Preserves frontmatter keys, code blocks, MDX/JSX, link URLs, brand names, and technical jargon (prompt/token/hook/MCP/ACP/etc.) - Translates only frontmatter title/description and prose - Two largest files (configuration.md 93KB, research-paper-writing.md 107KB) retried with 64K max_tokens after initial fence-drift - 3 manual post-fixes for MDX edge cases the model didn't escape: < in optional-skills-catalog table, double-quotes in an alt= tag, and a bare URL adjacent to a full-width period Cost: ~$30 total (Sonnet 4.6 input $3/M + output $15/M). Verified `npm run build` succeeds for both en and zh-Hans locales, no double-prefixed /docs/zh-Hans/docs/ URLs in rendered output, all in-page navigation resolves correctly. Translations are machine-generated and may need human review on specific pages — but they're an enormous improvement over the previous state (3 zh-Hans pages out of 335).
17 KiB
| title | description | sidebar_label | sidebar_position |
|---|---|---|---|
| 备用提供商 | 配置自动故障转移,在主模型不可用时切换到备用 LLM 提供商。 | 备用提供商 | 8 |
备用提供商
Hermes Agent 具备三层弹性机制,在提供商出现问题时保持会话正常运行:
- 凭据池 — 在同一提供商的多个 API 密钥之间轮换(优先尝试)
- 主模型备用 — 当主模型失败时,自动切换到不同的提供商:模型
- 辅助任务备用 — 针对视觉、压缩、网页提取等附属任务的独立提供商解析
凭据池处理同一提供商内的轮换(例如多个 OpenRouter 密钥)。本页介绍跨提供商的备用机制。两者均为可选,且相互独立。
主模型备用
当主 LLM 提供商遇到错误——速率限制、服务器过载、认证失败、连接中断——Hermes 可以在会话中途自动切换到备用提供商:模型对,且不会丢失对话内容。
配置
最简便的方式是使用交互式管理器:
hermes fallback
hermes fallback 复用 hermes model 的提供商选择器——相同的提供商列表、相同的凭据提示、相同的验证流程。使用子命令 add、list(别名 ls)、remove(别名 rm)和 clear 来管理备用链。更改会持久化到 config.yaml 顶层的 fallback_providers: 列表中。
如果你更倾向于直接编辑 YAML,可在 ~/.hermes/config.yaml 中添加 fallback_model 部分:
fallback_model:
provider: openrouter
model: anthropic/claude-sonnet-4
provider 和 model 均为必填项。若任一缺失,备用功能将被禁用。
:::note fallback_model 与 fallback_providers
fallback_model(单数)是旧版单备用键——Hermes 仍支持以保持向后兼容。fallback_providers(复数,列表)支持按顺序尝试多个备用;hermes fallback 写入此键。当两者同时设置时,Hermes 会合并它们,fallback_providers 优先。
:::
支持的提供商
| 提供商 | 值 | 要求 |
|---|---|---|
| AI Gateway | ai-gateway |
AI_GATEWAY_API_KEY |
| 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:
fallback_model:
provider: custom
model: my-local-model
base_url: http://localhost:8000/v1
key_env: MY_LOCAL_KEY # 包含 API 密钥的环境变量名
备用触发条件
当主模型出现以下失败时,备用机制自动激活:
- 速率限制(HTTP 429)——耗尽重试次数后
- 服务器错误(HTTP 500、502、503)——耗尽重试次数后
- 认证失败(HTTP 401、403)——立即触发(重试无意义)
- 未找到(HTTP 404)——立即触发
- 无效响应——API 多次返回格式错误或空响应时
触发后,Hermes 将:
- 解析备用提供商的凭据
- 构建新的 API 客户端
- 就地替换模型、提供商和客户端
- 重置重试计数器并继续对话
切换是无感知的——对话历史、工具调用和上下文均被保留。Agent 从中断处继续,只是使用了不同的模型。
:::info 按轮次,而非按会话 备用机制的作用域为单次轮次:每条新用户消息都从主模型重新开始。若主模型在某轮次中途失败,备用仅对该轮次生效。下一条消息时,Hermes 会再次尝试主模型。在单次轮次内,备用最多激活一次——若备用也失败,则进入常规错误处理流程(重试,然后返回错误消息)。这既防止了单轮次内的级联故障转移循环,又让主模型在每轮次都有重新尝试的机会。 :::
示例
以 OpenRouter 作为 Anthropic 原生的备用:
model:
provider: anthropic
default: claude-sonnet-4-6
fallback_model:
provider: openrouter
model: anthropic/claude-sonnet-4
以 Nous Portal 作为 OpenRouter 的备用:
model:
provider: openrouter
default: anthropic/claude-opus-4
fallback_model:
provider: nous
model: nous-hermes-3
以本地模型作为云端的备用:
fallback_model:
provider: custom
model: llama-3.1-70b
base_url: http://localhost:8000/v1
key_env: LOCAL_API_KEY
以 Codex OAuth 作为备用:
fallback_model:
provider: openai-codex
model: gpt-5.3-codex
备用适用范围
| 场景 | 是否支持备用 |
|---|---|
| CLI 会话 | ✔ |
| 消息网关(Telegram、Discord 等) | ✔ |
| 子 Agent 委派 | ✘(子 Agent 不继承备用配置) |
| Cron 任务 | ✘(使用固定提供商运行) |
| 辅助任务(视觉、压缩等) | ✘(使用各自的提供商链——见下文) |
:::tip
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 中独立配置:
auxiliary:
vision:
provider: "auto" # auto | openrouter | nous | codex | main | anthropic
model: "" # 例如 "openai/gpt-4o"
base_url: "" # 直接端点(优先于 provider)
api_key: "" # base_url 的 API 密钥
web_extract:
provider: "auto"
model: ""
compression:
provider: "auto"
model: ""
skills_hub:
provider: "auto"
model: ""
mcp:
provider: "auto"
model: ""
以上每个任务均遵循相同的 provider / model / base_url 模式。上下文压缩在 auxiliary.compression 下配置:
auxiliary:
compression:
provider: main # 与其他辅助任务相同的提供商选项
model: google/gemini-3-flash-preview
base_url: null # 自定义 OpenAI 兼容端点
备用模型使用:
fallback_model:
provider: openrouter
model: anthropic/claude-sonnet-4
# base_url: http://localhost:8000/v1 # 可选自定义端点
三者——辅助任务、压缩、备用——工作方式相同:设置 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 将完全绕过提供商解析,直接向该端点发送请求:
auxiliary:
vision:
base_url: "http://localhost:1234/v1"
api_key: "local-key"
model: "qwen2.5-vl"
base_url 优先于 provider。Hermes 使用配置的 api_key 进行认证,若未设置则回退到 OPENAI_API_KEY。对于自定义端点,不会复用 OPENROUTER_API_KEY。
辅助任务容量错误备用
当你设置了显式的辅助提供商(例如 auxiliary.vision.provider: glm)时,Hermes 将其视为首选——但若该提供商因容量错误(HTTP 402 付款要求、HTTP 429 每日配额耗尽、连接失败)而无法处理请求,Hermes 会通过分层链进行备用,而不是静默失败:
- 主辅助提供商 — 你配置的那个(始终优先尝试)
auxiliary.<task>.fallback_chain— 你的每任务覆盖列表(若已配置)- 主 Agent 提供商 + 模型 — 最后的安全网(始终尝试,即使未配置链)
- 警告 + 重新抛出 — 若所有层均失败,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 为可选。
auxiliary:
vision:
provider: glm
model: glm-4v-flash
fallback_chain:
- provider: openrouter
model: google/gemini-3-flash-preview
- provider: nous
model: anthropic/claude-sonnet-4
compression:
provider: openrouter
fallback_chain:
- provider: openai
model: gpt-4o-mini
你不需要配置 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 配置块来控制处理摘要的模型和提供商:
auxiliary:
compression:
provider: "auto" # auto | openrouter | nous | main
model: "google/gemini-3-flash-preview"
:::info 旧版迁移
旧版配置中的 compression.summary_model / compression.summary_provider / compression.summary_base_url 会在首次加载时自动迁移到 auxiliary.compression.*(配置版本 17)。
:::
若压缩没有可用的提供商,Hermes 会直接丢弃中间对话轮次而不生成摘要,而不是让会话失败。
委派提供商覆盖
由 delegate_task 生成的子 Agent 不会使用主备用模型。但可以将它们路由到不同的提供商:模型对以优化成本:
delegation:
provider: "openrouter" # 覆盖所有子 Agent 的提供商
model: "google/gemini-3-flash-preview" # 覆盖模型
# base_url: "http://localhost:1234/v1" # 或使用直接端点
# api_key: "local-key"
完整配置详情参见子 Agent 委派。
Cron 任务提供商
Cron 任务使用执行时配置的提供商运行,不支持备用模型。若要为 Cron 任务使用不同的提供商,请在 Cron 任务本身上配置 provider 和 model 覆盖:
cronjob(
action="create",
schedule="every 2h",
prompt="Check server status",
provider="openrouter",
model="google/gemini-3-flash-preview"
)
完整配置详情参见定时任务(Cron)。
总结
| 功能 | 备用机制 | 配置位置 |
|---|---|---|
| 主 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 |