迭代任务中的上下文管理权衡 | AI生成和翻译
问题:在执行 macOS 清理等迭代系统任务时,/clear(每个任务新建会话)与在同一个会话中继续操作之间有哪些权衡?上下文累积如何影响 token 效率、成本和最终输出质量?
答案:
是的,完全正确。这本质上是一个上下文窗口管理策略问题,并且对成本和输出质量有实际影响。
核心权衡
同一会话(累积上下文) vs. 任务间使用 /clear
─────────────────────────────────────────────────────────────────────────────
+ LLM 看到先前发现 → 做出更好决策 + 更便宜(更少 token)
+ 能引用“之前找到的结果” + 无漂移 / 无过时上下文
+ 跨步骤的有状态推理 + 每次对话都新鲜且聚焦
- 每次对话 token 成本递增 - LLM 忘记先前发现
- 旧上下文可能混淆后续对话 - 需手动重新说明状态
- 存在任务中途达到上下文限制的风险 - 可并行化
三种具体策略
策略 1:完整会话(有状态)
对话 1:“运行 htop,显示内存占用前十的进程”
对话 2:“杀掉我们找到的 Chrome 辅助进程”
对话 3:“现在检查是否释放了内存,再次运行”
对话 4:“清除不活跃内存,对比前后结果”
上下文累积 → LLM 记得“Chrome 用了 4GB”而无需你重复说明。适用于诊断 → 操作 → 验证循环。
成本:每次对话需支付之前所有对话的 token。对话 4 的成本大约是对话 1 的 4 倍。
策略 2:在不相关任务间使用 /clear
[会话 A] 诊断内存 → 发现 Chrome 是罪魁祸首 → /clear
[会话 B] “杀掉所有 Chrome 辅助进程”(独立命令)
[会话 C] “设置交换文件”(不相关任务)
每个会话都很便宜。没有交叉污染。适用于独立任务。
策略 3:混合模式——先总结再 /clear
对于长时间迭代工作,这是最佳模式:
对话 1-3:诊断。自然累积上下文。
对话 4: “用 5 个要点总结我们的发现”
→ 复制该总结
/clear
对话 5: 将总结粘贴为系统上下文 → 继续操作
你将昂贵的累积上下文压缩成一个紧凑的状态快照,然后重新开始。这本质上是手动管理 KV 缓存——与 transformer 使用滑动窗口的原因相同。
Token 成本计算(具体)
假设每次输出 500 token,每次输入 200 token:
策略 1(5 次对话,不清除):
对话 1:700 token
对话 2:700 + 700 = 1400
对话 3:1400 + 700 = 2100
对话 4:2100 + 700 = 2800
对话 5:2800 + 700 = 3500
输入 token 总数:约 10,500
策略 2(每次对话后 /clear):
5 × 700 = 3,500 token 总数
策略 3(第 3 次对话后总结,/clear,继续):
对话 1-3:约 4,200
总结:约 300 token
对话 4-5:300 + 700 + 700 = 约 2,000
总数:约 6,500
对于同样的工作,最差策略与最佳策略之间的成本差异达到 3 倍。
针对 macOS 清理的具体情况
最优模式如下:
对话 1(诊断,保留上下文):
→ htop / top 输出
→ vm_stat
→ 识别主要占用方
对话 2(操作,仍在同一会话——LLM 需要对话 1 的发现):
→ 杀死对话 1 中发现的特定 PID
→ purge / sudo memory_pressure
对话 3(验证,若已总结则可 /clear):
→ “内存之前:X,之后:Y。完成。”
/clear
关键洞察:仅当 LLM 需要引用先前状态来做出正确决策时,才保留上下文。 一旦诊断阶段结束,进入纯粹的执行模式,之前的上下文就成了负担。
思维模型
将其视为CPU 寄存器文件:
- 上下文窗口 = 寄存器(快速、昂贵、有限)
- 你的剪贴板/笔记 = RAM(廉价,由你管理)
/clear= 刷新寄存器
优秀的程序员不会在寄存器中保留过时的值。优秀的 LLM 用户不会在上下文中保留过时的发现。积极驱逐,仅加载所需内容。
这就是为什么像 Claude Code 和代理循环这样的工具通常会自动进行总结——它们是以编程方式实现这一模式,让你无需费心。