Skip to content

14. 上下文压缩与清除

随着会话进行,上下文会不断增长。理解如何管理上下文对于保持性能至关重要。

🎯 什么是上下文?

上下文的组成

当前会话上下文 =
├── 对话历史(你的消息 + Claude 的回复)
├── 读取过的文件内容
├── 执行过的命令输出
├── 工具调用记录
└── 项目结构信息

为什么需要管理上下文?

问题:上下文过大

大量上下文 → 处理变慢 → 成本增加 → 性能下降

解决:上下文管理

定期清理 → 保持性能 → 控制成本 → 提升体验

📊 上下文生命周期

会话开始

[添加上下文]
文件读取、对话、命令执行

上下文增长 → 性能下降

[压缩上下文]
移除不重要的内容

[清除上下文]
完全重置会话

重新开始

💻 实战示例

示例 1: 查看上下文使用情况

你: 显示当前上下文使用情况

Claude:
📊 上下文使用报告
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

Token 使用:
- 已使用: 45,234 / 200,000
- 使用率: 22.6%
- 剩余: 154,766

组成部分:
- 对话历史: 28,456 tokens (63%)
- 文件内容: 12,345 tokens (27%)
- 命令输出: 3,123 tokens (7%)
- 其他: 1,310 tokens (3%)

最大的文件:
1. src/redux/store.js (4,567 tokens)
2. src/components/App.jsx (3,456 tokens)
3. package.json (1,234 tokens)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

建议:性能良好,无需清理

示例 2: 压缩上下文

你: 压缩当前上下文

Claude:
→ 分析上下文内容...
→ 识别可压缩部分...
→ 执行压缩...

✓ 上下文已压缩

压缩结果:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
压缩前: 45,234 tokens
压缩后: 23,456 tokens
节省: 21,778 tokens (48%)

保留内容:
✓ 当前对话摘要
✓ 打开的文件
✓ 重要配置

移除内容:
✗ 旧对话细节
✗ 命令输出
✗ 临时文件内容

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

示例 3: 清除特定内容

你: 清除 src/redux/store.js 的上下文

Claude:
→ 从上下文中移除 src/redux/store.js

✓ 已清除 (节省 4,567 tokens)

当前上下文: 40,667 tokens

示例 4: 完全重置

你: 清除所有上下文

Claude:
⚠️  警告:这将清除所有对话历史和文件上下文

确认? (yes/no): yes

→ 清除对话历史
→ 清除文件缓存
→ 清除工具记录

✓ 上下文已重置
当前: 0 tokens

[会话重新开始]

示例 5: 智能清理

你: 智能清理上下文

Claude:
→ 分析上下文重要性...
→ 自动选择保留内容...

✓ 智能清理完成

清理策略:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

保留:
✓ 最近 10 条对话
✓ 当前打开的文件
✓ 项目配置文件
✓ 最近的错误信息

移除:
✗ 旧的对话历史 (20 分钟前)
✗ 已关闭的文件
✗ 命令输出
✗ 重复的信息

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

节省: 35,432 tokens (75%)

🎛️ 上下文管理命令

基本命令

bash
# 查看上下文使用
context info
context stats

# 压缩上下文
context compress
context trim

# 清除特定内容
context clear <file>
context clear --history
context clear --files

# 完全重置
context reset
context clear --all

# 智能清理
context cleanup
context smart-clean

自动配置

json
// ~/.claude/config.json
{
  "context": {
    "autoCompress": true,
    "compressThreshold": 0.7,        // 70% 使用率时压缩
    "autoCleanup": true,
    "cleanupInterval": "30m",         // 每 30 分钟清理
    "keepRecentMessages": 20,         // 保留最近 20 条消息
    "keepOpenFiles": true,            // 保留打开的文件
    "maxTokenSize": 150000            // 最大 150k tokens
  }
}

📊 上下文优化策略

策略 1: 分段对话

❌ 不好:一个长会话
[2 小时的连续对话]
→ 上下文过大
→ 性能下降

✅ 好:分段会话
会话 1: 架构设计 [30 分钟]
↓ 保存摘要,开始新会话
会话 2: 实现 A 部分 [30 分钟]
↓ 保存摘要,开始新会话
会话 3: 实现 B 部分 [30 分钟]
→ 每个会话保持精简

策略 2: 定期清理

时间线:
0 min  → 开始 (0 tokens)
15 min → 检查 (15k tokens) ✓ 良好
30 min → 检查 (35k tokens) ✓ 良好
45 min → 检查 (55k tokens) ⚠️ 注意
60 min → 清理 (60k tokens) → 25k tokens
75 min → 检查 (40k tokens) ✓ 良好

策略 3: 选择性保留

你: 完成这个大任务,然后清理上下文

Claude:
→ [执行大任务...]
✓ 任务完成

→ [清理上下文]
✓ 已清理

→ [保存摘要]
✓ 摘要已保存:
"完成了用户认证功能:
- 实现了登录/注册
- 添加了 JWT
- 集成了 Redux

下一步:实现密码重置"

策略 4: 使用项目记忆

markdown
<!-- CLAUDE.md -->
# 项目上下文

## 重要信息
- 框架:React + Redux
- 状态管理:Redux Toolkit
- 样式:Tailwind CSS

## 最近完成
- [x] 用户认证 (2024-03-15)
- [x] 导航系统 (2024-03-14)

## 进行中
- [ ] 密码重置功能

这样即使清除上下文,重要信息也在 CLAUDE.md 中。

🎯 最佳实践

✅ DO - 应该做的

  1. 定期检查使用情况

    每 15-20 分钟检查一次上下文
  2. 完成后清理

    完成功能后立即清理
  3. 使用 CLAUDE.md

    重要信息保存在项目文件中
  4. 分段处理大任务

    不要在一个会话中做太多事

❌ DON'T - 避免做的

  1. ❌ 让上下文无限增长

    定期清理是必要的
  2. ❌ 在会话中读取大文件

    使用摘要或片段
  3. ❌ 保留不必要的历史

    旧对话会占用空间
  4. ❌ 忘记保存摘要

    清理前保存重要信息

🛠️ 高级技巧

1. 自动压缩脚本

bash
#!/bin/bash
# auto-compress.sh

# 检查上下文使用率
USAGE=$(claude context info | grep "使用率" | awk '{print $2}')

# 如果超过 70%,自动压缩
if (( $(echo "$USAGE > 70" | bc -l) )); then
    claude context compress
    echo "✓ 上下文已自动压缩"
fi

2. 上下文快照

bash
# 保存当前上下文
claude context snapshot save before-cleanup

# 清理
claude context cleanup

# 如果需要,可以恢复
claude context snapshot restore before-cleanup

3. 选择性压缩

bash
# 只压缩对话历史
claude context compress --history-only

# 只压缩文件内容
claude context compress --files-only

# 压缩除特定文件外的所有内容
claude context compress --keep src/config.js

4. 上下文分析

bash
# 分析上下文组成
claude context analyze

输出:
📊 上下文分析
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

类型分布:
对话: 60%
文件: 30%
命令: 7%
其他: 3%

时间分布:
最近 10 分钟: 45%
10-30 分钟前: 35%
30+ 分钟前: 20%

建议:
- 压缩 30+ 分钟前的内容
- 保留最近对话
- 清除命令输出

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📈 性能监控

实时监控

你: 启用上下文监控

Claude:
✓ 已启用实时监控

[在提示符中显示]
[45k/200k tokens] 22% │
[60k/200k tokens] 30% │
[85k/200k tokens] 42% │⚠️
[45k/200k tokens] 22% │ (压缩后)

性能指标

bash
# 查看性能指标
claude context metrics

输出:
📊 性能指标
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

响应时间:
- 平均: 1.2s
- 最快: 0.8s
- 最慢: 2.3s

Token 处理:
- 输入速度: 12.5k tokens/s
- 输出速度: 8.3k tokens/s

压缩效率:
- 压缩次数: 3
- 平均节省: 45%
- 总节省: 67k tokens

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🚨 常见问题

Q: 上下文满了怎么办?

A: 立即执行以下步骤:
1. 保存当前工作摘要
2. 清除上下文
3. 开始新会话
4. 从摘要恢复上下文

Q: 如何避免丢失重要信息?

A: 使用 CLAUDE.md:
1. 定期更新项目文件
2. 记录重要决策
3. 保存配置信息

Q: 压缩会影响性能吗?

A: 不会,压缩只会:
- 移除不必要的内容
- 保留重要信息
- 提升后续性能

📚 下一步

了解上下文管理后,继续学习 15. 项目记忆文件 (CLAUDE.md)

🔗 相关资源


💡 API 推荐https://apipro.maynor1024.live/ - 一站式接入各种AI服务,注册即送0.2刀

基于 MIT 许可发布 | 永久导航