dsh-agent-bench:在隔离沙箱里跑固定用例,对比两次 DSH Agent 运行

前言

在 DSH 里换模型、改系统提示词或升级 Harness 之后,很难用「随手问一句」判断 agent 是否真的变差。人工抽测不可复现,也很难定位是哪类任务出了问题。下面介绍社区插件 dsh-agent-bench(维护者 songrui111):用固定起始文件、固定任务和确定性判分规则,在隔离沙箱里跑真实 agent,并把两次运行的成绩卡做 diff,专门做回归对比。

这是什么

dsh-agent-bench 是 DeepSeek Harness 上的工作流类插件(SkillHub 目录页,GitHub)。一句话定位:在隔离环境里回放固定用例,生成成绩卡,并对比模型、提示词或 DSH 版本变更前后的通过率与失败断言。

插件以当前 DSH 进程权限运行;安装前建议在 GitHub 上查看源码与 MIT 许可证。社区目录 SkillHub 为独立站点,与 DeepSeek / 幻方无官方从属关系。

用例与判分怎么工作

一条用例 = 一份起始文件(fixture/)+ 一句任务 + 一组判分规则(写在 case.json)。运行时会将 fixture/ 复制到空目录,由 agent 在其中完成任务,再按规则判分,保证每次起点一致,差异只可能来自模型或宿主。

内置示例(benchmarks/core/fix-bug-keep-tests/)结构如下:case.json 描述任务(例如修好 calc.js 里的 add() 且不要动 test.js),fixture/ 放有 bug 的实现与失败测试,expect/test.js 用于锁定测试文件不被改动。

判分只认确定性断言:

断言 作用
file-exists / file-absent 文件在不在
file-contains / file-not-contains 是否包含某字符串
file-matches 正则匹配
file-equals-expect 与 expect/ 下文件逐字节比对
command 在沙箱执行命令并比对退出码

断言路径限制在沙箱内,写 ../ 会直接报错。用例可声明 llmReview 让模型打分,该分数不参与回归判定,仅作参考;若评审结论变而断言未变,对比时会单独标为「漂移」。

安装与要求

跑真实 agent 需要本机已安装 DSH CLI,并完成账号登录或配置 API Key。官方 README 给出的安装步骤如下。

先安装 DSH CLI(若尚未安装):

npm i -g @deepseek-ai/dsh          # 跑真实 agent 需要 dsh CLI
dsh plugin --profile web add dsh-agent-bench

环境要求(见 package.json 与 README):

  • DSH ≥ 0.2.0-rc.2
  • Node ≥ 22.19
  • 已登录 DeepSeek 账号,或设置 DEEPSEEK_API_KEY

装好后在工作区即可通过工具调用 bench_suites 等;首次运行会自动准备隔离环境,无需手工配路径。

命令行安装时,本机 PATH 上需要有 pnpm(dsh plugin 内部会调用)。若仅从桌面版启动且 PATH 未包含 pnpm,需自行安装;通过插件市场安装则不受此影响。

典型用法

列出套件并跑一遍

> bench_run core

✅ 4/4 条用例通过(100%)
   套件 core  ·  运行 20261026010837-896ec37d  ·  1分01秒

失败时会指出具体断言,例如 command: exit 1 (want 0)。

变更后对比回归

换模型、改提示词或升级 DSH 后,对同一套件再跑一次,然后:

> bench_compare core

🔴 回归     通过率 100% → 75%(-25%)
## 回归用例
- fix-off-by-one — command: exit 1 (want 0)

每次运行在 .agent-bench/runs/<runId>/ 下生成 JSON(供 bench_compare)与 Markdown 报告(可贴进 issue)。

工具与斜杠命令

工具 作用
bench_suites 列出套件和用例数
bench_init 将内置套件复制到工作区以便自定义
bench_run 跑套件
bench_compare 对比两次运行
bench_history 查看历史记录

也支持 /bench list、/bench runs、/bench compare <套件>。

内置套件

装上即有 core 与 workflow 两个套件,各 4 条用例:

  • core:修 off-by-one、修 bug 但不改测试、跨文件重命名、从零实现 fizzbuzz
  • workflow:只改该改的文件、补边界用例、按规格实现、抽取重复代码

示例套件的价值在于演示格式;长期使用时,应把你自己工作流里的规矩写成用例(例如改完必须跑测试、重构后测试全绿)。

隔离与配置

基准需要模型凭据,但不应污染日常 DSH 配置。插件在工作区 <workspace>/.agent-bench/home 建立独立 DSH_HOME:复制 .credentials.yaml(已存在则不覆盖)、按授权或环境变量选择 provider,会话与 profile 与平时使用隔离。

dsh CLI 查找顺序:cliPath 配置 → 环境变量 DSH_BENCH_CLI → PATH 上的 dsh。

常用配置项(默认值见 README,机器相关路径建议写在 profile 的 cordis.patch.yml):

键 默认 说明
suitesRoot benchmarks 用例目录(相对工作区)
scorecardRoot .agent-bench 成绩卡目录
sandboxRoot .agent-bench/sandboxes 沙箱目录
caseTimeoutMs 300000 单条用例超时
keepSandboxes false 跑完是否保留沙箱
llmReviewEnabled true 评审总开关
cliPath '' dsh CLI 入口
dshHome '' 隔离 home,空则用 .agent-bench/home
language zh 输出语言 zh 或 en

适用场景与注意

适合:在 DSH 上持续迭代 agent 配置时,需要可复现的回归信号,而不是单次对话的主观感受。

README 中列出的已知限制值得留意:

  • 每条用例都是一次真实模型调用;8 条内置用例全跑约 2–4 分钟,会消耗额度。
  • 用例串行执行是故意的,便于跨版本对比耗时与成本。
  • 完整跑通目前仅在 Windows 上验证;路径逻辑按跨平台编写但未在其他系统实测。
  • llmReview 偶发空文本时会重试三次,仍失败则记入成绩卡,不影响断言判分。

插件当前版本 0.1.1,GitHub 星标为 1。改插件源码后需重启 DSH;cordis.yml 的 HMR 不热重载服务端插件。

结尾

dsh-agent-bench 把「固定起点 + 确定性断言 + 隔离 home」组合成一条可重复的回归流水线:先 bench_run,再改模型或 DSH,再跑同一套件并用 bench_compare 看通过率与失败用例。进一步细节与开发脚本见 GitHub README,安装与分类信息见 SkillHub 目录页。

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

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

小夜