description: "面向交互式组合的按需 /compact 命令:它做什么、你会看到什么,以及如何挂载。"
English | 中文
dsh-command-compact 为聊天 UI 添加 /compact 命令:输入它,对话就会按需压缩——即使尚未触发自动压力,较早历史也会被替换为一条摘要。该命令适用于任何压缩后端,且不消耗模型轮次;完成后你会看到压缩了多少历史项以及估算节省的 token 数。当 agent 正在轮次中或压缩已在运行时,它会告诉你压缩暂不可用。运行期间你发送的提示词会保持排队,并在压缩结束后才开始。
当对话已经很长、想立即压缩时,在聊天 UI 中输入 /compact。随附 dsh 基础配置把该命令挂载在默认后端旁,因此它通常已经可用。
| 输入 | 结果 |
|---|---|
/compact |
即使未达到自动压力,也压缩一段有效、平衡的较早范围,然后报告被替换的历史项数量与估算 token 数。 |
/compact,但没有可压缩历史 |
No compactable history yet.——不会有任何改变。 |
/compact <anything> |
Usage: /compact (no arguments)——该命令不接受参数。 |
命令会把每个预期失败转换为可直接展示的稳定消息;左列的情形产生右列的消息。
| 情形 | 你看到的消息 |
|---|---|
| 压缩已在运行,或 agent 正在轮次中 | Compaction is unavailable because this process has an active compaction, or the agent is not idle. |
| 压缩过程中历史发生了变化 | The history selected for compaction changed before it could be replaced. The conversation is unchanged; the attempt is recorded in the session log. |
| 无法产生有用的摘要 | Compaction could not produce a useful summary. The conversation is unchanged; the attempt is recorded in the session log. |
| 压缩未干净地完成 | Compaction did not finish cleanly; some session history may have changed. Inspect the current session state before retrying. |
| 会话无法保存 | Compaction finished, but the session could not be saved. |
取消命令会停止等待:后端完成必需的清理,命令以 Compaction cancelled. 结算,UI 停止等待。除这些预期情形外的失败会以错误形式呈现,而不会被静默转换。
挂载命令注册表、一个压缩后端与本插件:
- id: commands
name: '@deepseek-ai/dsh-commands'
- id: compaction-basic
name: '@deepseek-ai/dsh-compaction-basic'
- id: command-compact
name: '@deepseek-ai/dsh-command-compact'
随附 dsh 基础配置把它挂载在默认后端旁,Web 客户端提供命令适配器。未组合命令适配器的自动化接口只保留自动压缩。
命令成功时,所选较早范围会被替换为一条摘要,近期历史不受影响;命令会报告压缩的项目数与估算 token 数。压缩运行期间你提交的提示词会被接受,并只在压缩结束后才开始——不会被丢失或重排。命令生命周期记录在会话日志中,但绝不进入模型历史。
当包级约定不够用时阅读以下页面;它们从命令逐步进入 seam、随附后端与设计决策。
/compact 控制斜杠输入与直接结果绝不会进入模型请求。已获接纳的压缩会另外在独立的 compaction/* { turn: null } 标记对内,用后端的 user 角色检查点替换一段较早范围。
命令生命周期不会增加模型 token。成功压缩会用一份带框架的摘要替换所选范围,从而减少后续请求;摘要生成本身需要一次辅助请求。
命令发现与簿记不会影响缓存。已获接纳的 surface 替换会从第一个被遮蔽的历史 token 起使复用失效。
这些限制说明该命令何时不合适;它们是当前包约束。
/compact 会报告压缩暂不可用;命令本身不会排队。compactRegion() 处理。ctx.commands 的接口无法调用该命令,只能依赖自动压力压缩。