dsh-deliberation
Đã xác minhdsh-deliberation · v0.1.0 · MIT
Primary-controlled deliberation and opt-in masked review for DeepSeek Harness
Cài đặt
dsh plugin add dsh-deliberation Xác nhận layer đã áp bằng dsh --profile default --dump-config — xem hướng dẫn cài plugin.
Mã nguồn
Thẻ
Tác giả
Readme
dsh-deliberation
English | 简体中文
一个非官方 DeepSeek Harness 插件:提供有界、由 Primary 控制的 deliberation,以及可选的 reasoning-masked review。
状态:实验预览版。 Runtime、失败隔离和协议边界已有测试;目前没有配对 benchmark 能证明它提高正确率或推理成本回报,因此自动审查默认关闭。
插件提供两条相关能力:
| 能力 | 触发方式 | 实际作用 |
|---|---|---|
deliberate 工具 |
Primary 主动调用 | 并行运行 1–3 个有界 alternative、audit 或 masked-review child,返回紧凑 JSON packet |
| 自动 masked review | 可选的 agent/turn-stopping hook |
不带当前工具 Turn 已记录的 reasoning 重新复审,只向 Primary 发布决策相关增量 |
child 只提供证据、不确定项、可能错误与下一步检查,不投票、不选择 winner,也不替代 Primary。
五分钟启动
环境要求
- Node.js
22.19+或24+ pnpm已加入PATH(dsh plugin底层把安装参数转发给 pnpm)- 已能正常使用 DeepSeek Harness Web profile,并已配置模型凭据
先检查:
node --version
pnpm --version
npx @deepseek-ai/dsh --version
安装正式发布包
npx @deepseek-ai/dsh plugin --profile web add [email protected]
npx @deepseek-ai/dsh --profile web --dump-config
npx @deepseek-ai/dsh web
添加、移除或更新 Bundle 后,必须重启正在运行的 Web。配置 dump 应同时出现:
subagent-mid-fork-step-family-in-process
subagent-mid-fork-current-turn-in-process
tool-deliberation
请从希望作为 Agent workspace 的目录启动 Web。
发布前测试本地 checkout
git clone https://github.com/fly1989/dsh-deliberation.git
cd dsh-deliberation
npm ci
npm run release:check
# 最新 DSH 会先把 . 锚定到当前 checkout,再进入 profile 目录。
npx @deepseek-ai/dsh plugin --profile web add .
npx @deepseek-ai/dsh --profile web --dump-config
npx @deepseek-ai/dsh web
本地安装是 link。修改 TypeScript 后要重新 build;修改 Bundle 成员或编译代码后要重启 runtime:
npm run build
第一次手动测试
插件注册的模型工具名是 deliberate。工具可用不等于模型必然调用,第一次 smoke 请用明确任务:
检查当前 workspace 并诊断失败的校验,暂时不要修改文件。
先用只读工具得到一条具体观察,然后调用 deliberate:
一个 trajectory-audit 分支和一个 masked-review 分支,后者复审最近一个
已完成 Step。route 使用 same;audit 使用 read-only;masked review 使用
reason-only。拿到 packet 后,选择成本最低的鉴别性检查并正常继续。
预期流程:
- Primary 至少完成一个含工具的 Step。
- Web 出现通用
deliberatetool card。 - 每个分支创建独立 child Session;child transcript 不进入 Primary context。
- 工具结果为每个成功分支返回一份紧凑 packet。
- Primary 自己判断是否采用。
开启自动 masked review
自动审查必须显式启用。仓库提供了一份完整的 DSH config-row replacement:
$reviewPatch = (Resolve-Path .\examples\auto-review.patch.yml).Path
npx @deepseek-ai/dsh --profile web --patch $reviewPatch --dump-config
npx @deepseek-ai/dsh --profile web --patch $reviewPatch
该示例启用:
autoReview:
enabled: true
scope: tool-bearing-turns
provider: mid-fork-current-turn
route: same
capability: read-only
publish: updates-only
timeoutMs: 300000
若要永久启用,把 examples/auto-review.patch.yml 中完整的 tool-deliberation 配置行复制到该 Web profile 的 cordis.patch.yml。DSH patch 会替换目标行的整个 config,不会深度合并嵌套字段,所以不要只写半段 autoReview。普通 profile patch 修改支持热重载;安装或移除插件 Bundle 仍需重启。
收集 shadow eval 时建议先用 publish: observe-only:child 会运行并持久化,但绝不写入 Primary inbox。
三种角色
| 角色 | 历史 | 是否看 incumbent | 适合做什么 |
|---|---|---|---|
independent-alternative |
fresh / spawn |
否 | 寻找一个实质不同的机制或策略 |
trajectory-audit |
completed prefix / fork |
是 | 证伪当前轨迹,并定位最早可疑决策 |
masked-review |
更老的 native prefix + recent-Step snapshot | 否 | 不看选中 Step 的 recorded reasoning,重新审视可观察行动与结果 |
手动 masked-review 必须填写 recentSteps,范围为 1..maxRecentSteps(默认上限 8)。一个 Step 是“一次已完成模型决策 + 该 response 引起的全部 tool call/result”;并行工具仍属于同一个 Step。正在执行 deliberate 的 active Step 不在窗口内。
自动路径使用 window: current-turn:更早完整 Turn 保持 native history,正在 stopping 的 Turn 内所有完整 Step 被投影成 reasoning-masked snapshot。
返回 packet
child 只返回结构化决策信息,不返回 hidden reasoning 或完整 transcript:
{
"role": "masked-review",
"status": "update",
"items": [
{ "kind": "possible_error", "certainty": "likely", "content": "..." },
{ "kind": "unknown", "certainty": "uncertain", "content": "..." },
{ "kind": "suggestion", "certainty": "likely", "content": "..." }
]
}
status:update或no_updatekind:observation、conclusion、assumption、unknown、possible_error、suggestioncertainty:certain、likely、uncertain
certainty 是 child 自报,不是事实认证。真实 timeout、abort、child error、非法 packet 或 role 不匹配都不会发布 packet。只有 child Session 能证明 Turn 正常结束时,才允许使用严格的 final-text JSON fallback。
配置参考
手动工具配置
| 字段 | Bundle 值 | 含义 |
|---|---|---|
freshProvider |
spawn |
independent-alternative 使用的 provider |
forkProvider |
fork |
trajectory-audit 使用的 provider |
midForkProvider |
mid-fork-step |
recent-Step provider family 前缀 |
maxRecentSteps |
8 |
Primary 可选的最大 K |
maxBranches |
3 |
一次调用最多几个分支 |
maxDepth |
1 |
child delegation 的绝对深度上限 |
branchTimeoutMs |
600000 |
每个手动分支独立的墙钟超时 |
routes |
same |
暴露给 Primary 的部署许可模型路线 |
capabilityProfiles |
reason-only、read-only |
暴露给 Primary 的 child 工具边界 |
debug |
false |
只记录安全生命周期 breadcrumb,不记录 prompt 或 child 内容 |
自动审查配置
| 字段 | 可选值 | 含义 |
|---|---|---|
enabled |
false / true |
是否挂载 stopping-boundary policy |
scope |
tool-bearing-turns / all-primary-turns |
哪些顶层 Primary Turn 可以触发 |
provider |
默认 mid-fork-current-turn |
部署者控制的 history projection |
route |
默认 same |
child provider/model 路线 |
capability |
Bundle 默认 read-only |
child 工具上限 |
publish |
updates-only / all / observe-only |
哪些 packet 可以进入 Primary inbox |
timeoutMs |
300000 |
自动 child 墙钟超时 |
History projection provider
| 字段 | Bundle 值 | 含义 |
|---|---|---|
window |
recent-steps 或 current-turn |
snapshot 选择方式 |
mask |
reasoning-only |
删除 reasoning/replay state;action-only 仅作评测对照 |
maxSnapshotChars |
65536 |
整体 snapshot 文本预算;超限完整 skip,不截断 |
maxSnapshotImages |
20 |
projected suffix 图片上限 |
route 和 capability 是 allowlist,不负责注册缺失能力。可移植的 same 继承 Primary 模型,不代表模型族独立;read-only 请求 read/grep/glob,但 profile 没有暴露这些工具时会安全退化到接近 reason-only。
安全与 runtime 边界
- child 永远看不到
deliberate;maxDepth防止递归分叉。 - 手动 sibling 并行执行、独立失败。
- reasoning masking 从不修改 append-only Parent Session。
- in-process child 共享 workspace;tool filter 不等于文件系统、进程或凭据隔离。
- Bundle 不提供 mutation-capable child,也不能回滚文件、命令、数据库或网络副作用。
- 含图审查只在最终 child route 明确支持 image input 时启动,否则创建 child 前直接 skip。
turn-stopping是稳定 checkpoint,不是 token entropy detector。- 同模型一致只是弱证据;child 是提案生成器,不是外部事实核查器。
- 每次自动尝试都会增加一次 child LLM call;发布 update 还会增加一个 Primary assimilation Step。
常见问题
Web 找不到 deliberate
安装 Bundle 后重启 Web,再检查:
npx @deepseek-ai/dsh plugin --profile web why dsh-deliberation
npx @deepseek-ai/dsh --profile web --dump-config
模型没有调用 deliberate
安装只让工具可用,不会强制模型调用。请先用上面的明确 smoke prompt。自动审查是另一条 runtime 路径,除非配置启用,否则不会运行。
自动 child 跑了,但 Primary 没显示更新
updates-only 下,合法的 no_update 本来就不会生成 parent notice 或 assimilation Step。协议调试可临时用 publish: all;shadow eval 用 observe-only。
从 Git 安装时 pnpm 拒绝运行 build
Git 源码依赖会执行 prepare,pnpm 10 可能要求 profile 的 pnpm-workspace.yaml 先声明构建许可。优先安装正式 npm 包;若必须装 Git,请复制 pnpm 错误中给出的精确 allowBuilds key,加入 profile 后重新安装。
pnpm 提示缺少 DSH peer dependencies
DSH profile 有意设置 autoInstallPeers: false。树外插件把 Host API 声明为 peer,而 DSH launcher 会通过 profile fallback 提供同一套 Cordis/DSH 实例。因此 plugin add 时出现 peer warning 属于预期行为;不要在插件里再安装第二份 Cordis。请用 --dump-config 和一次真实 Web boot 验证兼容性。
开发与发布检查
npm ci
npm run release:check
release check 会依次完成类型检查、全部测试、production build 和 npm tarball dry run。当前目标版本线是 DSH 0.1.1-rc.2;Harness 仍处于 developer preview,每次升级后都应重跑 smoke。
深入文档
MIT。本项目与 DeepSeek 没有从属或背书关系。