压缩智能体上下文以提高性能¶
当 ADK 智能体运行时,它会收集 上下文 信息,包括用户指令、检索到的数据、工具响应和生成的内容。随着此上下文数据大小的增长,智能体处理时间通常也会增加。越来越多的数据被发送到智能体使用的生成式 AI 模型,增加处理时间并减慢响应速度。ADK 上下文压缩功能旨在通过汇总智能体工作流事件历史的较旧部分来减少智能体运行时的上下文大小。
上下文压缩功能使用滑动窗口方法来收集和汇总会话内的智能体工作流事件数据。当你在智能体中配置此功能时,一旦达到当前会话中特定数量的工作流事件或调用的阈值,它就会汇总来自较旧事件的数据。
配置上下文压缩¶
通过在工作流的 App 对象中添加事件压缩配置设置,将上下文压缩添加到你的智能体工作流中。作为配置的一部分,你必须指定压缩间隔和重叠大小,如以下示例代码所示:
from google.adk.apps.app import App
from google.adk.apps.app import EventsCompactionConfig
app = App(
name='my-agent',
root_agent=root_agent,
events_compaction_config=EventsCompactionConfig(
compaction_interval=3, # 每 3 次新调用触发一次压缩。
overlap_size=1 # 包含前一个窗口的最后一次调用。
),
)
配置完成后,ADK Runner 会在每次会话达到间隔时在后台处理压缩过程。
上下文压缩示例¶
如果你将 compaction_interval 设置为 3,将 overlap_size 设置为 1,则事件数据会在完成事件 3、6、9 等时被压缩。重叠设置会增加第二个摘要压缩的大小,以及之后的每个摘要,如图 1 所示。
图 1. 间隔为 3 且重叠为 1 的事件压缩配置图示。
使用此示例配置,上下文压缩任务按以下方式发生:
- 事件 3 完成:所有 3 个事件都被压缩成一个摘要
- 事件 6 完成:事件 3 到 6 被压缩,包括 1 个先前事件的重叠
- 事件 9 完成:事件 6 到 9 被压缩,包括 1 个先前事件的重叠
配置设置¶
此功能的配置设置控制事件数据压缩的频率以及智能体工作流运行时保留多少数据。你可以选择配置压缩器对象
compaction_interval: 设置触发先前事件数据压缩的已完成事件数量。overlap_size: 设置在新压缩的上下文集中包含多少先前压缩的事件。compactor: (可选) 定义压缩器对象,包括用于汇总的特定 AI 模型。 有关更多信息,请参阅定义压缩器。
定义汇总器¶
你可以通过定义汇总器来自定义上下文压缩过程。 LlmEventSummarizer 类允许你为汇总指定特定的模型。 以下代码示例演示了如何定义和配置自定义汇总器:
from google.adk.apps.app import App, EventsCompactionConfig
from google.adk.apps.llm_event_summarizer import LlmEventSummarizer
from google.adk.models import Gemini
# 定义用于汇总的 AI 模型:
summarization_llm = Gemini(model="gemini-2.5-flash")
# 使用自定义模型创建汇总器:
my_summarizer = LlmEventSummarizer(llm=summarization_llm)
# 使用自定义汇总器和压缩设置配置 App:
app = App(
name='my-agent',
root_agent=root_agent,
events_compaction_config=EventsCompactionConfig(
compaction_interval=3,
overlap_size=1,
summarizer=my_summarizer,
),
)
你可以通过修改其汇总器类 LlmEventSummarizer 来进一步优化 SlidingWindowCompactor 的操作,包括更改该类的 prompt_template 设置。有关更多详细信息,请参阅 LlmEventSummarizer 代码。