Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help


故障排除:“我的智能体好像变笨了”

有时候,Hermes 的表现似乎不如昨天那么出色,甚至会忘记你20分钟前告诉它的内容。这种情况几乎从来都不是神秘的——通常都有某个具体且可排查的原因。请按顺序查看以下清单:这些步骤是根据其作为问题原因的出现频率来排序的。

1. 检查当前会话实际使用的模型

症状: 答案深度不足、代码质量下降、推理逻辑出现异常——全方位的表现都较差。

检查方法: 运行无参数的 /model 命令查看当前使用的模型,或使用 /status 命令一次性查看会话的模型、提供方及配置信息。

原因说明: 模型切换属于功能变更,很容易导致你意外使用到与预期不同的模型:

  • 默认情况下,单纯的 /model <name> 切换仅作用于当前会话(除非设置了 model.persist_switch_by_default: true),因此你当前使用的模型可能与 config.yaml 中配置的不一致。
  • 通过控制台“模型”页面更改主模型仅适用于新创建的会话——已打开的聊天会话会继续使用初始设定的模型。
  • 如果你为了处理简单任务而切换到了更快速的模型(这是技巧与最佳实践中推荐的做法),请记得在需要复杂推理时再切回原来的模型。 如果模型出现错误,可使用 /model <name> 在当前会话中立即更正;若希望将此更改永久保存到 config.yaml 中,则需添加 --global 参数。需要注意的是,会在会话中途触发模型切换,从而导致提示词缓存被清空,下一轮对话将需要重新读取全部内容,从而产生更高的成本——在较长的会话中,直接选用合适的模型重新开始可能会更为经济。

2. 检查上下文使用情况

症状: 会话初期表现良好,但后续回复速度逐渐变慢、内容被截断,或无法记住之前的详细信息。

检查方法: 运行 /usage 命令查看令牌使用情况和上下文窗口状态;或使用 /context 命令以可视化方式展示当前占用了多少空间(系统提示词、工具定义、技能信息、内存内容、对话记录)以及还有多少空余空间。

含义: 随着对话的持续进行,消息和工具输出会不断累积,逐渐接近上下文限制。当在较长的会话中察觉到性能下降时:

# Compress the conversation (summarizes history, preserves key context)
/compress

# Or start a fresh session
/new
/compress 功能可对对话历史进行总结,在大幅减少标记数量的同时保留关键上下文信息。/compress here [N] 会原封不动地保留最近的 N 段对话内容,并对其余部分进行总结;而通过 /compress focus <topic> 可指定重点主题,从而进一步筛选需要保留的内容。

::提示 在长时间对话中,请定期使用 /compress 避免出现问题,同时可不时使用 /usage 查看当前使用情况。

::

3. 核实检测到的上下文长度

症状: 上下文相关问题出现得异常早——首次进行长对话时就已达上限,或者压缩功能在远早于模型标称支持的时间点就被触发。

检查方法: 查看 CLI 启动行信息,其中会显示检测到的上下文长度(例如 📊 Context limit: 128000 tokens)。也可在对话过程中使用 /usage 命令进行查看。

含义: Hermes 可能自动检测出了与您的模型不匹配的上下文长度。建议手动进行明确设置:

# In ~/.hermes/config.yaml
model:
  default: your-model-name
  context_length: 131072  # your model's actual context window

或者对于自定义端点,则可在提供者条目中为每个模型单独设置:

providers:
  my-server:
    api: "http://localhost:11434/v1"
    models:
      qwen3.5:27b:
        context_length: 64000

Ollama 用户注意: 若您设置了自定义的 num_ctx 值,请在 Hermes 中相应地设置上下文长度——Ollama 的 /api/show 接口返回的是模型的最大上下文长度,而非您实际配置的 num_ctx 值。对于正在运行的网关,只需修改 model.context_length 或任何 compression.* 相关参数,更改即会在处理下一条消息时生效,无需重启。

如需了解自动检测机制及所有覆盖选项,请参阅 上下文长度检测。

4. “我告诉它某些信息,但它却忘了”——冻结的记忆快照

症状: 您要求 Hermes 在当前会话中记住某些内容,它也确认已保存,但在同一会话的后续交互中却似乎忘记了这些信息。

检查方法: 并非系统出现故障——请检查时间节点。在会话进行过程中保存的记忆会立即写入磁盘,但系统提示词需等到下一个会话开始才会反映这些变化。

原因说明: 这是文档中明确规定的预期行为。记忆是以会话启动时的冻结快照形式注入系统提示词的,且在整个会话期间都不会发生变动——这样做是为了保持大语言模型的前缀缓存效率。当智能体在会话中添加或删除记忆条目时,更改会立即保存到磁盘,但只有到下一个会话开始时才会显示在系统提示词中。工具的响应始终反映的是实时状态,因此之前的保存操作确实是真实有效的。

::info
实际应用中的冻结快照:在会话期间“记住X”意味着X在下一个会话中必定仍然存在。在当前会话内,该信息仍保存在对话历史记录中——只有当相关对话内容已被压缩移除时(见第7步),智能体才会忘记它。

::

如需了解完整机制,请参阅持久内存。

5. 内存容量有限且经过筛选——并非对话记录全文

现象: 尽管上周详细讨论过某个内容,Hermes却无法回忆起来。

检查方法: 检查内存容量与内容。系统提示词中的内存使用情况会显示当前占用量(例如 [67% — 1,474/2,200 字符]),而 hermes journey list 则可列出所有已保存的记忆条目和技能。

含义: 持久内存是经过刻意限制的——MEMORY.md 的容量为 2,200 字符(约 800 个标记),USER.md 的容量为 1,375 字符(约 500 个标记)。它存储的是经过筛选的关键信息,而非完整的对话记录。值得保存的内容包括用户偏好、环境信息、约定规则以及纠错内容;按照设计,原始的对话细节并不会被存储在其中。

对于“上周我们讨论过X吗?”这类问题,智能体拥有独立的检索机制:session_search 会查询所有历史会话(以 SQLite 格式存储并支持全文搜索),因此即便相关内容已不在当前活跃内存中,也能找到数周前讨论过的信息。只需直接询问——“在我们的历史会话中查找关于部署的讨论记录即可”。

您也可以直接提供帮助:在高效的对话结束后,可以说“记住这一点以备下次使用”;当内存即将满载时,则可以说“清理内存”,这样智能体就会整合相关记录。更多详情请参阅内存与技能使用技巧以及容量管理。

6. 检查技能与工具是否已加载

现象: 智能体原本能够熟练处理某项特定工作流,但现在却处理得不够理想,或者声称无法完成之前能够完成的操作。

检查方法:

  • /skills — 浏览已安装的技能(智能体之前依赖的某个技能可能已被移除)。
  • /reload-skills — 重新扫描~/.hermes/skills/目录,查看是否有新安装或已移除的技能。
  • /tools list — 查看可用的工具;通过/tools disable禁用的工具在当前会话中仍不会出现在智能体的工具集中。
  • /context all — 显示每个技能及工具集的使用成本,同时也能反映实际已加载的内容。

含义说明: 技能是智能体的流程化知识——包括多步骤工作流以及针对特定工具的指令。如果某个技能缺失,或者工具集被精简(例如,通过hermes chat -t "terminal"启动会话以减少提示词的影响),那么智能体在当前会话中可使用的资源就会相应减少。可通过/tools enable重新启用工具,或直接通过名称调用技能(如/github-pr-workflow),以此确认其已成功加载。

7. 压缩带来的副作用

症状: 在长时间对话后(或执行 /compress 命令之后),Hermes 虽然仍保留了对话的总体脉络,但却丢失了早期对话中的详细内容。

检查方法: 查看是否已触发压缩功能——在消息平台中,/usage 和 /context 命令可显示压缩统计信息及上下文状态;而手动执行 /compress 命令则总会返回其处理结果。

含义说明: 压缩功能的目的是用摘要替换旧有的对话历史记录,为此必然需要在细节保留与存储空间之间做出权衡。其运作方式如下:

  • 最新消息会得到保护:默认情况下,最近的 20 条消息不会被压缩(通过 protect_last_n 设置),且对话开头的内容会被固定显示(通过 protect_first_n: 3 设置),以确保原始目标始终可见。
  • 压缩为非破坏性操作:在默认设置 compression.in_place: true 下,会话会保留一个持久化的标识符,压缩前的对话记录会被软归档——仍可通过 session_search 检索并恢复,而不会被删除。
  • 当设置为 in_place: false(旧版行为)时,每次压缩都会使会话切换到与原会话关联的新会话——带标题的会话会依次变为 “my project” → “my project #2” → “my project #3”。若按标题继续对话,执行 hermes -c "my project" 即可自动选择最新的会话版本。
  • 关注主题可限定完整摘要的保留范围:例如使用 /compress focus auth-refactor 命令,即可优先保留该主题下的对话细节,而忽略其他内容。 如果某些被压缩掉的细节非常重要,可以要求智能体进行搜索(session_search功能可检索已归档的对话内容),或者将关键信息重新输入到对话中。

如需完整的设置参考,请参阅上下文压缩;关于如何通过标题对对话会话进行关联,请查看压缩模式下的自动会话链功能。


快速参考表

症状首次应执行的命令可能原因
智能体功能表现似乎减弱/model当前对话会话使用的模型与预期不同
长时间对话后性能下降/usage上下文容量不足——需进行压缩或开始新对话
达到限制的时间比预期更早CLI启动行 / /usage自动检测的上下文长度有误
忘记了本会话中自己说过的话—(设计如此)内存快照已冻结——相关信息会在下一会话中显示
忘记了上周的讨论内容要求其执行 session_search内存容量有限,仅保留精选信息
某项特定功能无法使用/skills, /tools list该会话未加载相应的技能或工具集
长时间对话后丢失旧有细节/usage, /context压缩功能对历史记录进行了汇总处理