跳到主要内容

上下文压缩与提示缓存

Hermes 通过两种互补的机制来管理长对话:

  • 提示缓存
  • 上下文压缩

主要文件:

  • agent/prompt_caching.py
  • agent/context_compressor.py
  • run_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 可能会重新注入紧凑的操作状态,例如:

  • 待办事项快照
  • 先前读取文件的摘要

相关文档