上下文腐败是 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 过滤无关文档 |
复杂多步任务 | 完成后主动输出结论存入记忆,供后续使用 |
状态累积 | 定期清理中间状态,只保留最终结论 |
核心原则
上下文是稀缺资源,要像管理内存一样管理它:及时回收、只保留必要状态、避免不必要的堆积。模型应该"需要什么查什么",而不是"所有东西都摆在面前"。