过去用AI改代码时,开发者通常还能清楚看到整个过程。
你问它:
这个Bug可能在哪?
它给出几个猜测。
你再决定:
先查缓存,还是先查数据库。
然后你自己动手修改。
也就是说,过去AI更像一个:
建议者。
真正做决策的人,还是开发者。
但现在ChatGPT、Codex越来越像真正的Coding Agent以后,情况开始变化。
Agent可以自己:
搜索Repository。
分析调用链。
判断Root Cause。
选择修改方案。
决定改哪些文件。
运行测试。
失败后重新规划。
最后把一个完成后的Diff交给你。
这当然非常高效。
但也带来一个新的问题:
结果你看到了,可它为什么选择这个方案,你还看得清吗?
这就是Agent时代一个越来越重要的问题:
Decision Traceability——决策可追溯度
AI越能自己决定“怎么改”,开发者越需要保留足够的工程依据,去判断:
它为什么这么改。
一、未来最危险的不是“AI没解释”,而是“错误决策已经被代码固化”
假设你让Codex修一个偶发订单重复创建的问题。
Agent最后修改了:
幂等逻辑。
Retry流程。
部分测试。
最终所有测试通过。
你打开Diff,看起来也没有明显错误。
但真正值得问的是:
为什么它认为问题出在Retry?
它有没有排查过数据库重复写?
有没有检查消息重复消费?
有没有确认客户端重复请求?
它根据什么Evidence排除了其他方向?
如果这些都不知道,开发者实际上看到的只是:
Final Output
最终结果。
而没有看到:
Decision Basis
决策依据。
一旦最初判断错了,错误就可能已经被完整地写进代码。
二、以前人自己做决策,所以很多依据天然存在脑子里
传统Debug过程中,开发者通常会经历:
先怀疑A。
看日志后排除A。
再怀疑B。
跑测试以后发现B只在并发情况下出现。
最后确认C才是真正Root Cause。
这个过程中,很多决策依据没有写出来。
但开发者自己知道。
他知道:
为什么没改数据库。
为什么没碰缓存。
为什么最终选择这条修复路径。
所以Review代码时,他脑子里已经有完整上下文。
但Agent不同。
如果前面所有分析都由AI完成,最后人只看到Diff,那么过去存在于开发者脑子里的那部分信息就消失了。
这会形成:
Decision Gap
决策缺口。
三、为什么只Review Diff越来越不够?
Git Diff很擅长告诉你:
哪些文件改了。
哪几行新增。
哪几行删除。
但它无法自动告诉你:
为什么这些行必须改。
比如AI把一个Retry次数从3改成1。
Diff只有一行。
但这背后可能有完全不同的决策逻辑:
因为Retry制造重复写入?
因为上游已经有Retry?
因为这个接口不应该重试?
还是AI只是为了让测试通过临时降低次数?
代码长得一样。
决策质量可能完全不同。
所以未来Review Agent代码时,一个很重要的变化是:
Code Review → Decision Review
不仅Review代码本身。
还要Review:
这个修改是不是建立在正确的判断之上。
四、什么叫“决策依据”?
这里不需要让AI输出一大段内部推理过程。
真正有工程价值的决策依据,通常只需要几个东西。
第一:
Evidence
它看到了什么证据?
比如:
日志显示重复请求只发生在Retry以后。
第二:
Assumption
它基于哪些假设?
比如:
数据库唯一约束保持不变。
第三:
Alternatives
它考虑过哪些主要方案?
比如:
方案A:在客户端防重复。
方案B:服务端增加幂等。
第四:
Choice
为什么最终选择当前方案?
比如:
服务端幂等能覆盖所有调用来源。
这几项已经足够开发者判断:
这个方案是不是有根据。
五、最值得保留的是Evidence,不是漂亮解释
AI很会解释。
这反而容易制造一个问题:
一段听起来非常合理的文字,并不一定代表决策真的可靠。
所以真正高质量的Decision Trace应该优先保留:
Evidence Before Explanation
先证据,后解释。
比如不要只写:
我认为问题来自缓存竞争。
更好的方式是:
- 单线程无法复现;
- 两个并发请求都读取到旧版本号;
- 数据库写入正常;
- 清理缓存后问题消失。
然后再得出:
Root Cause更可能位于缓存刷新竞争。
这样开发者Review的不是:
AI的“自信程度”。
而是:
证据是否真的支持这个结论。
六、可以建立一个指标:Decision Traceability
未来可以给Agent任务看一个简单指标:
Decision Traceability Score
可以问四个问题。
Root Cause有Evidence吗?
不是一句猜测,而是真实证据。
关键Assumption明确吗?
哪些条件成立,方案才成立?
主要Alternative被考虑过吗?
有没有明显更安全的方案被忽略?
最终Choice和Goal是否直接相关?
还是为了顺手优化扩大了Scope?
如果这四件事都清楚,Decision Traceability就高。
如果Agent只是:
“我分析后认为应该这么改。”
那可追溯度就很低。
七、为什么长任务尤其需要Decision Checkpoint?
短任务里问题不大。
比如:
修一个明确语法错误。
改一个字段。
决策空间很小。
但长任务不一样。
它可能不断经历:
新Evidence。
新Hypothesis。
新方案。
方向切换。
如果这些都没有阶段性记录,任务跑到后面以后,开发者可能已经不知道:
当前方案究竟建立在哪个关键判断上。
所以复杂任务可以增加:
Decision Checkpoint
比如真正开始大范围修改前,先输出:
当前Root Cause。
关键Evidence。
准备采用的方案。
为什么不选其他主要方案。
预计影响范围。
然后再进入Implementation。
这样即使后面结果失败,也可以快速判断:
是执行错了,还是决策本身错了。
八、这能帮助区分两类完全不同的失败
AI任务失败以后,很多人会直接:
再试一次。
但失败其实至少有两类。
第一类:
Execution Failure
方向是对的,但实现出了问题。
比如:
测试漏改。
代码Bug。
边界条件没处理好。
这种情况继续修实现就可以。
第二类:
Decision Failure
最开始方案本身就是错的。
比如Root Cause判断错误。
继续在原方案上Retry,只会浪费更多时间。
如果没有Decision Trace,这两类失败很容易混在一起。
最后Agent可能一直在:
修一个本来就不该采用的方案。
九、为什么AI越自主,Assumption越需要显式化?
任何复杂工程任务都会有假设。
比如:
Public API不能变。
数据库Schema不能动。
当前问题只发生在某个调用路径。
某个外部服务返回是可靠的。
人类开发者往往默认知道这些条件。
但Agent不知道。
所以它会自己补充Assumption。
真正危险的是:
这些假设没有被说出来。
如果Agent默认:
“API可以修改。”
但真实需求是:
“必须向后兼容。”
那后续所有决策都可能偏离。
所以高影响任务开始前,可以要求Agent列出:
Critical Assumptions
尤其是会影响:
API。
数据库。
权限。
数据删除。
兼容性。
基础架构。
的假设。
十、决策依据还能大幅降低Review成本
这点很重要。
很多人会觉得:
记录Decision Trace会增加工作量。
但对于大型AI Diff来说,恰恰可能减少Review成本。
假设Agent改了12个文件。
没有任何说明。
Reviewer需要从代码重新推断:
为什么这么改?
哪些是核心修改?
哪些是副作用?
如果Agent已经明确:
Root Cause。
Chosen Approach。
Affected Components。
Unchanged Behavior。
Evidence。
Reviewer就可以直接围绕这些关键点检查。
这会从:
Reverse Engineering the Decision
反向猜AI为什么这么做,
变成:
Verify the Decision
验证AI的决策是否成立。
效率差别很大。
十一、真正好的Agent结果,不应该只交付代码
未来一个成熟Agent任务的输出,可能不只是:
Diff。
Tests Passed。
而应该包含一个很短的:
Decision Summary
例如:
问题:并发条件下可能重复创建订单。
Evidence:两个请求在幂等记录写入前同时通过检查。
选择:把幂等检查和写入放入同一事务。
未采用:客户端去重,因为无法覆盖Webhook和重试来源。
验证:并发Regression通过,现有API行为不变。
这几句话不会增加太多阅读负担。
但它让整个修改突然变得:
可审查。
十二、什么时候必须要求更完整的Decision Trace?
并不是每一个小修改都需要记录一堆东西。
真正需要提高追溯度的,通常是:
跨模块修改。
Root Cause未知的Bug。
公共API变化。
权限和认证。
数据库迁移。
安全敏感代码。
高风险配置。
也就是说:
Risk越高,Decision Trace越重要。
一个变量改名没有必要写设计文档。
但一个支付逻辑修改,如果只给一个Diff,就明显不够。
十三、Multi-Agent以后,这个问题会更加重要
未来可能不只是一个Agent做决策。
比如:
Agent A分析Root Cause。
Agent B负责实现。
Agent C负责Review。
如果Agent A只告诉B:
“改缓存逻辑。”
却没有告诉它:
Evidence是什么。
哪些方向已经排除。
为什么必须这么改。
那么B实际上是在继承一个:
Opaque Decision
不透明决策。
一旦A判断错误,B和C都会继续建立在错误前提上。
这会形成:
Decision Propagation
决策传播。
所以Multi-Agent真正需要传递的不只是:
结果。
还需要传递:
足够的决策依据。
十四、Plus用户为什么值得先解决Decision Traceability?
很多人感觉Codex任务失败后特别难恢复。
因为打开Session发现:
改了很多东西。
但自己已经不知道:
它为什么走到这里。
这时候问题不一定是:
模型不够强。
或者额度不够。
而是:
决策过程没有留下足够的工程状态。
如果每个关键阶段都保留:
Evidence。
Assumption。
Choice。
Checkpoint。
任务失败后会更容易:
Rollback。
Reframe。
重新执行。
同样的容量,浪费在错误方向上的比例会更低。
十五、什么时候Plus通常已经够?
如果你的日常任务主要是:
明确Bug。
中型Feature。
Review。
测试。
并且复杂任务已经能够:
保留关键Evidence。
显式化Critical Assumption。
高风险方案先做Decision Checkpoint。
Agent结果带简短Decision Summary。
那么Plus通常已经能承担大量真实开发工作。
因为任务不再只是:
“AI改完,我再猜它为什么这么改。”
而是形成:
可审查、可恢复的执行链。
十六、什么时候Pro才真正开始匹配?
更接近Pro的情况是:
你的Decision Traceability已经成熟。
复杂任务很少因为错误判断长期跑偏。
Decision Failure和Execution Failure可以快速区分。
Multi-Agent之间也能稳定传递Evidence和Decision。
但每天仍然存在大量:
复杂Repository。
长时间Agent任务。
跨模块任务。
高价值并行任务。
并且这些真正有效的任务仍持续受到容量限制。
这时候问题才真正从:
Decision Quality Problem
变成:
Capacity Problem
此时更高容量才更容易转化成更多可靠交付。
最后
AI越来越能自己决定“怎么改”以后,一个很容易被忽略的变化是:
开发者正在失去一部分天然存在的决策上下文。
以前你自己查、自己想、自己改。
所以你知道:
为什么选这个方案。
现在Agent可以自己完成整条链路。
你最后看到的可能只剩:
一份漂亮的Diff。
但代码正确与否,只是其中一层。
更重要的问题是:
这个修改是建立在什么证据上的?
它做了哪些关键假设?
为什么选这个方案,而不是另一个?
未来真正成熟的AI Coding,不需要把Agent的所有过程都展示出来。
但一定要保留:
足够让人审查关键工程决策的依据。
因为AI越自主,
真正危险的就越不是:
它没有做决定。
而是:
它已经做了一个很重要的决定,但没有人知道这个决定到底为什么成立。
这就是为什么Agent越强,
Decision Traceability反而越重要。
持续更新Codex、大模型开发相关技术内容。
长期使用各类代码大模型,整理了稳定的Plus/Pro会员订阅渠道,有需要可自取!