agent 上下文管理踩坑:我用了 3 种方案,最后选了滚动摘要
-
跑长任务 agent 最怕上下文爆掉,试了 3 种方案:
方案 1:全量保留
最简单,但跑到 20 轮就开始丢信息。方案 2:滑动窗口
只保留最近 10 轮,但早期的重要信息全丢了。方案 3:滚动摘要
每 10 步压缩一次历史,保留关键信息。核心实现:
def rolling_summary(messages, step): if step % 10 == 0: # 压缩历史 summary = compress(messages[:-10]) messages = [summary] + messages[-10:] return messages def compress(messages): response = client.chat.completions.create( model="gpt-4", messages=[ {"role": "system", "content": "压缩对话历史,保留关键信息"}, {"role": "user", "content": str(messages)} ] ) return {"role": "system", "content": response.choices[0].message.content}跑了个 50 轮的长任务,滚动摘要方案最稳,信息丢失最少。