本节对应 Validation loops。重点是让检查结果影响后续动作。

问题

完成一次编辑之后,Agent 认为“看起来已经做好了”,直接交付。若没有检查结果,遗漏或错误可能仍在。

验证也可能只是走过场:命令已经失败,却没有查看错误,仍然报告完成。

解决方案

把“执行工作 → 验证 → 根据错误修正 → 再验证”写成一个循环。修正后重跑覆盖原问题的检查,并确认相关行为没有被破坏。

与上一节的清单相比,这里新增的是根据验证结果决定下一步:失败时回到修正,再次验证;通过后才继续后续工作。

验证器应检查明确条件。验证器通过只说明它覆盖的检查通过,不等于所有可能的问题都已消失。

最小示例

官网原例:编辑后验证,失败后修正并重试

下面是官网示例的中文译文,命令与目录保留原样。这是放在 SKILL.md 正文中的片段:

## 编辑工作流

1. 完成编辑。
2. 运行验证:`python scripts/validate.py output/`。
3. 如果验证失败:
   - 查看错误信息。
   - 修正问题。
   - 再次运行验证。
4. 只有验证通过后才继续。

逐步看,这几行分别解决了什么问题:

步骤对 Agent 的要求
完成编辑先产生要检查的结果
运行验证用明确的方法检查 output/,不能只凭“看起来正确”判断
失败后修正并再次验证读取错误、修改结果,再检查修改是否有效;仍失败就继续这个循环
通过后才继续将验证结果作为进入后续工作的条件

关键是第 3 步。只写“编辑,然后验证”,没有交代检查失败后如何处理;补上“修正后再验证”,才形成反馈循环。

这里的 scripts/validate.py 是官网的示例路径。本页未提供该脚本,也未运行这条官网示例命令。实际使用时,需要项目中存在的验证方法。官网还说明,验证可以采用脚本、参考清单或自检,也可以要求 Agent 在交付前对照参考文档检查结果。

“只有验证通过后才继续”仍是给 Agent 的行为指令。若要由程序强制阻止跳过验证,需要另行接入检查结果与放行控制;这一边界与上一节相同。

可选练习:在本站观察一次失败与复查

先理解上面的官方例子即可。下面保留本站已有的可运行练习,供需要观察实际输出时展开。

展开本站修复练习:完整 Skill、运行命令与已有验证记录

下面是将官网循环用于修复任务的完整教学文件,名称、描述和具体步骤是本站的教学改写:

---
name: fix-and-verify
description: 修复当前项目中已有失败测试所揭示的问题,并验证修复结果时使用。
---

1. 运行现有测试,记录失败用例与错误。
2. 根据失败原因检查相关实现并修正。
3. 重新运行同一组测试。
4. 仍然失败时,分析新结果并继续修正。
5. 检查通过后,报告修改与验证证据;无法继续时说明原因。

本站已有一份空输入练习。下面的命令从仓库根目录创建临时副本,原始练习文件保持可复用:

repo_root=$PWD
lab_case_dir=$(mktemp -d /tmp/s07-validation.XXXXXX)
python3 examples/s07-skills-lab/tools/new_case.py \
  --destination "$lab_case_dir/case" --case empty-list
cd "$lab_case_dir/case"
python3 -m unittest discover -s tests -v

2026-10-13 本地实际运行的输出节选:

test_empty_input (test_contracts.InputContract.test_empty_input) ... ERROR
IndexError: list index out of range
FAILED (errors=1)

为了只观察验证循环,这里直接用练习包中正确的基线文件恢复实现,再运行相同测试:

cp "$repo_root/examples/s07-skills-lab/project/src/normalize.py" src/normalize.py
python3 -m unittest discover -s tests -v

实际复查结果为三项测试通过,退出码从 1 变为 0。这一步是教学用的已知修复,不是模型自行诊断和修复的记录。

这些记录验证了隔离练习中的命令行为。若要评估这份 Skill,还需观察 Agent 是否真的根据错误修正、重跑,并如实报告结果。

怎样检查

沿执行记录检查三个问题:

  1. 编辑后真的验证了吗? 找到实际使用的验证方法与结果,不能只有“已完成”的声明。
  2. 失败后真的回到修正了吗? 如果出现失败,应能找到错误信息、对应修改和再次验证的结果。
  3. 通过后才继续了吗? 核对最后一次验证是否通过,而不是只看命令有没有运行过。

首次验证就通过时,可以直接继续,不需要刻意制造失败。要检查失败后的循环是否有效,则需要一个会触发失败的用例,并保留“失败 → 修正 → 再验证”的证据;无法继续修正或验证时,应说明阻碍,不能报告为已通过。

上一节:检查清单 · 下一节:执行前验证计划