记忆与持续学习:让会话不再失忆

2,086 字 · 预计阅读 6 分钟

上下文快满的时候有一个小技巧:清空会话之前,先让 Agent 把方案、进度和 TODO 写进 docs/progress.md,新会话里读一下就能接着干。

文件才是长期记忆,会话不是。

这个技巧很好用,但有个问题:每次都得你记得去做。 忘了一次,上下文一压缩,进度就丢了。

ECC 用 Hook 把这件事自又往前走了一步:不光记住做到了哪,还要从会话里学到东西。


一、一个会话的生命周期

会话从启动到压缩和结束的记忆轨迹

ECC 在会话的四个时间点上挂了 Hook:

SessionStart ─── 读:找到上一次同一个项目的会话摘要 + 学到的习惯 → 注入上下文
     │
     │   ……正常干活……
     │
PreCompact ───── 抢救:压缩之前,让 Haiku 把最近的对话总结一遍,写进会话文件
     │
Stop ─────────── 存:每轮回复结束,更新会话文件(做了什么、改了哪些文件)
     │
SessionEnd ───── 收尾标记

会话文件默认存在 ~/.claude/session-data/ 下,文件名像 2026-10-10-a1b2c3d4-session.tmp。文件头部写着项目名和工作目录(Worktree),后面是任务、改过的文件、用过的工具等。

Stop 这一步就是自动版的「写 progress.md」。下面重点看读(SessionStart)和抢救(PreCompact)。


二、SessionStart

注入历史,但要标明「这是历史」,scripts/hooks/session-start.js 在新会话开始时做这几件事:

  1. 清理 30 天以前的会话文件
  2. 在最近 7 天的会话里,找工作目录和当前一致的那一份
  3. 加上「学到的习惯」(本节第五部分讲)和学到的 Skill 摘要
  4. 拼在一起注入上下文,总长度默认不超过 8000 个字符

第 2 步有个坑:同一台电脑上的所有项目共用一个 session-data 目录,按修改时间拿最新的那份,经常拿到隔壁项目的摘要。所以 ECC 在会话文件头部写上工作目录,启动时按当前目录去匹配。

第 4 步的上限也有讲究:注入的内容会占每一轮的上下文。8000 字符的上限可以通过 ECC_SESSION_START_MAX_CHARS 调整,设成 ECC_SESSION_START_CONTEXT=off 就完全不注入。

这一节最值得看的,是注入时包在摘要外面的这段话:

本文是会员内容

全文 2,086 字,已试读约 27%。 开通专业版可阅读全文,并解锁全部课程与后续更新。

开通专业版

支持 7 天无理由退款 · 早鸟期前 500 名自动升级永久卡

下一节:总结上一节