Agent 上下文管理最佳实践:如何让 AI 记住 100 轮对话
让 AI 记住上下文不难,难的是记住该记的、忘掉该死的、在该想起来时准确召回。这是 Agent 工程中最被低估的挑战。
问题的本质
大模型的上下文窗口是有限的(即使 200K tokens 也有边界),而且:
- 上下文越长,推理越慢、越贵
- 无关信息越多,注意力越分散
- 有价值的上下文往往分散在多个会话中
所以核心问题不是「怎么塞更多」,而是「怎么筛更好的」。
分层记忆架构
YingClaw 采用四层记忆模型:
┌─────────────────────────────┐
│ 会话上下文(当前对话) │ ← 完整保留
├─────────────────────────────┤
│ 短期记忆(7 天自动过期) │ ← 每日笔记
├─────────────────────────────┤
│ 长期记忆(永久) │ ← 用户偏好、项目约定
├─────────────────────────────┤
│ 核心记忆(永久) │ ← 不可变事实
└─────────────────────────────┘
关键原则
| 层级 | 存什么 | 不存什么 |
|---|---|---|
| 会话 | 当前对话全部 | — |
| 短期 | 阶段进展、调试记录 | API Key、密码 |
| 长期 | 「用户偏好 TypeScript」 | 当天吃了什么 |
| 核心 | 「项目 MSRV 是 1.75」 | 临时配置 |
三个实践技巧
1. 压缩而非截断
不要简单地丢弃旧消息。用 Agent 对历史对话做摘要,保留关键决策和上下文:
原文(500 tokens):
"我先试了方案 A,发现不行,又试了方案 B,然后调整了参数 x=3,
发现效果不错,但还需要优化 y..."
压缩后(50 tokens):
"已确认:方案 B 有效,x=3。待优化 y。"
2. 关键词触发记忆召回
不要让 Agent 每次都加载全部记忆。根据当前对话的关键词,召回相关的记忆片段:
用户问:"帮我审查 auth 模块"
→ 触发记忆召回关键词:"auth"、"安全"、"代码审查"
→ 召回:"项目使用 JWT + refresh token 方案(决策于 5 月)"
3. 定期复盘清理
每周让 Agent 自动执行一次记忆清理:
"回顾本周记忆,合并重复内容,删除过时信息,保留 5 条最重要的发现"
效果数据
采用分层记忆后,YingClaw 的内部测试显示:
| 指标 | 改进前 | 改进后 |
|---|---|---|
| 上下文相关度 | 64% | 93% |
| 平均 token 消耗 | 12K | 5K |
| 用户满意度 | 3.2/5 | 4.5/5 |
上下文管理不是炫技,是让 Agent 从「能用」变成「好用」的关键工程问题。