← rugoi.com 原始文件 ↓

如何压缩快满的上下文

用途:在上下文装不下之前,把「还要用来判断的」留住,把「能查到的」放走。

覆盖:长对话、长任务、多轮协作中的上下文管理。

产出:一份压缩后的工作集,或一个新会话的启动包。

拿到就能跑:压缩不是摘要。 摘要是把内容变短,压缩是把可查的丢掉、不可查的留下。


触发的变异问法


什么时候不要用这份文件


判断:先问三个问题

#问什么怎么问出口(原话)判据答不上来时
Q1这件事还要继续做吗「接下来还有几步要走?」还有 → Q2;没有了 → 路径 C(直接收尾)看有没有「下一步要动手的事」
Q2关键判据能不能一句话留住「如果只留五句话,留哪五句?」能 → Q3;不能 → 路径 A(先就地压缩)留不出来的,多半是还没想清楚
Q3有没有地方能落盘、下次查得到「这些细节写下来,下次能读到吗?」有 → 路径 B(落盘 + 分层);没有 → 路径 A没有落盘位时就地压,别硬撑

分支

条件路径
Q1 = 任务已结束C · 收尾,不压缩
Q2 = 留不出五句A · 就地压缩(先想清楚)
Q3 = 没有落盘位A · 就地压缩
Q3 = 有落盘位,任务还长B · 落盘 + 分层

路径 A · 就地压缩

继续在当前会话里做,只是把内容瘦下来。适合还能撑一段、或者暂时没有落盘位。

压缩的对象是「过程」,不是「判据」。

按这个顺序处理:

  1. 留下的:已经做出的决定、定下的约束、被否掉的方案及原因、当前状态。
  2. 压成一句的:探索过程(「查了 A、B、C,最终确定是 B」→「已确认 B」)。
  3. 直接丢的:读过的原文、试错的中间输出、重复确认过的内容。

⛔ 不要用「摘要」的方式压缩——把一段话缩成三句,通常会丢掉「为什么不这么做」,而那恰恰是下次最容易踩回去的地方。

判据:压缩后如果重来一遍,会不会犯同样的错? 会,说明丢错了东西。

路径 B · 落盘 + 分层

任务还长、细节还多。适合跨会话或跨天的工作。

做法:

  1. 落盘:把细节写进文件(决策记录、当前状态、待办),不留在对话里。
  2. 分层:常驻的只留指针和约束,细节按需读。
   常驻:这件事的目标是 X,约束是 Y,详细进展见 `进展.md`
   按需:进展.md 里有什么、做到第几步
  1. 启动包:新会话开头只给三样——目标、约束、去哪看。

⛔ 不要把整份文件贴进新会话。贴进去等于没分层,只是把上下文压力换了个时间点。

路径 C · 收尾

任务已结束时,什么都不用压。

但要做一件事:把「结论」和「为什么」写到某个地方,然后结束。

不写的后果是三个月后重新遇到同样的问题,从零再想一遍——而这正是「记忆」该解决的。


出问题怎么办

现象最可能的原因处理
压完它还是不记得关键约束压掉的是判据,留下的是过程重做:留决定和约束,丢过程
摘要写了很长但没用按时间顺序摘,不是按判断价值摘改成「决定 / 约束 / 待办」三段
压缩后行为变了丢掉了「为什么不这么做」补回被否掉的方案及原因
每次都要重新解释同一个约束约束没进常驻层把约束提到最前面,一句话
新开会话还是很快满启动包给太多只给目标、约束、去哪看
压缩后前后矛盾决定被改了但旧决定还留着压完做一次矛盾检查

倒数第二条最容易被忽略:约束不进常驻层,每次都要重新说一遍,这本身就是上下文浪费。


输出规范

人读

路径: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。上下文长度随产品变化,但「留判据、丢过程、细节落盘」的判据通用。与所执行系统的既定标准冲突时,以那个系统的标准为准。

Markdown 原文 · 更新 2026-11-06
compress-full-context · v1 · sop