前言¶
在 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 为准: