Technical Guide
12. Memory 与 Session:长期记忆和历史会话怎么参与下一次任务
区分 Memory、User Profile、Session Search 和上下文压缩,理解 Hermes 如何跨会话延续工作。
这篇解决什么问题
很多 Agent 号称“有记忆”,但记忆到底是什么,经常说不清。
在 Hermes 里,至少要区分三件事:
Memory:长期稳定事实
User Profile:关于用户是谁、偏好什么
Session:过去对话和任务过程
它们进入下一次任务的方式不一样。
Memory 适合放什么
Memory 适合放稳定事实,例如:
用户偏好中文短回复
某个项目使用 Astro
某个知识库默认路径
某类任务的长期约定
不适合放:
今天完成了什么
某个 PR 号
某次临时任务状态
一个很快会过期的链接
这些会污染后续会话。
User Profile 和 Memory 的区别
User Profile 更像“用户是谁”。
Memory 更像“我对环境和工作方式的稳定认识”。
例如:
用户叫勇谋,偏好中文沟通 → User Profile
future-observer-web 是 Astro 站点 → Memory
两者都会影响回答,但用途不同。
Session Search 做什么
Session Search 不是记忆写入。
它是搜索过去会话。
当用户说“上次那个任务继续”或“你还记得我之前做的项目吗”,Hermes 可以通过 session_search 找到历史对话,而不是要求用户重复讲一遍。
这适合找任务过程、决策和历史上下文。
Memory 如何进入上下文
agent/memory_manager.py 会把相关记忆构造成上下文块。
然后在 Agent 构建系统提示词/turn context 时注入。
这意味着 Memory 不是数据库里躺着的文本,而是会真实影响下一次模型调用。
所以写错 Memory 比写错一条普通消息更危险。
上下文压缩和记忆不是一回事
长会话里,Hermes 会做上下文压缩。
压缩解决的是:当前会话太长,模型上下文装不下。
Memory 解决的是:跨会话保留稳定事实。
不要把压缩摘要当长期记忆,也不要把长期记忆当任务进度表。
如果你要改记忆相关能力
先判断目标:
改记忆如何进入 prompt → agent/memory_manager.py / prompt 构建
改 memory 工具写入规则 → memory tool 相关实现
改 session 搜索 → session_search / state.db 相关实现
改压缩策略 → context_compressor / conversation_compression
不要把所有跨会话能力都归到一个文件里找。
一个实用原则
判断一条信息该放哪里,可以问:
一周后它还重要吗?
如果重要,可能是 Memory 或 Skill。
如果不重要,只是过程记录,就让它留在 Session 或 Git commit 里。
下一篇看什么
下一篇看 Cron。
Cron 是 Hermes 从“对话式助手”变成“长期自动化系统”的关键能力。