让主模型把已形成的决策交给独立评审模型复核,支持 off、shadow、advisory 三种模式;需自备实现 POST /v1/decision 的复核服务。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:ninetyhe-90/dsh-decision-review
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
[!NOTE] 这是一个 DSH bundle,安装后默认
mode: off,不会产生任何调用。要真正启用,需要一个兼容POST /v1/decision的复核服务,并显式配置model与baseUrl。
为什么做这个插件
让同一个模型先产出结论再自我复核,往往只是重复一遍它的理由。独立复核的价值在于“第二意见”:复核方只看到问题、主模型的预选、证据与约束,不参与原始推理,也不掌握工具权限。
主模型必须先形成 primaryChoice,插件才发起复核。复核返回的建议会连同置信度一起回到主模型手里,采纳、保留还是询问用户,仍由主模型决定。
flowchart LR
A[主模型形成 primaryChoice] --> B[__decision_review 工具]
B --> C[POST /v1/decision]
C --> D[choice + confidence]
D --> E{confidence 阈值}
E -->|>= minConfidence| F[ok:可采纳]
E -->|>= abstainBelow| G[not_adoptable:保留但不推荐]
E -->|< abstainBelow| H[abstained:证据不足]
F --> I[主模型决定采纳或保留]
G --> I
H --> I
核心能力
| 能力 | 使用体验 |
|---|---|
| 三种模式 | off 不注册;shadow 只记录不回灌;advisory 返回结构化建议 |
| 不替模型决策 | 复核只给建议与置信度,最终选择仍在主模型 |
| 结构化产出 | 固定返回 status、recommendation.choice、confidence、reasonCode |
| 置信度分层 | 达标可采纳、未达标保留、过低视为弃权 |
| 失败不重试 | 复核失败立即返回原因,主模型按原判断继续 |
| 日志脱敏 | 只记录点位、状态、原因码、模型、HTTP 状态、请求 id、输入指纹与耗时 |
| 权限隔离 | 权限、审批、写操作、网络目标、工具白名单永不交给复核方 |
复核协议
复核端点是结构化决策接口,不是 OpenAI 兼容的聊天接口:
POST {baseUrl}/v1/decision
Authorization: Bearer {DECISION_API_KEY}
请求体只有三个顶层字段:{ model, state, questions }。
| 字段 | 来源 |
|---|---|
state.question |
工具入参 question |
state.primaryChoice |
工具入参 primaryChoice |
state.evidence |
工具入参 evidence |
state.constraints |
工具入参 constraints |
questions.recommendation.criteria |
工具入参 options |
| 返回值 | answers.recommendation.choice 与 confidence |
probabilities 只透传给主模型参考,不参与判定。baseUrl 是网关根地址,插件自己拼接路径;已经以 /v1 或端点路径结尾的地址会在启动时被拒绝。
安装
dsh plugin --profile <name> add dsh-decision-review
dsh plugin --profile <name> add /path/to/dsh-decision-review
dsh plugin --profile <name> add github:ninetyhe-90/dsh-decision-review
配置
| 字段 | 类型 | 默认 | 说明 |
|---|---|---|---|
mode |
off | shadow | advisory |
off |
运行模式 |
model |
string |
无 | 必填,复核模型名,插件不提供默认值 |
baseUrl |
string |
空 | 复核服务根地址,不含 /v1 |
apiKeyEnv |
string |
DECISION_API_KEY |
存放凭据的环境变量名 |
allowedDecisionPoints |
string[] |
[] |
允许调用复核的决策点名,任意合法命名均可 |
timeoutMs |
number |
5000 |
单次复核超时 |
minConfidence |
number |
0.75 |
可采纳阈值 |
abstainBelow |
number |
0.5 |
弃权阈值,不得高于 minConfidence |
promptSection |
boolean |
true |
是否注入提示段 |
promptSectionOrder |
number |
30 |
提示段顺序 |
systemExtra |
string |
空 | 追加到复核请求的领域约束 |
- insert:
- id: decision-review
name: dsh-decision-review
config:
mode: advisory
model: your-decision-model
baseUrl: https://your-gateway
allowedDecisionPoints:
- custom_review_point
失败码
reasonCode |
含义 |
|---|---|
timeout / cancelled |
本地超时,或父请求被取消 |
upstream_timeout |
网关报告上游超时(HTTP 504) |
credential_unavailable |
凭据环境变量缺失 |
authentication_failed |
凭据缺失或被拒绝(HTTP 401) |
model_not_authorized |
凭据无权使用该模型(HTTP 403) |
model_unsupported |
网关不认识该模型名 |
invalid_request |
请求体被拒绝(HTTP 400) |
route_unavailable |
HTTP 404,检查 baseUrl 是否为网关根地址 |
rate_limited / quota_exceeded |
上游限流或额度耗尽 |
context_too_large |
HTTP 413 |
invalid_response / response_too_large |
响应无法解析或超出上限 |
provider_error |
其它网络或服务端错误 |
安全边界
- 复核方不获得任何工具、文件、网络或审批权限。
- 权限提升、用户确认、写操作、网络目标与工具白名单不进入复核范围。
- 复核结果只是建议,不能绕过主模型的判断与宿主的确认流程。
- 日志不记录请求正文与原始错误,只记录结构化元数据。
兼容性
- Node.js 20.11+
- DeepSeek Harness 0.2.x:需要
ctx.tools、ctx.logger;缺少ctx.systemPrompt时跳过提示段注入 @deepseek-ai/schemastery3.18.x
项目结构
src/decision-core.mjs 配置校验、输入归一化、提示段与失败码
src/decision-model.mjs 工具注册、复核请求与结果映射
test/ 配置、协议与工具行为测试
cordis.patch.yml bundle 层,默认 mode: off
开发与验证
npm install --include=dev
npm test
npm run check
路线图
- 三档模式与置信度分层
- 结构化失败码与日志脱敏
- 可配置决策点白名单
- bundle 安装形式
- npm 发布
- 复核服务的最小参考实现
许可证
MIT
链接
同类插件
Tencent/WeKnora#dsh-weknora★ 35014
把 WeKnora 知识库接入 dsh 的四个只读工具:列出知识库、混合检索原文片段、按顺序还原单篇文档,以及直接取用 WeKnora 自己带引用的 RAG 或 ReAct agent 回答(含可续聊的 session id)。
superdesigndev/treg★ 5944
给 Agent 的工具目录:按「要做的事」检索约 2,600 个外部接口(SEO 与 SERP、外链、社交、人物与公司信息补全、广告库、抓取),查看参数与单次调用价格后直接调用,凭据由服务端注入。附带技能,MCP 行在未设置 TREG_TOKEN 前保持禁用。
T-Auto/dsh-ops★ 3709
为 Windows 的 DSH 提供 bash、PowerShell 7 及 Rust 高性能工具,减少 token 消耗。
TencentCloudBase/CloudBase-AI-Toolkit#dsh-plugin★ 1141
把腾讯云 CloudBase 后端接入 DeepSeek Harness——在对话里搭好并部署全栈应用,查询结果渲染为表格卡片(分页、排序、导出 CSV),部署后可预览真实域名,并提供 CloudBase MCP 工具集(`mcp__cloudbase__*`),登录走 device-code 流程。
sixtysevenlf/dsh-blender-plugin★ 1019
让 DSH agent 通过直连 TCP 通道驱动本地 Blender,提供 16 个工具:视口帧、自定义视角渲染、Python 执行、无头与作业卸载、事务回滚,以及 28 个 family / 186 个 op 的规划层。
anysearch-team/anysearch-dsh★ 634
基于 AnySearch 的实时网页与垂直搜索插件,为 DeepSeek Harness 提供搜索工具。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。