前言¶
在 DeepSeek Harness(DSH)里跑带大量工具调用的 agent 时,同一段对话历史会在每一步请求里反复送进模型。若某一步的 reasoning 特别长,这些 token 会在同一轮里被多次计费,成本很快上去。宿主自带的上下文压缩会整段收历史,和「只缩短思考块、保留有效推导」的需求并不完全一致。
下面介绍社区插件 dsh-reasoning-distill(维护者 huhu23333,分类:工作流):监视单步思考长度,超过阈值时用蒸馏模型改写成更短版本,并在后续请求里重放压缩版;同时给出每个会话的蒸馏开销与节省统计。插件默认关闭,需在「设置 → 思考压缩」里选好后端并打开总开关。
这是什么¶
dsh-reasoning-distill 是 DSH 的工作流类插件,定位可以概括为:把过长的模型思考压缩成核心内容,之后每次请求重放压缩版,并报告会话级的成本与净收益。
- 目录页:https://www.skillhub.cn/plugins/huhu23333/dsh-reasoning-distill
- 源码与文档:https://github.com/huhu23333/dsh-reasoning-distill
- 当前包版本(package.json):
0.1.11,许可证 MIT
插件以当前 DSH 进程权限运行;安装前请自行查看仓库源码与许可证,确认信任来源。
核心功能¶
压缩与重放¶
- 监视每次模型输出中的思考内容(reasoning),并估算 token 数。
- 某一步思考超过该模型的触发阈值(默认 4000 token)时,把这一步的思考(可选附上工具调用与结果)交给蒸馏模型(默认
deepseek-official/deepseek-flash,思考强度 off)改写成更短版本。压缩的是措辞与冗余,不是删掉有效推导步骤。 - 压缩在下一步请求之前完成;等待时间受该模型超时限制,到点则放弃本次压缩(原文不动、不替换)。只有压缩结果至少能省下最低节省(默认 600 token)时才采用。
- 被采用的压缩版会替换「模型看到的思考」;会话日志里的思考原文不变,账本写在会话日志旁的 sidecar 文件里。
「思考压缩」标签页会显示触发次数、蒸馏开销、采用次数、单次请求减量、历史累计节省、净收益,以及最近一步未触发原因。
三种改写后端¶
插件只负责算出压缩版;写回会话需要选一个助手消息改写后端(未选则总开关会被强制关闭):
| 后端 | 适用情况 |
|---|---|
derive |
无需安装与补丁,内存里替换;打包版 DSH(如 dsh-desktop)优先用它。对话页仍显示日志原文,模型实际收到的是压缩版。 |
in-place |
需对 DSH 源码打补丁(scripts/dsh-inplace-patch.mjs),不建分支、不改日志结构;需从源码构建的 DSH,npm 直装或第三方打包版无法用。 |
message-edit |
实验性,不推荐:依赖第三方插件,每次压缩会新建分支会话,场景受限。 |
会话范围与默认开关¶
主对话、可续聊子代理、一次性子代理有独立开关;默认仅主对话开启。可续聊子代理、一次性子代理、附带工具调用结果、压缩最终回答轮等默认关闭。
另有按上下文占用限制触发(默认开启、60%):占用过高时即使单步达阈值也不再压缩,避免刚压缩就被宿主整段上下文压缩收走。
安装与启用¶
前置条件:Node >= 20;DSH 能正常启动(依赖 sessionPersistence)。装完后需重启一次 dsh web。
从 npm 安装:
dsh plugin --profile web add dsh-reasoning-distill
从 GitHub 安装(pnpm 可能要求把包名加入 profile 的 pnpm-workspace.yaml 的 allowBuilds 后重试):
dsh plugin --profile web add github:huhu23333/dsh-reasoning-distill
选用 derive 时无需再装后端。若用 in-place,在 DSH 源码目录执行:
node scripts/dsh-inplace-patch.mjs --apply --build
然后重启 dsh web。升级 DSH 前建议先回退补丁,升级后用 --check 复查。
启用步骤:
- 打开「设置 → 思考压缩」。
- 选中一个改写后端(
derive选中即用)。 - 打开「启用思考压缩」,再按需调整阈值、最低节省、蒸馏模型等项。
README 注明可能适配的 DSH 版本范围为 0.2.0-rc.1~0.2.1-rc.2;完整功能与 in-place 体验建议用从官方仓库源码构建的 DSH。
典型用法¶
适合形态是 README 里说的 「单轮次、多步工具调用的超长单轮对话」:一次说清任务,让 agent 在同一轮里连续调用很多步工具。同一段历史在每一步都要重发,压缩后的思考会被反复重放,省下的输入 token 才有机会超过蒸馏开销。
不适合作为默认开启的场景是 「多轮问答、根据反馈反复精修」:每轮步骤少,节省有限;且 DeepSeek API 在多轮对话中通常不会把之前轮次的 reasoning_content 拼进上下文(除非请求带 tools),压缩版往往不会被模型读到,改写还可能破坏上下文缓存前缀匹配。这类阶段建议在设置里关掉总开关。
适用场景与注意¶
适合谁
- 习惯「许愿式」单轮长链工具调用的 DSH 用户,且愿意用蒸馏模型换输入 token。
- 使用打包版 DSH、不想改宿主源码的用户:用
derive即可,无需补丁。
需要注意
- 插件默认关闭;未选后端时无法开启。
in-place修改 DSH 本体,跨版本升级可能导致补丁失效;打包安装请用derive。derive下冷启动若 sidecar 读失败,会暂时带原文并打日志警告,恢复后自动再应用。- 少数回退路径可能导致缓存按未命中计费,报告中的净收益可能被高估(README 对
cacheBreakTokens有说明)。
结尾¶
dsh-reasoning-distill 针对单轮多步工具链里重复发送超长 reasoning 的痛点,用可配置的阈值与蒸馏改写把思考压短并在后续请求重放,用 sidecar 账本和面板报告把开销与节省摊开。是否划算取决于对话形态;多轮精修阶段建议关闭,长链单轮任务可结合 derive 或 in-place 试用。