DeepAI Paper Hermes Agent 教程,Hermes Gateway 与消息平台,Hermes 终端、Docker 与安装 Matrix/Telegram 突然报 cannot import cfg_get?Hermes Gateway 升级后旧代码未重启排查

Matrix/Telegram 突然报 cannot import cfg_get?Hermes Gateway 升级后旧代码未重启排查

Hermes Agent 升级后,如果你在 Matrix、Telegram 或飞书里一发消息就看到:

Sorry, I encountered an error (ImportError).
cannot import name 'cfg_get' from 'hermes_cli.config'
Try again or use /reset to start a fresh session.

很多人第一反应会去查 Matrix 配置、Element 客户端、E2EE、Bot Token,甚至怀疑模型 API 不可用。但 NousResearch/hermes-agent issue #17648 里的讨论显示:这个问题更像是 Gateway 升级后仍运行旧代码/旧 import 状态,所以 /new/reset 不解决,真正有效的是重启 Gateway。


典型现象:/reset 没用,重启 Gateway 有用

issue 原始报告来自 Matrix:

Sorry, I encountered an error (ImportError).
cannot import name 'cfg_get' from 'hermes_cli.config'
(/Users/assistant/.hermes/hermes-agent/hermes_cli/config.py)
Try again or use /reset to start a fresh session.

复现路径很短:

1. 用 Matrix / Element / Element X 给 Hermes 发消息; 2. Hermes 立即返回 ImportError: cannot import name 'cfg_get'; 3. /reset/new 不解决; 4. 之后同样错误继续出现。

评论里进一步确认:

  • 有人 Telegram 也遇到同样错误;
  • 有人多个 profile 中只有部分 profile 报错;
  • 有人飞书升级后也遇到;
  • 多个用户反馈 hermes gateway restart 或按 profile 重启后恢复。

这说明它不是 Matrix 专属问题,而是 Gateway 运行态问题。


为什么错误信息会误导你去查 Matrix?

因为原始 issue 标了 Matrix,错误也发生在 Matrix 聊天里。但关键错误是:

cannot import name 'cfg_get' from 'hermes_cli.config'

这是 Python import 层的问题,不是 Matrix 协议层的问题。

如果是 Matrix 房间、E2EE、access token 或 homeserver 错误,常见表现会是:

  • bot 收不到消息;
  • 加密消息无法解密;
  • 发送事件失败;
  • 认证/权限错误;
  • room join 失败。

而这里是 Gateway 收到了消息,并且尝试执行业务逻辑时,在导入 Hermes 内部配置函数时崩了。


根因判断:升级后的代码与运行中的 Gateway 不一致

cfg_get 这种 import error 往往出现在代码结构变更后:

  • 新代码移动/删除/重命名了函数;
  • 某些模块仍按旧路径 import;
  • Gateway 进程没有完整重启;
  • 多 profile 或 system service 中部分进程仍引用旧 checkout / 旧 venv / 旧模块缓存。

所以 /new/reset 没用很正常。

它们通常处理的是会话历史、上下文状态,不会让 Python 进程重新加载模块,也不会替换正在运行的 Gateway 代码。


为什么 hermes gateway restart 能解决?

评论里多个 workaround 都指向重启:

hermes gateway restart

如果是 system service:

sudo $(which hermes) gateway restart --system

如果只影响某个 profile:

hermes gateway restart -p <profile>

重启的意义是:

  • 停掉仍在运行的旧 Gateway 进程;
  • 让新进程从当前安装目录重新 import 模块;
  • 清掉旧模块缓存和旧 runtime 状态;
  • 让 profile 对应的 gateway runner 重新初始化。

这和 /reset 完全不是一层。


排查步骤:先分清“会话状态”还是“进程代码状态”

遇到 cannot import name 'cfg_get' 时,可以按这个顺序查。

1. 确认错误是否每次消息都复现

如果每条消息都立刻返回 ImportError,大概率不是模型请求失败,而是消息处理链路启动时就崩。

2. 试 /new/reset

如果 /new / /reset 返回正常提示,但下一条消息仍 ImportError,说明历史上下文不是根因。

3. 重启对应 Gateway

单用户/单 profile 场景:

hermes gateway restart -p <profile>

system service 场景:

sudo $(which hermes) gateway restart --system

普通场景:

hermes gateway restart

4. 确认运行中的 hermes 路径

升级后尤其要确认:

which hermes
hermes --version

如果系统里有多个 Python/venv/pipx/Homebrew 路径,可能出现 CLI 是新版本、service 仍跑旧版本的情况。

5. 多 profile 分开验证

评论中有人反馈“三个 profile,一个正常、两个报错”。这类情况说明不能只看全局版本,还要确认每个 profile 对应 gateway 是否真的重启。


这个问题为什么会扩散到 Telegram / 飞书?

因为错误不在 Matrix adapter 的协议细节,而在 Gateway 共享代码路径。

只要平台消息进入同一段 Python 业务逻辑,并触发了旧 import,就可能在不同平台出现同样错误。

所以文章标题虽然可以写 Matrix,但实际排查时应把它视为:

Hermes Gateway after-update stale code / stale import problem

而不是:

Matrix homeserver 配置错误

后续修复:stale-code self-check 与消息不丢失

issue 评论里还提到后续 PR #19238,用于处理 stale-code restart class 的一个边界:

> 对 polling/event 平台,触发重启的那条 update 可能已经被消费;PR 会把授权用户消息保存进 transcript,并标记 resume_pending=stale_code_restart,避免 Telegram/Discord 等平台 ACK 后丢掉用户真实请求。

这说明维护者后来不仅关注“发现旧代码后重启”,还关注“重启过程中不要吞掉触发消息”。

对于 Gateway 平台来说,这很重要:

  • Telegram/Discord/飞书等消息一旦 ACK,用户以为已经处理;
  • 如果 Gateway 只是重启但没保存触发消息,任务就会无声丢失;
  • 正确做法是保存消息,重启后继续处理或明确告知用户。

和 DeepAI API 中转站的关系

如果你在 Hermes 中配置 DeepAI API 中转站,常见配置是:

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

cannot import name 'cfg_get' 发生在 Hermes Python 代码导入阶段,通常还没走到模型 API 请求。

因此 DeepAI API 中转站不能直接修复这个 ImportError。它能做的是提供稳定的 OpenAI-compatible 模型调用入口;而 Gateway 升级、进程重启、模块加载一致性,仍要在 Hermes 本地运行环境里处理。

排查时建议分层:

  • ImportError:先查 Hermes 安装/升级/Gateway 进程;
  • HTTP 401/403/429/5xx:再查 DeepAI 或上游模型 API;
  • 平台收不到消息:再查 Matrix/Telegram/飞书 adapter。

FAQ

/reset 为什么不解决?

/reset 通常清会话历史,不会重启 Python 进程,也不会重新加载 Hermes 模块。

这是 Matrix 专属问题吗?

不是。issue 原始报告来自 Matrix,但评论里 Telegram、飞书也有人复现。

最快恢复方法是什么?

执行 hermes gateway restart;如果是 system service,用 sudo $(which hermes) gateway restart --system;如果是特定 profile,用 hermes gateway restart -p <profile>

为什么有些 profile 正常,有些不正常?

可能不同 profile 的 Gateway 进程生命周期不同,部分进程仍在跑升级前的代码或旧 import 状态。

DeepAI API 中转站会导致这个错误吗?

通常不会。这个错误是 Hermes 本地 import 问题,不是模型 API 返回错误。


总结

Hermes Gateway 升级后出现:

ImportError: cannot import name 'cfg_get' from 'hermes_cli.config'

不要只盯着 Matrix、Telegram 或模型 API。更可能的原因是 Gateway 进程还在运行旧代码或旧模块状态。

一句话处理:/new/reset 解决不了 import 状态;先重启对应 Gateway,再检查多 profile / system service 是否真的加载了新 Hermes。

Related Post

Hermes agent deepai custom provider auxiliary.png

Hermes Agent 接入 DeepAI API 中转站:custom Provider 辅助任务走错端点怎么排查Hermes Agent 接入 DeepAI API 中转站:custom Provider 辅助任务走错端点怎么排查

Hermes Agent 使用 custom OpenAI-compatible Provider 时,主模型能用但 approval、compression、title generation 等辅助任务 fallback 到错误端点怎么办?本文结合 Hermes Agent GitHub 已关闭 Issue,整理 DeepAI API 中转站接入、config.yaml 显式配置和日志排查方法。

Hermes 只剩 MCP 工具,terminal 全没了:一次 disabled_toolsets 连环误伤Hermes 只剩 MCP 工具,terminal 全没了:一次 disabled_toolsets 连环误伤

Hermes v0.13.0 里 terminal、write_file、memory 等 native tools 全部消失,只剩 MCP tools?本文复盘 #22573:`hermes-yuanbao` 被写进 agent.disabled_toolsets 后,平台 composite toolset 展开为 _HERMES_CORE_TOOLS,并把所有 native tools 从 session schemas 里扣掉。

Hermes Agent 启动报 Invalid key: c-S-c?prompt_toolkit 快捷键崩溃排错指南Hermes Agent 启动报 Invalid key: c-S-c?prompt_toolkit 快捷键崩溃排错指南

Hermes Agent 运行 hermes 或 hermes chat 刚显示 banner 就崩溃,报 Error: Invalid key: c-S-c?这通常不是 API Key 或模型问题,而是 prompt_toolkit 不支持 Ctrl+Shift+C 的 c-S-c keybinding。本文解释原因、判断方法、临时 workaround 和升级建议。