本节对应 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 是否真的根据错误修正、重跑,并如实报告结果。
怎样检查
沿执行记录检查三个问题:
- 编辑后真的验证了吗? 找到实际使用的验证方法与结果,不能只有“已完成”的声明。
- 失败后真的回到修正了吗? 如果出现失败,应能找到错误信息、对应修改和再次验证的结果。
- 通过后才继续了吗? 核对最后一次验证是否通过,而不是只看命令有没有运行过。
首次验证就通过时,可以直接继续,不需要刻意制造失败。要检查失败后的循环是否有效,则需要一个会触发失败的用例,并保留“失败 → 修正 → 再验证”的证据;无法继续修正或验证时,应说明阻碍,不能报告为已通过。