常见问题与故障排查#
常见问题#
Hermes 支持哪些 LLM 提供商?#
Hermes Agent 可与任何兼容 OpenAI 的 API 配合使用。支持的提供商包括:Nous Portal — Nous Research 自有推理端点
OpenAI — GPT-5.4、GPT-5-codex、GPT-4.1、GPT-4o 等
Anthropic — Claude 模型(直接 API、通过 hermes auth add anthropic 进行 OAuth、OpenRouter 或任何兼容代理)
Google — Gemini 模型(通过 gemini 提供商直接调用 API、google-gemini-cli OAuth 提供商、OpenRouter 或兼容代理)
Kimi / Moonshot AI — Kimi 模型
使用 hermes model 设置提供商,或直接编辑 ~/.hermes/.env。所有提供商 key 请参阅环境变量参考文档。支持 Windows 吗?#
原生不支持。 Hermes Agent 需要类 Unix 环境。在 Windows 上,请安装 WSL2 并在其中运行 Hermes。标准安装命令在 WSL2 中可完美运行:我在 WSL2 中运行 Hermes,如何控制 Windows 上的普通 Chrome?#
推荐使用 MCP bridge(桥接),而非 /browser connect。继续使用 Windows 上已登录的普通 Chrome
通过 cmd.exe 或 powershell.exe 将 chrome-devtools-mcp 添加为 MCP 服务器
这比强制 Hermes 核心浏览器传输直接跨越 WSL2/Windows 边界进行附加更为 可靠。支持 Android / Termux 吗?#
支持 — Hermes 现已为 Android 手机提供经过测试的 Termux 安装路径。重要说明:完整的 .[all] 扩展目前在 Android 上不可用,因为 voice 扩展依赖 faster-whisper → ctranslate2,而 ctranslate2 未发布 Android wheel 包。请改用经过测试的 .[termux] 扩展。我的数据会被发送到哪里?#
API 调用仅发送至您配置的 LLM 提供商(例如 OpenRouter、您本地的 Ollama 实例)。Hermes Agent 不收集遥测数据、使用数据或分析数据。您的对话、记忆和技能均存储在本地 ~/.hermes/ 目录中。可以离线使用 / 使用本地模型吗?#
可以。运行 hermes model,选择自定义端点,然后输入您服务器的 URL:Hermes 会将端点、提供商和 base URL 持久化到 config.yaml,重启后仍然有效。如果您的本地服务器只加载了一个模型,/model custom 会自动检测到它。您也可以在 config.yaml 中设置 provider: custom — 这是一个一等提供商,不是其他任何东西的别名。此方式适用于 Ollama、vLLM、llama.cpp server、SGLang、LocalAI 等。详情请参阅配置指南。如果您在 Ollama 中设置了自定义 num_ctx(例如 ollama run --num_ctx 16384),请确保在 Hermes 中设置匹配的上下文长度 — Ollama 的 /api/show 报告的是模型的最大上下文,而非您配置的实际 num_ctx。
Hermes 会自动检测本地端点并放宽流式传输超时(读取超时从 120s 提升至 1800s,禁用停滞流检测)。如果在非常大的上下文下仍然超时,请在 .env 中设置 HERMES_STREAM_READ_TIMEOUT=1800。详情请参阅本地 LLM 指南。 费用是多少?#
Hermes Agent 本身免费且开源(MIT 许可证)。您只需为所选提供商的 LLM API 用量付费。本地模型完全免费运行。多人可以使用同一个实例吗?#
可以。消息网关允许多个用户通过 Telegram、Discord、Slack、WhatsApp 或 Home Assistant 与同一个 Hermes Agent 实例交互。访问权限通过白名单(特定用户 ID)和私信配对(第一个发消息的用户获得访问权)来控制。记忆(memory)和技能(skills)有什么区别?#
记忆存储事实 — 智能体了解的关于您、您的项目和偏好的信息。记忆根据相关性自动检索。
技能存储流程 — 如何完成某件事的分步说明。当智能体遇到类似任务时会调用技能。
可以在我自己的 Python 项目中使用吗?#
可以。导入 AIAgent 类,以编程方式使用 Hermes:
故障排查#
安装问题#
安装后出现 hermes: command not found#
原因: Shell 未重新加载更新后的 PATH。安装程序会将 ~/.local/bin 添加到您的 PATH。如果您使用非标准 shell 配置,请手动添加 export PATH="$HOME/.local/bin:$PATH"。
Python 版本过旧#
原因: Hermes 需要 Python 3.11 或更新版本。安装程序会自动处理此问题 — 如果在手动安装时看到此错误,请先升级 Python。终端命令提示 node: command not found(或 nvm、pyenv、asdf 等)#
原因: Hermes 在启动时通过运行一次 bash -l 构建每个会话的环境快照。bash 登录 shell 会读取 /etc/profile、~/.bash_profile 和 ~/.profile,但不会 source ~/.bashrc — 因此在 ~/.bashrc 中安装自身的工具(nvm、asdf、pyenv、cargo、自定义 PATH 导出)对快照不可见。当 Hermes 在 systemd 下运行或在未预加载交互式 shell 配置的最小 shell 中运行时,此问题最为常见。解决方案: Hermes 默认自动 source ~/.bashrc。如果这还不够 — 例如您是 zsh 用户,PATH 在 ~/.zshrc 中,或者您从独立文件初始化 nvm — 请在 ~/.hermes/config.yaml 中列出需要额外 source 的文件:缺失的文件会被静默跳过。source 在 bash 中执行,因此依赖 zsh 专有语法的文件可能报错 — 如有顾虑,建议只 source PATH 设置部分(例如直接 source nvm 的 nvm.sh),而非整个 rc 文件。如需禁用自动 source 行为(仅使用严格的登录 shell 语义):uv: command not found#
原因: uv 包管理器未安装或不在 PATH 中。安装时出现权限拒绝错误#
提供商与模型问题#
/model 只显示一个提供商 / 无法切换提供商#
原因: 会话内的 /model 只能在您已配置的提供商之间切换。如果您只设置了 OpenRouter,/model 就只会显示 OpenRouter。解决方案: 退出当前会话,在终端中使用 hermes model 添加新提供商:通过 hermes model 添加 新提供商后,启动新的聊天会话 — /model 将显示所有已配置的提供商。| 目标 | 使用方式 |
|---|
| 添加新提供商 | hermes model(从终端) |
| 输入/更改 API key | hermes model(从终端) |
| 会话中途切换模型 | /model <name>(会话内) |
| 切换到其他已配置的提供商 | /model provider:model(会话内) |
API key 不起作用#
原因: key 缺失、已过期、设置错误或属于错误的提供商。请确保 key 与提供商匹配。OpenAI 的 key 无法用于 OpenRouter,反之亦然。检查 ~/.hermes/.env 中是否有冲突条目。
模型不可用 / 找不到模型#
原因: 模型标识符不正确,或该模型在您的提供商上不可用。速率限制(429 错误)#
解决方案: 稍等片刻后重试。对于持续使用,请考虑:使用 hermes chat --provider <alternative> 路由到其他后端
上下文长度超限#
原因: 对话内容超出模型的上下文窗口,或 Hermes 检测到的模型上下文长度有误。如果在第一次长对话时就出现此问题,Hermes 可能检测到了错误的模型上下文长度。检查检测结果:查看 CLI 启动行 — 它会显示检测到的上下文长度(例如 📊 Context limit: 128000 tokens)。您也可以在会话中使用 /usage 查看。
终端问题#
命令被标记为危险而阻止#
原因: Hermes 检测到潜在的破坏性命令(例如 rm -rf、DROP TABLE)。这是一项安全功能。解决方案: 出现提示时,检查命令并输入 y 批准执行。您也可以:这是预期行为 — Hermes 绝不会静默执行破坏性命令。审批提示会向您显示将要执行的确切内容。
通过消息网关时 sudo 不起作用#
原因: 消息网关在没有交互式终端的情况下运行,因此 sudo 无法提示输入密码。在消息中避免使 用 sudo — 请智能体寻找替代方案
如果必须使用 sudo,在 /etc/sudoers 中为特定命令配置免密 sudo
或切换到终端界面执行管理任务:hermes chat
Docker 后端无法连接#
原因: Docker 守护进程未运行,或用户缺少相应权限。
消息问题#
Bot 不响应消息#
原因: Bot 未运行、未授权,或您的用户不在白名单中。消息未送达#
原因: 网络问题、bot token 已过期,或平台 webhook 配置错误。使用 hermes gateway setup 验证您的 bot token 是否有效
检查网关日志:cat ~/.hermes/logs/gateway.log | tail -50
对于基于 webhook 的平台(Slack、WhatsApp),确保您的服务器可公开访问
白名单混淆 — 谁可以与 bot 交互?#
| 模式 | 工作方式 |
|---|
| 白名单 | 只有配置中列出的用户 ID 可以交互 |
| 私信配对 | 第一个在私信中发消息的用户获得独占访问权 |
| 开放 | 任何人都可以交互(不建议用于生产环境) |
在 ~/.hermes/config.yaml 中您的网关设置下进行配置。请参阅消息文档。网关无法启动#
原因: 缺少依赖项、端口冲突或 token 配置错误。WSL:网关持续断开连接或 hermes gateway start 失败#
原因: WSL 的 systemd 支持不稳定。许多 WSL2 安装未启用 systemd,即使启用,服务也可能在 WSL 重启或 Windows 空闲关机后无法存活。解决方案: 使用前台模式代替 systemd 服务:3.
在 PowerShell 中执行:wsl --shutdown
5.
验证:systemctl is-system-running 应显示 "running" 或 "degraded"
如需可靠的自启动,使用 Windows 任务计划程序在登录时启动 WSL + 网关:1.
创建一个任务,运行 wsl -d Ubuntu -- bash -lc 'hermes gateway run'
macOS:网关找不到 Node.js / ffmpeg / 其他工具#
原因: launchd 服务继承的是最小 PATH(/usr/bin:/bin:/usr/sbin:/sbin),不包含 Homebrew、nvm、cargo 或其他用户安装的工具目录。这通常会导致 WhatsApp bridge(node not found)或语音转录(ffmpeg not found)失败。解决方案: 网关在您运行 hermes gateway install 时会捕获您的 shell PATH。如果您在设置网关后安装了新工具,请重新运行 install 以捕获更新后的 PATH:您可以验证 plist 中的 PATH 是否正确:
性能问题#
响应缓慢#
原因: 模型较大、API 服务器距离较远,或系统 prompt(提示词)包含过多工具。尝试更快/更小的模型:hermes chat --model openrouter/meta-llama/llama-3.1-8b-instruct
减少激活的工具集:hermes chat -t "terminal"
token 用量过高#
原因: 对话过长、系统 prompt 冗长,或大量工具调用积累了上下文。在长会话中定期使用 /compress。它会对对话历史进行摘要,在保留上下文的同时显著减少 token 用量。
会话过长#
原因: 长时间对话积累了大量消息和工具输出,接近上下文限制。
MCP 问题#
MCP 服务器无法连接#
原因: 找不到服务器二进制文件、命令路径错误或缺少运行时。验证您的 ~/.hermes/config.yaml 中的 MCP 配置:MCP 服务器的工具未显示#
原因: 服务器已启动但工具发现失败、工具被配置过滤掉,或服务器不支持您期望的 MCP 能力。确保服务器响应 tools/list RPC 方法
检查该服务器下的 tools.include、tools.exclude、tools.resources、tools.prompts 或 enabled 设置
请注意,资源/prompt 工具仅在会话实际支持相应能力时才会注册
MCP 超时错误#
原因: MCP 服务器响应时间过长,或在执行过程中崩溃。如果 MCP 服务器在请求中途崩溃,Hermes 会报告超时。请检查服务器自身的日志(而非仅 Hermes 日志)以诊断根本原因。
Profiles(配置文件)#
Profiles 与直接设置 HERMES_HOME 有何不同?#
Profiles 是构建在 HERMES_HOME 之上的托管层。您可以在每次命令前手动设置 HERMES_HOME=/some/path,但 profiles 会为您处理所有底 层工作:创建目录结构、生成 shell 别名(hermes-work)、在 ~/.hermes/active_profile 中跟踪活动 profile,以及自动跨所有 profiles 同步技能更新。它们还与 tab 补全集成,让您无需记忆路径。两个 profiles 可以共享同一个 bot token 吗?#
不可以。每个消息平台(Telegram、Discord 等)都需要对 bot token 的独占访问权。如果两个 profiles 同时尝试使用同一个 token,第二个网关将无法连接。请为每个 profile 创建单独的 bot — 对于 Telegram,请与 @BotFather 对话以创建额外的 bot。Profiles 共享记忆或会话吗?#
不共享。每个 profile 都有自己独立的记忆存储、会话数据库和技能目录,完全隔离。如果您想用现有的记忆和会话创建新 profile,请使用 hermes profile create newname --clone-all 从当前 profile 复制所有内容。运行 hermes update 时会发生什么?#
hermes update 拉取最新代码并重新安装依赖项一次(不是每个 profile 各一次)。然后自动将更新的技能同步到所有 profiles。您只需运行一次 hermes update — 它覆盖机器上的每个 profile。可以运行多少个 profiles?#
没有硬性限制。每个 profile 只是 ~/.hermes/profiles/ 下的一个目录。实际限制取决于您的磁盘空间以及系统能处理多少个并发网关(每个网关是一个轻量级 Python 进程)。运行数十个 profiles 完全没问题;每个空闲的 profile 不占用任何资源。
工作流与模式#
针对不同任务使用不同模型(多模型工作流)#
场景: 您日常使用 GPT-5.4,但 Gemini 或 Grok 写社交媒体内容更好。每次手动切换模型很繁琐。解决方案:委托配置。 Hermes 可以自动将子智能体路由到不同的模型。在 ~/.hermes/config.yaml 中设置:现在当您告诉 Hermes "帮我写一个关于 X 的 Twitter 帖子"并生成 delegate_task 子智能体时,该子智能体将在 Gemini 上运行,而非您的主模型。您的主对话仍在 GPT-5.4 上进行。您也可以在 prompt 中明确指定:"委托一个任务来撰写关于我们产品发布的社交媒体帖子。让你的子智能体负责实际写作。" 智能体将使用 delegate_task,它会自动读取委托配置。如需一次性切换模型而不使用委托,请在 CLI 中使用 /model:在一个 WhatsApp 号码上运行多个智能体(按聊天绑定)#
场景: 在 OpenClaw 中,您可以将多个独立智能体绑定到特定的 WhatsApp 聊天 — 一个用于家庭购物清单群组,另一个用于您的私聊。Hermes 能做到吗?当前限制: Hermes 的每个 profile 都需要自己的 WhatsApp 号码/会话。您无法将多个 profiles 绑定到同一个 WhatsApp 号码上的不同聊天 — WhatsApp bridge(Baileys)每个号码使用一个已认证的会话。1.
使用单个 profile 配合人格切换。 创建不同的 AGENTS.md 上下文文件或使用 /personality 命令按聊天更改行为。智能体能感知当前所在的聊天并进行适应。
2.
使用 cron 作业处理专项任务。 对于购物清单跟踪器,设置一个监控特定聊天并管理清单的 cron 作业 — 无需单独的智能体。
3.
使用独立号码。 如果您需要真正独立的智能体,将每个 profile 与其自己的 WhatsApp 号码配对。Google Voice 等服务提供的虚拟号码可用于此目的。
4.
改用 Telegram 或 Discord。 这些平台更自然地支持按聊天绑定 — 每个 Telegram 群组或 Discord 频道获得自己的会话,您可以在同一账户上运行多个 bot token(每个 profile 一个)。
控制 Telegram 中显示的内容(隐藏日志和推理过程)#
场景: 您在 Telegram 中看到了网关执行日志、Hermes 推理过程和工具调用详情,而不是最终输出。解决方案: config.yaml 中的 display.tool_progress 设置控制显示多少工具活动:off — 仅显示最终响应。无工具调用、无推理过程、无日志。
verbose — 完整详情,包括工具参数和输出。
对于消息平台,通常选择 off 或 new。编辑 config.yaml 后,重启网关使更改生效。您也可以通过 /verbose 命令按会话切换(如果已启用):在 Telegram 上管理技能(slash 命令限制)#
场景: Telegram 有 100 个 slash 命令的限制,您的技能数量已超过此限制。您想禁用 Telegram 上不需要的技能,但 hermes skills config 设置似乎没有生效。解决方案: 使用 hermes skills config 按平台禁用技能。这会写入 config.yaml:更改后,重启网关(hermes gateway restart 或终止并重新启动)。Telegram bot 命令菜单在启动时重建。描述过长的技能在 Telegram 菜单中会被截断为 40 个字符,以符合 payload 大小限制。如果技能未出现,可能是总 payload 大小问题而非 100 个命令数量限制 — 禁用未使用的技能对两者都有帮助。
共享线程会话(多用户,一个对话)#
场景: 您有一个 Telegram 或 Discord 线程,多人在其中 @ bot。您希望该线程中的所有 @ 都属于一个共享对话,而非每个用户各自独立的会话。当前行为: Hermes 在大多数平台上按用户 ID 创建会话,因此每个人都有自己的对话上下文。这是出于隐私和上下文隔离的设计考量。1.
使用 Slack。 Slack 会话按线程而非用户进行键控。同一线程中的多个用户共享一个对话 — 正是您描述的行为。这是最自然的选择。
2.
使用单用户的群聊。 如果由一个人作为指定"操作员"转达问题,会话保持统一。其他人可以旁观。
3.
使用 Discord 频道。 Discord 会话按频道键控,因此同一频道中的所有用户共享上下文。为共享对话使用专用频道。
将 Hermes 迁移到另一台机器#
场景: 您在一台机器上积累了技能、cron 作业和记忆,想将所有内容迁移到新的专用 Linux 机器。2.
这会将您整个 ~/.hermes/ 目录(配置、API key、记忆、技 能、会话和 profiles)打包为 zip 文件,保存到主目录 ~/hermes-backup-<timestamp>.zip。 4.
在新机器上运行 hermes setup 以验证 API key 和提供商配置是否正常工作。
将单个 profile 迁移到另一台机器#
场景: 您想迁移或共享某个特定 profile,而非整个安装。导入的 profile 将包含导出时的所有配置、记忆、会话和技能。如果新机器的设置不同,您可能需要更新路径或重新向提供商进行身份验证。hermes backup 与 hermes profile export 的对比#
| 功能 | hermes backup | hermes profile export |
|---|
| 使用场景 | 整机迁移 | 移植/共享特定 profile |
| 范围 | 全局(整个 ~/.hermes 目录) | 局部(单个 profile 目录) |
| 包含内容 | 所有 profiles、全局配置、API key、会话 | 单个 profile:SOUL.md、记忆、会话、技能 |
| 凭据 | 包含(.env 和 auth.json) | 排除(为安全共享而剥离) |
| 格式 | .zip | .tar.gz |
手动备选方案(rsync): 如果您倾向于直接复制文件,请排除代码仓库:hermes backup 即使在 Hermes 正在运行时也能生成一致的快照。还原的归档文件不包含机器本地的运行时文件,如 gateway.pid 和 cron.pid。
安装后重新加载 shell 时出现权限拒绝#
场景: 运行 Hermes 安装程序后,source ~/.zshrc 提示权限拒绝错误。原因: 这通常发生在 ~/.zshrc(或 ~/.bashrc)文件权限不正确,或安装程序无法干净写入时。这不是 Hermes 特有的问题 — 而是 shell 配置权限问题。如果安装程序已添加 PATH 行但权限有误,您可以手动添加:首次运行智能体时出现 400 错误#
场景: 设置顺利完成,但第一次聊天尝试失败,提示 HTTP 400。原因: 通常是模型名称不匹配 — 配置的模型在您的提供商上不存在,或 API key 没有访问该模型的权限。如果使用 OpenRouter,请确保您的 API key 有余额。OpenRouter 返回 400 通常意味着该模型需要付费套餐,或模型 ID 有拼写错误。
仍然遇到问题?#
3.
提交 bug 报告: 请包含您的操作系统、Python 版本(python3 --version)、Hermes 版本(hermes --version)以及完整的错误信息