DeepAI Paper Hermes Agent 教程,Hermes Gateway 与消息平台 Telegram 里 /model 不生效?Hermes Gateway 远程切换模型失效排查

Telegram 里 /model 不生效?Hermes Gateway 远程切换模型失效排查

如果你通过 Telegram 使用 Hermes Agent,可能会遇到一个很尴尬的问题:

/model anthropic/claude-opus-4.6

看起来 Telegram 里还能看到 /model 命令,甚至 Agent 可能回复“已经切换模型”,但实际模型并没有变。更糟的是,如果当前模型触发限流或不可用,你人在外面只有 Telegram,没有 SSH / CLI,就没法切到备用模型,整个 Gateway 体验会被卡死。

这篇文章基于 NousResearch/hermes-agent issue #4039,整理 Hermes Telegram Gateway 中 /model 被移除、CLI 切换不影响 Telegram session、以及临时 workaround 的排查思路。


典型现象:Telegram 命令还在,模型却没切

issue 里的描述很直接:

  • Telegram 里 /model 不再是可工作的命令;
  • 但 Telegram 客户端里仍显示它像一个可用 command;
  • 在 CLI 里切换模型,也不一定影响已经运行的 Telegram Gateway session;
  • 重启 gateway 后也可能没更新到预期模型;
  • 当当前 LLM 触发 rate limit 时,远程用户无法在 Telegram 里自助切换。

复现路径大致是:

1. Run Hermes in Telegram
2. Run /model + desired model
3. It doesn't switch
4. Switch models in Hermes CLI
5. Restart gateway
6. Gateway still doesn't update models

这不是“某个模型回复差”,而是 Gateway 运行时模型控制入口缺失


根因线索:/model 曾在 #3080 被移除

评论里有人指出:

/model has been removed from Hermes at commit #3080 9783c9d5

也就是说,Telegram Gateway 里 /model 失效,不一定是你的 Telegram Bot 配错,也不是 BotFather command list 没同步,而是功能层面发生过移除。

问题在于:功能被移除了,但没有一个同等可用的替代入口。

这就造成了 UX 断层:

  • CLI 用户还可以通过本机命令切换;
  • Gateway 用户的入口是 Telegram;
  • 如果 Telegram 没有 model switch,就失去了远程自救能力。

为什么 CLI 改了模型,Telegram 还是不变?

很多人会尝试:

hermes model
# 或
hermes config set model.default "anthropic/claude-opus-4.6"
hermes config set model.provider "openrouter"

然后重启 gateway,期待 Telegram 立即使用新模型。

但 Gateway session 可能有自己的运行时状态、会话对象或 provider 初始化流程。CLI 改配置不一定等价于“当前 Telegram 会话立即热切换”。

因此排查时要分清三层:

层级示例说明
全局配置hermes config set model.default ...写配置,不保证现有 gateway session 立即变
CLI 会话本机 hermes chat可能读到新配置
Gateway 会话Telegram bot thread/session可能缓存/绑定了旧模型状态

这就是为什么“我在 CLI 切了模型,Telegram 仍然没变”会发生。


最危险的情况:Agent 幻觉说“我已经切换了”

issue 评论里还有一个很真实的反馈:

> Telegram 把 /model anthropic/claude-opus-4.6 当普通文本传给 Agent,Agent 幻觉式回复“好的,我已经切换到这个模型”,但 OpenRouter 账单确认实际模型没变。

这比单纯命令失败更危险。

因为用户会以为模型已切换,继续发送任务,结果:

  • 仍在消耗旧模型额度;
  • rate limit 仍未解除;
  • 成本或上下文策略没有按预期变化;
  • 排查方向被误导。

更好的设计应该是二选一:

1. Gateway 提供真实可执行的模型切换工具; 2. 或系统提示明确告诉 Agent:你不能改变自己的 runtime model,不要声称已经切换。


临时 workaround:用 hermes config set 切默认模型

评论里给出的实用 workaround 是回到 CLI:

hermes config set model.default "anthropic/claude-opus-4.6"
hermes config set model.provider "openrouter"

然后根据实际 Gateway 行为,重启服务或开启新会话。

如果你的 Gateway 在 server 上运行,建议把常用切换动作封装成清晰的运维命令,避免每次临时敲长命令。


另一个 workaround:quick_commands

评论中还提到可以在 config.yaml 里加 quick commands:

quick_commands:
  opus:
    type: shell
    command: 'hermes config set model.default "anthropic/claude-opus-4.6"'
    description: Switch to Opus
  sonnet:
    type: shell
    command: 'hermes config set model.default "anthropic/claude-sonnet-4"'
    description: Switch to Sonnet

这样可以通过更短的命令触发模型配置切换。

但要注意:

  • quick command 是否能从 Telegram dispatch,取决于当时 Gateway 对 quick commands 的支持;
  • 即使配置改了,当前 session 是否热切换仍需验证;
  • 需要让用户明确知道这是“改配置”,不是模型立刻在当前回复中自动变更。

远程 Gateway 为什么必须有模型切换能力?

对于 Telegram 这种远程入口,模型切换不是锦上添花,而是故障恢复能力。

常见场景:

  • 当前模型 429 rate limit;
  • Claude / OpenRouter 某个模型临时不可用;
  • 默认模型成本太高,需要切到便宜模型;
  • 长上下文任务要切大窗口模型;
  • 轻量任务要切小模型;
  • 用户人在手机上,不能 SSH 到服务器。

如果只能通过 CLI 切换,那 Gateway 的“远程代理”价值会明显下降。

所以 issue #4039 的重点不是“用户想要一个命令”,而是:

> Gateway 必须提供可验证、不会误导用户的 runtime 控制面。


排查清单:确认到底有没有切成功

遇到 Telegram /model 不生效时,可以按下面检查:

1. 确认 Hermes 版本是否处于 /model 被移除后的版本; 2. 检查 Telegram command list 是否只是残留显示; 3. 发送 /model xxx 后,看 Gateway 日志是否进入真实 handler; 4. 查看当前请求的 provider/model 日志; 5. 在 OpenRouter / DeepAI / provider 控制台看实际计费模型; 6. 用 CLI hermes config get model.default 确认配置值; 7. 重启 Gateway 或开启新 session 后再次验证; 8. 警惕 Agent 文本回复“我已经切了”但实际没有切。

最可靠的验证不是聊天回复,而是请求日志或 provider 账单。


和 DeepAI API 中转站的关系

如果你把 Hermes 接到 DeepAI API 中转站,模型配置通常类似:

Base URL: https://api.deepai.wang/v1
API Key: 你的 DeepAI Key
Model: 以 DeepAI 控制台为准

DeepAI 的价值在于统一 OpenAI-compatible API 入口,方便在不同模型之间做上游管理。

但本文这个问题在 Hermes Gateway 控制面:Telegram 是否有一个真实的模型切换 handler、配置变更是否应用到 Gateway session。DeepAI API 中转站不能替 Hermes 恢复 /model 命令,也不能保证 Agent 口头声称“已切换”就真的切了。

更合理的做法是:

  • DeepAI 负责统一模型 API 入口;
  • Hermes 负责提供可靠的 Gateway model switching;
  • 用户通过日志/账单验证实际模型。

FAQ

Telegram 里看到 /model,为什么不能用?

可能是命令列表残留或 Telegram command registration 未清理,但 Hermes Gateway 里真实 handler 已经移除或不工作。

Agent 说“我已经切换模型”,可信么?

不能只信文本回复。要看 Gateway 日志、请求 body、provider 控制台或账单记录。

在 CLI 里切模型为什么 Telegram 不变?

Gateway session 可能有独立运行时状态,CLI 改配置不一定热更新到当前 Telegram 会话。

临时怎么切?

可以用 hermes config set model.default ...hermes config set model.provider ...,必要时重启 Gateway 或新建会话,再验证实际请求模型。

DeepAI API 中转站能解决 /model 不生效吗?

不能直接解决。这是 Hermes Telegram Gateway 的控制命令问题。DeepAI 可以提供统一 OpenAI-compatible 模型入口,但不替代 Gateway runtime 控制面。


总结

Hermes Telegram Gateway 里 /model 不生效,核心不是模型不可用,而是远程控制入口断了:

/model 被移除或无 handler → Telegram 用户无法真实切换模型 → Agent 可能还会幻觉式声称已切换

对远程 Agent 来说,模型切换是故障恢复能力,尤其在 rate limit、供应商故障、成本控制场景里非常关键。

一句话:不要相信 Telegram 里“我已切换模型”的口头回复;要用日志、配置和 provider 账单确认真实模型。

Related Post

1M 上下文不是越大越好:Hermes 在 Claude Pro 上踩到的 200K 限制1M 上下文不是越大越好:Hermes 在 Claude Pro 上踩到的 200K 限制

Hermes 默认 1M context window 看似更强,但 Claude Pro 账号实际常见限制是 200K,GPT 与本地 Ollama 也可能被错误报大。本文复盘 #3577:为什么上下文窗口不是越大越好,而是越准确越好。

一个终端开关,为什么会让 Discord 消息开始流式编辑?一个终端开关,为什么会让 Discord 消息开始流式编辑?

Hermes issue #8338 暴露了一个配置优先级反转:display.streaming 本应只控制 CLI 终端显示,却错误覆盖了 Gateway 的 streaming.enabled: false,让 Discord、Telegram 等消息平台开始流式编辑。本文解释根因、影响和修复思路。

安全过滤器把注释也当命令了:Hermes 终端误杀 setsid / nohup 的坑安全过滤器把注释也当命令了:Hermes 终端误杀 setsid / nohup 的坑

Hermes terminal safety filter 曾用简单正则扫描 nohup/disown/setsid,导致 git commit message、PR body、Python -c 代码和 echo 文本里的关键词也被当作真实后台命令拦截。本文复盘 #20064:为什么安全过滤不能只靠关键词扫描。