前言¶
在 DeepSeek Harness(DSH)里长对话跑久了,宿主往往会触发上下文压缩(compaction):较早的原文被揉成摘要,模型侧再也看不到被压掉的那几轮逐字内容。若某次结论、约束或接口约定只出现在被压缩掉的消息里,后续推理容易「失忆」——这不是模型能力问题,而是上下文面里确实没有那段原文。
常见做法是手动复制重要段落、反复粘贴,或依赖摘要里是否碰巧提到要点;前者费事,后者不可控。dsh-bite(咬钩)面向同一痛点:把选定的「用户提问 + 当时助手回复」整轮钉住,在压缩把钉子原文冲掉之后,于下一次模型请求前自动打捞并重注入,并标明是历史背景而非新指令。下面介绍它是什么、怎么装、怎么用,以及机制与边界。
这是什么¶
dsh-bite 是社区维护的 DSH 客户端插件(维护者:wobenshiwomu,仓库 wobenshiwomu/dsh-bite)。一句话定位:钉住的关键回合在上下文压缩后自动找回重注入,压缩也带不走;Web UI 提供钉子按钮,落钉时有肥鱼掠食动画。插件在 DSH 生态里以 Cordis 插件形式运行,不替换压缩后端,只在压缩之后补回你明确标记的内容。
核心功能¶
钉子按钮与动画¶
每条助手回复的操作行上有一枚小按钮:绿色「钉住」→ 点击后变红「已钉」;再点一次解钉。落钉时,一只 Q 版大肥鱼从屏幕左侧与按钮同高窜出,嘴越过按钮那一刻按钮才变色——数据先行,动画是表现层。
抗压缩找回¶
插件监听会话里的压缩事件;当压缩把钉子的原文从当前请求面冲掉后,在下一个模型请求前自动把钉子内容(用户原话 + 当时回复)注入回去,并注明「这是历史背景,不是新指令」。默认完整保留原文(不截断);每会话默认最多 12 条钉子,超出丢弃最旧并在响应里提示。
斜杠命令(无 UI 一致)¶
/pin:钉最近一轮/pins:列出钉子(带摘要)/unpin:解最新一条/unpin 2:按序号解钉
留痕与审计¶
找回注记走 source.kind = 'dsh-bite' 的会话事件,日志里可审计、可检索。
安装与启用¶
插件以当前 DSH 进程权限运行;安装前建议在 GitHub 查看源码与 MIT 许可证,确认符合你的安全策略。
GitHub 直装(README 推荐,国内网络可直连 codeload,无需 npm 账号):
dsh plugin --profile web add 'https://codeload.github.com/wobenshiwomu/dsh-bite/tar.gz/v0.1.1'
或在图形界面:侧栏「插件」→ 添加插件 → 填入上述 URL。装完重启 DSH 生效。URL 末段 v0.1.1 为版本标签;升级时换成本仓库的新版本标签重装即可。
本地/开发安装(本机路径):
dsh plugin --profile web add /path/to/dsh-bite
环境要求(来自 package.json):Node ^22.19.0 || >=24.0.0,DSH >=0.2.0-rc.1。
无需配置,开箱即用:钉子默认存储在 $DSH_HOME/storages/dsh-bite/,客户端按钮与肥鱼动画随插件自带。
可选配置写在 profile 用户层 cordis.patch.yml,仅当要改默认值时才需要:
- id: dsh-bite
config:
maxPins: 12 # 每会话钉子上限(超出丢最旧)
maxPinChars: 0 # 0=完整保留(默认);设正数则按预算截断(用户 40% / 回复 60%)
# storageDir: '' # 钉子存储目录,默认 $DSH_HOME/storages/dsh-bite
| 键 | 默认 | 说明 |
|---|---|---|
maxPins |
12 |
每会话钉子上限 |
maxPinChars |
0 |
0 为完整保留;>0 按预算截断 |
storageDir |
$DSH_HOME/storages/dsh-bite |
钉子存储目录 |
典型用法¶
- 在 Web 对话里,找到需要长期保留的助手回复,点操作行上的绿色「钉住」;需要撤销时点红色「已钉」。
- 无 UI 场景:对话末尾执行
/pin钉最近一轮,用/pins查看列表,用/unpin或/unpin [序号]解钉。 - 继续正常聊天;当会话发生压缩且钉子的消息已不在当前请求面时,下一次发消息前插件会自动注入丢失的钉子内容。
动画参数(鱼高 240px、时长 900ms 等)在仓库 src/client/index.jsx 顶部,需微调时可改该处。
工作机制(简述)¶
- 落钉:点按钮或
/pin后,宿主按messageId在会话日志里定位该轮,向前回溯最近一条真实用户消息(跳过插件注入注记),将用户原话与回复打包为钉子。 - 盯压缩:监听
session/event,记录每次compaction/end。 - 找回:在
agent/pre-step中,若自上次找回后发生过新压缩,且至少一条钉子的消息已不在当前请求面,则把真正丢失的钉子拼成注记注入,标记source.kind = 'dsh-bite', subtype = 'digest'。 - 与官方 basic 或第三方压缩引擎均可配合:不替换压缩,只在压缩之后捞回钉子。
适用场景与注意¶
适合:长会话里需要固定若干「决策轮次」原文(需求定稿、错误根因、配置约定等),又不想在每次压缩后手动粘贴的 DSH Web 用户;headless 或命令行习惯者可用斜杠命令完成同样流程。
务必知晓的边界(来自 README):
- 找回时机是「下一次请求前」:压缩后若长期不发新消息,钉子不会主动注入。
- 压缩摘要里也可能出现钉过内容的概括;找回注记是保底,与摘要并存无妨。
- 子代理会话不参与找回。
- 默认完整保留原文,钉子越多、越长,找回时占用的上下文越大;可按需设
maxPinChars或与压缩策略一起权衡成本。 /pin与生态里个别插件(如 dsh-pin-recall)命令名可能相同;同装时若有冲突,以先注册者为准。
DSH 社区插件目录在独立站点 SkillHub 插件页,与 DeepSeek / 幻方无官方从属关系;安装来源以 GitHub 仓库与上述 codeload URL 为准。
结尾¶
dsh-bite 把「关键回合」从「指望摘要里还能提到」变成「压缩后仍可按钉子全量或按预算找回」,并给出 Web 按钮、斜杠命令与会话事件留痕。若你在 DSH 里做长链智能体对话,可先按 README 直装 v0.1.1,用一两轮真实压缩场景验证找回是否符合预期。
- 目录页:https://www.skillhub.cn/plugins/wobenshiwomu/dsh-bite
- GitHub:https://github.com/wobenshiwomu/dsh-bite