dsh-auto-review-model-router:把 auto-review 审阅请求路由到指定模型

前言

在 DeepSeek Harness(DSH)里,若启用了实验性的 @deepseek-ai/dsh-experimental-auto-review,每次需要安全门控的工具调用都会额外走一遍 LLM 审阅。审阅实现会从当前会话的请求头里复制 provider 和 model,也就是说审阅和主智能体共用同一条模型路由。主会话若选的是 Claude Opus、GPT 等高单价模型,每一次 gated 调用都会多计一次同档模型的完整请求,成本会叠在 agent 本身之上。

社区插件 dsh-auto-review-model-router 只做一件事:识别 auto-review 发出的审阅请求,把其路由改到你配置的 reviewModel,主会话的 agent 模型不变。下面介绍它的定位、安装方式与配置项,均依据仓库 README 与 package 信息。

这是什么

dsh-auto-review-model-router 是 OldLigant 维护的 DSH 插件,npm 包名同为 dsh-auto-review-model-router,当前版本 0.2.1,许可证 MIT。分类上属于模型推理相关能力:不改变审阅提示词、策略 system prompt、温度或 gate 解析的 {"risk":…,"decision":…} JSON 协议,只替换产出 verdict 的模型。

若你使用的是独立插件 dsh-auto-review,其自带 reviewerModel 配置,无需本插件。本插件针对的是 experimental auto-review bundle 没有 reviewModel 字段、审阅被迫走会话路由的情况。

核心功能

问题与行为

@deepseek-ai/dsh-experimental-auto-review 通过 ctx.llm.stream() 审阅,路由来自会话 snapshot(README 指向 snapshotAutoReview())。本插件在激活时包装 LlmRuntime 上的 llm.stream(以及默认开启的 llm.prepareCall),仅对「手工构建、且 system 以 auto-review 固定 REVIEW_POLICY 开头」的请求改道。

改道时会复制到 reviewModel,并默认丢弃源路由上的 reasoningEffort 与 maxTokens,避免目标模型不支持 reasoning effort 或输出上限更小导致审阅全部失败。审阅内容与其余参数保持原样。

transient 失败重试

gate 在 agent loop 外直接调用 llm.stream, harness 的 agent 侧重试插件看不到审阅失败。本插件对单次审阅在 transient 错误上自行重试(默认 retryAttempts 为 4,即最多 5 次尝试),仅重试 harness 视为 transient 的码:EMPTY_RESPONSE、RATE_LIMIT、SERVER、TRANSPORT; deliberately 不重试 TIMEOUT(DeepSeek 适配器 idle watchdog)、ABORTED 与 AUTH 等。

实现取舍(阅读 README 时的要点)

README 说明曾尝试 llm/stream listener 或直接写 ctx.llm.stream,在真实 runtime 上不可行(请求被 deepFreeze、Cordis waterfall 语义、traceable proxy 等)。因此插件在拥有方法的 prototype(实践中为 LlmRuntime.prototype)上安装 wrapper,并在 fiber dispose 时移除。prepareCall 路径需在 prepare 阶段改路由,否则会出现 INVALID_PREPARED_CALL。

安装与启用

在 profile 目录 安装 npm 包(勿用未在文档出现的 dsh plugin add github:… 拼接命令):

# in the profile directory
pnpm add dsh-auto-review-model-router

本地 checkout 时可在 profile 的 package.json 里 link:

// <profile>/package.json
"dependencies": { "dsh-auto-review-model-router": "link:D:/path/to/dsh-auto-review-model-router" }

在 profile 的 patch 层插入插件条目,README 要求放在 auto-review bundle 之后:

# <profile>/cordis.patch.yml
- insert:
    - id: auto-review-model-router
      name: dsh-auto-review-model-router
      config:
        reviewModel: deepseek-official/deepseek-flash

修改 patch 层后需重启应用;变更在 profile 启动时生效。运行环境要求 Node ^22.19.0 || >=24.0.0(见 package.json engines)。

典型用法与配置

最小配置即指定审阅模型,格式为 <provider>/<model>,例如 README 示例中的 deepseek-official/deepseek-flash。配置后,审阅走该路由,agent 仍可保持 claude-opus-4、gpt-6-astra 等会话所选模型。

完整配置字段如下(默认值以 README 表格为准):

字段 默认 含义
reviewModel deepseek-official/deepseek-flash 每次审阅使用的 provider/model;空字符串关闭路由
systemPromptPatterns 内置 REVIEW_POLICY 开头 匹配 system 的子串或 /regex/u,仅在 harness 改写审阅 prompt 时需放宽
retryAttempts 4 首次失败后的重试次数,最多 10;0 关闭
retryDelayMs 500 重试前等待毫秒
wrapPrepareCall true 是否同样路由经 llm.prepareCall 发出的审阅
dropReasoningEffort true 审阅请求上丢弃源路由 reasoning effort
dropMaxTokens true 审阅请求上丢弃源路由 max tokens
logRetargets true 是否记录每次改道;重试总会打 warning

运行时改道与重试日志示例(README):

auto-review-model-router: review request re-routed anthropic/claude-opus-4 -> deepseek-official/deepseek-flash (stream)
auto-review-model-router: review attempt 1/5 failed with TRANSPORT; retrying in 500 ms

仓库测试:node test/router.test.js;在能解析 @deepseek-ai/dsh-llm 的环境下 DSH_PROFILE_DIR=<profile dir> node test/live.test.js。

适用场景与注意

适合谁: 已在 profile 中启用 @deepseek-ai/dsh-experimental-auto-review,希望审阅固定走便宜或专用 flash 模型,又不想改 agent 主路由的 DSH 用户。

范围与风险: 仅被识别为 auto-review 的请求会改路由;误识别为 false negative 时行为与未装插件相同。DSH 公开 API 仍属 pre-stable;若 REVIEW_POLICY 开头、LlmRuntime.prototype 方法名或 prepared-handle 契约变化,可能需要升级插件或通过 systemPromptPatterns 调整检测。缺少所需方法时插件会 warning 而非阻止 profile 启动。

安全与信任: 插件以当前 DSH 进程权限运行,会 patch LlmRuntime.prototype 并拦截 LLM 流式调用。安装前请阅读 GitHub 仓库 源码与 MIT 许可证,自行判断是否纳入 profile。

DSH 生态强调「一切皆插件」;SkillHub 目录页 为社区站点,与 DeepSeek / 幻方无官方从属关系。

结尾

dsh-auto-review-model-router 把 experimental auto-review 的审阅流量从会话高价模型上拆开,用配置项 reviewModel 和可选重试降低 gated 工具调用的审阅成本,同时保持 agent 路由不变。需要细节与更新时以 GitHub README 为准:

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

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

Xiaoye