Agent 上下文管理与记忆系统设计
一、上下文管理的本质
上下文生命周期的核心,是在 ReAct 循环中可干预上下文的时机窗口。
如果不进行主动管理,上下文会持续“生长”,最终引发系统级问题,而不仅仅是性能变慢。
二、为什么必须管理上下文
常见误区:
“上下文变长只是变慢,可以用更多 token 解决”
实际情况:不干预会导致三类生产级崩溃:
1. 性能崩溃(Performance Collapse)
- Token 超限,任务中断
- 长任务无法持续执行
- 重启后状态丢失
2. 逻辑崩溃(Logic Collapse)
- 注意力稀释(Attention Dilution)
- 重要信息被噪声淹没
- 输出开始重复、矛盾、错误
Transformer 注意力复杂度为 O(n²),上下文越大,性能下降越明显(15%~47%)
3. 成本崩溃(Cost Explosion)
- Token 成本线性增长
- 工具调用结果堆积
- 无效信息占据预算
三、三类典型上下文问题
1. Context Overflow(上下文爆炸)
问题:
- 长时间运行导致 token 超限
- Agent 被迫中断
- 无法恢复历史状态
本质:
- 上下文无限增长,没有上限控制
2. Context Rot(上下文腐烂)
表现:
- 重复分析
- 输出矛盾
- 模型“变笨”
原因:
- 注意力被稀释
- 关键信息权重下降
3. Context Poisoning(上下文污染)
表现:
- 错误信息被当作事实
- 后续推理建立在错误基础上
本质:
- 模型无法区分“真/假上下文”
- 错误信息被持续引用
四、上下文管理的三大核心操作
1. Bootstrap(启动注入)
在 Agent 启动前,将必要信息注入 system prompt。
注入内容
(1)身份与规则(静态)
- 角色定义
- 行为约束
- 工具使用规则
(2)状态与记忆(动态)
- 历史摘要
- 当前任务状态
- 已知关键信息
2. 剪枝(Pruning)
核心目标
控制上下文膨胀,重点处理 Tool Result
关键原则
- 对话内容:尽量保留(语义连续性)
- 工具结果:优先裁剪(原材料性质)
- 关键数据:先提取再删除(ID / 数值)
典型问题
- 单次工具返回 10k+ tokens
- 多轮调用导致上下文爆炸
3. 压缩(Compaction)
核心目标
将历史上下文转为摘要
触发时机(关键)
- 推荐:30%~40% 上下文占用时
- 错误做法:80% 才触发(为时已晚)
风险
- 信息丢失(不可逆)
解决方案(Lossless策略)
- 压缩前持久化关键数据(文件 / DB)
- 压缩后仅保留摘要
五、文件记忆系统(File-based Memory)
1. 本质
Agent 可控写入的长期记忆系统(类似“技能库”)
2. 触发机制
(1)用户显式触发(推荐)
- 用户主动要求记录
- 信号明确,误判低
- 最稳定方式
(2)Agent 主动触发
- 通过 SKILL 描述定义触发条件
- 适用于:
- 用户偏好
- 工作习惯
- 行为模式
设计要点
- 触发条件必须具体
- 优先在“对话结束点”触发
- 避免中途频繁写入
3. 局限性
文件记忆的三大崩溃点
(1)规模爆炸
- memory.md 存在长度上限
- 无法长期扩展
(2)语义查询困难
- 无法处理模糊查询
- 无法理解“上次那个…”
(3)维护成本高
- 去重 / 更新 / 分类成本高
- Agent 负担增加
六、搜索驱动记忆系统(RAG)
核心思想
从“全量加载” → “按需检索”
1. 为什么必须引入 RAG
解决文件记忆系统的三个问题:
- 可扩展性
- 语义检索能力
- 维护成本
2. Embedding 选型原则
- 查询与索引必须使用同一模型
- 否则向量空间不一致,检索失效
3. Chunk 设计(关键)
影响远大于模型选型
- Chunk 太大 → 语义稀释
- Chunk 太小 → 上下文断裂
最佳实践
语义完整的最小单元(一个观点 / 一段对话 / 一个事件)
七、混合检索(Hybrid Search)
1. 组成
- 向量检索(语义)
- 关键词检索(BM25)
2. 查询执行流程
Step 1:Query 向量化
- 使用 embedding 模型生成向量
Step 2:向量相似度搜索
- 使用 HNSW(近似最近邻)
- 时间复杂度:O(log n)
- 精度损失 < 1%
Step 3:关键词评分
- 使用 BM25(ts_rank)
- 计算关键词匹配得分
Step 4:混合评分
score = 向量得分 × 0.7 + 关键词得分 × 0.3
Step 5:Top-K 召回
- 按得分排序
- 返回最相关结果
Step 6:注入上下文
- 提取 summary / 关键信息
- 转换为自然语言
- 注入当前上下文
八、系统设计总结
上下文管理 = 必选项(不是优化项)
如果不做:
- 一定会爆(只是时间问题)
推荐架构组合
- Bootstrap(初始化)
- Pruning(控制膨胀)
- Compaction(摘要压缩)
- File Memory(结构化记忆)
- RAG(按需检索)
核心设计原则
- 上下文必须“受控增长”
- 信息必须“分层存储”
- 检索必须“按需加载”
- 写入必须“有策略”
一句话总结
Agent 的核心难点不是“让它更聪明”,而是“防止它随着运行时间变笨”