Skip to content

Hermes Agent 的 Provider 路由分两层:第一层是 Provider 统一接入(15+ 家,用 OpenRouter 聚合或直接配各家 Key),第二层是 per-turn 智能路由(根据消息复杂度自动用廉价模型处理简单问题)。两层叠加,能在不损失质量的前提下把 API 成本降低 30~60%。

Hermes Agent 多 Provider 路由:怎么配置 Claude / Copilot / DeepSeek 并自动切换

Hermes 支持同时配置多个 LLM Provider,核心场景有三个:

  1. 不同任务用不同模型(编程用 Claude,简单问答用 Gemini Flash)
  2. 自动降级:简单消息不浪费贵模型
  3. 多账号轮转(credential pool),防单 Key 限速

Provider 接入方式

方式一:OpenRouter(推荐)

OpenRouter 是聚合中间层,一个 Key 覆盖 200+ 模型,计费按实际调用量:

env
# ~/.hermes/.env
OPENROUTER_API_KEY=sk-or-v1-...

config.yaml 指定模型时用 provider/model 格式:

yaml
model:
  default: anthropic/claude-opus-4.6

Hermes 检测到 anthropic/ 前缀 + OPENROUTER_API_KEY,自动走 OpenRouter 路由。

方式二:直接接各家 Provider

也可以绕过 OpenRouter,直接配各家 Key,Hermes 会按 Key 的前缀或 Provider 名称路由:

env
# Anthropic 原生 API
ANTHROPIC_API_KEY=sk-ant-...

# Google Gemini
GOOGLE_API_KEY=AIza...

# DeepSeek(支持 OpenAI 兼容格式)
DEEPSEEK_API_KEY=sk-...

# Kimi(月之暗面)
KIMI_API_KEY=sk-kimi-...

# GitHub Copilot(用 GitHub Token)
GITHUB_TOKEN=ghp_...

Hermes 按优先级自动选 Provider:配置文件里指定 provider 字段 > 能匹配到 Key 的第一个。

方式三:Credential Pool(多账号轮转)

对于有 rate limit 的 Provider,配 credential pool 让 Hermes 自动轮转多个 Key:

yaml
# config.yaml
model:
  credential_pool:
    - api_key: sk-ant-key1
      provider: anthropic
    - api_key: sk-ant-key2
      provider: anthropic
    - api_key: sk-or-key1
      provider: openrouter

Hermes 按轮询策略分配请求,单 Key 打到限速时自动切下一个。

per-turn 智能路由

机制说明

Hermes 在每次调用前运行 choose_cheap_model_route() 判断是否降级到廉价模型。判断逻辑(保守策略):

触发廉价模型路由的条件(同时满足):

  • 消息长度 ≤ 160 字符
  • 词数 ≤ 28 个词
  • 不超过 1 行(无多行内容)
  • 不含代码块(无反引号)
  • 不含 URL

强制保留主力模型(命中任一):

  • 消息含关键词:debugimplementrefactoranalyzearchitecturereviewterminaltestdelegatedocker
  • 消息超过长度/词数阈值

设计哲学是保守:宁可多用贵模型,也不在复杂任务上用廉价模型出错。

配置廉价路由

yaml
# config.yaml
routing:
  enabled: true
  cheap_model:
    provider: openrouter
    model: google/gemini-flash-1.5
  max_simple_chars: 160    # 消息字符上限(超过保留主力)
  max_simple_words: 28     # 词数上限

常见的廉价模型搭配:

主力模型廉价备选适用场景
claude-opus-4.6gemini-flash-1.5简单问答降级
claude-sonnet-4.6gpt-4o-mini日常编程 + 简单交互
deepseek-chatqwen-turbo中文场景

Anthropic Prompt Caching

Hermes 实现了 Anthropic 的 system_and_3 缓存策略,自动插入 cache_control 断点:

位置缓存类型节省
系统提示对话全程复用最稳定
最近 3 条非系统消息滚动窗口上下文越长越省

实现细节:Hermes 在发送前做深拷贝,对最后 3 条非 system 消息的末尾内容块注入 {"type": "ephemeral"} 标记。不改变原始消息,不影响缓存的一致性。

Anthropic 的计费规则: cached 输入 token 费用是普通输入的 10%,写入缓存(首次)是普通输入的 125%。长对话从第二轮开始节省,上下文越长、对话越多,省得越多。

配置(默认开启,可关闭):

yaml
# config.yaml
anthropic_caching:
  enabled: true
  ttl: "5m"   # 缓存生命周期,可选 "5m" 或 "1h"

成本优化实战

场景:日常编程助手,同时要控制成本

yaml
model:
  default: anthropic/claude-sonnet-4.6

routing:
  enabled: true
  cheap_model:
    provider: openrouter
    model: google/gemini-flash-1.5-8b

anthropic_caching:
  enabled: true
  ttl: "5m"

效果估算(实际因对话模式而异):

  • 廉价路由:简单问答占 20~30% 时,可节省约 15~20%
  • Prompt caching:长对话(20+ 轮)节省约 40~60% 输入 token 费用

场景:严格固定单一模型,关闭路由

yaml
routing:
  enabled: false

FAQ

Q: per-turn 路由的降级判断准确吗?

保守策略设计就是宁可多用贵模型。一旦消息里出现代码、技术关键词、多行内容,立即回主力模型。误判率低,但覆盖率也不高。实测简单日常问候和短问答会触发,复杂任务全部走主力。

Q: Gemini Flash 和 OpenRouter 的延迟差多少?

OpenRouter 走中间层有额外延迟(通常 100~300ms),对 Claude 影响不大(Claude 本身响应慢),对 Gemini Flash 影响更明显。如果延迟敏感,直接配 GOOGLE_API_KEY 绕过 OpenRouter。

Q: Credential Pool 和 OpenRouter 的区别?

Credential Pool 是在 Hermes 层面做多账号轮转,适合有多个自有 API Key 的场景。OpenRouter 是聚合层自动负载均衡,适合不想管多个 Key 的场景。两者可以叠加:OpenRouter Key 放进 Credential Pool,多个 OpenRouter 账号轮转。