浏览 AI使用教程
报错时该给 AI 哪些材料,才能得到可验证的修复
只给 AI 一张截断报错图,它只能猜。补齐复现命令、完整堆栈、输入、版本和最近改动,才能把修复从建议变成可验证结论。
沿完整工作流推进
前一阶段的可检查结果,是下一阶段的输入;中间证据不足时停在当前阶段。
同一句 undefined 报错,缺少现场信息就可能有五种答案
报错提问只有一张截断截图:“Cannot read properties of undefined”。AI 给了五种猜测,没人知道运行命令、输入、版本和最近改动。
- 另一环境可以复现
- 完整错误和最近 diff 可用
- 修复用原复现步骤验证
先确认这次任务的起点、边界和交付
| 需要确认 | 本例内容 |
|---|---|
| 现有材料 | Node.js 20+;order.mjs与order.test.mjs。请求契约允许省略items,但旧计算函数未处理。 |
| 不能越过的边界 | 复现包只放解决问题所需内容,秘密脱敏;保留完整错误文本和最小复现;预期与实际分开。 |
| 要交付的结果 | 复现包:命令、版本、完整错误和最近改动 |
从“记录最小复现”走到“修复后跑三类验证”
| 当前阶段 | 实际处理 |
|---|---|
| 记录最小复现 | 从干净起点写命令或点击步骤、输入、实际结果和期望结果,确认是否每次发生。 |
| 保存完整错误 | 不要只截最后一行;保留时间、退出码、堆栈、请求 ID、相关日志和首次异常。 |
| 补环境与变化 | 写系统、运行时、依赖、分支、配置来源和最后一次可用版本,列最近实际 diff。 |
| 形成单一根因假设 | 说明证据为何指向某层,以及怎样用最小实验证伪;不要同时改依赖、配置和代码。 |
| 修复后跑三类验证 | 重跑原复现、目标测试和相邻回归,记录前后输出与回滚方式。 |
同一复现包的全部文件
order.mjs
有缺陷的旧代码
export function total(order) {
return order.items.reduce((sum, item) => sum + item.cents, 0);
}order.test.mjs
缺失与正常输入
import test from 'node:test';
import assert from 'node:assert/strict';
import { total } from './order.mjs';
test('缺失items视为空订单',()=>assert.equal(total({}),0));
test('正常订单',()=>assert.equal(total({items:[{cents:125},{cents:75}]}),200));命令
保留真实完整堆栈
node --version node --test order.test.mjs > repro.log 2>&1
契约变化与候选diff
只验证一个假设
旧契约:必须传items数组。 新契约:可省略items,省略代表空订单。 - return order.items.reduce((sum, item) => sum + item.cents, 0); + return (order.items ?? []).reduce((sum, item) => sum + item.cents, 0);
修复后用同一命令复测。items为字符串或金额缺失是否拒绝是另一个契约问题,不在此处猜。复现包附实际repro.log、Node版本、两份文件及diff,不截掉堆栈。
把完整报错现场交给 AI,而不是只发一句‘运行失败’
适合已经能够稳定复现、并保留完整错误和环境信息时。
可复制使用
把完整报错现场交给 AI,而不是只发一句‘运行失败’
我们有一个可复现故障。请做分步诊断,不要一上来列十种猜测、重装依赖或清空缓存。 期望行为/实际行为【】;精确复现步骤【】;完整错误和前后日志【】;系统、版本、运行目录【】;最近一次正常状态【】;已尝试操作【】。 先把事实和未知分开,给最多三个能被证伪的原因,每个原因对应一项低风险检查。每轮只给一个最小命令或操作,并说明预期观察;等我贴结果后再更新判断。修复前不得改变环境;任何命令可能删除文件、改配置、联网或影响共享服务时先停下来说明。
使用范围:适合已经能够稳定复现、并保留完整错误和环境信息时。不要根据错误关键词直接下结论,不虚构命令输出,不先重装或删除环境。
完成后的复现包:命令、版本、完整错误和最近改动
旧实现对{}应抛读取reduce的TypeError;修复为缺失时使用[]后,两条测试应通过。实际堆栈和路径由终端产生,不声称另一台机器已复现。
为什么“材料很全,AI 仍给出多个不相关修复”还不能交付
材料很全,AI 仍给出多个不相关修复
- 原因
- 没有说明哪个假设已被排除
- 怎么改
- 把每次实验、唯一改动和结果写入时间线,要求下一建议能被单独证伪
