跳到主要内容

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

有时 Hermes 似乎没有昨天那么敏锐,或者忘记了你二十分钟前告诉它的事。这几乎从来都不是什么神秘现象——通常都有一个具体、可查证的原因。请按顺序逐项排查这份清单:各项按照“导致问题的频率”排序。

1. 检查当前会话实际使用的是哪个模型​

症状: 回答更浅、代码质量下降、推理感觉不对——而且是全面性的。

检查: 不带参数运行 /model 显示当前模型,或用 /status 一览会话的模型、服务商与配置档。

这意味着什么: 切换模型就是切换能力,而你很容易不知不觉就落在了一个与预期不同的模型上:

  • 普通的 /model <name> 切换默认仅对当前会话生效(除非设置了 model.persist_switch_by_default: true),因此你实际使用的模型可能和 config.yaml 里的不一致。
  • 从仪表盘的 Models 页面修改主模型只对新会话生效——已经打开的聊天会继续用启动时的那个模型。
  • 如果你是為了处理简单任务切换到了更快的模型(技巧与最佳实践中推荐的做法),记得在处理复杂推理工作时切回来。

如果模型不对,用 /model <name> 为本会话修正;加上 --global 可把变更持久化到 config.yaml。注意,中途切换模型会重置提示缓存,因此下一轮会以完整输入价格重新读取整段对话——在长会话中,直接以正确的模型开启新会话可能更划算。

2. 检查上下文用量​

症状: 会话开头表现得很好,但回复开始变慢、被截断,或者丢失了对早前细节的跟踪。

检查: 运行 /usage 查看 token 用量和上下文窗口状态,或用 /context 查看窗口占用情况的可视化拆分(系统提示、工具定义、技能、记忆、对话)以及剩余空间。

这意味着什么: 长对话会不断累积消息和工具输出,逐渐逼近上下文上限。当长会话中出现质量下降时:

# 压缩对话(摘要历史记录,保留关键上下文)
/compress

# 或者开启新会话
/new

/compress 会总结对话历史,在保留关键上下文的同时大幅降低 token 数量。/compress here [N] 可原样保留最近 N 轮交流并总结其余的,/compress focus <topic> 可缩小完整摘要所需保留的内容范围。

提示

在长会话中定期使用 /compress,而不是等问题出现了才处理;并周期性使用 /usage 查看当前状态。

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

症状: 上下文问题出现得早得离谱——第一个较长的对话就撞到上限,或者压缩触发得远远早于模型标称的窗口所能容许的时机。

检查: 查看 CLI 启动行——它会显示探测到的上下文长度(例如 📊 Context limit: 128000 tokens)。你也可以在会话中用 /usage 查看。

这意味着什么: Hermes 可能为你的模型自动探测到了错误的上下文长度。手动显式设置:

# 在 ~/.hermes/config.yaml 中
model:
default: your-model-name
context_length: 131072 # 你的模型实际的上下文窗口

或者对于自定义端点,在服务商条目的模型上逐个设置:

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 记住某件事,它也确认保存了,但后来在同一个会话里它似乎不知道这件事。

检查: 一切都正常——检查时机。会话中途保存的记忆会立即写入磁盘,但系统提示要到下一个会话才会反映。

这意味着什么: 这是有文档记载的、刻意设计的行为。记忆在会话开始时作为冻结快照注入系统提示,且该注入内容在会话中途永不变化——这样能为性能保留 LLM 的前缀缓存。当智能体在会话中新增或删除记忆条目时,变更会立即持久化到磁盘,但要到下一个会话开始时才出现在系统提示中。工具响应始终反映实时状态,所以保存操作本身是已确认且真实完成的。

信息

冻结快照的实际表现:会话中的“记住 X”意味着 X 保证在下一个会话中可用。在当前会话中,该事实仍然存在于对话历史本身当中——只有当对话的这部分后来被压缩掉了,智能体才会忘掉它(见第 7 步)。

完整的运作机制参见持久记忆。

5. 记忆是有界的、经过整理的——不是对话记录​

症状: Hermes 想不起上周会话里的某个细节,尽管当时你们详细讨论过。

检查: 记忆容量与内容。系统提示的记忆头部会显示用量(例如 [67% — 1,474/2,200 chars]),而 hermes journey list 会列出每一条已保存的记忆条目和技能。

这意味着什么: 持久记忆被有意限制在很小的规模——MEMORY.md 为 2,200 字符(约 800 token),USER.md 为 1,375 字符(约 500 token)。它保存的是经过整理的关键事实,而不是对话记录。值得保存的是偏好、环境事实、约定和纠正;原始讨论细节按设计并不存储在那里。

对于“我们上周是不是讨论过 X?”这类回忆,智能体另有一套机制:session_search 会查询所有历史会话(存储在 SQLite 中,带全文搜索),即使某些内容不在活跃记忆中,也能找到几周前讨论过的内容。直接问就行——“在我们的历史会话中搜索关于部署的讨论。”

你也可以直接帮忙:在一次有成果的会话后说“记住这件事,下次用”,或在记忆接近容量时说“清理一下你的记忆”,让智能体合并整理条目。参见记忆与技能技巧和容量管理。

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

症状: Hermes 以前能熟练处理某个特定工作流,现在却处理得很业余;或者说它做不了以前做过的事。

检查:

  • /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),以便最初的目标始终可见。
  • 压紧(compaction)是非破坏性的:在默认的 compression.in_place: true 下,会话保持一个持久的 id,压缩前的轮次被软存档——仍可通过 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压缩总结了较早的历史