跳到主要内容
返回学习中心
13对比阅读 16 分钟入门

对比 · 同一任务,两种工作流程

DeepSeek Harness 与 Pi:用同一个错误比较工作流程

从一个可以观察结果的任务开始:报表错误地统计了已退款订单。创建两份独立项目,在两边都支持时选同一模型,并固定验收测试。比较的是得到可审阅补丁所需的工作,而不是两段产品介绍。

最后验证
2026年9月6日
指南源码基线
0.1.3-alpha.1
安装状态
以所选条目的记录为准
验证范围
  • 固定 DSH Alpha 源码与现行 Pi 官方 CLI、会话、扩展文档
  • 已在本地执行的订单统计合成例子、参考修复与指定文件恢复
  • 没有声称完成模型横评或真实 Provider 业务任务
本页目录
  1. 哪些内容经过了实际验证
  2. 先固定输入和成功标准
  3. 为什么在练习中这样检查
  4. 创建一个能看见错误的小项目
  5. 保留两个相同起点的独立目录
  6. 在 DSH 中逐步完成任务
  7. 在 Pi 中完成同一个任务
  8. 给两边相同且有明确范围的任务
  9. 独立核验,不能只读 Agent 的结束语
  10. 比较你实际完成了哪些工作
  11. 有意识地暂停、继续与恢复
  12. 完成一次审阅后再选择

哪些内容经过了实际验证

先固定输入和成功标准

输入为 orders.csv、report.mjs 和 report.test.mjs。交付物是 report.mjs 的小范围修改、三项通过的断言、总额 2000 和简短解释。不得修改输入数据或削弱测试。记录实际模型、Provider、工具配置、追加提示和耗时;条件不同时,不能把结果差异全归因于 Harness。

为什么在练习中这样检查

Pi 作者 Mario Zechner 在 2025 年的设计文章中强调上下文可见性与精简工具集。落实到本题,就是记录两边实际读了哪几个文件,又加载了哪些额外指令。Anthropic 的 Agent 评估文章区分对话记录与最终结果,因此这里既检查工具日志,也检查保存后的 report.mjs 和未被改动的测试,不能只给结束语打分。2025 年文章提供设计背景;当前 Pi 命令仍以现行文档为准。

创建一个能看见错误的小项目

准备 Node.js 24 和 Bash 终端,在全新的练习目录中操作。命令适用于 macOS/Linux 的 Bash;Windows 可用 Git Bash 或 WSL。harness-lab 目录必须尚不存在。示例项目无需 npm 依赖、账户、私人数据或生产文件。CSV 特意不含引号内逗号,这不是通用 CSV 解析器练习。

bash
create_harness_lab() {
mkdir harness-lab || return
cd harness-lab || return
cat > orders.csv <<'CSV'
id,status,cents
A,paid,1200
B,refunded,700
C,paid,800
D,pending,400
CSV
cat > report.mjs <<'JS'
export function totalPaid(csv) {
  const rows = csv.trim().split(/\r?\n/).slice(1);
  return rows.map(row => row.split(','))
    .filter(([, status]) => status !== 'pending')
    .reduce((sum, [, , cents]) => sum + Number(cents), 0);
}
JS
cat > report.test.mjs <<'JS'
const { default: assert } = await import('node:assert/strict');
const { readFileSync } = await import('node:fs');
const { default: test } = await import('node:test');
const { totalPaid } = await import('./report.mjs');
const csv = readFileSync(new URL('./orders.csv', import.meta.url), 'utf8');
test('only paid orders count', () => assert.equal(totalPaid(csv), 2000));
test('refunds alone count as zero', () => assert.equal(totalPaid('id,status,cents\nB,refunded,700\n'), 0));
test('an empty ledger counts as zero', () => assert.equal(totalPaid('id,status,cents\n'), 0));
JS
cp report.mjs report.original.mjs
node --test report.test.mjs
}
create_harness_lab
创建三个文件并复现错误

首次运行应有两项断言失败、一项通过。错误实现把已退款订单的 700 分计入,得到 2700,而正确结果是 2000。规则是只统计 status 为 paid 的行;refunded 与 pending 均不计入。金额统一使用整数分。

保留两个相同起点的独立目录

在任一 Agent 修改文件前执行复制。DSH 使用 harness-lab,Pi 使用 harness-lab-pi;两边都有相同错误实现和原件备份。会话分支不等于独立工作树,比较时不要让两个 Agent 同时修改一个目录。

bash
copy_harness_lab() {
  (cd .. && test ! -e harness-lab-pi && cp -R harness-lab harness-lab-pi)
}
copy_harness_lab
复制尚未修改的练习项目

在 DSH 中逐步完成任务

  1. 01

    核对运行时与模型

    先完成文末 Alpha 快速上手,使用其精确源码构建方式。在 Settings → Models 中配置自己的 Provider 凭据,不把密钥写入提示词,并记录实际选中的模型。

  2. 02

    显式选择项目

    在 Web UI 选择工作区,添加 harness-lab 的绝对路径。新 Web UI 尚未选中工作区,即使 dsh 进程是从某个项目目录启动的。

  3. 03

    检查实际权限

    这个一次性本地练习可在支持时使用 workspace-write 预设,并查看审批请求。它组合 workspace-write 沙箱模式和 ask 策略,边界由已配置的执行器落实;不代表每次文件写入都会弹窗。

  4. 04

    执行并观察

    发送下方共用提示词,查看读取、命令、修改和测试结果。请求访问练习目录之外或安装无关依赖时,先停止并收窄任务。

在 Pi 中完成同一个任务

按 Pi 官方快速上手安装后,进入 harness-lab-pi。用 /login 和 /model 配置并选择支持的模型,条件允许时与 DSH 一致。先用下方精简工具集检查文件;禁用可选资源发现,避免比较时悄悄加载无关扩展或项目指令。

bash
npm install -g --ignore-scripts @earendil-works/pi-coding-agent
cd ../harness-lab-pi
安装官方 Pi CLI,再进入它的独立项目副本
bash
pi --no-extensions --no-skills --no-prompt-templates --no-themes --no-context-files --tools read,grep,find,ls
检查阶段:不提供 edit、write、bash 工具

Pi 没有内置的文件、进程、网络或凭据权限系统。工具白名单限制模型能调用哪些工具,不改变进程的操作系统权限。不可信项目应放在容器、虚拟机或其他经过验证的操作系统隔离环境中。官方隔离指南说明了为什么仅改变工具执行路径,不能隔离仍在宿主机运行的其他扩展。

bash
pi -c --no-extensions --no-skills --no-prompt-templates --no-themes --no-context-files --tools read,edit,write,bash,grep,find,ls
退出检查会话,再带上修复所需工具继续该会话

给两边相同且有明确范围的任务

text
在这个一次性练习项目中修复 report.mjs,使 totalPaid 只统计 paid 行。先读 orders.csv 和 report.test.mjs,执行 node --test report.test.mjs 并报告原始失败。不要改 orders.csv、report.test.mjs 或 report.original.mjs;不要安装依赖或访问其他目录。以最小实现修改完成修复,重跑全部三项断言,并根据 orders.csv 计算总额。最后列出修改文件、实际测试结果、总额和局限。命令因环境原因失败时,请与断言失败明确区分。
可以直接复制的任务提示词

独立核验,不能只读 Agent 的结束语

bash
node --test report.test.mjs
node --input-type=module -e "import {readFileSync} from 'node:fs'; import {totalPaid} from './report.mjs'; console.log(totalPaid(readFileSync('orders.csv','utf8')))"
diff -u report.original.mjs report.mjs
在两个项目目录中分别亲自执行

应看到三项测试通过,并单独输出总额 2000。diff 通常只把筛选条件改为 status === 'paid';其他实现只要遵守相同规则且保留测试,也可以接受。diff 发现文件不同会返回 1,在这里是预期结果,不是测试失败。找不到 Node 或权限不足属于环境失败,不能据此判断计算逻辑错误。

比较你实际完成了哪些工作

Token作用检查项
起始上下文DSH:选择工作区,检查会话与工具。Pi:当前目录及发现的上下文决定起点,本练习显式关闭可选资源发现。记录精确目录与加载的上下文;相同提示词不代表上下文相同。
审批与隔离DSH:预设组合沙箱和审批设置。Pi:可以控制工具暴露,更强的操作系统边界需要另行配置。记录实际边界和人工审批,不能用弹窗次数衡量安全性。
计划与委派DSH 的组合可包含计划和子 Agent。Pi 核心把 plan-mode、子 Agent 等工作流程交给扩展或包。这个三文件修复无需两者。官方 plan-mode 示例展示扩展做法,本练习不要求额外安装。
复核与继续DSH 记录会话事件日志;Pi 提供 /session、/resume、/tree、/fork。保存经过测试的补丁和交接说明。会话历史提供上下文,但不会恢复已编辑的文件。
费用与速度模型、提示词、已加载扩展和等待审批的时间都会影响结果。填写观察值或“未测量”;单个合成任务不能形成普遍排名。

有意识地暂停、继续与恢复

停止前让 Agent 汇总目标、已改文件、实际命令结果和下一步。DSH 中重新打开原会话并核对工作区;Pi 在同一项目运行 pi -c 继续最近会话,或 pi -r 选择会话。/tree、/fork 分支的是对话历史,不会回滚文件。撤销失败尝试前先保存尝试文件,再只恢复练习实现。

bash
cp report.mjs report.attempt.mjs
cp report.original.mjs report.mjs
node --test report.test.mjs
保留尝试结果,仅恢复练习文件

恢复后应再次出现原来的两项失败,这是有意进行的恢复检查。保留 report.attempt.mjs 便于比较。在真实仓库中应使用干净分支或工作树,并逐文件审阅恢复;不要把本练习的覆盖命令用于无关工作。

完成一次审阅后再选择

如果日常工作适合共享 Web 工作台、可见的会话和工具状态、组合式流程,可以试 DSH;如果已有终端工具链,更喜欢显式 CLI 启动与小型可扩展核心,可以试 Pi。完成相同任务并读过 diff 后再决定。两种界面都不能保证补丁正确,也不会自行让不可信代码变安全。

text
Harness/版本:
模型/Provider:
工作区及初始文件:
实际工具/权限配置:
追加提示与人工审批:
测试:原始 __ 项失败;最终 __ 项通过
实际总额:
修改文件:
耗时/工具报告用量(或未测量):
恢复结果:
剩余局限:
保留一份简短的比较记录

带着具体目标继续

阅读一手官方资料

常见问题

修改前需要了解的事项

关于格式、兼容性、证据与回滚的简明说明。

这篇指南核实哪些范围?

本指南覆盖:固定 DSH Alpha 源码与现行 Pi 官方 CLI、会话、扩展文档;已在本地执行的订单统计合成例子、参考修复与指定文件恢复;没有声称完成模型横评或真实 Provider 业务任务

我应该先做什么?

从一个可以观察结果的任务开始:报表错误地统计了已退款订单。创建两份独立项目,在两边都支持时选同一模型,并固定验收测试。比较的是得到可审阅补丁所需的工作,而不是两段产品介绍。

最需要记住的边界是什么?

DSH 步骤采用源码构建的 0.1.3-alpha.1,固定提交 d347e703908d0406b7a7ef80e3a0e594d86b2215。Pi 命令已按 2026 年 9 月 6 日的官方文档核对。订单例子与参考修复已在本地运行;尚未用模型实测两套提示词的比较结果。

三项测试通过就能证明哪个 Harness 更好吗?

不能。它只证明这份实现满足三个示例项目断言。要得出更广泛结论,应增加任务,并保持模型、输入和验收标准一致。

DSH 和 Pi 能共用会话文件吗?

不要假设格式通用。可以复制项目和纯文本交接说明,但应保留各自的会话文件。DSH Alpha 的版本迁移不是 Pi 会话导入器。

这个示例需要安装 plan-mode 插件吗?

不需要,简短的检查、修改、测试循环就够了。确实需要相应流程时再阅读官方 Pi 示例;加载扩展是单独的信任决定。

继续学习

查看验证证据并继续操作

对比已发布制品,或返回安装文档。