dsh-bite(咬钩):压缩后自动找回钉住的关键回合

前言

在 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 钉子存储目录

典型用法

  1. 在 Web 对话里,找到需要长期保留的助手回复,点操作行上的绿色「钉住」;需要撤销时点红色「已钉」。
  2. 无 UI 场景:对话末尾执行 /pin 钉最近一轮,用 /pins 查看列表,用 /unpin 或 /unpin [序号] 解钉。
  3. 继续正常聊天;当会话发生压缩且钉子的消息已不在当前请求面时,下一次发消息前插件会自动注入丢失的钉子内容。

动画参数(鱼高 240px、时长 900ms 等)在仓库 src/client/index.jsx 顶部,需微调时可改该处。

工作机制(简述)

  1. 落钉:点按钮或 /pin 后,宿主按 messageId 在会话日志里定位该轮,向前回溯最近一条真实用户消息(跳过插件注入注记),将用户原话与回复打包为钉子。
  2. 盯压缩:监听 session/event,记录每次 compaction/end。
  3. 找回:在 agent/pre-step 中,若自上次找回后发生过新压缩,且至少一条钉子的消息已不在当前请求面,则把真正丢失的钉子拼成注记注入,标记 source.kind = 'dsh-bite', subtype = 'digest'。
  4. 与官方 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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜