使用 dsh-advisor 为 DeepSeek Harness 配置每轮被动审查的副模型

前言

DeepSeek Harness(dsh)是 DeepSeek AI 开源的 agent harness,目前仍处于开发者预览阶段。它的核心设计是「一切皆插件」:模型、工具、会话、沙箱、UI 都可以在不改框架源码的前提下挂载或替换。官方仓库在 deepseek-ai/deepseek-harness

社区里已经有独立站点在收录这类插件,例如 DeepSeek Harness 插件目录。需要先说清楚:该目录是社区站点,与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。安装任何第三方插件前,都应该自己核对源码和许可证。

用 dsh 跑长任务时,主模型一边执行一边自检,很容易漏掉「和用户指令矛盾」「原地打转」「方向已经偏了」这类问题。dsh-advisor 做的事情比较克制:再挂一个独立的评审模型,只看主会话记录,按严重度往会话里塞一条建议。它不批准动作,也不代替主 agent 发命令。

这是什么

dsh-advisor 是社区维护的「模型与提供方」类插件,维护者是 omdsh-dev,许可证 MIT,主要语言 TypeScript。GitHub 仓库当前版本为 0.2.1package.json,2026-08-17),Node 要求为 ^22.19 || >=24。目录页于 2026-08-09 收录该插件。

仓库 README 写明:它把 omp(oh-my-pi)里的 advisor 子系统,移植成独立的 dsh 插件组合包。每个会话有一个独立评审模型,观察主 transcript,用显式配置的 providermodel 评审每个已完成的 stepped turn,再把按严重度排序的建议(nit / concern / blocker)注入回去。advisor 自己的消息会被排除在后续 delta 之外,因此它不会递归评审自己。

插件以纯挂载方式安装:bundle 插入、Web 设置页的 Advisor 卡片、自有 gateway 通道,以及 /advisor 指令。不打 dsh 补丁,也没有 postinstall 改宿主。两个前端都可以用:

  • web profile:设置 → 插件配置 → Advisor 卡片
  • dsh-tui 终端 profile:/advisor/advisor config;TUI 的 /settings 里编辑 Advisor 分节需要 dsh-tui ≥ v0.8.0

README 也强调了能力边界:仅作建议。advisor 从不批准或否决主 agent 的动作,也绝不会像主 agent 那样发出命令。行为异常的评审者会受到 emission guard、immuneTurns 冷却和 failure policy 约束,避免卡住或污染主循环。当前 MVP 有意没有做到与 omp advisor 完全对等,下文会单独列出已公开的差距。

核心功能

根据仓库 README 与 docs/configuration.md,已经核实的能力如下。

1、每个会话一个独立评审者

评审走独立的模型调用,只观察主 transcript,并在每个 stepped 主 turn 结束后评审增量。advisor 消息不会被渲染进后续 advisor delta,因此它读不到自己刚写的建议。

2、三级严重度,每次评审最多一条 note

送达的消息带 [advisor:{severity}] 前缀,内容是自我描述的 advisory 文本,例如:

[advisor:concern] extract the helper into a module and unit-test it

三个等级的含义和送达方式不同:

  • nit:轻微的样式、清晰度或质量建议。经非唤醒的 agent.inject 送达,在下一个 pre-step 边界消费。
  • concern:继续之前值得权衡的重大风险,或明显更优的方向。经唤醒的 agent.steer 送达,并受 immuneTurns 冷却约束。
  • blocker:继续下去明显是在浪费工作,例如与显式用户指令矛盾、原地打转、根本性不可行。同样经 agent.steer 送达。

immuneTurns 默认是 3:一条 concern / blocker 真正 steer 过之后,接下来若干个已完成的主 turn 必须走完,另一条打断性 note 才能再次 steer;窗口内的打断性 note 会降级为 inject。

3、显式模型门禁

enabled 默认是 false。打开之后,providermodel 都是必填。只写 enabled: true、却缺其中一个时,插件不会发起任何模型调用,状态会报告带原因的禁用(disabled-with-reason)。未知配置键会被拒绝。

4、零工具、失败不卡主循环

评审者只是一次独立的模型调用,没有 advisor tools,除了 advisory 消息之外不能对会话做别的事。失败或额度耗尽时,它只丢弃自己有界的 backlog,不会把主循环停住。额度耗尽(quota_exhausted)没有自动恢复定时器,需要 /advisor on 手动恢复;永久性模型错误(例如凭据无效)会把该会话的 advisor 标为 halted,再用 /advisor on 重建。

5、会话级开关不改持久化配置

/advisor on|off|toggle 只翻转当前会话的 override,不会改磁盘上的配置。持久化配置走 Settings 卡片、TUI /settings$DSH_HOME/settings.yaml

安装与启用

目录详情页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:

dsh plugin add github:omdsh-dev/dsh-advisor

如需可复现安装,目录页建议固定 commit 哈希:

dsh plugin add github:omdsh-dev/dsh-advisor#2ee9844dd1920d024dbcc85c2fa4dc96a45ce698

上面的哈希对应仓库 main 在 2026-08-17 的提交(发布说明为 v0.2.1)。使用前请再到 GitHub 核对是否仍是你想锁定的版本。

仓库 README 另外给出了按 profile 安装的写法,适合已经分好 web / 终端前端的环境:

dsh plugin --profile web add dsh-advisor      # web profile(设置 → Advisor 卡片)
dsh plugin --profile dsh-tui add dsh-advisor  # dsh-tui 终端 profile

registry 安装可以钉版本,例如 dsh-advisor@0.2.1。安装文档说明:registry 拉取的是已发布 tarball,自带 lib/cordis.patch.yml,目标机不必再构建;运行时依赖声明为 peerDependencies,由当前 dsh 安装解析。

安装完成后,可用下面的命令确认插件层已经出现:

dsh --profile web --dump-config

输出里应能看到带 advisor 配置行的 # == dsh-advisor 层。web profile 安装后需要重启 dsh 会话;启动后,Web 设置页的「插件配置」会渲染 Advisor 卡片。

卸载对应为:

dsh plugin --profile web remove dsh-advisor
dsh --profile web --dump-config

dsh-tui profile 把上面的 --profile web 换成 --profile dsh-tui 即可。卸载后同样需要重启会话。

配置与典型用法

advisor 默认关闭。要真正跑起来,需要在全局设置文档(默认 $DSH_HOME/settings.yaml,跨 profile 共享)里写 advisor: 分节,并显式打开开关。README 中的示例如下:

advisor:
  enabled: true                # 总开关(默认 false)——需显式打开后生效
  provider: deepseek-official  # enabled: true 时必填
  model: deepseek-v4-flash     # enabled: true 时必填
  systemPrompt: ""             # 可选;空字符串表示使用内置评审 prompt
  immuneTurns: 3               # 整数 ≥ 0,默认 3
  maxDeltaMessages: 60         # 整数 ≥ 0,默认 60;0 表示不截断

providermodel 必须改成你当前 dsh 环境里已经配置好的供应商和模型。Web 卡片的下拉框只会列出系统内已配置的 provider 及其模型;上面 YAML 里的 deepseek-official / deepseek-v4-flash 只是文档示例,不是所有环境都自带。

同一组键有三条编辑路径,后一层覆盖前一层:

  1. 插件行 config:profile 补丁层(例如 $DSH_HOME/profiles/web/cordis.patch.yml)里 id: advisor 那一行,这是合成的 base。
  2. Web「插件配置」页的 Advisor 卡片,或 dsh-tui ≥ v0.8.0 的 /settings → Advisor 分节。这两处都写入同一个 user layer($DSH_HOME/settings.yaml),保存后对新会话立即生效,不必重启。TUI 里不能编辑 systemPrompt(单行控件会截断多行文本),需要改 prompt 时走 Web 卡片或直接改 yaml。
  3. /advisor 指令:只改当前会话,不写回磁盘。

Web 卡片在 enabled: true 且必填字段为空时会阻止保存。TUI /settings 没有这项跨字段校验,有可能写出「已启用但 provider/model 为空」的配置;运行时门禁仍会把它解析成 disabled-with-reason,不会发起模型调用。用 /advisor status/advisor config 可以看到原因。

安装并启用后,在已经组合 command registry 的会话里可以用:

/advisor            切换当前会话的 advisor
/advisor on         为当前会话启用
/advisor off        为当前会话关闭
/advisor status     查看状态、模型、运行状态、待处理数量、最近活动

在 dsh-tui 里还有只读的 /advisor config,用来回读合成后的配置,并提示真正的写路径。这些指令会出现在 TUI 的 / 菜单里,并带子命令补全(需要随 dsh-tui 组合包提供的 dsh-tui-command-trees 行)。

适用场景与注意事项

比较适合这些情况:

  • 长会话编码或重构,主 agent 容易偏离用户原话,需要另一侧模型在旁提醒。
  • 希望审查意见进入主 transcript,而不是另开一个互不通信的评审窗口。
  • 同时使用 Web UI 和 dsh-tui,希望同一套 advisor: 配置跨 profile 共享。

不适合、或目前做不到的事情,以仓库「限制与路线图」为准,不要按完整 omp advisor 去预期:

  • 每个会话只有一个 advisor,没有并行评审组,也没有 WATCHDOG 式文件发现。
  • 评审者没有工具,不能自己读文件、跑测试来核验主张。
  • 没有会话内 advisor 面板;建议只以带标签的注入消息出现。Web Advisor 卡片是配置面,不是会话视图。
  • 没有 transcript 持久化,也没有成本统计。
  • maxDeltaMessages 会截断长会话窗口,compaction 之后早期上下文可能丢失。
  • 落后很多的 advisor 不会追赶等待主循环,积压有界且会被丢弃,note 有可能在下一轮主 turn 已经开始之后才到达。

安全方面有两点必须单独说。

第一,插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查 源代码仓库 和 MIT 许可证;如需可复现安装,请固定 commit 哈希或 registry 版本号。

第二,README 写明:delta 内容目前没有密钥混淆,transcript 里出现的 secrets 可能到达 advisor 模型;请只配置你信任的评审模型。另外,行为异常的 note 可能携带指令性文本,插件不会隔离不安全输出,JSON 帧校验和 advisory-only 框架是目前仅有的缓解手段,note 会原样送达主 transcript。

小结

dsh-advisor 给 DeepSeek Harness 加的不是第二个执行者,而是一个默认关闭、必须显式指定模型的旁观评审者。它按 nit / concern / blocker 往会话里注入建议,失败时丢掉自己的积压,不打断主循环。当前仍是 MVP:没有工具、没有会话内面板、也没有和 omp 的完整对等。若你已经在用 dsh 跑长任务,又希望多一双只说话、不下手的眼睛,可以按目录页命令安装后再打开配置。

  • 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-advisor/
  • GitHub:https://github.com/omdsh-dev/dsh-advisor
  • DeepSeek Harness 官方仓库:https://github.com/deepseek-ai/deepseek-harness
羽毛球分组比赛记分
小程序二维码

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

小夜