这条教训是用真实的上下文污染事故换来的。有一次我让 OpenClaw 直接在主 session 中读取一个 80KB 的日志文件来诊断问题。结果是:日志内容占满了上下文窗口的 40%,后续的对话质量断崖式下降——Agent 开始答非所问、遗忘刚才的指令、甚至产生与日志内容混淆的幻觉。
根因很简单:LLM 的上下文窗口是一个有限的共享资源。每一个 token 都在争夺模型的「注意力」。当你往窗口里塞入大量与当前任务无关的原始数据时,模型的注意力被稀释,真正重要的信息(用户意图、系统指令、关键上下文)被淹没。Anthropic 的长上下文最佳实践文档明确指出:长上下文窗口不是用来一次性塞满的,而是用来「在需要时有足够空间」的。
我的解决方案是严格的上下文隔离规则:任何预期返回超过 50KB 的读操作、超过 200 行的命令输出、或完整网页抓取,都必须在 sub-agent 中执行。Sub-agent 有自己独立的上下文窗口,它在隔离环境中处理原始数据,提取关键信息,然后只把总结后的结果(通常不超过 500 字)返回给主 session。主 session 永远保持轻量——它只接收结论,不接收证据的原始形态。这个规则实施后,主 session 的平均响应质量提升了约 35%,因为上下文窗口终于留出了足够的空间给「思考」而不是「存储」。