07. 上下文与记忆系统
CC Learn Docs
07. 上下文与记忆系统
范围
src/context.tssrc/utils/claudemd.tssrc/memdir/memdir.tssrc/memdir/findRelevantMemories.tssrc/memdir/memoryScan.tssrc/services/SessionMemory/sessionMemory.ts
1) 两层上下文
- System Context(
getSystemContext):git snapshot、cache breaker、系统注入。 - User Context(
getUserContext):CLAUDE.md 体系、当前日期、记忆注入。
二者均 memoize,按会话缓存。
2) CLAUDE.md 发现与注入
utils/claudemd.ts 负责:
- 多层级规则文件发现(managed/user/project/local)。
@include展开、frontmatter paths 解析。- 文本类型白名单与大小限制。
本质是“指令文件系统 + 注入管线”。
3) Memory Directory 设计
memdir/memdir.ts 的核心理念:
- 记忆是文件系统(
MEMORY.md索引 + topic 文件),不是黑盒数据库。 - 强约束写法(frontmatter、类型分类、索引长度与字节上限)。
- 自动保证 memory 目录存在,减少模型无效探测。
4) 相关记忆召回流程
sequenceDiagram
participant Q as User Query
participant S as memoryScan
participant R as findRelevantMemories
participant M as sideQuery(Sonnet)
participant C as Main Context
Q->>S: 扫描memory headers
S->>R: 候选列表(filename/desc/type/mtime)
R->>M: 让小模型选最多5个
M-->>R: selected_memories
R-->>C: 注入相关记忆路径与内容
5) Session Memory(会话内自动笔记)
services/SessionMemory/sessionMemory.ts:
- 在阈值达成时后台 fork 子代理提炼会话记忆。
- 维护
lastMemoryMessageUuid与 token/tool-call 双阈值。 - 自动初始化 session memory 文件并按模板更新。
这个机制是“长会话可持续性”的关键补丁。
6) 值得学习的点
- 记忆系统以 markdown 文件为第一公民,可审计、可迁移、可手工修复。
- 召回分两步:先 cheap scan,再小模型选择,控制 token 成本。
- Session Memory 与长期 memory 分层,避免污染。
7) 风险点
- 记忆注入链路较长(CLAUDE.md + memdir + session memory),需要防重复与大小失控。
- include/frontmatter/path-glob 规则复杂,配置错误易导致意外注入或缺失。
8) 证据文件
src/context.tssrc/utils/claudemd.tssrc/memdir/memdir.tssrc/memdir/findRelevantMemories.tssrc/memdir/memoryScan.tssrc/services/SessionMemory/sessionMemory.ts