dsh-advisor:为 DSH 会话挂载独立审查副模型

前言

在 DSH(DeepSeek Harness)里跑智能体时,主模型往往一边推理一边执行工具调用。对话越长,越容易出现遗漏边界条件、忽略安全约束、或在多步操作里偏离目标的情况。常见做法是事后人工回看 transcript,或在 system prompt 里堆叠审查规则——前者滞后,后者会挤占主模型的上下文窗口,且难以按轮次给出结构化反馈。

dsh-advisor 走另一条路:为每个会话挂一个独立的审查模型,被动观察主对话 transcript,在每轮主模型 stepped turn 结束后发起一次独立推理,把按严重级别分级的建议注入会话。审查内容不会回灌给审查模型自身,也不会替主模型做批准或拒绝。

这是什么

dsh-advisor 是 omdsh-dev 维护的 DSH 插件,将 omp 生态里的 advisor 子系统移植为独立插件包。它在 npm 上以 dsh-advisor 发布,当前版本 v0.2.4,MIT 许可证,GitHub 仓库约 13 stars。

插件定位是「纯建议(Advisory only)」:审查模型只输出自描述的 advisory 内容,不会对主智能体的动作做批准或拒绝,也不会以主智能体身份下发命令。误行为的审查输出受 emission guard、immuneTurns 冷却和 failure policy 约束,避免阻塞或污染主循环。

核心功能

每会话独立审查模型

每个会话各自拥有一个审查模型实例。它观察主 transcript,对主模型的每个 stepped turn 发起审查调用;审查消息会从后续 delta 中排除,审查模型不会读到自己的历史建议。

按严重级别分级的建议

审查输出按严重级别标注,README 中列出的级别包括 nit、concern、blocker,并以 inject/steer 语义写回会话,供主模型或开发者参考。

双前端支持

同一插件包同时适配 DSH web 前端和 dsh-tui 终端前端:

  • web:Settings → 插件配置 → Advisor card
  • dsh-tui/advisor 命令族,以及 /settings 里的 Advisor 配置段(dsh-tui ≥ v0.8.0)

多层配置与运行时门控

配置项在三个层面可组合(后层覆盖前层):profile patch 层、$DSH_HOME/settings.yaml 全局设置、会话级 /advisor on|off|toggle 覆盖。启用时 providermodel 为必填;缺任一项时审查模型不会发起调用,状态会显示 disabled-with-reason。

安装与启用

下面以官方 README 中的安装命令为准。web 与 dsh-tui 使用同一插件包,仅 --profile 不同:

dsh plugin --profile web add dsh-advisor      # web profile
dsh plugin --profile dsh-tui add dsh-advisor  # dsh-tui terminal profile

需要固定版本时,在包名后加 @<version>,例如 dsh-advisor@0.2.4。registry 安装会拉取已构建的 tarball(含 lib/cordis.patch.yml),目标机器无需本地编译。

安装后,在全局 DSH 设置文件(默认 $DSH_HOME/settings.yaml)加入 advisor: 段。审查功能默认关闭,需显式启用:

advisor:
  enabled: true                # 主开关,默认 false
  provider: deepseek-official  # 启用时必填
  model: deepseek-v4-flash     # 启用时必填
  systemPrompt: ""             # 可选,空字符串使用内置审查 prompt
  immuneTurns: 3               # 投递建议后的冷却轮数,默认 3
  maxDeltaMessages: 60         # delta 窗口上限,0 表示不限制,默认 60

也可通过 web Settings 的 Advisor card 或 dsh-tui /settings 编辑上述字段;web card 会在必填项为空时阻止保存,TUI 则允许保存但运行时门控会拒绝启动模型调用。

验证安装是否写入 profile patch:

dsh --profile web --dump-config   # 输出中应出现 "# == dsh-advisor" 层

典型用法

会话内控制

安装并配置后,在支持命令注册的会话里使用 /advisor

/advisor            # 切换本会话审查开关
/advisor on         # 本会话启用
/advisor off        # 本会话禁用
/advisor status     # 查看状态、模型、运行时信息、待处理数、最近活动

/advisor on|off|toggle 仅影响当前会话,不修改持久化配置。若全局配置缺少 provider/model/advisor on 不会发起模型调用,/advisor status 会显示门控原因。配额耗尽(quota_exhausted)或模型永久性错误后,可用 /advisor on 手动恢复。

在 dsh-tui profile 下,/advisor config 以只读方式回显组合后的配置,并提示真实写入路径(TUI /settings、profile patch、settings.yaml)。

配置优先级示例

  1. settings.yaml 里设置 enabled: trueprovider/model,作为全局默认。
  2. 某次调试会话执行 /advisor off,仅该会话关闭审查,不影响其他会话。
  3. 调试结束后 /advisor on 恢复,或开新会话沿用全局配置。

适用场景与注意

适合谁

  • 需要在长链路 agent 任务里做轮次级代码/方案审查,又不想把审查逻辑全塞进主 system prompt 的 DSH 用户。
  • 希望用第二个模型(可与主模型不同 provider/model)做旁路观察,并按 nit/concern/blocker 分级反馈的场景。
  • 同时使用 DSH web 与 dsh-tui,需要在两个前端用同一套 advisor 配置的团队。

使用前注意

  • 插件以当前 dsh 进程的权限运行,安装前应阅读 源码 与 MIT 许可证,确认审查模型所用 provider 的凭据与配额策略。
  • 审查模型每次 stepped turn 都会额外发起一次 LLM 调用,会增加延迟与 token 成本;immuneTurnsmaxDeltaMessages 可用于控制频率与上下文窗口。
  • 依赖 DSH 0.1.1-rc.2 及对应 peer 包;Node 要求 ^22.19 || >=24。web Advisor card 需要当前 dsh web build 声明 settings.plugin.item card slot 并加载声明 dsh.client 的包。
  • SkillHub(skillhub.cn)是社区插件目录,与 DeepSeek / 幻方无官方从属关系;插件信息以 GitHub README 与 npm 发布页为准。

结尾

dsh-advisor 把「每轮旁路审查」做成可插拔的 DSH 插件:独立模型、分级建议、会话级开关,且明确 bounded 为 advisory-only。若你已在用 DSH 跑 agent,值得把它当作第二层模型审查管线来评估。

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

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

小夜