Back to home@Morriaty-The-Murderer

dsh-plugin-abtest

Reproducible paired A/B experiments for DeepSeek Harness plugins, with isolated runners, auditable evidence, and deterministic promotion gates.

Stars
0
Language
TypeScript
Created
Aug 19, 2026
Updated
Aug 19, 2026
GitHub repo

Introduction

DSH Plugin A/B Test

在发布 DSH 插件改动前,先用同一组任务验证它是否真的更好。

DSH Plugin A/B Test 会把当前版本(Control)和候选版本(Candidate)放进彼此隔离的 DSH 环境,逐题配对运行,再生成可复核的证据与发布建议。它适合回答三个很实际的问题:

  • 新版本是否提高了任务成功率?
  • 提升是否伴随明显的 token、延迟或工具错误回退?
  • 结果能否由其他人用同一批输入重新跑出来?

最终结果只有四种:PROMOTEREVIEWREJECTINCONCLUSIVE。其中 PROMOTE 也只是一项离线建议;本项目不会修改真实 DSH profile,也不会替你执行发布。

先看结果

下面是本仓库离线样例的一次真实输出(省略无关字段):

{
  "outcome": "PROMOTE",
  "validPairCount": 2,
  "invalidPairCount": 0,
  "triggeredRules": ["primary.superiority"]
}

除了这条结论,你还会得到每次运行的 session 证据、断言结果、配对差值,以及 JSON、Markdown、HTML 三种报告。结论不靠模型拍板,而是由 manifest 中的确定性规则计算。

快速开始

当前 MVP 从源码运行,要求 Node.js ^22.19.0 || >=24.0.0 和 pnpm 11.19.0。初始化样例使用离线 scripted provider,不需要模型 API key。

pnpm install --frozen-lockfile

node --import tsx src/cli/bin.ts init --output ./my-experiment --json
node --import tsx src/cli/bin.ts freeze --manifest ./my-experiment/experiment.yml --output ./evidence --json
node --import tsx src/cli/bin.ts run --manifest ./my-experiment/experiment.yml --output ./evidence --json
node --import tsx src/cli/bin.ts decision --manifest ./my-experiment/experiment.yml --output ./evidence --json
node --import tsx src/cli/bin.ts report --manifest ./my-experiment/experiment.yml --output ./evidence --json

打开 ./evidence/<experiment-id>/report.html 即可查看静态报告。要测试自己的插件,只需修改初始化目录里的 experiment.ymlevals/cases.yml 和两个 variant 配置。

怎么判断

结果含义常见下一步
PROMOTE证据充分、质量达到目标且 guardrail 通过进入人工发布流程
REVIEW有改善,但成本、延迟、错误率或波动需要判断阅读 pair 证据后人工复核
REJECThard gate 失败、关键用例回退或收益不足修复 Candidate 后重跑
INCONCLUSIVE有效样本不足、插件暴露未证实或运行环境不可比补齐证据,不把它当作失败

默认比较任务成功率,并可约束 token、P95 延迟和工具错误率。阈值、最小有效 pair 数、重复次数与并发数都写在 manifest 中;详细字段见 manifest 文档,规则优先级见 决策文档

为什么结果可信

  • 同题配对:Control 与 Candidate 使用相同 case、workspace fixture 和模型参数。
  • 顺序平衡:运行顺序按 pair 交替,减少固定先后顺序带来的偏差。
  • 环境隔离:每个 arm 拥有独立的 DSH_HOME、profile、workspace、session root 和冻结插件制品。
  • 制品可追溯:支持本地目录、tarball、精确 npm 版本和固定 GitHub commit;运行前会再次校验制品哈希。
  • 暴露可证明:从 session 事件、工具调用或插件 receipt 判断目标插件是否真正参与了运行。
  • 盲评不泄露身份:可选 comparator 只看到匿名的 A/B 输出,映射在比较完成后才揭示。
  • 失败不伪装成回退:provider outage、损坏会话、环境差异等基础设施问题进入无效证据或 INCONCLUSIVE

证据默认写入:

<output>/<experiment-id>/
├── manifest.lock.json
├── control-artifact.json
├── candidate-artifact.json
├── pairs/<case-id>-<repetition>/
│   ├── pair.json
│   ├── measurement.json
│   ├── control/
│   └── candidate/
├── comparison.json
├── decision.json
├── report.md
└── report.html

已完成的 pair 会被后续 run 复用;部分状态不会被静默覆盖。输入变化或证据受损时,应使用新的 output root。

接入真实 DSH

mock provider 会调用精确固定的 @deepseek-ai/dsh@0.1.0-rc.7。模型凭证等环境变量必须按名称加入 extensions.environment_allowlist;fingerprint 和制品元数据只记录 allowlist 哈希,不记录原始值。插件与测试命令的 stdout、stderr 和 session log 会作为原始证据保存,因此接入方仍应避免主动输出 secret。

CLI 是可信的本地自动化边界,可运行 manifest 中显式声明的测试命令。可选 DSH/Cordis 工具入口面向模型调用,因此会拒绝包含 command_test 的实验,避免把模型工具变成任意命令执行入口。

完整 CLI 包含 initvalidatefreezerunstatuscomparedecisionreport。稳定退出码及真实模型 smoke 的运行方法见 验收记录

开发与验证

pnpm identity:check
pnpm lint
pnpm typecheck
pnpm test
pnpm test:integration
pnpm test:rename
pnpm build
pnpm pack --dry-run

项目仍处于 MVP 阶段,当前不发布 npm 包。架构、上游契约与安全边界分别见 架构说明上游审计

公开名称、npm 包名和 CLI 名称由 project.identity.json 统一管理,并有实质 rename 测试防止旧身份残留;详见 身份文档。稳定协议标识不会随品牌改名。