按照你实际提出的要求,复核 AI 的代码修改
本文目录
复核 AI 生成的修改时,把三件事对应起来:要求的行为、实际改动的代码,以及支持这些改动的检查。清晰的完成说明是一个有用的起点;补丁和相关结果,才能帮助你判断可以接受什么。
不同修改不必采用相同的复核方式。文案调整和数据迁移需要不同的检查。下面的工作表可以帮助你选择与实际任务相符的检查,避免直接接受一句笼统的“测试通过”。
把请求整理成一张简明的复核表
阅读补丁前,先明确你要求的修改,以及它应保留的行为:
要求的结果:
[什么行为应该发生变化?]
修改边界:
[哪些文件、行为或组件属于这项任务?]
保持不变:
[哪些现有行为需要保留?]
所需检查:
[哪些示例、测试或检查可以支持这个结果?]
实际证据:
[记录你实际查看或运行了什么,并附上对应引用。]
复核决定:
[接受这一范围/要求修正/还需要另一项检查。]
把“所需检查”和“实际证据”分开。在有记录的结果出现之前,一份测试名称清单仍然只是计划。
从一个小补丁开始
下面这个原创、虚构的 Python 示例,用一个小函数演示这种方法。
假设一个任务列表有状态筛选功能。请求是:
“让
all筛选项按现有顺序返回所有任务。保留按具体状态筛选的行为。空输入仍应产生空结果。把修改限制在visible_tasks内。”
初始函数如下:
def visible_tasks(tasks, selected_status):
return [task for task in tasks if task["status"] == selected_status]
它把每项任务的状态与选定值进行比较。拟议修改为 all 增加一个独立分支:
def visible_tasks(tasks, selected_status):
+ if selected_status == "all":
+ return list(tasks)
return [task for task in tasks if task["status"] == selected_status]
在这个示例中,输入是由任务字典组成的列表,每个字典都有 status 值,all 则保留为筛选选项。这些假设很重要:补丁没有定义格式不正确的记录应该怎样处理,也没有定义任务本身的某个其他状态恰好叫 all 时该怎么办。
把每一项要求对应到证据
| 要求的行为 | 从补丁中可以看出什么 | 应检查什么 |
|---|---|---|
all 返回所有任务 |
独立分支把输入项转换为列表返回 | 使用多种状态,检查所有返回项 |
| 顺序保持不变 | 该分支没有对输入项排序 | 使用刻意混排的输入顺序 |
| 保留按具体状态筛选 | 原有筛选表达式仍然存在 | 同时检查匹配与不匹配的任务 |
| 空输入仍为空结果 | 两个分支都可能返回空列表 | 用空任务列表分别检查 all 和某个具体状态 |
| 修改仅限于该函数 | 展示的 diff 在函数内增加了两行 | 查看完整仓库改动,不能只看这段摘录 |
最后一行很容易漏掉。代码片段可能展示了合适的修复,但完整改动还可能包含无关的设置调整或生成文件。判断范围是否正确之前,先查看完整的改动范围。
使用具体的示例检查
对于这个虚构函数,以下检查表达了要求的行为:
tasks = [
{"id": "b", "status": "waiting"},
{"id": "a", "status": "done"},
{"id": "c", "status": "waiting"},
]
assert [t["id"] for t in visible_tasks(tasks, "all")] == ["b", "a", "c"]
assert [t["id"] for t in visible_tasks(tasks, "waiting")] == ["b", "c"]
assert visible_tasks(tasks, "missing") == []
assert visible_tasks([], "all") == []
assert visible_tasks([], "waiting") == []
这些只是针对这个小函数的示例检查。在真实应用中,你可能还需要集成检查,确认 UI 发送了预期的筛选值,并展示返回的任务。函数级检查通过,并不能证明整个页面正确。
使用项目平常采用的验证工具。如果运行了某项检查,记录实际结果,以及它覆盖的是哪个版本的改动。如果只是阅读了代码,就写“已查看”,不要描述成测试运行成功。
在复核中写清下一步
下面是一份填写完整的虚构补丁复核,依据是阅读代码摘录,没有声称运行过测试:
要求的结果:
all 筛选项按输入顺序返回所有任务。
按具体状态筛选和空输入的行为保持不变。
已查看:
visible_tasks 中新增的两行分支。
按具体状态筛选的列表推导式没有变化。
仍需检查:
完整的仓库 diff。
针对实际实现运行示例断言。
调用方传入的筛选值,以及渲染后的任务顺序。
复核决定:
拟议分支符合所要求的函数级行为。
接受应用层修改前,先完成以上检查。
这份复核的用处在于明确了接下来的检查。它不需要表现得比已完成的工作更有把握。
处理意料之外的额外修改
假设同一个补丁还重命名了整个界面中的状态标签。请追问:哪一项要求使这个修改成为必要?它可能是真实依赖,也可能属于另一项工作。
可以这样给出有针对性的后续请求:
“新增的
all分支符合要求的行为。标签重命名超出了原任务范围。请说明筛选修复是否依赖这个改名;如果不依赖,把它从这次修改中分离。然后报告针对剩余补丁完成的检查。”
这样既保留了有用的工作,也让复核回到最初请求。编程工具得到的是具体修正要求,而不是一句模糊的“再仔细一点”。
完成复核时,把已接受的行为、相关证据和尚余范围分别记录。指令已发送、补丁已提出、修改已检查、结果已部署,是流程中的不同阶段。如果你在 CueSpec 的任务视图中查看这些状态,可以参考 Docs 中对送达回执与任务完成的说明。