第 10 章:Memory 与 Continuous Learning
记忆不是“把所有历史塞回 prompt”
ECC 的 memory 设计更像一个有界控制面:在 session start 读取有限上下文,在 pre-compact 保存关键状态,在 session end 写入摘要;需要跨 harness 传递时,通过 ecc memory 的 init、handoff、search 等子命令显式操作。
会话活动 / transcript / tool result
↓
observation
↓
bounded context
↓
SessionStart 恢复 / PreCompact 保存 / SessionEnd 持久化
ECC_SESSION_START_MAX_CHARS 和 ECC_SESSION_START_CONTEXT=off 说明 ECC 把上下文预算当作一等资源,而不是无限追求“记得越多越好”。
v1 与 v2 的差异
skills/continuous-learning-v2/SKILL.md 将演进总结为:
| 维度 | v1 | v2.1 |
|---|---|---|
| 观察时机 | Stop/session end | PreToolUse + PostToolUse |
| 知识粒度 | 直接生成完整 skill | 原子 instinct |
| 置信度 | 无显式分数 | 0.3–0.9 confidence |
| 作用域 | 全局 | project-scoped + global |
| 演进 | 直接写能力 | instinct → cluster → skill/command/agent |
project-scoped 是关键修复:一个项目里的框架偏好、用户纠正和工作流不应未经证据就污染所有仓库。项目识别依赖 git remote 或 repo path,instinct 记录 evidence,再通过重复出现和 promote 才能升级为全局能力。
Memory CLI 与持久化层
scripts/memory.js 是用户入口,scripts/lib/memory-vault.js、memory-vault-format.js 等负责存储格式和边界。CLI 还通过 --stdin 支持把上下文从一个 harness 传给另一个:
ecc memory handoff \
--from codex --target claude \
--title "Continue migration" --stdin
这比隐式复制整个 transcript 更可控:操作者选择要交接的内容,系统记录 source/target/title,接收方只加载一份小而明确的 handoff。
ECC2 控制面
当前源码还包含 sessions、work-items、status、control-pane、operator dashboard 等 ECC2 面。它们共同构成一个轻量 state store:会话、工作项、observability readiness 和运行状态不再只存在于模型上下文里。scripts/ecc.js 的命令表把这些能力暴露为 ecc status、ecc sessions、ecc work-items 等可审计入口。
记忆设计的三个护栏
- 有界:启动时限制字符数,避免恢复历史压垮新任务。
- 显式:handoff、search、promote 都需要明确命令或 skill,不自动上传所有对话。
- 分域:项目 instinct 与全局 instinct 分开,只有足够证据才提升作用域。