斜杠与压缩 · 当前设计

斜杠命令能发出去,压缩有系统行

「上下文压缩」的入口是 /compact。Composer 把可选参数命令立刻执行;压缩开始 / 成功 / 失败都落一条系统行。占用尺子、无可压、圆环生命周期写在占用设计里。

后端压缩管道可用 可选参数点选 / 回车立刻执行 started / finished / failed 系统行 圆环建议态与面板按钮见占用设计

一句话

/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。同样走压缩事件。

圆环按占用比例着色,面板可以一键压缩,见 占用与压缩。

压的时候具体干什么

读取
从 SessionDB 拿渲染后的历史:已有摘要 + 还在枝上的轮次。再压不会回头重读已被盖住的原文。
门槛
少于 4 条就停,手动路径回一句系统说明。rendered 已是摘要 + 尾巴、没有可切点时发无可压,不烧摘要 LLM。
摘要
另打一次 LLM。最近尾巴默认按窗口的 10% 留,夹在 8k–40k token,至少 5 条有字的消息。可被 /compact 2000 覆盖。
落下
写入一个 summary_* 节点(role=llm,name=context/summary),covers_ids 标出被替换的那一段。会话 meta 记下这份摘要,方便下次接着压。旧轮不删,HEAD 不动。
图
DAG 上是一颗胶囊。旧摘要标成 superseded,不再参与渲染。聊天记录里被盖住的原文还在库里。

圆环和 /context 面板

右下角圆环显示「此刻占用 / 窗口」。点开是 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 有会话时会把报告当用户消息发出去。

已经落地的斜杠修复

次要、还没做

关键文件

做什么路径
命令表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