长会话的第二次机会 / KV Cache 之后
缓存失效,不必继续照搬过去
当长会话闲置到服务商侧 Prompt/KV Cache 大概率失效,可以趁恢复会话重新整理模型输入:完整历史仍然保留,本轮只带上最新、相关、低噪音的内容。
缓存的经济收益消失。它不自动说明上下文质量已经变差。
每轮选择、更新、去重和裁剪;不调用摘要模型,不改写原意。
上下文过长或噪音过多时才做摘要;这是有损操作,必须保留回查入口。
同一段历史,三种进入模型的方式
选择策略,观察闲置恢复这一刻的相对输入量、整理流程、缓存状态和工程权衡。图中比例仅用于解释结构,不是 benchmark。
闲置后按需整理
活跃期保持稳定前缀;缓存大概率失效且上下文足够大时,压缩并刷新。
- 稳定指令
- 最新记忆
- 近期原文
- 旧噪音
- 保真
- 近期原文高;旧历史通过摘要与指针回读
- 成本
- 恢复首轮有压缩成本,后续 N 轮可摊销
- 噪音
- 在边界清理重复 Recall 与大块工具输出
- 漂移
- 只在边界引入;需以约束与 ID 评测
键盘:在三个策略按钮上使用 ← / →、Home、End 切换。触摸:直接点按。
把“记录”与“思考材料”分开
完整 Session 记录是事实底座;本轮模型输入是在每次调用前临时组装的。压缩只改变本轮输入,不抹掉原始记录。
完整 Session 记录
只追加、不覆盖rawrawexactexact重新组装
本轮模型输入
临时组装frontstatelossyverbatim选择
按当前任务取稳定指令、状态、近期原文与可回读旧史。
去重
替换旧 Memory 快照,去掉重复 Recall,而非只是移动消息位置。
遮罩
Observation Masking 保留调用轨迹,缩减不再需要的观察正文。
裁剪
大块、可重读工具输出留 ID 与指针,不必常驻工作输入。
边界压缩
只在闲置、超软上限、版本变化、噪音过高或任务切换时摘要。
缓存命中,只能事后确认
idle gap 与公开 TTL 只能提示“可能已经 cold”。真正是否命中,要看响应 usage;路由变化等因素也可能造成 miss。
稳定前缀被连续复用,继续保持它。
每轮按规则重组输入,不必每轮做摘要。
TTL 提供启发式信号,不是精确失效通知。
上下文足够大或很脏时,再压缩并刷新。
关键澄清:缓存失效是经济信号,不等于上下文质量已经下降。有损压缩仍要结合上下文大小、噪音和任务连续性。
OpenAI GPT-5.6+
≥ 30 min公开 API 默认最低 TTL 30 分钟,可能更久;命中通过 cached_tokens 事后观测。
Anthropic
5 min / 1 h默认 5 分钟,可选 1 小时;缓存覆盖 tools、system、messages 的完整前缀。
Google Gemini
implicit隐式缓存默认开启;命中由 usage.total_cached_tokens 事后报告,稳定大块内容宜置前。
Hermes Agent 已有 opt-in 的闲置压缩边界
本机源码 9514d354 的定向验证:闲置恢复且上下文高于压缩后 floor 时,可在回答前触发 Compaction;默认仍保持关闭。
compression.idle_compact_after_seconds默认 0,即关闭;它是明确 opt-in 行为。
从磁盘重载 Memory,刷新动态工具定义与插件 Prompt,再重建完整 Prompt。
threshold 160K、target_ratio 0.2、lean tail、in-place;未开启 idle compaction。
test_idle_compaction.py 与 test_compaction_prompt_rebuild.py。
threshold: 160Ktarget_ratio: 0.2tail: leanmode: in-placeidle: off
证据入口:Hermes idle compaction commit。此处为清楚标注的本机代码与测试案例,不外推为所有 agent 的默认行为。
大家都在调用前整理输入,只是做法不同
比较重点不是“有没有摘要”,而是稳定前缀放在哪里、工作视图何时重建、有损压缩由什么触发。
Letta / MemGPT
VIRTUALMemory Blocks + virtual context management;通常仅在 compaction/reset 后刷新 System Prompt 以保缓存;支持 sliding、all、self-compaction。
Google ADK
PREFIXstatic_instruction 固定在缓存友好前缀;dynamic instruction 每轮重建并放后部;按事件或 token 压缩。
OpenAI Agents SDK
FILTER动态 instructions 每个用户 Run 求值;model input filter 可在每次模型调用前改写最终输入;Session 支持 trimming/compaction。
LangChain / LangGraph
MIDDLEWAREdynamic_prompt / wrap_model_call 可逐模型调用组装;SummarizationMiddleware 按阈值持久压缩。
AutoGen
VIEWBuffered / TokenLimited Context 在读取时做确定性裁剪。
Anthropic
SERVERPrompt Caching + Context Editing / 服务端 Compaction;通常接近上限才处理。
CrewAI
FALLBACK主要把摘要视为上下文溢出时的兜底。
别只盯输入 token
策略要用任务结果、保真、时延和跨回合摊销一起判断。下面是基于文中取舍的测试假设,不是实测排名。
| 观察项 | 完整回放 | 闲置后按需整理 | 每轮主动重组 |
|---|---|---|---|
| 约束 / ID 保真 | 原文保留最多 | 原文尾部 + 回读指针 | 取决于确定性选择规则 |
| 长距离事实召回 | 输入可见但受注意力竞争 | 摘要召回 + 精确回读 | 依赖工作视图选取 |
| 摘要漂移 | 无摘要则没有 | 仅边界发生,需监测 | 语义摘要不应每轮执行 |
| 恢复首轮成本 | 完整冷输入 | 压缩与重建有一次成本 | 持续承担整理成本 |
| 后续 N 轮摊销 | 输入继续增长 | 新稳定前缀可复用 | 效果优先于前缀稳定 |
| 噪音 / 注意力 | 竞争最高 | 边界清理 + 近期原文 | 每轮可控制 |
表格是待验证的工程假设;部署前应在自己的任务分布上测量。
- 正确率
- 约束 / ID 保真
- 工具调用成功率
- 长距离事实召回
- 摘要漂移
- TTFT
- 输入 / 缓存 token
- 恢复首轮成本
- 后续 N 轮摊销成本
每轮按规则重新组装输入;只在上下文过长、过脏或闲置恢复时考虑有损压缩。
继续核对原始材料
缓存细节会随服务更新;生产决策应回到最新官方文档与可复现实验。
- Hermes Agent — idle compaction commit案例行为与实现入口
- OpenAI — Prompt Caching缓存命中与 usage
- Anthropic — Prompt CachingTTL 与前缀范围
- Anthropic — Context Editing上下文编辑与压缩
- Google Gemini — Context Caching隐式缓存与 usage
- Google ADK — Context Compaction事件与 token 触发压缩
- Letta — Compaction虚拟上下文管理
- OpenAI Agents SDK — Sessionstrimming 与 compaction
- LangChain — Context Engineering动态 prompt 与 middleware
- AutoGen — Model ContextBuffered / TokenLimited Context
- Lost in the Middle长上下文中的位置效应
- RULER长上下文能力评测
- MemGPT分层记忆与虚拟上下文