AI Agent - Context Memory

你是否遇到过这样的场景:构建了一个智能 Agent,能够与用户进行多轮对话,处理复杂的任务。但随着对话的深入,你发现了一个严重的问题——

对话进行到第 100 轮时,每次 API 调用需要发送 10 万 tokens,成本是初始对话的 10 倍!

在长对话场景中,随着对话历史的不断积累,你会面临以下困境:

  • 成本线性增长:每次 API 调用需要为所有历史 tokens 付费,成本随对话增长而线性上升;
  • 性能下降:上下文越长,模型处理时间越长,响应变慢;
  • 模型maxToken限制:当对话历史超过模型的最大上下文窗口(如 128K tokens)时,模型无法处理完整的上下文,导致请求失败;
  • 信息丢失风险:简单上下文截断会丢失关键历史信息,影响 Agent 决策质量。

AutoContextMemory:智能上下文管理

AgentScope推出了AutoContextMemory,它是 AgentScope Java 框架提供的智能上下文内存管理组件, 通过自动压缩、卸载和摘要对话历史,在成本控制和信息保留之间找到最佳平衡。

两大核心机制

1. 自动压缩与智能摘要

  • 当消息或 token 数量超过阈值时,自动触发 6 种渐进式压缩策略;
  • 使用 LLM 智能摘要,保留关键信息而非简单截断;
  • 无需人工干预,系统自动管理

2. 内容卸载与完整追溯

  • 将大型内容卸载到外部存储,通过 UUID 按需重载;
  • 所有原始内容保存在原始存储中,支持完整历史追溯;
  • 不会因为压缩而丢失任何信息。

AutoContextMemory架构与工作原理

多存储架构

AutoContextMemory 采用多存储架构,确保在压缩的同时保留完整信息:

  • 工作内存存储:存储压缩后的消息,直接参与模型推理,这是Agent实际使用的上下文
  • 原始内存存储:存储完整的、未压缩的消息历史,采用仅追加模式,支持完整历史追溯
  • 卸载上下文存储:以 UUID 为键存储卸载的消息内容,支持按需重载;
  • 压缩事件存储:记录所有压缩操作的详细信息,用于分析和优化;

所有存储都支持状态持久化,可以结合SessionManager实现跨会话的上下文持久化。

6种渐进式开箱急用压缩策略

AutoContextMemory 的核心是 6 种渐进式压缩策略。

压缩触发条件

消息数量阈值或者Token数量阈值,两个条件满足任一即触发压缩

压缩流程

检查阈值 → 策略1(压缩历史工具调用) → 策略2(卸载大型消息-带保护)→ 策略3(卸载大型消息-无保护) → 策略4(摘要历史对话轮次)→ 策略5(摘要当前轮次大型消息) → 策略6(压缩当前轮次消息)

压缩原则
  • 当前轮次优先:优先保护当前轮次的完整信息
  • 用户交互优先:用户输入和Agent回复的重要性高于工具调用的中间结果;
  • 可回溯性:所有压缩的原文都可以通过UUID回溯,确保信息不丢失;
6种压缩策略
  1. 压缩历史工具调用:查找历史对话中的连续工具调用消息(超过 6 条),使用 LLM 智能压缩,保留工具名称、参数和关键结果。轻量级策略,压缩成本低。
  2. 卸载大型消息(带保护):查找超过阈值的大型消息,保护最新的助手响应和最后 N 条消息,卸载原始内容并替换为预览和 UUID 提示。快速减少 token 使用。
  3. 卸载大型消息(无保护):与策略 2 类似,但不保护最后 N 条消息,仅保护最新的助手响应。更激进的压缩策略。
  4. 摘要历史对话轮次:对历史用户-助手对话对进行智能摘要,使用 LLM 生成摘要保留关键决策和信息。大幅减少 token 使用。
  5. 摘要当前轮次大型消息:查找当前轮次中超过阈值的大型消息,使用 LLM 生成摘要并卸载原始内容。针对当前轮次的优化。
  6. 压缩当前轮次消息:压缩当前轮次的所有消息,合并多个工具结果,保留关键信息。最后的保障策略,确保上下文不超限。

参考文献

AgentScope AutoContextMemory:告别Agent上下文焦虑open in new window

最近更新 2025/12/28 17:26:50