先计划,再行动
先计划,再行动,是在调用工具前写下工作及完成条件。清单记录意图与进度,工具结果证明实际发生了什么。两者保持一致,才能发现未完成项,尤其是检查失败后需要修复并调整计划时。
计划像工单。写上“修复清理函数”不会修改代码,勾选这一行也不会。它的作用是把要求、实际工作和完成证据连接起来。
计划如何与执行配合
每项计划应有可观察的结果。“处理姓名”难以验收,“用当前清理函数运行两个选定样例,并比较输出”则有明确完成条件。
本课使用 pending、in_progress、completed 三种状态。选中任务后进入进行中,工具随后修改产物或返回检查结果,更新计划则是另一项操作。检查失败只是观察结果,不会自动修复产物,也不会凭空增加修复任务。
凭证据完成 策略在标记完成前检查完成条件。验证失败时,本教学 harness 插入已知修复,执行后再验证。做过就勾选 策略则在工具尝试后直接标记完成,即使检查失败;失败结果仍保留,便于对照。
这两者是明确的 harness 策略,todo 状态字段本身不强制任何一种。工具调用 中的区别仍适用:执行组件产生工具效果,进度更新只描述工作。
先计划,再行动逐步演示
默认选择 凭证据完成 与 包含内部空格。目标是去除姓名两端的空格、保留内部空格,并添加用法示例。清理函数和用法产物初始都不存在。
写出完成条件
初始计划有三个待办:
| 任务 | 工作 | 完成条件 |
|---|---|---|
| t1 | 编写姓名清理函数 | 函数已保存 |
| t2 | 检查样例 | 当前版本通过两个选定检查 |
| t3 | 添加用法示例 | 示例已保存 |
此时没有调用工具,也没有产物。保存实现和验证行为分开,因此 t1 完成不能证明实现正确。
保存草稿,再更新计划
harness 激活 t1,保存预设草稿的第 1 版。它删除所有 ASCII 空格。写入那一步,产物已存在,t1 仍是 in_progress;下一步工具结果确认保存版本,再下一步更新计划才将 t1 标为完成。
然后激活 t2,在第 1 版运行两个检查:
| 输入 | 预期 | 实际 | 结果 |
|---|---|---|---|
" Ada " | "Ada" | "Ada" | 通过 |
" Ada Lovelace " | "Ada Lovelace" | "AdaLovelace" | 失败 |
第一个只检验两端空格,第二个还检验内部空格。删除全部空格能通过第一个,却破坏第二个。播放器用点显示空格,实际字符串仍用普通空格。
根据失败调整计划
验证仍未完成。证据策略在 t2 前插入 t4 Preserve inner spaces,把 t2 放回 pending。计划变为 t1、t4、t2、t3,完成计数从 1/3 变成 1/4:发现了新工作,已完成的 t1 没有丢失。
此时修复已写进计划,但清理函数仍是第 1 版,仍会删掉内部空格。清单与工作台同时显示,正是为了看清这个区别。
harness 激活 t4,保存预设修复的第 2 版,只删除开头和结尾的 ASCII 空格。旧检查针对第 1 版,因而标为 stale。它保留历史价值,却不能证明新版本正确。收到保存结果后,再把 t4 标为完成。
重新检查,完成剩余工作
harness 再激活 t2,用第 2 版运行新检查,输出分别为 "Ada"、"Ada Lovelace",两项通过。现在才能依据当前版本的证据将验证标为完成。
最后 t3 保存示例 " Ada " -> "Ada",再单独更新状态。审计显示 4/4 任务标为完成,2/2 检查通过。默认共五次工具调用:草稿写入、首次检查、修复写入、再次检查、示例写入。
清单全部完成能证明什么
选择 全部勾选,结果仍错。场景在验证前暂停,草稿和含内部空格的输入都相同。检查失败后,尝试策略直接把 t2 标为完成,再写示例;既不插入修复,也不再次检查。
最终清单为 3/3 完成,检查却只有 1/2 通过,边界输入仍输出 "AdaLovelace"。审计只读取记录,不会暗中修复差异。
简单样例能通过 使用 " Ada " 与 " Grace "。草稿能通过两项,因此两种策略都得到三个完成项和两项通过检查。但它们没有覆盖内部空格要求,不能据此判断遗漏的姓名格式。
本课没有测量模型完成率。比较确定性策略,只能说明进度记录证明什么,不能说明语言模型有无计划时的成功概率。Claude Agent SDK todo 指南 介绍结构化状态更新,也说明有些模型默认无需书面 todo 仍会跟踪多步工作。
边界情况
- 失败后计划增长。 分母从三变四可能表示发现新工作。稳定任务 ID 能保留完成历史。
- 验证后产物又改变。 结果只适用于检查过的版本,修复名称正确也不能代替重新检查。
- 选定检查全通过。 仍要看覆盖范围,简单姓名遗漏了内部空格行为。
- 任务过宽。 编写与验证需要不同证据时,应拆开,否则 completed 会掩盖到底完成了哪部分。
常见错误
- 把计划动作当成已执行。 查看产物或工具结果,新加一行不会产生工具效果。
- 测试命令返回就标记验证完成。 已结束的调用也会报告失败,必须读结果。
- 复用过期证据。 把检查与其对应的产物版本一起记录。
- 认为书面计划保证成功。 计划揭示承诺和进度,效果取决于执行规则及检查覆盖。
跨进程重启或带依赖的工作见任务系统。任务图与持久化解决的问题,不同于让本地清单和结果保持一致。
可以怎样比较
先选 执行第一个工具之前,预测写计划会改变哪个产物,再推进到写入和标记完成的步骤。比较 检查失败后修复 与 全部勾选,结果仍错,保持内部空格样例,只改完成规则。最后用 简单样例能通过 检查“测试全过”是否覆盖完整目标。
模型的简化
任务、初始草稿、修复均为预设,不是模型生成或发现的。浏览器在内存中执行字符串变换与检查。harness 仅允许一个活动任务、一个已知修复和两个使用 ASCII 空格的样例,省略模型规划、工具故障、并发、持久化和任意输入。本课不能替代智能体设计或软件验证训练,通过这些样例也不是所有姓名都正确的证明。