Skip to content

Session会话工作原理

Hermes Agent 的核心特性之一是将每一次交互自动持久化为“会话”(Session)。这不仅是为了断点续传,更是为了支持跨平台的历史回溯与全文检索。

Hermes 采用 SQLite 数据库与 JSONL 文件互补的存储方案,分别应对结构化查询与原始日志的需求:

  • SQLite 数据库 (~/.hermes/state.db):负责存储结构化元数据,包括 Session ID、来源平台(CLI/Telegram 等)、用户 ID、会话标题、模型配置、Token 消耗统计及完整消息历史。
  • JSONL 转录文件 (~/.hermes/sessions/):以纯文本形式按行存储原始对话流(Transcripts)。保留了每一次工具调用(Tool Calls)的原始请求与响应细节,主要用于审计与数据迁移。

Hermes Agent中虽保存了完整历史,但在每一轮对话中,并不会将过往所有的媒体文件(图片、音频)字节重新注入模型上下文。

  • 对于媒体文件,图像仅在调用视觉模型时被临时处理,随后转为文本描述或本地缓存路径存入数据库;音频则转为文本,未来的对话轮次仅继承这些文本结论,而非原始二进制文件。
  • 对于文本内容,导致 Token 耗尽的主因通常是直接粘贴的长文本(如日志、Diff)。官方建议使用 /compress压缩摘要或通过文件路径引用,而非全量输入。

Session会话相关命令

会话首次交互后,后台线程会自动调用轻量级模型生成 3-7 词的描述性标题,无感知且不阻塞主流程。可以使用“hermes sessions list”查看自动生成的标题,“ hermes sessions list ”就是列出近期会话的命令。

shell
hermes sessions list

image-20260609132114543

  • 手动设置会话标题-/title

    可以在任意对话Cli中使用“/title”斜杠命令手动设置标题:

    /title test_set_title

    image-20260609184322508

    退出Hermes 再次查看生成的标题,可以看到最近对话名称为自己设置的内容。

    image-20260609184413132

    关于会话名称注意点如下:

    1. 自动命名仅在每个会话中触发一次,如果已手动设置标题,则会跳过自动命名。
    2. 两个不同的会话不能共享相同的标题,标题最多1000个字符,不支持中文
    3. /title 命令在所有的网关平台(Telegram、Discord、Slack、WhatsApp)中均有效
  • 恢复对话

    可以使用--continue 或 --resume从 CLI 恢复之前的对话。

    shell
    # 恢复最近的CLI Session一次会话
    hermes --continue  或者 hermes -c
    
    # 按照名称恢复会话
    hermes -c "myfirst_chat"
    
    #通过ID 恢复特定的session会话
    hermes --resume  20260520_142041_660118 等价于 hermes -r  20260520_142041_660118
    #按照标题恢复session会话
    hermes --resume  myfirst  等价于 hermes -r myfirest

    注意:session id 需要通过执行“hermes sessions list”查看。

  • 导出会话-hermes session export xxx

    可以执行“hermes sessions export session_bak.json”命令将所有 sessions 导出到 JSON 文件。

    shell
    #导出所有sessions 会话到文件
    hermes sessions export session_bak.json

    也可以执行如下命令导出指定的会话内容:

    shell
    # 导出单个session
    hermes sessions export session_id_bak.json --session-id 20260609_131517_1856af

    注意:session_id 需要通过执行“hermes sessions list”命令查看确定。

    image-20260609185226258

  • 删除会话-hermes sessions delete xxx

    执行如下命令删除指定会话,会话ID也需要通过执行“hermes sessions list”命令查看确定。

    shell
    # 删除特定 session(需要确认)
    hermes sessions delete

    image-20260609205859888

  • 清理旧会话-hermes session prune

    shell
    # 删除超过 90 天的结束 sessions(默认)
    hermes sessions prune
    
    # 自定义年龄阈值,超过30天的会话被删除
    hermes sessions prune --older-than 30

    注意:清理操作仅删除已结束的会话(即显式结束或自动重置的会话)。活跃会话永远不会被清理。