AI Agent 的上下文与记忆管理:让对话不丢关键信息
【摘要】 一、上下文才是真正的瓶颈很多 Agent 用起来“前几轮很聪明,后面就开始跑偏”,原因往往不是模型能力不够,而是上下文被稀释了:关键约束被更长的对话淹没,早期确认过的信息在后文里找不到,重复内容占满了窗口。上下文管理的目标不是“塞进更多信息”,而是让该出现的信息在需要时出现,让过时的信息及时退出。这和数据库的缓存策略很像:容量有限,必须做取舍。 二、先分清三类信息Agent 的上下文通常包...
一、上下文才是真正的瓶颈
很多 Agent 用起来“前几轮很聪明,后面就开始跑偏”,原因往往不是模型能力不够,而是上下文被稀释了:关键约束被更长的对话淹没,早期确认过的信息在后文里找不到,重复内容占满了窗口。
上下文管理的目标不是“塞进更多信息”,而是让该出现的信息在需要时出现,让过时的信息及时退出。这和数据库的缓存策略很像:容量有限,必须做取舍。
二、先分清三类信息
Agent 的上下文通常包含三类内容,它们的生命周期完全不同:
- 系统约束:角色、边界、输出格式、禁止事项。这类信息应当稳定、常驻,且优先级最高;
- 对话历史:用户与 Agent 的往返消息。它们会持续增长,需要压缩与摘要;
- 外部知识:检索到的文档、工具返回结果。它们与当前任务相关,任务结束即可丢弃。
把三类混在一起管理,是上下文混乱的根源。建议在结构上就分开存放,注入时再按优先级组装。
三、压缩:保留结论,丢弃过程
对话变长时,最有效的做法不是逐条保留,而是做“结论化压缩”:
- 把已确认的事实整理成结构化条目(目标、约束、已决策项、待确认项);
- 丢弃寒暄、重复确认、失败的尝试过程;
- 对长文档只保留与当前任务相关的段落。
压缩后的内容应能被机器解析,而不是一段散文。结构化摘要天然适合后续复用。
四、记忆分层:短期与长期分开
把记忆分成两层:
- 短期记忆:当前任务的上下文,任务结束即清空;
- 长期记忆:跨任务复用的偏好、事实、经验,需要持久化。
长期记忆的关键是写入标准:不是所有对话都值得记。建议只记录稳定事实(用户偏好、项目约定、已确认结论),并给每条记忆打上来源与时间,便于后续判断是否过期。
五、检索与注入:只给需要的
上下文窗口有限时,“全量塞入”是最差策略。更合理的做法是:
- 根据当前问题生成检索意图;
- 从长期记忆与外部知识中召回少量高相关内容;
- 按相关度与时间排序后注入;
- 明确标注来源,让模型知道信息出处。
召回数量要克制:注入十条弱相关内容,不如注入三条强相关内容。
六、冲突与过期:必须显式处理
记忆最大的风险是“旧的错误覆盖新的正确”。常见场景:
- 用户后来改了需求,但早期约束仍被注入;
- 外部文档更新了,缓存里的旧版本仍在使用;
- 两条记忆互相矛盾,模型随机选了一条。
处理原则:
- 每条记忆带时间戳,冲突时以较新且来源可靠者为准;
- 关键约束变更时,显式覆盖而不是追加;
- 定期清理长期未使用的记忆,避免噪声累积。
七、可观测性:让上下文可复盘
上下文出问题时,最难的是复现。建议至少记录:
- 每次请求注入了哪些记忆与知识片段;
- 注入内容的来源与时间;
- 压缩前后的长度变化;
- 模型最终采用了哪些信息。
有了这些记录,才能判断是召回错了、压缩丢了,还是约束本身没写清楚。
八、小结
上下文与记忆管理可以概括成四句话:分类存放、结论化压缩、按需召回、显式处理冲突。做到这四点,Agent 就能在长对话里保持稳定,不会越聊越糊涂。真正决定体验的,往往不是模型多大,而是你如何组织它看到的信息。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)