dsh-pain-point-check:两次实验不收敛就强制注入三问的 dsh 守卫插件

前言

写过智能体循环的人都会遇到同一种情况:模型进入「解题状态」后失去元认知,反复用同一方向攻击同一个问题。设计出偏向当前假设的实验(确认偏误)、不肯换方向(沉没成本)、急着给故事收尾(叙事闭环)。官方的 repeat-tool-reminder 是建议性的,只是提醒模型它重复了完全相同的调用,提醒本身没有强制力。

dsh-pain-point-check 走的是另一条路:否决式(veto)守卫。同一问题两次实验未收敛后,插件注入三问,在模型于回复文本中回答三问之前,拒绝所有非调查类工具调用,并阻止同方向重试。下面介绍这个插件的定位、原理和启用步骤。

这是什么

dsh-pain-point-check 是一个面向 DeepSeek Harness(dsh)的强制式 pain-point-check 守卫插件,由 ICCuse 维护,许可证为 MIT,当前版本 0.1.0,尚未发布到 npm,需要直接从 GitHub 仓库安装。

它解决的是一个具体问题:让智能体在连续失败后被迫回到卡点本身。门控会强制模型在下一枪之前先回答卡点相关问题,把负面结果变成信息,而不是被直接跳过。这也符合 dsh「一切皆插件」的扩展方式——守卫逻辑不侵入主循环,以插件形式挂载。

工作原理

插件通过四个 hook 协作完成门控:

  1. tools/result:按 agent 统计当前问题的实验次数,计入失败(报错)调用与连续相同调用。
  2. agent/pre-step:真实用户插入(新问题)时重置计数器;门控待决时,在下一步追加三问检查块。
  3. tools/pre-execute:门控待决时拒绝所有非调查类调用。allowlist 内的工具仍可调用,包括 readread_imageglobgrepweb_searchask_user_questionskilltodo_write——调查和求助不被阻断。
  4. session/event:从模型回复文本中识别三问回答(卡点=… 排除=… 性价比=…,也接受英文标记),识别到即解除门控。

注入的三问是:

  • 该卡点是否仍是最关键问题?
  • 上一次负面结果实际排除了什么?
  • 哪条路径性价比最高(不一定最便宜)?

其中第二问是关键:如果模型说不出负面结果排除了什么,它就没有可证伪的假设,检查文本会要求它先写出一个假设,而不是再开一枪。

安装与启用

包尚未发布到 npm,直接从仓库安装:

npm install github:ICCuse/dsh-pain-point-check
# 或:pnpm add github:ICCuse/dsh-pain-point-check

安装后在 profile 组合中挂载。以 web profile 为例,在 ~/.dsh/profiles/web/cordis.patch.yml 中添加一行:

- id: pain-point-check
  name: 'dsh-pain-point-check'
  config:
    failureThreshold: 2
    repeatThreshold: 2

重启 harness(dsh web)后,守卫对每个会话生效。

配置

可用配置项如下:

字段 默认值 含义
failureThreshold 2 累计多少次失败调用后触发门控
repeatThreshold 2 连续多少次相同调用后触发门控
allowlist 调查类工具集合 门控待决期间仍可调用的工具

两个阈值必须为 >= 1 的整数,配置错误会在插件加载时直接抛出,不会带病运行。

插件声明了两个 peerDependencies:@deepseek-ai/cordis ^4.0.1@deepseek-ai/schemastery ^3.18.1

开发与测试

lib/ 目录已预构建(由 DeepSeek Harness monorepo 工具链构建),可以直接安装使用。如果要跑测试:

npm install
npm test

测试套件对脚本化 mock adapter 驱动真实的 agent loop,无网络依赖,覆盖触发、拒绝、allowlist、解除、部分回答、重置与配置校验。

适用场景与注意

适合的场景:调试、排查、实验类长任务——模型容易在同一个方向上反复开火的地方。如果你的工作流里模型经常连续提交相似的失败实验,这个门控能把它拉回卡点本身。如果只是偶发的重复调用,官方建议性的 repeat-tool-reminder 可能已经够用,两者的取舍在于你是否需要强制力。

几点注意:

  1. 插件以当前 dsh 进程的权限运行,安装前应检查源码并确认许可证(MIT)符合你的使用要求。
  2. 门控待决期间,allowlist 中的调查类工具不受影响,模型仍可以读文件、搜索、向你提问。
  3. 阈值默认为 2,意味着两次失败或两次相同调用就会触发;如果任务本身试错频繁,可以按需调高。
  4. 包未发布到 npm,版本演进以 GitHub 仓库为准。

这个插件的价值在于把「负面结果」从被跳过的噪声变成被消化的信息。目录页见 https://www.skillhub.cn/plugins/ICCuse/dsh-pain-point-check ,源码见 https://github.com/ICCuse/dsh-pain-point-check 。

羽毛球分组比赛记分
小程序二维码

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

Xiaoye