上下文压缩:让 AI 智能体该忘就忘,又不丢失关键信息

Dev.to ML 2026-07-25T05:20:07.278438

大家好,我是 Rijul。我正开发 git-lrc —— 一个微型的 AI 代码审查工具,每次提交代码时自动运行。它完全免费,源码在 GitHub 上开放。如果觉得有用,请给 git-lrc 点个 Star,帮助更多开发者发现这个项目。欢迎试用并反馈意见。

假设你让 AI 智能体帮你修复一个 API,只给了它一条简单指令:修复 API 500 错误。这个智能体可能会经历这样的工作流程:

Agent:

→ 读取日志
→ 搜索代码库
→ 检查数据库
→ 查看最近的提交记录
→ 运行测试
→ 尝试修复

30 次工具调用之后,智能体的上下文已经变得非常庞大。但其中大部分信息可能已经没用了。智能体不需要一直保留调查中的每一个细节。它不需要:

它真正需要的是 当前的调查状态

上下文问题

想象一下,智能体在调查过程中累积了 40,000 个 token 的上下文。这些上下文占用了宝贵的空间。随着智能体继续工作,上下文窗口逐渐被填满。最终,智能体可能没有多余空间容纳新信息,进而导致:

所以,与其把整个历史记录一直带着走,不如对它进行压缩。原本 40,000 个 token 可能变成这样:

目标:
修复 API 500 错误。

已发现:
- 错误在部署 v1.4 后出现。
- 数据库正常。
- 支付服务缺少 PAYMENT_API_KEY

已尝试:
- 重启服务,没有效果。

下一步:

修复环境配置并重新测试。这就是上下文压缩。

什么是上下文压缩?

上下文压缩不是简单地把内容变短。它的目标是:移除不再有用的信息,同时保留智能体继续工作所需的关键内容。智能体不需要记住每一步做了什么,它只需要记住那些步骤得出的重要结论。

三种基本的上下文压缩技术

1. 剪枝(Pruning)

最简单的技术就是剪枝——移除不再有用的信息。比如:

Agent:→ 搜索 config.yaml → 没找到
Agent:→ 搜索 settings.yaml → 没找到
Agent:→ 搜索环境变量 → 发现 PAYMENT_API_KEY 缺失

一旦智能体找到了真正的原因,那些失败的搜索记录可能就没用了,可以从当前上下文中删除。重要的信息是:PAYMENT_API_KEY 缺失。剪枝的本质就是:移除智能体不再需要的内容

2. 提炼(Distillation)

与其保留整个对话,不如把它转换成结构化的摘要。例如:

目标: 修复 API 500 错误
事实:
- 数据库正常
- 错误在部署 v1.4 之后开始出现
- PAYMENT_API_KEY 缺失
决策:
- 不要修改数据库
- 修复环境配置
已完成:
- 检查了日志
- 验证了数据库连接
- 检查了环境变量
下一步:
- 添加 PAYMENT_API_KEY
- 重启服务
- 重新测试 API

原本的调查可能耗费了几千个 token,但提炼后的状态包含了智能体继续工作所需的信息。一个有用的结构可以是:目标 → 事实 → 决策 → 已完成工作 → 下一步操作。提炼的本质就是:将长历史转化为结构化状态

3. 泛化(Generalisation)

有时调查中包含了可以在未来场景中复用的知识。例如:

具体经验:缺少 API 密钥导致支付 API 失败。

可复用知识:

上下文压缩:让AI代理忘掉不重要的信息,同时保留关键脉络

当API集成失败时,检查环境变量。代理不再只记住某次具体事件中发生了什么,而是从这次经验中提炼出一条通用规则。这可以用于:

泛化本质上就是:把一次具体的经验变成可复用的知识。

核心思路

AI代理不需要永远携带全部历史记录。它只需要保留那些仍然有用的部分。一个长链条的排查过程可能长这样:

40,000 token 的原始历史

上下文压缩

目标 + 事实 + 决策

下一步行动

代理随后可以在更小的上下文窗口中继续工作,同时保留真正重要的信息。上下文压缩不是让你忘掉一切,而是让你忘掉该忘的东西。

查看原文