AI 编程为什么需要“证据链”?

TL;DR

从 diff、终端日志、测试和真实操作出发,解释 AI 编程 Agent 的完成声明为什么需要可复现证据。

AI 说“功能已完成”只是声明,真正可靠的结果还需要 diff、终端日志、测试结果和真实操作共同证明。本文解释不同证据能说明什么,以及如何设计任务收尾模板。

AI 编程为什么需要“证据链”?

AI 编程 Agent 完成任务后,常常会给出一段很有把握的总结:“功能已实现,测试已通过。”但这句话本身只是声明,不是证据。真正值得信任的结果,应该能沿着一条证据链回看:它改了什么文件,执行了哪些命令,测试覆盖了什么,哪些步骤没有完成,最终行为是否符合需求。

证据链解决的是“它真的做了吗”

代码 diff 能证明文件发生了什么变化,却不能证明功能在真实环境中可用;终端日志能证明命令执行过,却不一定证明命令检查了正确路径;测试结果能证明断言通过,却不一定覆盖用户真正关心的行为。不同证据解决不同问题,不能用一类证据替代全部。

可以把结果拆成四层:

证据 能说明什么 不能单独说明什么
文件与 diff 修改了哪些内容 修改是否符合需求
命令与日志 做过哪些执行 目标环境是否完全一致
测试与检查 某些条件下结果通过 未覆盖场景是否安全
真实操作与截图 用户路径是否可用 代码长期可维护

只有把这些信息放在一起,人才能判断“完成”是不是有充分依据。

为什么模型总结容易过度自信

模型倾向于把当前轨迹整理成一个连贯故事。如果某个命令超时、测试没有被发现,或者只运行了局部检查,它可能仍然把结果描述成“已验证”。这不一定是有意欺骗,而是语言生成天然倾向于给出完整结论。

因此,工作流要让工具返回结构化状态:命令退出码、测试数量、失败用例、修改文件、网络调用和等待中的任务。让 AI 引用这些结果,而不是让它凭记忆写总结。

一份适合 Vibe Coding 的任务收尾模板

任务结束时要求 Agent 回答:

  1. 需求中哪些部分已经完成?对应哪些文件和行为?
  2. 运行了哪些构建、类型检查、单元测试或浏览器测试?结果是什么?
  3. 哪些验证没有运行,原因是什么?
  4. 还存在什么假设、风险和待人工确认事项?
  5. 如果需要回滚,应该回退哪个提交或删除哪一组变更?

这份模板不等于质量保证,但能让不确定性显形。一个明确写出“没有运行生产数据迁移测试”的结果,通常比一句笼统的“全部完成”更有价值。

证据也可能被伪造或污染

测试日志可能来自错误的分支,截图可能展示了假数据,模型还可能修改测试让结果变绿。高风险任务需要把检查放在 Agent 难以随意改动的环境中,并由独立流水线重新运行。证据最好由工具直接产生,关键结论要能被人复现。

OpenAI 对 coding agent 的设计强调终端日志、文件引用和测试结果,就是为了让用户可以验证过程,而不是只接受最终文本。对任何工具都适用的原则是:声明要有证据,证据要能复现,无法验证的部分要明确标记为未知。

来源

KEEP READING