Claude Code 源码笔记:Prompt 缓存、三层记忆与上下文压缩
从 Claude Code 相关实现里抽出几块:Prompt 缓存怎么拆、记忆怎么分层、上下文怎么漏斗式压缩、MCP 工具怎么按需暴露。
1. Prompt Caching 与缓存分裂
缓存分裂:把「不变的」和「变的」拆开
Anthropic 的 Prompt Cache:只要每次请求的提示词前半部分完全一样,API 就把这部分缓存起来,只算一次钱、只处理一次。
用边界标记 DYNAMIC_BOUNDARY,把提示词切成两半:
上半部分:静态缓存区(可全球共享)
- 内容:角色定义、行为规范、工具说明、通用规则等永远不变的内容
- 效果:大量用户共享同一份缓存,加载一次后几乎零成本、零耗时
下半部分:动态独立区(每人独算)
- 内容:当前时间、用户 Git 状态、个性化配置、本次请求专属信息等每次都变的内容
- 效果:只对这一小段重新计算,明显减少计费 token,也更快
2. 三层记忆:热常驻、温按需、冷检索
(Self-Heading Memory)
| 层级 | 数据类型 | 存储形式 | 加载方式 | 核心作用 |
|---|---|---|---|---|
| 第一层(热数据) | MEMORY.md 常驻索引 | 固定文件 | 每次对话强制加载 | 项目 / 用户核心规则、目录、偏好,始终在场 |
| 第二层(温数据) | 话题文件 | 独立文件 | 新对话时按需加载(最多约 5 个) | 编码偏好、架构约定、踩过的坑等细节 |
| 第三层(冷数据) | 历史对话 | .jsonl 归档 |
仅关键词检索时加载 | 更早的历史,按需召回 |
Grep 和向量 RAG
- Grep:关键词精确搜索,快、稳、准、省、简单;适合更早历史对话的按需召回
- 向量 RAG:语义模糊搜索,懂意思,但更慢、更复杂、更贵
3. 五级上下文压缩:漏斗式瘦身
AI 代码助手(如 Claude Code)的上下文窗口保护:像漏斗一样从轻到重、层层递进压缩上下文,尽量保住关键信息,避免提示词过长触发 API 报错,同时压低 token 成本。
实在压不住时,还有断路器:连续失败约 3 次就自动停下来。
4. 工具设计:MCP 按需加载
调用很多 MCP 工具时,Claude Code 不会把所有 MCP 的完整描述都塞进系统提示词。
做法是:先给模型一份工具名 + 一句话介绍的精简清单,让模型自己按需选择,再加载完整定义。这样能少掉大量 token。
5. Karpathy 式 LLM 知识库
核心思路:让 LLM 像程序员维护代码一样,持续构建 Markdown 知识库(Wiki),而不是只做一次性检索。
三层:
- Raw Sources:原始资料
- Wiki:LLM 维护的知识层
- Schema:规则文件
三大操作:
- Ingest:录入
- Query:提问
- Lint:体检
每次交互都让知识库更完善,少掉传统 RAG「用完即弃」的局限。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Rock的博客!




