前言¶
在 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 覆盖。启用时 provider 和 model 为必填;缺任一项时审查模型不会发起调用,状态会显示 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)。
配置优先级示例¶
- 在
settings.yaml里设置enabled: true和provider/model,作为全局默认。 - 某次调试会话执行
/advisor off,仅该会话关闭审查,不影响其他会话。 - 调试结束后
/advisor on恢复,或开新会话沿用全局配置。
适用场景与注意¶
适合谁
- 需要在长链路 agent 任务里做轮次级代码/方案审查,又不想把审查逻辑全塞进主 system prompt 的 DSH 用户。
- 希望用第二个模型(可与主模型不同 provider/model)做旁路观察,并按 nit/concern/blocker 分级反馈的场景。
- 同时使用 DSH web 与 dsh-tui,需要在两个前端用同一套 advisor 配置的团队。
使用前注意
- 插件以当前 dsh 进程的权限运行,安装前应阅读 源码 与 MIT 许可证,确认审查模型所用 provider 的凭据与配额策略。
- 审查模型每次 stepped turn 都会额外发起一次 LLM 调用,会增加延迟与 token 成本;
immuneTurns和maxDeltaMessages可用于控制频率与上下文窗口。 - 依赖 DSH 0.1.1-rc.2 及对应 peer 包;Node 要求
^22.19 || >=24。web Advisor card 需要当前 dsh web build 声明settings.plugin.itemcard slot 并加载声明dsh.client的包。 - SkillHub(skillhub.cn)是社区插件目录,与 DeepSeek / 幻方无官方从属关系;插件信息以 GitHub README 与 npm 发布页为准。
结尾¶
dsh-advisor 把「每轮旁路审查」做成可插拔的 DSH 插件:独立模型、分级建议、会话级开关,且明确 bounded 为 advisory-only。若你已在用 DSH 跑 agent,值得把它当作第二层模型审查管线来评估。