会话管理——和 AI 的每次对话都有记录
Hermes Agent 官方教程第八篇:会话。多平台同步、跨设备接续。
会话管理——和 AI 的每次对话都有记录
你有没有过这种经历:跟 AI 聊到一半,不小心关掉了终端,或者切到了别的窗口,回来发现啥都没了?别慌,Hermes Agent 早就帮你把每一句话都记在小本本上了。
所有对话,自动存档
不管你是用命令行、Telegram、Discord、Slack,还是微信、钉钉、飞书……只要是跟 Hermes 说过的话,都会自动保存成一个会话(Session)。这些记录存在本地的 SQLite 数据库里(~/.hermes/state.db),里面不光有完整的聊天记录,还有:
- 会话标题(方便你认出来这是哪次对话)
- 用的什么模型、什么配置
- 系统提示词的快照
- 输入输出了多少 token
- 开始和结束的时间
简单说,每次对话的来龙去脉,Hermes 都记得清清楚楚。
不是所有东西都往上下文里塞
你可能会担心:那是不是每次对话都要把之前所有内容重新发给模型?不是的。Hermes 很聪明,它只把当前需要的部分发给模型。
比如你发了一张图片让 AI 做表情包,Hermes 会先看一眼图片、跑个脚本处理一下,但不会把原始图片反复塞进后续的对话。真正让上下文膨胀的,往往是那些大段粘贴的日志、超长的工具输出、反复贴的代码 diff。所以,能用摘要、文件路径、局部摘录解决的,就别整段往聊天里甩。
命令行里怎么恢复会话?
这是最常用的功能,记住这几个命令就够了:
# 继续最近一次 CLI 会话
hermes --continue
hermes -c
# 按名字恢复(比如你给会话起过标题)
hermes -c "我的项目"
# 按 ID 恢复指定会话
hermes --resume 20250305_091523_a1b2c3d4
# 恢复最近一次会话
hermes --resume latest
有个贴心小细节:hermes -c 是感知终端的。你在两个终端窗口里各开一个会话,在哪个窗口执行 -c,就恢复哪个窗口自己的对话,互不干扰。这功能靠的是每个终端留下的“面包屑”文件,如果超过 30 天没用,就会自动回退到“恢复最近会话”的逻辑。
恢复会话时,Hermes 还会在输入框上方显示一个对话回顾面板,把之前的用户消息和 AI 回复简要列出来(长消息会截断、工具调用会折叠成数量),让你快速找回上下文。想关掉它,可以在 ~/.hermes/config.yaml 里设置 display.resume_display: minimal。
给会话起个名字
想让会话更好找?用 /new 开新会话的时候,直接带上名字:
/new payments-refactor
这样以后就能用 hermes -c "payments-refactor" 秒速找回。如果同名会话有好几个(比如 my project、my project #2),Hermes 会自动恢复最新的那个。
会话太长怎么办?
聊得太多,上下文塞满了?用 /compress 压缩一下,把长会话精简成摘要。想彻底开新话题,就用 /new。要是想清理旧会话,hermes sessions prune 可以删掉已结束的会话。
如果只是数据库文件变大了,先试试无损优化:
hermes sessions optimize
这个命令会合并索引、压缩数据库文件,但不会动任何会话数据。记住:压缩是减少上下文,不是删除隐私记录。
会话不会自己过期,但该开新会话时还是要开
网关(gateway)里的会话不会因为闲置或到了某个时间点就自动重置——想开新对话,得自己用 /new 或 /reset。上下文压缩仍然是自动的。
不过,正因为会话不会自己结束,很容易一个会话用上好几周。这样虽然能跑,但会悄悄拖累“自我学习”的效果、还会推高成本:
- 记忆只在会话边界才发挥作用。
MEMORY.md/USER.md是在会话开始时注入的,session_search也是用来找回已经掉出上下文的内容。在一个永不结束的会话里,所有东西都还在上下文里,Agent 就没理由去查记忆——那套“自我学习”机制基本跑不起来。记忆蒸馏(重置前的保存)也只有在会话真正结束时才会发生。 - 成本随历史增长。 压缩能让长会话继续可用,但每一轮仍然要带上一个很大的(压缩过的)前缀。一个带蒸馏记忆的新会话,几乎总比一个月前的老会话更便宜。
实用建议:完成一个任务或话题,就结束这个会话。在自然的停顿点运行 /new(可以带名字,比如 /new payments-refactor)——每天一次或每个项目一次都行。重置前,如果这次工作产生了值得保留的偏好或流程,可以主动让 Agent “把值得记的都记下来”;它会自动从即将过期的会话里保存记忆和技能,但明确提醒一下效果更好。重启机器或网关不算边界——同一个会话会继续。
会话来源一览
Hermes 支持超多平台,每个会话都会标记来源:
| 来源 | 说明 |
|---|---|
cli |
命令行交互 |
oneshot |
一次性的非交互运行(hermes chat --oneshot -q、-Q、hermes -z 等)。它不会出现在 TUI、桌面端和面板的会话选择器里,但算作 CLI 历史,hermes -c / --resume latest 能接着它继续,hermes sessions list 也看得到 |
telegram |
Telegram |
discord |
Discord |
slack |
Slack |
whatsapp |
|
weixin |
个人微信 |
wecom |
企业微信 |
dingtalk |
钉钉 |
feishu |
飞书 |
email |
邮件 |
cron |
定时任务 |
api-server |
API 请求 |
kanban |
看板调度任务(只在看板上出现,会话选择器里隐藏) |
tool |
第三方集成(--source tool),会话选择器里隐藏 |
总共二十多种,基本覆盖了你能想到的所有入口。顺带一提,会话中途被压缩后,来源标签会保持不变——比如 tool 或 oneshot 会话压缩出来的子会话,还是同样的来源、同样的可见性。
把 CLI 会话交接给聊天平台
在 CLI 会话里用 /handoff <platform>,可以把当前对话直接转到某个聊天平台的 home 频道,Agent 会从 CLI 停下的地方接着聊——同一个会话 ID、完整的对话记录、工具调用全都在。
# 在 CLI 会话里
/handoff telegram
前提是目标平台已启用、并且设置过 home 频道(在目标聊天里跑一次 /sethome)。交接完成后,CLI 会提示你用 /resume <标题> 随时把会话拉回桌面端继续。
不同平台落地的方式略有不同:Telegram 会开一个新的论坛话题,Discord 建一个自动归档的线程,Slack 发一条种子消息当线程锚点,Matrix 用事件 ID 作为线程根;而 WhatsApp、Signal、SMS 没有原生线程,就直接落在 home 频道里。另外提醒一句:对于不支持线程、又是多人共享群组 home 频道的平台,交接后的会话会按私聊方式处理——自聊 home 频道(最常见的情况)没问题,但真正共享的群聊就不太理想了。
小结
会话管理就是 Hermes 的“记忆系统”——自动存档、按名恢复、跨平台同步。下次再也不用担心聊到一半丢了上下文,hermes -c 一下,接着聊!
官方界面截图
📖 官方文档
本文根据 Hermes Agent 官方文档编写,原文见:官方文档 › user-guide/sessions