dsh-clarify-first:会话首轮用一次提问补齐关键决策

前言

在 DSH 里开一个新会话,常见的第一句是「帮我做一个网页博客」这类话:任务本身能执行,但站点形态、生成方式、部署位置都没定。模型往往会先猜一版再改,或者来回多轮确认,token 和注意力都耗在返工上。另一种做法是给智能体注册专用澄清工具、或把长段 system prompt 常驻每轮请求——功能上可行,但工具表和系统词会按轮次重复计费。

下面介绍社区插件 dsh-clarify-first(显示名「澄清优先」),维护者为 skadery。它挂在 DSH 的 agent/pre-step 钩子上:仅当本会话第一条真人消息看起来「能做但缺关键决策」时,在模型动手前注入一条约 200 token 的一次性提示,让模型用 DSH 原生的 ask_user_question 一次问清 2~4 个决策点;选项来自本地 JSON 模板库,不注册新工具、不常驻 system prompt、也不额外调用 LLM。

这是什么

dsh-clarify-first 是 DeepSeek Harness 生态下的扩展类插件(package.json 中 dsh.category 为 extension)。当前 npm 包版本为 0.2.0,许可证 MIT,要求 Node >=22.19.0、DSH >=0.1.7-rc.2(详见仓库 engines 与 peerDependencies)。

一句话定位:在写代码之前先问清少数关键决策,而不是在三十条消息之后才发现方向错了——README 中的英文 slogan 即 Ask three questions before writing code, not thirty messages after.

核心功能

一次性注入与原生提问

触发后,插件用确定性匹配(README 称 0 延迟)选中模板包,把 notice 注入当前轮上下文。模型应优先调用内置 ask_user_question,每题 2~4 个选项(含推荐项,用户也可自由作答)。用户点选后,模型按答案直接开工,README 要求不再复述需求。

典型流程(摘自 README):

用户: 帮我做一个网页博客
     ↓ 插件(确定性匹配,0 延迟)
模型: [ask_user_question] 站点形态?生成方式?部署方式?
用户: 点选 → 纯静态 / Hexo / GitHub Pages
模型: 直接按这三条开工(不再复述需求)

三档提问深度

档位 第一轮问几个 补问 怎么切
精简 2 不补问,没问到的按推荐项定 首条消息里写「少问点」「只问关键」
标准(默认) 3 不补问 不写,或写 depth: 2
深入 4 拿到答案后,再对仍悬着的关键点补一轮(最多 2 问) 写「问细一点」「多问几个」

优先级:首条消息里的措辞 > 档位文件 > 插件配置。档位文件可随时改,约 60 秒内生效,无需重启 DSH:

// <DSH_HOME>/clarify-first/gear.json    (Windows 默认示例路径见 README: F:\DSHHome\clarify-first\gear.json)
{ "depth": 3 }   // 1=精简 2=标准 3=深入

深入档并非固定多轮访谈:第一轮给 4 个最影响做法的点;第二轮仅在出现新歧义时补问,最多 2 问。

本地模板库

逻辑集中在 lib/index.js(README 称约 360 行)。packs/*.json 提供 15 个模板包、89 个决策点、246 个选项(每点带 lv=1|2|3 影响度)。包按场景划分,例如 web 覆盖网页/博客/官网/落地页,generic 为兜底。优先级数字越大越优先;同命中数按优先级取舍。packs/*.json 每 60 秒热重载,改模板无需重启 DSH;改 lib/index.js 需重启 DSH。

成本与实现取舍(README 对照表)

插件刻意不注册 clarify_options 类工具、不用常驻 system 段、不调辅助小模型。README 给出的量级:约 200 token / 会话(深入档约 320),一次性;对比「一轮返工通常 2k~10k token」,作者认为返工率略降即可回本。提示是「注入消息」而非系统指令,模型可能忽略——忽略则回到原行为,属于用可靠性换零常驻成本的取舍。

安装与启用

DeepSeek Harness 采用「一切皆插件」的扩展方式;社区目录页 skillhub.cn 上的 dsh-clarify-first 与 GitHub 仓库相互独立,并非 DeepSeek / 幻方官方应用商店。安装前请自行查看源码与 MIT 许可证;插件以当前 DSH 进程权限运行。

市场安装(README 写明「已上架后」):

dsh plugin --profile desktop add dsh-clarify-first

本地开发挂载示例(路径按本机修改):

dsh plugin --profile desktop add link:F:\DSHproj\project\2026-10-31-prompt-clarify-plugin
# 然后重启 DSH(插件在启动时装载)

停用或卸载:将 profile 里 config.enabled 设为 false,或执行:

dsh plugin --profile desktop remove dsh-clarify-first

配置项

在 profile 的 cordis.patch.yml 中,条目 id 为 clarify-first,名称 dsh-clarify-first:

- id: clarify-first
  name: 'dsh-clarify-first'
  config:
    enabled: true      # 总开关
    minScore: 3        # 欠定义阈值:任务词+2 产物词+2 含糊词+1 具体性-3
    depth: 'auto'      # 默认档位 1|2|3;'auto' = 标准(2)。消息措辞与档位文件优先
    maxPoints: 0       # >0 时强制收窄第一轮问数(0 = 交给档位)
    gearFile: ''       # 档位文件路径;空 = <DSH_HOME>/clarify-first/gear.json
    packsDir: ''       # 自定义模板目录(绝对路径;空=用插件内置 packs)
    quietDirs: []      # 这些目录下不触发
    debug: false       # 命中原因写日志

触发规则与典型用法

先做理解规则,再发第一条消息:

  1. 只看本会话第一条真人消息(source.kind === 'user')。历史里已有助手回复,或已有第二条真人消息,插件不介入。
  2. 文本超过 120 字不触发;「继续 / 好 / 谢谢 / 你好」等不触发。
  3. 出现具体性标记(框架名、路径、@文件、代码块、带单位数字、「用 X 做」等)会扣 3 分——足够明确的需求不应被打断。调研/选型类(如「Hexo 和 Hugo 哪个好」)例外。
  4. 用户在首条消息指挥本插件(如「优化一下澄清优先」)→ 不触发。
  5. 用户说「别问了直接做」→ 本会话永久静音。
  6. packs 缺失、JSON 损坏、未知钩子等异常 → 静默放行,不阻断对话。

典型用法:新开会话,用短句描述欠定义任务(如「帮我做一个网页博客」),等待模型弹出 ask_user_question;需要少问时在首条消息写「少问点」,需要多问写「问细一点」。需要改默认档位时编辑 <DSH_HOME>/clarify-first/gear.json 或上述 depth / gearFile。

适用场景与注意

适合:经常以模糊一句话开新会话、希望在一轮点选里定形态/栈/部署/交付物等关键分叉的 DSH 桌面 profile 用户。

注意:

  • 只作用于会话首轮,中途改需求不会再次澄清。
  • 选项来自模板库,长尾需求靠推荐项与自由回答兜底,不是完整需求访谈。
  • 依赖 agent/pre-step;DSH 大版本升级前,README 建议先跑 node tools/smoke.mjs。
  • 仓库提供 tools/smoke.mjs(46 项断言)与 tools/route.mjs(34 条路由回归),改词表或改包后应跑回归。

结尾

dsh-clarify-first 用约 200 token 的一次性注入,把「先问 2~4 个关键决策再写代码」嵌进 DSH 首轮流程,并复用原生 ask_user_question,避免工具注册与常驻 prompt 的逐轮成本。进一步了解可访问目录页 https://www.skillhub.cn/plugins/skadery/dsh-clarify-first 与源码仓库 https://github.com/skadery/dsh-clarify-first。

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

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

小夜