前言¶
在 DeepSeek Harness(DSH)里做智能体开发时,换模型、改 effort、动提示词或升级插件后,同一条任务的行为是否一致,往往只能靠「再跑一遍、凭感觉对比」。一次成功、一次失败时,也很难快速定位差异出在哪一步工具调用。现有方式多停留在「看会话录像」,缺少把多次运行并排对齐、标出漂移、并按任务聚合为矩阵的能力。
下面介绍社区插件 dsh-agent-lab(维护者 Limtide,分类:工作流)。它把一次真实会话录成运行(run),支持与另一次运行并排对比工具序列、参数、结果与用量;可从同一任务在隔离副本里重放(换模型或改提示词);再按任务 × 变体聚合成矩阵,并为任务配置断言,用 CLI 退出码接入 CI 回归门禁。当前 package 版本为 0.4.0,许可证 MIT。
目录页:https://www.skillhub.cn/plugins/Limtide/dsh-agent-lab
源码:https://github.com/Limtide/dsh-agent-lab
这是什么¶
dsh-agent-lab 的定位是「给 agent 配置做 pytest」的第一程:录制运行 → 对比差异 → 有意识重跑 → 矩阵汇总 → 断言门禁。
它解决的核心问题包括:
- 换了模型、effort、提示词或插件版本,同一任务的行为变了吗?
- 两次跑同一流程,一次成功一次失败,差异出在哪一步?
- 收到「乱改文件」类反馈时,如何把现场录下来供对照?
比较口径侧重行为不变量(工具名、顺序、参数、成功/失败、结果内容),而不是模型回复的逐字文本;README 也明确不保证模型输出可复现。
核心功能¶
对比(v0.1 起)¶
侧栏打开 回归实验台。在 对比 页签中:
- 从会话导入 —— 选择已有会话(含进行中的),录制成运行。
- 重放(v0.2)—— 在运行下拉菜单点重放:可改任务提示词、模型与推理强度;插件复制基线工作区到副本并真实重跑,完成后自动成为对照 B。
- 或直接再录一次,或从运行库选两次运行。
页面将 基线 A 与 对照 B 并排对齐,包括:
- 顶部指标:行为相似度、工具调用数、失败数、Token、耗时、步骤,带 A→B 增量与变好/变差着色。
- 配置指纹:模型、effort、工具 schema 数与哈希、系统提示词哈希、沙箱与审批策略。
- 对齐轨迹:逐行状态(一致 / 参数漂移 / 结果变化 / 成败翻转 / 缺失 / 新增);序列对齐使用 Needleman–Wunsch,同名工具才能配对,避免多一次调用导致后面全部错位。
- 仅差异、展开行看完整参数与结果等交互,README 中有截图说明。
运行库与断言库分别保存在 $DSH_HOME/agent-lab/runs/*.json 与 $DSH_HOME/agent-lab/checks/*.json,可直接阅读与版本化。
重放(v0.2)¶
点重放后 Host 会:复制基线工作目录到 $DSH_HOME/agent-lab/replays/<job>/workspace;用基线记录的 agent preset(不存在则回退默认)在副本里建新会话;按指定 provider / model / effort 跑任务,会话强制 workspace-write 且审批 never;turn/end 后录成新运行并写入 replay 元数据。
使用前需知:
- 真实调用模型与工具,消耗 Token;默认 20 分钟上限,超时取消并保存已产生轨迹。
- 工具只能写副本;越界写会被沙箱拒绝。副本不会自动删除;复制的是重放时刻的目录(含
.git、node_modules),大仓库会慢。 - 同一时刻只允许一个重放;进程重启后内存中的任务状态丢失,已完成运行已落盘。
矩阵(v0.3)¶
矩阵 页签中:行为任务(按归一化任务提示词分组,键形如 task-1a2b3c4d5e6f);列为变体(provider / model / reasoningEffort);单元格展示通过率、平均工具调用数、平均 Token。无断言时按「正常结束」判通过;有断言时需正常结束且全部断言通过。空单元格可「重放这个变体」,任务与工作区来自该任务最近一次导入的运行(无则退回最近一次重放)。
README 说明 v0.4 不做批量重放队列,矩阵需逐个发起重放。
断言与 CI 门禁(v0.4)¶
断言挂在任务上($DSH_HOME/agent-lab/checks/<task-key>.json),同一任务的所有运行共用。内置始终检查:这一轮必须正常结束(turn-completed)。可追加:
| 断言 | 参数 | 含义 |
|---|---|---|
no-tool |
— | 未调用任何工具 |
file-contains |
path, text |
工作区内相对路径文件包含文本 |
final-contains |
text |
最终回复包含文本 |
max-tool-calls |
max |
工具调用数上限 |
max-total-tokens |
max |
输入+输出 Token 上限 |
max-failures |
max |
失败工具调用数上限 |
file-contains 对重放读副本目录,对导入读会话当前工作目录;路径须留在工作区内。
CI 示例:
node bin/agent-lab-check.mjs --run run-xxxxxxxx
node bin/agent-lab-check.mjs --task task-1a2b3c4d5e6f --variant deepseek-account/deepseek-flash@high
node bin/agent-lab-check.mjs --run run-xxxxxxxx --json
退出码:0 通过、1 断言失败、2 用法或存储错误。默认读 $DSH_HOME/agent-lab/{runs,checks},可用 --runs-dir / --checks-dir 覆盖,--checks <file> 指定断言 JSON。
GitHub Actions 中可写:
- name: agent regression gate
run: node plugins/dsh-agent-lab/bin/agent-lab-check.mjs --run "${{ env.RUN_ID }}"
安装与启用¶
DSH 生态里插件通过 Profile 的 Plugin Manager 安装。README 给出的安装 / 更新方式为(在本 profile 中):
plugin_manager install_bundle <插件目录的绝对路径>
Host 侧代码改动在下次 profile 重组(Plugin Manager 里关闭再开启该条目)或应用重启后生效;浏览器侧刷新页面即可。开发自测可在插件目录执行 npm test。
插件以当前 DSH 进程权限运行,安装前应自行查看源码与 MIT 许可证;运行记录、断言与临时副本仅在本机,不含上传。
典型用法¶
- 在 DSH 侧栏打开 回归实验台。
- 在 对比 页签从目标会话 从会话导入,得到基线运行 A。
- 需要对照时:对 A 使用 重放 改 model / effort / 提示词,或再导入/选择另一次运行作为 B。
- 查看顶部指标、配置指纹与对齐轨迹;必要时开 仅差异 或展开行核对参数键变化。
- 切到 矩阵 页签,按任务 × 变体查看通过率与用量;对空单元格按需 重放这个变体。
- 为任务编辑断言 JSON(或通过 UI 对话框,以实际客户端为准),本地或 CI 调用
agent-lab-check.mjs做门禁。
参数与结果比较前会做归一化(工作目录替换为 <cwd> 等),「行为相似度」为启发式分数(60% 轨迹对齐 + 25% Token + 15% 失败差异),README 建议只作趋势参考,以原始 diff 为准。
适用场景与边界¶
适合:需要对比两次 agent 运行的工具行为;在换模型/提示词/插件版本前做手工或 CI 回归;把失败会话录成 run 留档对照。
明确不做(v0.4 README):批量重放队列、worktree 隔离、外部工具夹具、CI 托管、递归录制子代理/工作流树;数据不上传。
Skillhub 目录页星标为 0,与 GitHub 公开信息一致;社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-agent-lab 把「录一次、比两次、重放变体、矩阵汇总、断言退出码」串成一条可落地的 agent 行为回归路径,适合已在 DSH 里跑真实任务、又需要可版本化运行库与 CI 门禁的开发者。