防止对话上下文腐败(Context Corruption)的策略

上下文腐败是 AI Agent 实际部署中的核心难题——对话轮次增加后,噪声积累、有效信息稀释,模型输出质量逐步下降。

1. 上下文管理层面

主动压缩

  • 摘要截断:定期对历史对话做摘要,替换原始长日志

  • 语义压缩:用 Embedding 聚类,丢弃离群/弱相关消息

  • 滑动窗口:硬性限制只保留最近 N 轮或 token 阈值

记忆分层架构

短期记忆(Working Context) ← 当前对话窗口,受限于 context limit 中期记忆(Session Memory) ← 本次会话重要结论和决策 长期记忆(Long-term Memory) ← MEMORY.md / 向量数据库

模型按需从外部存储读取,而非所有信息堆积在 prompt 中。

2. Prompt 层面

明确边界,减少模型自主延伸

你是一个 X 领域专家。请只基于用户提供的信息回答, 不主动延伸背景知识。如果信息不足,明确说"无法确定"。

分离系统指令和动态上下文

  • 系统级指令(角色、规则)固定不变

  • 动态用户内容只放在专门区域

  • 定期重建上下文:把核心信息重新注入,而不是累积堆叠

3. 架构层面

规划-执行分离(Plan-and-Execute)

规划阶段:注入任务描述 + 目标 → 模型输出计划 执行阶段:分步调用工具 → 只注入当前步骤结果

避免"边想边做"导致上下文快速膨胀。

工具输出最小化

  • 工具返回做结构化过滤,整段回传是浪费

  • 用 JSON Schema / 表格等结构化格式替代自然语言回传

子 Agent 隔离

不同子任务分发到独立 session,避免单一上下文无限增长。OpenClaw 的 sessions_spawn 隔离就是这个思路。

4. 实用对照表

场景

推荐方法

长对话(>20 轮)

每隔 N 轮触发摘要压缩

工具链调用

限制 max_depth,用 checkpoint 而非全量回传

RAG 场景

控制召回数量 + Rerank 过滤无关文档

复杂多步任务

完成后主动输出结论存入记忆,供后续使用

状态累积

定期清理中间状态,只保留最终结论

核心原则

上下文是稀缺资源,要像管理内存一样管理它:及时回收、只保留必要状态、避免不必要的堆积。模型应该"需要什么查什么",而不是"所有东西都摆在面前"。