「上下文压缩」的入口是 /compact。Composer 把可选参数命令立刻执行;压缩开始 / 成功 / 失败都落一条系统行。占用尺子、无可压、圆环生命周期写在占用设计里。
/compact 让模型把旧对话收成一段摘要,接到 DAG 上,后面只带「摘要 + 最近几轮」。
可选参数([…])点选或回车立刻跑。菜单收起动画不再截 Enter。没有 session 时提示先发一条,不会假装成功。
模型上下文就那么大。对话一长,旧轮次必须让位。OpenProgram 用滚动摘要:同一时刻只有一份有效摘要,再压一次是把「旧摘要 + 更多轮次」收成新摘要,不是叠两层。
下一轮模型实际看到的是:
[系统提示] [当前摘要] [没被吃掉的最近几轮] [你刚发的话]| 谁触发 | 条件 | 状态 |
|---|---|---|
手动 /compact |
输入框执行命令,可选留下最近 N token | 会发出 action: compact。无 session 时 alert,不空跑。 |
| 回合前自动压 | 本轮预算 ≥ 窗口的 80%。先 compact,snip 兜底 | dispatcher 在 loop_runner.py 里做。系统行走同一套文案。 |
| 爆窗抢救 | 模型返回 413 / prompt_too_long。每回合最多一次 | reactive.py。同样走压缩事件。 |
圆环按占用比例着色,面板可以一键压缩,见 占用与压缩。
/compact 2000 覆盖。summary_* 节点(role=llm,name=context/summary),covers_ids 标出被替换的那一段。会话 meta 记下这份摘要,方便下次接着压。旧轮不删,HEAD 不动。右下角圆环显示「此刻占用 / 窗口」。点开是 token 分类。占用数字按折叠后的 rendered 视图计,和压缩报告同一把尺子。颜色:不到 50% 绿,50–80% 黄,≥80% 红。
正在压、面板「立即压缩」的交互以占用设计为准,不在本页另开一套。
输入以 / 开头、还没有空格时,菜单从输入框顶边卷上来。空格一开始,菜单用 380ms 收起。回车时看第一个词在不在命令表里:在就执行,不在就当普通聊天。
内置表在 slash-commands.ts。另会拉 /api/commands 把技能 / 插件 / 用户命令拼进来。派发时内置排在前面。
| 命令 | 点选 / 回车 |
|---|---|
/compact | 立刻压缩。参数 [keep_recent_tokens] 可选,不填也执行。 |
/rewind、/branch | 立刻跑(参数可选)。 |
/context | 打开圆环面板。 |
/clear、/new | 新会话。 |
/task、/skill、/merge | 先填前缀,等人补必填参数。 |
/help | 把输入设成 /,菜单再出现。 |
/sandbox、/doctor、/memory | 各自动作;doctor 有会话时会把报告当用户消息发出去。 |
[…])点选 / 回车立刻执行。/task 这类必填参数继续先填前缀。closing 时不截 Enter,落到 runCommand。compaction_started / finished / failed 各有一条系统行。无可压是第四种,见占用设计。/help 不是独立页。/doctor 有会话时会把体检报告当聊天发出去。| 做什么 | 路径 |
|---|---|
| 命令表 | apps/web/components/chat/composer/slash/slash-commands.ts |
| 菜单 / 派发 | apps/web/components/chat/composer/slash/use-slash-menu.ts |
| 点选 | apps/web/components/chat/composer/index.tsx(selectSlashCommand) |
| 键盘 | apps/web/components/chat/composer/input/use-composer-keydown.ts |
| 回车提交 | apps/web/components/chat/composer/submit/use-chat-submit.ts |
| WS 手动压缩 | apps/server/openprogram_server/_webui/ws_actions/chat.py → handle_compact |
| 压缩管道 | openprogram/context/engine.py、summarize.py |
| 自动压 | openprogram/agent/dispatcher/loop_runner.py |
| 爆窗抢救 | openprogram/context/reactive.py |
| 前端收事件 | apps/web/lib/runtime-bridge/chat-handlers.ts |
| 圆环 / 面板 | context-badge.tsx、context-breakdown-panel.tsx |
| 占用尺子 | occupancy-status.html |