description: "面向组合压缩(compaction)部署场景的工具输出修剪:选择大小限制或排查超大工具结果为何被缩短。"
English | 中文
dsh-compaction-tool-result-pruner 防止超大工具输出填满上下文窗口。压缩触发条件满足后,它会把超出预算的文本替换为长度受限的头部、简短的「middle pruned」标记与长度受限的尾部;未达到压力阈值的对话保持不变。完整原始结果仍保留在会话日志中,可供精确回放与检查。修剪不发起模型调用,并可能充分缓解 token 压力,使压缩跳过摘要。字符预算只能近似 token 用量;token meter 负责判定压力是否得到缓解。
当工具输出经常主导对话窗口时,在 dsh-compaction-basic 旁挂载本包。修剪会改变模型看到的内容——更短的结果——并让压缩有更少的历史需要压缩。
按此顺序挂载 token 测量、本包与后端:
- name: '@deepseek-ai/dsh-token-meter'
- name: '@deepseek-ai/dsh-compaction-tool-result-pruner'
- name: '@deepseek-ai/dsh-compaction-basic'
有了这些配置行,超大工具结果会在压缩过程中自动被修剪。你可以通过检查后续请求是否显示修剪后的结果来确认成功;完整原始内容仍保留在会话日志中。
每个文本超过阈值的工具结果都会被替换为修剪版本:配置的头部、简短的「middle pruned」标记与配置的尾部。图片与结构化块等富内容保持原有顺序,并保留日志中的所有图片省略选择。替换保留工具调用、步骤、错误与元数据——只有文本内容发生变化。如果替换无法被记录,运行会失败,已应用的修剪仍会保留。
所有设置都可选;默认会把文本超过 8,192 个字符的结果修剪为其前 4,096 加后 1,024 个字符,并用标记连接。生成的配置目录是涵盖所有配置字段的真源。
| 字段 | 默认值 | 含义 |
|---|---|---|
thresholdChars |
8192 |
合并文本超过此 Unicode 码点数时修剪。 |
headChars |
4096 |
保留的开头 Unicode 码点数。 |
tailChars |
1024 |
保留的末尾 Unicode 码点数。 |
字符数以 Unicode 码点计,因此切片绝不会拆分 emoji 对,但多字符字素仍可能被切断。头部加标记加尾部之和必须不超过阈值,因此有效配置可以修剪每个超出预算的结果,不会增长或重复改写。未知设置会导致插件在构造时被拒绝。
修剪只在压缩触发条件满足后运行:dsh-compaction-basic 在压力或溢出确认后、选择要压缩的内容之前调用它。低于压力时不会修剪任何内容,修剪本身也不发起模型调用。
当包级约定不够用时阅读以下页面;它们从消费后端逐步进入共享 seam 与定价服务。
一旦满足压缩触发条件,后续请求看到的将是保留的头部、\n\n[... tool result middle pruned ...]\n\n 和保留的尾部,而非被移除的文本。富内容块保持原有顺序。模型不会看到原文的第二份副本。
每个已改写工具结果最多包含 thresholdChars 个文本码点。剪枝本身不会发起模型调用;重新测量的请求低于压力阈值时,compaction-basic 会跳过摘要,否则摘要器会读取已剪枝的表层。
替换较早的结果会使从第一个改变的 token 起的复用失效。当其路由、envelope 与之前的历史保持一致时,已剪枝前缀可以复用。
这些限制说明修剪何时不合适,或何时需要特别注意;它们是当前包约束。
ctx.tokenMeter 仍负责判定修剪是否缓解了请求压力。