主题
上下文管理
Claude Code 单会话最大 1M tokens(约 5-10k 行代码 + 完整文档)。但用法不当上下文很快"污染",质量下降。
一句话核心
Claude 的注意力是有限资源。 上下文越满,对每条内容的关注度越低。
Claude Code 的多层记忆
┌─ 永久记忆(不消耗 context)──┐
│ ~/.claude/CLAUDE.md │ 你的全局偏好
│ 项目/CLAUDE.md │ 项目规范
│ .claude/settings.json │ 配置
└──────────────────────────────┘
┌─ 当前 context(每次会话)───┐
│ 系统提示 │ ~5k tokens(claude 自带)
│ CLAUDE.md(载入) │ ~1-5k
│ 工具定义 │ ~10k
│ 对话历史 │ 动态
│ 当前用户消息 │ 动态
└──────────────────────────────┘
┌─ Checkpoint(自动持久化)──┐
│ 每次文件修改前快照 │ /rewind 恢复
│ 跨会话保留 │
└──────────────────────────────┘
┌─ 跨会话记忆(需工具)──────┐
│ claude-mem 等 │ 压缩 + 注入下次
└──────────────────────────────┘必须掌握的 5 个上下文命令
/context —— 上下文用量诊断(关键)
/context输出详细拆分:
Context usage: 47,234 / 1,000,000 tokens (4.7%)
By category:
System prompt: 4,521 ( 9.6%)
CLAUDE.md: 2,103 ( 4.5%)
Tool definitions: 10,234 (21.7%)
Conversation: 28,431 (60.2%)
Current files: 1,945 ( 4.1%)
⚠️ Suggestions:
- Conversation > 50% — consider /compact
- Tool definitions large — review enabled MCP servers比 /usage 更精准看 context 占用。
/compact —— 智能压缩历史
/compact
# 或带指令
/compact 重点保留架构决策和未完成的 TODO把历史压缩成摘要,保留 cache 前缀(vs /clear 完全清空)。带指令可以告诉它"压缩时保留什么"。
/clear —— 完全清空
/clear清空对话历史但保留:
- CLAUDE.md
- 文件编辑结果
- 检查点
适用:切换不相关的新任务时。
/rewind —— 检查点回滚(双 Esc 同等效果)
/rewind或 双击 Esc。
Claude Code 在每次文件修改前自动建检查点,可以回到任意时间点:
Checkpoints (most recent first):
1. [2 min ago] Refactored auth.ts
2. [5 min ago] Added user.test.ts
3. [10 min ago] Initial state
Select to restore: _跨会话保留 —— 关掉终端再开还能 rewind。
# —— 快速追加 CLAUDE.md
输入 # 开头的消息:
# 在 src/legacy/ 下的代码不要重构,下个迭代删Claude 自动判断该写入哪一层 CLAUDE.md:
- 跟项目相关 → 项目根 CLAUDE.md
- 通用偏好 → ~/.claude/CLAUDE.md
- 跟特定子目录相关 → 子目录 CLAUDE.md
最快建立项目知识库的方式。
上下文污染的 5 个信号
| 信号 | 含义 |
|---|---|
| Claude 给出前后矛盾的回答 | 不同段落的指令冲突 |
| Claude 忘了几条消息前的决策 | 注意力被稀释 |
| Claude 重复已经做过的事 | 没意识到之前做过 |
| Claude 回答变慢(同样问题) | Context 太长,每次推理都重新看一遍 |
| 简单问题给出啰嗦回答 | 受历史风格影响 |
任一信号出现 → 立刻 /compact 或 /clear。
高质量长会话的 5 个习惯
1. 任务切换必 /clear
你:"好,那个功能写完了。接下来帮我写测试..."
↓
❌ 错!应该 /clear 再开始切换主题 = 必然 clear,否则历史污染新任务。
2. 每 30 分钟 /compact
长会话每隔半小时主动 compact 一次。预防性维护。
3. 用 # 把发现写进 CLAUDE.md
# 已发现:auth.ts 的 sessionToken 字段实际叫 session_id(命名遗留)下次会话自动加载,不用重新解释。
4. 善用 subagent 隔离脏活
我:"读一下整个 node_modules/some-lib/ 找出..."
↓
❌ 把整个 lib 读进 context
↓
✅ 改用 subagent 委派详见 Subagents。
5. 大文件别整读
❌ Read tests/large.json (30000 行)
✅ Grep "specific_pattern" tests/large.json
✅ 分批 Read,每次 500 行Token 用量精细控制
关闭不用的 MCP server
每个 MCP server 加载 2-15k tokens 的工具定义。没用就关:
json
// ~/.claude/mcp.json
{
"mcpServers": {
"github": { "command": "npx", "args": [...] },
// "slack": { ... } ← 注释掉不用的
}
}或临时禁用单个:
bash
claude --no-mcp githubTrim CLAUDE.md
/context 显示 CLAUDE.md > 5k tokens?删冗余:
bash
# 看实际 token 数
wc -w CLAUDE.md
# 一个 token ≈ 0.7 个英文词 / 0.5 个中文字文件读取按需
❌ Read 整个 src/ → 几十万 token
✅ Glob "src/api/**/*.ts" → 拿路径列表 → 只 Read 相关跨会话持久记忆:claude-mem
thedotmack/claude-mem — 自动捕获每次会话内容,AI 压缩后注入下次会话。
安装
bash
npm install -g claude-mem
claude-mem init # 在项目根目录跑工作原理
会话 A 结束 → claude-mem 读所有改动 + 决策
→ AI 提炼成摘要(约 500 tokens)
→ 写入 .claude-mem/memory.json
↓
会话 B 启动 → 自动加载摘要进 context
→ Claude "记得" A 会话发生了什么跨工具兼容
支持 Claude Code / OpenClaw / Codex / Gemini / Hermes / Copilot / OpenCode 等多家。用一个 mem 通吃。
上下文成本与命中率
长 context 未必等于贵,关键看是不是从 cache 命中:
| 场景 | 100k token 上下文 |
|---|---|
| 全新 input | $1.50(按 input 价) |
| 全从 cache 读 | $0.15(cache 价是 input 的 1/10) |
所以长上下文 + 高命中率 = 划算。详见 提示缓存优化。
实战:处理 200k+ 大项目
bash
1. 进项目 → claude
2. # 这是一个 Next.js + Prisma 项目,主要看 src/app 和 prisma/
3. /clear(确保干净)
4. "用 Glob 找出 src/app 的目录结构"
5. "读 prisma/schema.prisma 给我数据模型"
6. "现在开始:实现订单导出 CSV"
7. 实现中 /compact 一次
8. 测试通过 → # 订单导出完成,注意 src/api/billing/export.ts 用了流式
9. /clear → 下个任务先建立项目地图(少量 token)→ 再做具体任务(用 Glob/Grep 精准定位)→ 完成后 # 记录 → /clear。
检查点的妙用
试错性重构
你:"重构 auth 模块"
Claude:(改了 5 个文件)
你:跑测试发现 3 个挂了
你:/rewind ← 回到改之前
你:"重来,这次不要动 oauth.ts"比手动 git reset 快。
探索式编程
你:"试一下用 Redux 替代 Zustand"
Claude:(改了一堆)
你:体验不行
你:/rewind ← 回滚
你:"换 Jotai 试试"低成本实验。
