跳到主要内容

Lab 03 · Context Pressure:压缩不丢约束

在 40%、75%、92% 窗口占用率下运行同一输入,验证受保护片段、来源标记、分层压缩与 Prompt Injection 扫描。

本章任务

要回答的问题

Context 接近上限时,怎样压缩历史又不丢系统约束、不信任恶意项目文件?

读完你能

  • 把 Context 条目标记为 protected、trusted、layer 与 source_id
  • 比较不同占用率下的扫描、摘要与淘汰动作
  • 验证高压缩后所有受保护约束仍存在
适合现在读
正在处理长任务、工具大返回值、Prompt 缓存、Memory 或项目指令的工程师
先修知识
理解 system、runtime、tool result 与 untrusted input 的区别;知道 Token 预算只是容量近似,不等于任务质量
实践产物
一张 40% / 75% / 92% Context 压测表,以及一份压缩与信任边界策略
证据边界
脚本使用确定性 Token 计数和固定摘要;真实模型的摘要质量、缓存命中与任务成功率仍需单独评测

第 48 轮,Context 占用 92%,README 里还藏了指令

Section titled “第 48 轮,Context 占用 92%,README 里还藏了指令”

运行时同时包含:

  • 不可删除的系统权限和 Tool Contract;
  • 当前任务目标与最近测试结果;
  • 已完成探索的长历史;
  • 多个已经消费过的工具大返回值;
  • 一个不可信 README,其中写着 ignore previous instructions

只按时间从头删,会丢系统约束;只做全文摘要,会把恶意指令吸进摘要;什么都不做,则下一轮模型调用失败。

先给每个 Context 条目标四个字段

Section titled “先给每个 Context 条目标四个字段”
字段作用
layer区分 stable、runtime、history 与 untrusted
protected任何压缩策略都不能删除的约束或任务状态
trusted决定内容能否直接进入 Prompt,还是先扫描、包裹或阻断
source_id摘要和恢复时能回到原始来源,而不是生成无出处事实

本实验的压缩顺序是:先扫描不可信输入,再摘要已完成历史,最后只保留最近少量 Runtime 结果。顺序本身就是信任模型的一部分。

Terminal window
python3 public/lab-assets/context-pressure.py

输出表类似:

target before after after% protected blocked summaries
40% ... ... ... True 1 0
75% ... ... ... True 1 1
92% ... ... ... True 1 1

再输出 JSON 供 CI 使用:

Terminal window
python3 public/lab-assets/context-pressure.py --json

重点不是 after_tokens 越小越好,而是 protected 始终为 True、恶意 README 始终被阻断、所有摘要保留 source_id。

做三次有意破坏:

  1. 把 history 摘要阈值从 60% 提高到 95%,观察高压时是否来不及收敛;
  2. 把 untrusted 扫描放到摘要之后,观察恶意内容是否进入摘要;
  3. 允许淘汰 protected 条目,确认自检立刻失败。

然后加入自己的真实工具结果样本,记录:压缩前后 Token、受保护约束数、摘要来源数、阻断来源数和任务成功率。

确定性脚本只回答“状态有没有被删除”。真实系统还要测:

  • 摘要是否保留未完成事项、失败原因和下一步;
  • 缓存边界改变后延迟和成本是否真的下降;
  • 旧 Memory 与当前文件冲突时是否显式标记;
  • 被阻断内容是否仍能通过工具结果、文件名或 Unicode 绕过;
  • 换模型或 Provider 后阈值是否仍然成立。

固定一组长任务,分别在 40%、75%、92% 触发同样的断言,才能比较策略而不是比较偶然输出。

验收:压缩后的 Context 必须可解释、可追溯、可拒绝

Section titled “验收:压缩后的 Context 必须可解释、可追溯、可拒绝”

通过标准:

  • 三个 protected 条目在三档压力下都保留;
  • repo:README.md 在进入摘要前被阻断;
  • 每个摘要都有 source_id
  • 92% 档压缩后降到安全阈值以下;
  • 策略日志能说明每个条目为何保留、摘要、淘汰或阻断。

下一步把这些字段加入你的真实 Context Builder,而不是只在 Prompt 字符串拼接阶段临时裁剪。

展开实验复盘与加分项
  • protected 与高优先级有什么不同?
  • 为什么不可信内容应该先扫描再摘要?
  • source_id 是给模型看,还是给 Harness 恢复和审计?
  • 窗口占用率下降但任务成功率下降,应该怎样判断?
  • 加分项:接入一个真实 tokenizer,并比较字符近似与真实 Token 的阈值偏差。