用途:在上下文装不下之前,把「还要用来判断的」留住,把「能查到的」放走。
覆盖:长对话、长任务、多轮协作中的上下文管理。
产出:一份压缩后的工作集,或一个新会话的启动包。
拿到就能跑:压缩不是摘要。 摘要是把内容变短,压缩是把可查的丢掉、不可查的留下。
| # | 问什么 | 怎么问出口(原话) | 判据 | 答不上来时 |
|---|---|---|---|---|
| Q1 | 这件事还要继续做吗 | 「接下来还有几步要走?」 | 还有 → Q2;没有了 → 路径 C(直接收尾) | 看有没有「下一步要动手的事」 |
| Q2 | 关键判据能不能一句话留住 | 「如果只留五句话,留哪五句?」 | 能 → Q3;不能 → 路径 A(先就地压缩) | 留不出来的,多半是还没想清楚 |
| Q3 | 有没有地方能落盘、下次查得到 | 「这些细节写下来,下次能读到吗?」 | 有 → 路径 B(落盘 + 分层);没有 → 路径 A | 没有落盘位时就地压,别硬撑 |
| 条件 | 路径 |
|---|---|
| Q1 = 任务已结束 | C · 收尾,不压缩 |
| Q2 = 留不出五句 | A · 就地压缩(先想清楚) |
| Q3 = 没有落盘位 | A · 就地压缩 |
| Q3 = 有落盘位,任务还长 | B · 落盘 + 分层 |
继续在当前会话里做,只是把内容瘦下来。适合还能撑一段、或者暂时没有落盘位。
压缩的对象是「过程」,不是「判据」。
按这个顺序处理:
⛔ 不要用「摘要」的方式压缩——把一段话缩成三句,通常会丢掉「为什么不这么做」,而那恰恰是下次最容易踩回去的地方。
判据:压缩后如果重来一遍,会不会犯同样的错? 会,说明丢错了东西。
任务还长、细节还多。适合跨会话或跨天的工作。
做法:
常驻:这件事的目标是 X,约束是 Y,详细进展见 `进展.md`
按需:进展.md 里有什么、做到第几步
⛔ 不要把整份文件贴进新会话。贴进去等于没分层,只是把上下文压力换了个时间点。
任务已结束时,什么都不用压。
但要做一件事:把「结论」和「为什么」写到某个地方,然后结束。
不写的后果是三个月后重新遇到同样的问题,从零再想一遍——而这正是「记忆」该解决的。
| 现象 | 最可能的原因 | 处理 |
|---|---|---|
| 压完它还是不记得关键约束 | 压掉的是判据,留下的是过程 | 重做:留决定和约束,丢过程 |
| 摘要写了很长但没用 | 按时间顺序摘,不是按判断价值摘 | 改成「决定 / 约束 / 待办」三段 |
| 压缩后行为变了 | 丢掉了「为什么不这么做」 | 补回被否掉的方案及原因 |
| 每次都要重新解释同一个约束 | 约束没进常驻层 | 把约束提到最前面,一句话 |
| 新开会话还是很快满 | 启动包给太多 | 只给目标、约束、去哪看 |
| 压缩后前后矛盾 | 决定被改了但旧决定还留着 | 压完做一次矛盾检查 |
倒数第二条最容易被忽略:约束不进常驻层,每次都要重新说一遍,这本身就是上下文浪费。
路径:A 就地压缩 / B 落盘分层 / C 收尾
保留(判据层):<决定 N 条、约束 M 条>
压成一句:<过程条目>
丢弃:<原文、试错输出>
落盘位置:<文件>
下次开场三样:目标 / 约束 / 去哪看
path: compress|persist|close
kept: {decisions: [...], constraints: [...], state}
collapsed: n
dropped: n
storage: <path>|null
bootstrap: {goal, constraints: [...], where_to_look}
bootstrap.constraints 为空时,新会话必然要重新解释——约束是启动包里唯一不能省的部分。
走 B:落盘 3 条决定、5 条约束;新会话只给目标、约束、文件位置。
2026-11-06。上下文长度随产品变化,但「留判据、丢过程、细节落盘」的判据通用。与所执行系统的既定标准冲突时,以那个系统的标准为准。