上下文压缩与提示缓存
Hermes 通过两种互补的机制来管理长对话:
- 提示缓存
- 上下文压缩
主要文件:
agent/prompt_caching.pyagent/context_compressor.pyrun_agent.py
提示缓存
对于 Anthropic/原生 和 通过 OpenRouter 的 Claude 流程,Hermes 会应用 Anthropic 风格的缓存标记。
当前策略:
- 缓存系统提示
- 缓存最后 3 条非系统消息
- 默认 TTL 为 5 分钟,除非显式延长
这实现在 agent/prompt_caching.py 中。
为什么提示稳定性很重要
只有当稳定的前缀保持稳定时,提示缓存才有帮助。这就是为什么 Hermes 避免在会话中途重建或修改核心系统提示,除非必须这样做。
压缩触发条件
当对话变得很大时,Hermes 可以压缩上下文。配置默认值位于 config.yaml 中,压缩器还会根据实际的提示令牌数量进行运行时检查。
压缩算法
压缩器会保护:
- 前 N 轮对话
- 后 N 轮对话
并总结中间部分。
它还会清理结构性问题,例如孤立的工具调用/结果对,以确保压缩后 API 永远不会收到无效的对话结构。
压缩前的内存刷新
在压缩之前,Hermes 可以给模型最后一次机会来持久化内存,这样当中间轮次被总结掉时,事实不会丢失。
压缩后的会话谱系
压缩可以将会话拆分为一个新的会话 ID,同时在状态数据库中保留父级谱系。
这使得 Hermes 能够以较小的活动上下文继续运行,同时保留可搜索的祖先链。
压缩后重新注入的状态
压缩后,Hermes 可能会重新注入紧凑的操作状态,例如:
- 待办事项快照
- 先前读取文件的摘要