DeepAI Paper Hermes Agent 教程,Hermes 终端、Docker 与安装 Hermes Agent 报 No module named agent.transports?pip / Nix 源码安装缺包排错指南

Hermes Agent 报 No module named agent.transports?pip / Nix 源码安装缺包排错指南

如果你从源码安装 Hermes Agent 后,一切配置看起来都正常,但一启动 native Anthropic provider 就报:

ModuleNotFoundError: No module named 'agent.transports'

或者 API Server / REST proxy 返回:

API call failed after 3 retries: No module named 'agent.transports'

这大概率不是 Anthropic API Key 错了,也不是模型名写错了,而是打包配置没有把 agent/transports/ 子包带进安装产物

这篇文章基于 NousResearch/hermes-agent issue #13581 和相关 PR #13580,整理一份面向 pip、Nix、源码安装、Docker/sidecar 部署的排错指南。

> 适合搜索关键词:Hermes Agent No module named agent.transportsModuleNotFoundError agent.transports hermes-agentpip install hermes-agent source missing packageNix hermes-agent agent.transportsnative Anthropic provider No module named agent.transports


先给结论

agent.transports 缺失的核心原因是:

[tool.setuptools.packages.find]
include = ["agent", ...]

只包含了 agent 本身,却没有包含:

"agent.*"

在 setuptools 的 packages.find 里,显式 include 不会自动递归到子包。结果就是源码树里明明有:

agent/transports/__init__.py
agent/transports/anthropic.py
agent/transports/base.py
agent/transports/types.py

但安装到 site-packages 后,agent/transports/ 整个目录不见了。

于是运行到类似:

from agent.transports import get_transport

就会直接崩:

ModuleNotFoundError: No module named 'agent.transports'

这个问题影响哪些用户?

从 issue #13581 的信息看,主要影响:

  • 从源码安装:pip install .
  • 从 GitHub 安装:pip install "git+https://github.com/NousResearch/hermes-agent.git"
  • Nix / NixOS packaging
  • macOS 15 + Nix build
  • Ubuntu 24.04.3 + Python 3.12.3
  • Hermes v0.10.0 附近版本
  • 使用 native Anthropic provider 的用户
  • 把 Hermes 放在 REST proxy / API Server / sidecar 部署后面的用户

特别是这类配置:

provider: anthropic
model: anthropic/claude-sonnet-4.6

如果你只是使用 OpenAI-compatible provider,可能不会立刻触发 agent.transports 路径,所以会误以为安装没问题。等切到 native Anthropic provider,才突然爆出 import error。


为什么源码里有文件,安装后却没有?

这是 Python packaging 里非常典型的坑。

很多人会以为:只要目录里有 __init__.pypip install . 就会自动包含所有子目录。实际上,如果项目在 pyproject.toml 里显式配置了 include 列表,就要把子包 glob 写完整。

issue #13581 指出的关键配置类似:

include = ["agent", "tools", "tools.*", "hermes_cli", "gateway", "gateway.*", ...]

可以看到:

  • toolstools.*
  • gatewaygateway.*
  • plugins 也通常会有 plugins.*
  • agent 只有 agent,缺了 agent.*

所以 setuptools 只打包顶层 agent 包,不递归包含 agent.transports 这类子包。

相关 PR #13580 的修复方向就是一行:

"agent.*"

加到 include 列表里。


典型复现路径

你可以用下面思路判断自己是不是同一个问题。

1. 从源码安装

pip install "git+https://github.com/NousResearch/hermes-agent.git"

或:

git clone https://github.com/NousResearch/hermes-agent.git
cd hermes-agent
pip install .

2. 启用 native Anthropic provider

例如:

provider: anthropic
model: anthropic/claude-sonnet-4.6

3. 启动聊天或 API Server

当运行到 Anthropic transport 相关逻辑时,出现:

ModuleNotFoundError: No module named 'agent.transports'

或 API Server 里包了一层:

API call failed after 3 retries: No module named 'agent.transports'

4. 检查 site-packages

进入 Python 环境后运行:

python - <<'PY'
import agent, pathlib
p = pathlib.Path(agent.__file__).parent
print(p)
print((p / "transports").exists())
print(list(p.iterdir()))
PY

如果输出里没有 transports 目录,基本就坐实了。


快速验证命令

最简单的检查是:

python -c "import agent.transports; print('agent.transports OK')"

如果报:

ModuleNotFoundError: No module named 'agent.transports'

说明当前安装产物确实缺子包。

如果成功输出:

agent.transports OK

那你遇到的就可能不是 #13581,需要继续检查 provider 配置、API Key、base URL、模型名或网络问题。


临时 workaround:手动复制 transports 目录

如果你现在生产环境已经挂了,短期 workaround 是把源码里的:

agent/transports/

复制到当前 Python 环境的:

site-packages/agent/transports/

issue 评论里有人确认,手动复制后 chat round-trip 可以恢复。

但这只能救急,不建议长期依赖。原因很简单:

  • 下一次重装会丢;
  • Docker 镜像重建会丢;
  • Nix derivation 更新会丢;
  • 多环境部署容易漏;
  • 版本不一致时可能引入更隐蔽的问题。

长期还是应该升级到包含修复的版本,或者在你自己的 packaging patch 里补上 agent.*


正确修复:确认 pyproject.toml 包含 agent.*

如果你维护自己的 fork、Nix package 或内部镜像,可以检查 pyproject.toml

[tool.setuptools.packages.find]
include = [
  "agent",
  "agent.*",
  "tools",
  "tools.*",
  "hermes_cli",
  "gateway",
  "gateway.*",
]

关键是 agentagent.* 都要在。

修改后重新构建并安装:

pip uninstall -y hermes-agent
pip install .
python -c "import agent.transports; print('OK')"

Nix 用户则应在 derivation patch 阶段补上同样的改动,然后重新 build。


为什么这个问题只在 native Anthropic provider 下明显?

因为 agent.transports 是 native provider transport 抽象的一部分。

如果你使用的是 OpenAI-compatible API 路径,Hermes 可能不会触发:

from agent.transports import get_transport

所以同一个安装包,在 A 配置下看起来正常,在 B 配置下突然炸。

这也解释了很多误判:

  • 不是 Claude 模型一定坏了;
  • 不是 Anthropic API 一定挂了;
  • 不是 API Key 一定错误;
  • 不是网络连不上;
  • 而是运行到 native Anthropic transport import 时,安装产物里没有对应 Python 子包。

DeepAI API 中转站相关:什么时候能绕开这个坑?

如果你的目标是把多种模型统一接进工具链,DeepAI API 中转站这类 OpenAI-compatible API 网关可以降低很多 provider 切换成本:

  • 统一 Base URL;
  • 统一 API Key;
  • 统一模型调用方式;
  • 适配 Cherry Studio、Cline、Dify、Open WebUI 等支持 OpenAI Compatible API 的工具;
  • 减少不同 native provider SDK 路径带来的差异。

在这个具体问题里,如果你不用 Hermes 的 native Anthropic provider,而是走 OpenAI-compatible provider 路径,确实可能避开 agent.transports import 路径。

但要注意边界:DeepAI API 中转站不能修复你的 Hermes 安装包缺文件。它只是让你在某些场景下选择另一条兼容 API 路径,减少触发 native transport 的概率。

如果你必须使用 native Anthropic provider,仍然应该修复 agent.* 打包问题。


排错清单

遇到 No module named 'agent.transports' 时,按这个顺序查:

1. 确认错误是否精确包含:ModuleNotFoundError: No module named 'agent.transports'; 2. 运行:python -c "import agent.transports"; 3. 查看 site-packages/agent/ 下是否存在 transports/; 4. 确认安装方式是否为 pip install .、GitHub source install、Nix build 或内部 packaging; 5. 检查是否使用 native Anthropic provider; 6. 检查当前 Hermes 版本是否在 v0.10.0 附近或早于修复; 7. 升级到包含 main 修复的版本; 8. 如果自己打包,确认 pyproject.toml include 列表里有 "agent.*"; 9. 重新安装后再次运行 python -c "import agent.transports; print('OK')"; 10. 仍失败时,再查虚拟环境、Python path、多版本冲突。


给 issue / 运维同事的最小复现模板

如果你要提交 issue 或发给运维同事,可以直接贴这段:

Symptom:
ModuleNotFoundError: No module named 'agent.transports'

Environment:
- OS:
- Python:
- Hermes version / commit:
- Install method: pip install . / pip install git+... / Nix / Docker
- Provider: anthropic
- Model:

Checks:
- python -c "import agent.transports" fails
- site-packages/agent/transports/ is missing
- source tree has agent/transports/

Suspected cause:
pyproject.toml setuptools packages.find include has "agent" but not "agent.*", so sub-package is missing from built distribution.

Expected fix:
Add "agent.*" next to "agent" and rebuild package.

这比只说“Claude 不能用”有效得多。


FAQ

这是 Anthropic API 的问题吗?

通常不是。No module named 'agent.transports' 是 Python import error,发生在本地运行环境加载模块时,请求可能还没真正发到 Anthropic。

为什么 pip install 成功了,运行才失败?

因为打包阶段没有验证所有运行路径都能 import。安装成功只说明包构建/安装流程完成,不代表 native Anthropic provider 所需的每个子包都被包含。

为什么 OpenAI-compatible provider 正常,Anthropic provider 不正常?

因为两条 provider 路径触发的代码不同。OpenAI-compatible 路径可能不需要 agent.transports,native Anthropic provider 才会 import 它。

直接复制 agent/transports/ 可以吗?

可以作为短期救急,但不建议长期使用。正确做法是升级或修复 packaging,让安装产物自然包含 agent.transports

PR #13580 是合并了吗?

GitHub API 查询时,#13580 显示 closed 且 merged_atnull;issue #13581 评论中维护者说 Fixed in main。所以更准确的说法是:修复方向是添加 agent.*,问题已在 main 中修复/关闭,但不要把它写成“PR #13580 已合并”。


总结

ModuleNotFoundError: No module named 'agent.transports' 是一个很典型的“源码有文件,安装包没带上”的 Python packaging 问题。

判断它的关键不是反复换 API Key 或模型名,而是检查:

python -c "import agent.transports"

以及:

site-packages/agent/transports/

是否存在。

如果不存在,优先升级 Hermes Agent 或在 pyproject.toml 的 setuptools include 列表中补上:

"agent.*"

对于只需要 OpenAI-compatible API 的工作流,可以考虑通过 DeepAI API 中转站统一模型入口,减少 native provider 差异;但如果你明确依赖 Hermes 的 native Anthropic provider,那最终还是要修复安装包里的 agent.transports 子包缺失问题。

Related Post

Ollama 本地模型记不住上一轮?Hermes Agent num_ctx 与 2048 上下文截断排错指南Ollama 本地模型记不住上一轮?Hermes Agent num_ctx 与 2048 上下文截断排错指南

Hermes Agent 接入 Ollama 后同一会话记不住上一轮?这可能不是 memory tool 坏了,而是 Ollama num_ctx 回落到 2048 导致历史被服务端静默截断。本文解释 context_length、ollama_num_ctx、/api/show 探测失败和 PR #19613 的修复方向。

Hermes Agent provider:auto 选错辅助模型?title_generation 走 fallback provider 报 404 排错指南Hermes Agent provider:auto 选错辅助模型?title_generation 走 fallback provider 报 404 排错指南

Hermes Agent 主模型正常,但 title_generation 报 HTTP 404?可能是 auxiliary provider:auto 没跟随主 provider,而是选到 fallback provider(如 minimax),导致 SDK、api_mode 或 endpoint path 不匹配。本文解释 provider:auto、fallback_model、WeChat 错误泄露和显式配置 workaround。

Hermes doctor 不提示 OpenRouter 缺 Key?API 中转站 Provider 凭证排查Hermes doctor 不提示 OpenRouter 缺 Key?API 中转站 Provider 凭证排查

Hermes Agent 已关闭 issue #26428 复盘:active provider 设置为 OpenRouter 但缺少 API Key 时,runtime 报 No LLM provider configured,而 hermes doctor summary 不够明确。本文面向 DeepAI API 中转站用户讲清 Provider、Base URL、API Key 和 Model