$ cat ~/map/self-compact-pi-agent.md
Self Compact
把上下文量表交给自主运行的 pi Agent:提醒线与警告线先行,硬截断线上只放行 self_compact。
extensions✓ 9月21日
事实速查
- GitHub Stars
- ★ 76
- Forks
- 21
- 许可证
- MIT
- npm / 月
- —
- 最后推送
- 2026年9月20日
安装
克隆仓库,在 .env 中放好 provider 密钥(推荐 OPENROUTER_API_KEY),用 just run --model <model-id> 启动;just demo 用脚本化模型走完整个循环,不需要 API 密钥。前置条件:pi v0.85.1、Node 24+ 与 just。## 速览
一个把上下文量表交给长时间运行 Agent 的 pi 扩展:提醒线给提示,警告线要求写交接笔记,硬截断线上只放行 self_compact——压缩完成后,Agent 写下的笔记逐字回到下一轮消息。
## 要点
- $四阶段循环:用量越过 --compact-soft-at 触发提醒,越过 --compact-at 触发警告,再越过 --compact-buffer(上限为窗口的 90%)进入强制阶段——Agent 调用 self_compact 交出 note_to_self,空闲后压缩一次,笔记逐字返回并恢复全部工具。
- $引导信息不落盘:提示注入进下一次模型调用后即被丢弃,保存进上下文的只有你的提问与返回的笔记。
- $一张量表两种视图:带缓存、未缓存、提醒、警告与截断标记的 20 格终端页脚属于你;Agent 则随时调用 view_context,以 JSON 读到已用 token、百分比、阈值与剩余 token。
- $恢复机制内置:压缩失败或被取消时,笔记与锁都保留、扩展自动重试;/self-compact-now 或 /compact 可收尾,reload、resume 与 /tree 会从会话重建交接,已应答的交接不会重启。
- $阈值可按次调整:默认把提醒、警告与硬截断设在模型窗口的 10%、20% 与 30%,just soft=5% warn=8% buffer=2% 这类覆盖能让循环更早到来——提醒线要保持在 pi 保留的近期历史之上(keepRecentTokens,默认 20k)。
## 常见问题
Q 为什么不直接用 pi 内置的压缩?
内置压缩是被动的:临近上限才触发,用的还是一份通用总结提示词,Agent 得不到任何预警,它自己接下来想做什么也带不过压缩边界。Self Compact 把阈值变成可见的量表,并让 Agent 在干净的检查点亲手写交接笔记。
Q 量表是给人看的,还是 Agent 也能看到?
两者都能,只是界面分开。终端页脚属于人;Agent 调用 view_context,以 JSON 拿到同一组数字——已用 token、百分比、阈值、剩余 token——不必猜测自己所处的位置。
## 参考链接
## 相关条目
## 教程
最后更新: 2026年9月21日