前言¶
在 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 目录页。