dsh-second-opinion:给编码工作加一道可插拔的第二意见

前言

在 DeepSeek Harness(DSH)里让 Agent 改代码,常见问题往往不是写不出来,而是动手太快:需求只读对一半、顺手重构、多加了用不上的依赖、边界只覆盖 happy path。写的时候觉得都对,事后很难自己挑出来。

社区里已有把「先评审再动手」写进上下文的思路(例如同作者的 dsh-code-review-gate),但评审方往往是固定的一种。下面介绍 dsh-second-opinion:同一套「先分析、再动手、最后交叉检查」纪律,评审方由你自己接——子代理、OpenAI 兼容 HTTP、本地命令,或只要纪律不要第二意见。

这是什么

dsh-second-opinion 是维护者 alxy1018-ctrl 发布的 DSH 工作流类插件(社区目录分类:工作流)。它通过向根会话注入纪律与调用约定,约束 Agent:动手前先写清问题与验收标准,把分析交给第二个「脑子」过目,代码写完和验证做完后再各复审一次;多模块任务时可两边分头写、互相查。

插件进程内不发起任何外部调用,也不绑定厂商默认端点;真正评审由 Agent 用宿主已有能力完成。注入给 Agent 的纪律正文为中文,评审方配置与契约为语言中立。当前 package 版本为 0.1.0,许可证 MIT,要求 Node.js >= 20。

核心功能

三件事

  1. 先分析,不动手:明确真正要解决的问题、验收标准、改动面、必须沿用的既有约定、不确定项。
  2. 第二意见:把「要求原文 + 分析」交给配置的评审方,专门挑毛病;结论留在内部,用户看到的是结果与理由,而不是完整内部讨论记录。
  3. 交叉检查:代码产出后复审 diff 关键部分,验证跑完后再复审;并行多模块时约定文件所有权,避免两边改同一处。

一次流程示例

你:把 X 模块改成支持批量导入

agent:先给分析(问题 / 验收标准 / 改动面 / 既有约定 / 不确定项)
       → 送 requirement 评审 → 合并意见 → 动手
       → 送 code 评审(diff 的关键 hunk)→ 修真实缺陷
       → 跑验证 → 送 test 评审 → 报告结果

评审方(四种 kind)

kind 说明
subagent(默认) 复用宿主已有子代理路由,需自行配置 provider / model 并在设置里授权
http 任意 OpenAI 兼容端点,apiKeyEnv 为环境变量名而非密钥本身
command 自定义命令,契约 JSON 从 stdin 进、stdout 出
none 只保留分析与交叉检查纪律,不送评审

自定义形态可对照仓库内 docs/reviewer-contract.md,参考 adapters/http.mjs、adapters/exec.mjs 实现。策略段与技能正文在 lib/index.js,按需加载。

会话命令

模式切换为每会话进程内状态,不写会话日志,重启客户端后回到 profile 默认:

/second-opinion status     看当前模式与评审方
/second-opinion check      自检评审方配置与调用方式,指出缺项
/second-opinion code       仅对代码产出类要求生效(配置默认)
/second-opinion always     一律先分析再动手
/second-opinion off        本会话关闭

defaultMode 还可被环境变量 SECOND_OPINION_MODE 覆盖(优先级高于配置),但该变量为进程级,在长驻 DSH 中会影响之后所有会话;日常建议用 /second-opinion 切换,而非环境变量。

安装与配置

安装

在已安装 DSH 的机器上,向 desktop profile 添加插件(命令来自官方 README):

dsh plugin --profile desktop add github:alxy1018-ctrl/dsh-second-opinion

从 GitHub 安装需要本机已安装 git,且 DSH 须在安装 git 之后启动。若装 git 后未重启 DSH,可能出现 'git' 不是内部或外部命令;重启客户端即可,不必纠结误导性的 allowBuilds 提示。

安装前建议阅读仓库源码与 MIT 许可证;插件随当前 DSH 进程权限运行,评审方若走 HTTP 或子代理,密钥与路由也由你在环境中自行管理。

profile 配置

在 profile patch 中配置,reviewer 为需要关心的项,其余有默认值:

- id: second-opinion
  name: 'dsh-second-opinion'
  config:
    defaultMode: code          # code | always | off
    reviewer:
      kind: subagent           # subagent | http | command | none
      provider: <你的路由>
      model: <你的模型>
      label: 我的评审方          # 可选,只影响显示

subagent 示例:

    reviewer:
      kind: subagent
      provider: 你的-provider-id
      model: 你的-model-id

http 示例:

    reviewer:
      kind: http
      baseURL: https://api.example.com/v1
      model: your-model
      apiKeyEnv: YOUR_API_KEY
      timeoutSeconds: 180

command 示例:

    reviewer:
      kind: command
      command: node D:/tools/my-reviewer.mjs --json

修改 lib/index.js 中的策略段或技能正文、或 profile 配置后,需重启 DSH 客户端再用新会话确认;插件本体不重载,改文件后旧会话仍可能拿到旧文本。

典型用法

  1. 按上一节安装并写好 reviewer,重启 DSH。
  2. 新开用户根会话(子代理不会收到策略段注入),执行 /second-opinion check 确认评审方与缺项提示。
  3. 用 /second-opinion code 或 always 设定本会话模式,再提出编码类任务;观察 Agent 是否先输出分析再动手,并在阶段点尝试 requirement / code / test 评审。
  4. 若暂时不要第二意见但保留纪律,可 /second-opinion off,或将 reviewer.kind 设为 none。

仓库内可在不装进 DSH 的情况下做本地自检(无网络、零外部依赖):

node test/run.mjs

或 npm test。这验证插件注册与适配器逻辑,不能替代「装进 profile、重启、真跑一次」的端到端确认——README 写明作者尚未在真实 DSH 实例完成端到端走通,首次安装应格外留意 /second-opinion check 输出。

适用场景与注意

适合谁:希望在 DSH 编码工作流里固定「先想清楚再写、写完再查」,且已有或愿意接一条自己的评审通道(现有模型路由、自建 API、脚本)的开发者。与 dsh-code-review-gate 相比,本插件保留相同纪律骨架,把评审方从写死改为契约 + 自接,并按阶段降级(某阶段拿不到评审不拖死全流程,纪律仍生效)。

边界(使用前心里有数):

  • 评审方意见仅供参考,可能误读或夹带风格偏好,应能驳回并记录理由。
  • 评审超时、报错、未配置或未授权时,Agent 按自己的分析继续,并用一句话说明原因;不会为拿评审反复重发同一段载荷。
  • 策略段只注入根会话,子代理收不到(避免子代理无法再派子代理却白跑评审、每轮多背上下文)。
  • 插件零 npm 外部依赖,仅用 node: 内置模块;密钥只通过环境变量读取,配置里只写变量名。

生态说明:DSH 奉行「一切皆插件」;SkillHub 插件目录 为社区站点,与 DeepSeek / 幻方无官方从属关系。目录页当前星标为 0,以页面与仓库为准。

结尾

dsh-second-opinion 把「先分析、再动手、最后交叉检查」做成可配置的 DSH 工作流插件,评审方由契约对接、不绑厂商。若要查看简介与分类,可打开 SkillHub 目录页;安装命令、配置字段、命令列表与已知限制以 GitHub 仓库 README 为准。

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

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

Xiaoye