30 秒快速回答
Agent 上下文压缩(Agentic Context Compression)是一套在 LLM 接收输入之前,自动删减、提炼、结构化上下文的工程手段,让 AI Agent 在长任务中既不”跑偏”也不”烧钱”。 它解决的核心问题叫”上下文通胀”(Context Inflation):一次复杂的 Agent 会话,输入给模型的 Token 可能膨胀到 6 万以上,而其中真正有价值的信息往往不到 15%。压缩技术用一句话概括就是——同样的答案,花更少的 Token,注意力更集中。
为什么长任务会”上下文通胀”?
一个典型的 Coding Agent 单次任务轨迹是这样的:
用户提问 → RAG 检索返回 5000 tokens
→ 工具调用返回 100 条结果(JSON)
→ 日志输出 8000 tokens
→ 读取代码文件 3000 tokens
→ 再次工具调用 → …… → Token 预算爆炸
真实案例中,一个 SRE 故障排查会话的上下文膨胀到了 65,694 tokens。而里面有信息量的部分可能不到 15%——剩下的全是:JSON 数组里 90% 的无关数据、日志里 472 行 “PASS”、Git Diff 中未变更的上下文行。
| 维度 | 不压缩(65K tokens) | 压缩后(5K tokens) |
|---|---|---|
| 单次请求成本 | 高(Claude Sonnet 输入 $3/M) | 约降 60-95% |
| 首 Token 延迟 | ~8 秒 | ~2 秒 |
| 注意力质量 | 关键信息被”噪声淹没” | 目标清晰、不易跑偏 |
| 上下文窗口 | 200K 也可能溢出 | 长期够用 |
更隐蔽的问题是 Context Poisoning(上下文中毒):把整个历史全部喂给模型,早期失败的日志和无关的报错会持续干扰模型的判断。2026 年 1 月的 Focus Agent 论文(arXiv:2601.07190)用 SWE-bench Lite 实测证明:在保持同等成功率的前提下,通过主动压缩可减少 22.7% 的总 Token 处理量——说明 Agent 循环中大部分上下文其实是阻碍解题的噪声。
四种主流压缩策略
按”激进程度”从低到高排列,你可以根据场景组合使用:
| 策略 | 做法 | 压缩率 | 优点 | 缺点 |
|---|---|---|---|---|
| 截断 | 保留 System Prompt + 最近 N 轮,删掉最早消息 | 30-50% | 简单、零额外调用 | 早期重要决策会丢失 |
| 摘要 | 用 LLM 把长对话提炼成要点 | 80-90% | 信息密度高 | 摘要模型可能删错重点 |
| 结构化 | 把对话转成 State(目标/决策/约束/待办) | 90%+ | 稳定、可存库、可追溯 | 需要设计 Schema |
| 工具结果压缩 | 对 API/DB/日志返回做精简后再入上下文 | 60-95% | 直击最大 Token 源头 | 需按内容类型定制 |
1. 截断:最简单但最危险
messages = messages[-20:] # 只保留最近 20 轮
如果用户在第 2 轮说过”数据库必须用 PostgreSQL”,到第 40 轮讨论细节时这段约束已被截掉,Agent 就可能重新推荐 MySQL——这是典型的上下文丢失。
2. 摘要:不能只让模型”随便总结”
直接让模型”总结一下对话”很危险,它可能把”看起来不重要”的信息删掉。正确做法是指定摘要 Schema:
{
"goal": "设计电商系统",
"constraints": ["后端Go", "数据库MySQL", "支持微信/支付宝支付"],
"decisions": ["订单表按用户ID分片"],
"open_questions": ["支付回调重试策略待定"],
"tool_results": [],
"next_action": "设计订单状态机"
}
结构化摘要比自由文本更适合 Agent——它保留了约束和决策,压缩后几百 Token 就能顶几千 Token 的原始对话。
3. 状态化压缩:让 State 取代对话历史
与其保留 100 轮对话,不如把关键信息提取为结构化状态存到 Redis/数据库。Agent 的上下文只保留”当前 State + 最近对话”,而不是整个 Conversation。成熟的 Agent 应该从 “Conversation as State” 升级为 “State + Conversation”——不要让聊天记录承担数据库的职责。
4. 工具结果压缩:最大、也最容易被忽视的 Token 黑洞
Agent 最爆 Token 的地方往往不是聊天,而是工具返回。例如:
# 错误示范:把 DB 返回的 10000 行原样塞给 LLM
result = db.query("SELECT * FROM orders")
context += str(result) # 灾难
# 正确示范:先聚合,再入上下文
summary = {
"total": 10000,
"status_distribution": {"paid": 7820, "pending": 1210, "refunded": 970},
"top_orders": top_n(result, 5)
}
context += json.dumps(summary) # 几百 Token 搞定
2026 年最新进展:从工具到新范式
上下文压缩正在从”手动工程”演变成”自主架构”:
- Focus Agent(2026 年 1 月新论文):受黏菌生物启发,把上下文 Token 视为稀缺代谢资源,Agent 自主决定何时 Compress(总结关键学习)何时 Withdraw(删除原始日志)。在 SWE-bench Lite 上减少 22.7% Token 且成功率不降。
- Headroom(GitHub 26K+ Stars):本地优先的压缩层,内置 6 种自适应压缩器——SmartCrusher(JSON 压缩 70-95%)、CodeCompressor(AST 感知代码折叠)、Kompress(语义压缩)等,配合 CCR 可逆缓存机制,压缩后仍可通过
headroom_retrieve按需取回原始数据,做到”压缩不丢信息”。 - MemLayer 等开源记忆库:作为”知识块”把摘要后的上下文推入长期存储,保持活跃窗口精简。
总结
Agent 上下文压缩的三个核心洞察:
- 长上下文 ≠ 高效上下文:上下文窗口应被视为”有限预算”而不是”无限仓库”,塞满历史只会稀释注意力、烧掉 Token。
- 四类压缩按需组合:截断最省事但有损,摘要和结构化压得狠,工具结果压缩回报最高——先处理工具返回,再谈其他。
- 2026 年趋势是”自主压缩”:Focus Agent 证明 Agent 可以自己决定忘什么、留什么;Headroom 等工具把压缩做成标准件,压缩正成为生产级 Agent 的标配能力。
延伸阅读
- Focus Agents: Active Context Compression(arXiv:2601.07190) —— 主动上下文压缩新范式论文
- Headroom(GitHub) —— 开源 Agent 上下文压缩层,搜 “Headroom context compression”
- OpenAI Prompt Caching 官方文档 —— 压缩与缓存配合省钱的官方指南
- 本站相关:什么是上下文工程? · 什么是 KV Cache? · 长上下文(Long Context) (内容由AI生成,仅供参考)