
1. 为什么 Codex 说“任务完成”时你反而更不敢 Merge你让 Codex 修一个权限判断的 Bug。十几分钟后它回你一段话代码已修改、测试已通过、相关文件已检查、任务完成。看起来一切正常但你准备 Merge 的时候手还是会停在 Diff 按钮上——先看看它到底改了什么再确认有没有碰到不该碰的文件最后把关键测试重新跑一遍。这个反直觉的现象就是 AI Coding 进入 Agent 阶段后最真实的信任困境模型完成任务的能力越来越强但人对结果的确认需求并没有同步下降。以前 AI 能力弱你担心的是“它到底能不能做出来”现在 AI 越来越强问题变成了“它说做完了我到底能不能相信”。核心检索词先摆在这里AI Coding 结果可验证性指的是一个 Agent 任务交付之后你能不能在可接受的时间内用可复现的证据判断它是否真的做对了。它适合所有把 ChatGPT、Codex 这类工具接进真实工程的人——尤其是已经开始让 Agent 跑多文件、多步骤任务的开发者。问题已经不只是模型准确率。Agent 进入真实工程以后一个新的能力开始变得重要可验证性。这篇文章不讲空泛的“要相信 AI”而是给你一套可复制的验证配置和逐步校验动作让 AI 产出变成可控的验收流程。2. 执行距离变长后测试通过为什么仍然不等于任务正确以前为什么没有这么明显的信任问题因为 AI 承担的任务很小。帮你写一个函数、解释一段代码、生成一个 SQL、补几个测试结果就在眼前你看几分钟大概就能判断对不对。这种情况下生成结果约等于可检查结果。但 Agent 模式改变了这个关系。你可以直接告诉 Codex“帮我调查这个 Bug找到原因修改代码并运行测试。”然后它自己搜索仓库、读取文件、建立假设、运行命令、修改代码、执行测试、发现问题、再次修改最后告诉你 Done。这时候你看到的已经不是完整工作过程而是整个长任务被压缩以后留下来的最终结果。这里有个概念值得记住人与 AI 结果之间的执行距离。以前你让 AI 写 20 行代码它返回 20 行代码执行距离非常短。现在你让 Agent 修复一个问题中间可能发生几十次操作你的输入和最终结果之间隔着搜索、判断、工具调用、文件修改、测试、重新规划、再验证。执行距离越长中间存在越多你没有直接参与的决策。于是即使最终测试通过人也会自然产生一个问题测试通过证明了什么假设 Codex 修复一个权限 Bug最后告诉你 42 个测试全部通过。听起来很好但测试通过只能证明现有测试覆盖到的行为没有失败它不一定证明修改范围合理、业务规则没有变化、安全边界没有变化、没有引入新的隐藏风险。举个具体例子。一个权限问题AI 最简单的解决方式可能是放宽某个判断。测试通过了Bug 也消失了。但如果这个判断本身承担着安全边界问题其实不是被正确修复而是限制被绕开了。从代码执行角度是成功从业务角度可能错误从安全角度甚至可能更危险。所以真正可靠的 Agent 结果不能只有一个 PASS。真正的验证不是一个动作而是一条 Evidence 链。很多人说“我已经验证过了”实际上可能只是跑了一次测试。但真实工程中的验证至少存在几个不同层面的证据功能证据程序能不能运行、测试有没有通过、修改证据Diff 是否符合原任务、有没有修改不相关文件、有没有扩大 Scope、业务证据结果是不是符合真实业务约束、有没有改变没有写进测试里的规则、风险证据权限、安全、数据、兼容性有没有发生变化。真正能够支持“这个 Agent 任务可以接受”的不是一个测试结果而是一整条 Evidence Chain功能正确 → 修改合理 → 业务符合 → 风险可接受。当这条链完整时AI 结果才真正接近可信。3. 可复制的验证配置把 Evidence 链写进 Codex 工作流要让验证变成 Workflow 的一部分而不是每次靠人从头调查最有效的做法是在任务开始前就把验收标准固化下来。下面这套配置可以直接复制到你的项目里配合 Codex 或 ChatGPT 的 Agent 模式使用。第一步在仓库根目录放一个AGENTS.md把任务边界和必须输出的证据写清楚。Codex 会读取这个文件作为行为约束# AGENTS.md ## 任务完成定义 一个任务只有在同时满足以下条件时才算完成 1. 目标行为已实现且有对应测试覆盖 2. 未修改本文件列出的受保护路径 3. 输出完整的 Evidence 摘要 ## 受保护路径原则上不允许修改 - src/auth/** - src/billing/** - migrations/** ## 必须运行的验证命令 - npm run lint - npm run typecheck - npm run test -- --coverage ## 任务完成后必须输出 - 修改文件清单及每个文件的修改原因 - 核心 Diff 摘要不超过 30 行 - 已运行的验证命令及结果 - 未验证的部分及原因 - 潜在风险点第二步如果你用 Codex CLI可以在项目里加一个codex.toml把模型和验证命令绑定避免每次手动指定# codex.toml model gpt-5-codex approval_policy on-request [sandbox] mode workspace-write allowed_commands [ npm run lint, npm run typecheck, npm run test, git diff --stat ] [instructions] file AGENTS.md第三步如果你用 Claude Code 或类似的 Agent 工具把同样的约束写进settings.json让验证命令成为任务收尾的固定动作{ permissions: { allow: [ Bash(npm run lint), Bash(npm run typecheck), Bash(npm run test:*), Bash(git diff --stat) ], deny: [ Bash(git push), Bash(rm -rf:*) ] }, env: { AGENT_EVIDENCE_MODE: strict } }这三件套的核心逻辑是一致的Base URL Key Model ID 要明确验证命令要固定输出格式要约束。当你把这些写进配置文件Agent 每次完成任务时就会自动带上 Evidence 摘要而不是只回你一句“任务完成”。如果你需要统一管理多个模型的调用凭证可以把 Base URL 指向https://taotoken.net/api在 API Keys 页面生成 Key再在配置里填入对应的 Model ID。这样 ChatGPT、Codex、Claude Code 可以共用一套接入方式验证流程也不用为每个工具重写一遍。配置完成后你的任务流程会从“AI 做完 → 人从头调查”变成“AI 执行 → 同时积累 Evidence → 人检查关键证据”。人的角色从重新做一遍任务变成检查证据链是否完整。4. 验证请求与成功结果一次完整的 Evidence 校验配置写好之后怎么确认它真的生效了下面是一次完整的验证请求过程你可以照着走一遍。先发起一个带明确验收标准的任务。在 Codex 里输入修复 src/auth/session.ts 中 token 过期后未正确清理缓存的问题。 要求 1. 只修改 src/auth/session.ts 和对应测试文件 2. 运行 npm run test -- src/auth 3. 输出修改文件清单、核心 Diff、测试结果、未验证部分任务完成后你期望看到的不是一句“已完成”而是类似这样的 Evidence 摘要修改文件 - src/auth/session.ts修复过期判断逻辑增加缓存清理调用 - src/auth/session.test.ts新增 2 个过期场景测试 核心 Diff - if (isExpired(token)) { return null; } if (isExpired(token)) { clearCache(token); return null; } 验证命令 - npm run test -- src/auth → 14 passed, 0 failed 未验证部分 - 未覆盖并发场景下的缓存竞争 - 未验证与 Redis 集群模式的兼容性 潜在风险 - clearCache 在极端情况下可能触发额外 IO需关注性能拿到这份摘要后你的校验动作分四步走。第一步核对修改文件清单是否落在允许范围内有没有碰到受保护路径。第二步看核心 Diff 是否与任务目标一致有没有扩大 Scope。第三步确认验证命令真的运行了结果是否可复现——你可以自己再跑一遍npm run test -- src/auth。第四步重点看“未验证部分”和“潜在风险”这两项才是决定你能不能接受结果的关键。如果一切正常你会看到测试真实通过Diff 范围可控未验证部分有明确说明。这时候你才真正具备接受结果的依据。反过来如果 Agent 只回了“任务完成”没有任何 Evidence那说明你的配置没有生效或者任务描述里没有强制要求输出。对于需要长期跑复杂 Agent 任务的场景可以把这套验证流程和 Coding Plan 结合使用让高强度任务有稳定的调用额度支撑同时保持验证标准不降级。如果你只是想先验证某个模型在 Evidence 输出上的表现可以直接在 模型对话 里试一轮确认输出格式符合预期再接入工程。5. 常见报错排查401、local proxy failed、reading choices、OAuth配置和验证流程跑起来之后最容易卡住的地方往往不是模型能力而是接入层的报错。下面这几类是我实际遇到过的对照排查基本能定位。401 Unauthorized。最常见的原因是 Key 没有正确注入。检查你的配置文件里 Key 是否写在了正确的位置比如codex.toml里不应该直接写 Key而应该通过环境变量注入export TAOTOKEN_API_KEYsk-你的key然后在配置里引用env:TAOTOKEN_API_KEY。如果你用的是settings.json确认env字段的层级没有写错。401 的另一个原因是 Base URL 写成了带路径的形式正确写法是https://taotoken.net/api不要在后面追加/v1或/chat/completions具体路径由客户端自己拼接。local proxy failed。这个报错通常出现在你本地起了转发服务但端口没对上。检查你的客户端配置里 Base URL 指向的端口和实际服务监听的端口是否一致。如果你没有自己起代理而是直接用官方 API 地址那这个报错一般不会出现。出现时优先确认是不是配置文件里残留了旧的本地地址。reading choices 相关报错。这类报错通常意味着返回体结构和你客户端期望的不一致。常见原因是 Model ID 填错了比如把gpt-5-codex写成了gpt-5导致返回格式不匹配。对照 接入文档 里的模型列表确认 Model ID 拼写完全一致。另一个原因是流式和非流式模式混用检查客户端是否开启了 stream而服务端返回的是非流式。OAuth 相关报错。如果你用的是 Claude Code 这类需要 OAuth 的工具报错通常出现在 token 过期或回调地址不匹配。检查你的 OAuth 配置里回调地址是否和工具要求的一致token 是否需要重新生成。对于 Codex 的auth.json确认文件路径和权限正确{ base_url: https://taotoken.net/api, api_key: sk-你的key, model: gpt-5-codex }这三件套——Base URL、Key、Model ID——任何一项写错都会导致接入失败。排查时按这个顺序逐个确认比盲目改配置快得多。还有一个容易被忽略的点Agent 任务跑完后没有输出 Evidence 摘要。这不是报错而是配置没生效。检查AGENTS.md是否在仓库根目录、codex.toml里的instructions.file是否指向了正确文件、客户端是否真的读取了这些配置。有些工具需要重启会话才会重新加载配置。6. 把验证成本降下来而不是让自己检查更多很多人发现不敢相信 AI 以后会走向另一个极端每一行都人工检查。这其实会把 AI 节省的时间重新消耗掉。更好的方法是让验证本身变成 Workflow 的一部分。复杂任务开始前就明确什么算完成、哪些行为不能变化、哪些测试必须运行、哪些文件原则上不能修改。任务完成时要求 Agent 输出修改范围、核心 Diff、验证结果、潜在风险、未验证部分。这样做的本质是把“AI 做完 → 人从头调查”变成“AI 执行 → 同时积累 Evidence → 人检查关键证据”。Agent 越强Evidence 反而越重要。因为模型越强我们会把更大的任务交给它。以前让 AI 改一个函数失败成本有限现在让 Agent 修改多个模块、完成完整 Feature、处理数据库迁移、修复复杂线上问题一次任务影响的系统范围正在扩大。即使错误率下降单次错误的影响范围也可能上升。这和自动驾驶有一点类似。真正决定系统能不能被大规模使用的不只是“它大多数时候开得对不对”还包括出现关键情况时我们能不能知道它为什么这样判断、风险在哪里、有没有证据支持这个决策。AI Coding 进入 Agent 阶段以后也开始面对类似的问题。未来真正稀缺的可能不是生成能力而是证明能力。代码生成越来越便宜Agent 执行也会越来越快那么未来真正昂贵的东西是什么可能是证明 AI 做的是对的。这会让软件开发的价值链发生变化以前大量时间花在写代码未来越来越多时间可能花在定义验收标准、建立测试、检查 Diff、验证业务约束、确认风险边界。开发者的角色会逐渐从代码生产者转向目标定义者加 Evidence 判断者。这也是为什么随着 Agent 能力提高测试体系、规则文件、CI、自动化验证的重要性反而会上升而不是下降。Agent 自主性越高系统越需要可验证性。判断自己的 AI 结果到底好不好验证可以问四个问题。第一它到底改了什么你能不能快速知道修改文件、修改范围、关键逻辑变化。如果需要重新读半小时代码才能知道可验证度已经下降。第二为什么这样改Agent 有没有留下足够信息解释问题原因、选择方案、为什么没有选择其他方案。如果只有“任务已完成”可验证度很低。第三什么证据证明它是对的有没有测试、Lint、类型检查、关键业务验证、安全检查而不是单纯一句“应该没问题”。第四还有什么没有被验证这是最容易被忽略的。真正好的 Agent 结果不只是告诉你“我验证了什么”还应该让你知道“哪些东西我没有验证”因为未知边界本身就是风险的一部分。如果你的日常任务主要是小功能、Bug 修复、局部代码修改、简单项目AI 完成以后 Diff 很容易理解、测试结果清楚、业务影响范围有限你几分钟就能判断是否可以接受那么你的结果可验证度很高核心需求仍然是提高单任务效率。如果你每天都在运行复杂 Codex 任务、大型仓库、长时间 Agent Workflow、跨模块修改、多个任务同时推进每一个任务都产生大量代码、Diff、测试结果、工具执行记录、风险判断这时候真正的工作负载已经从生成代码变成管理 Agent 结果和 Evidence。Agent 真正成熟的标志不是“做完”而是“能够证明做对了”。以后看到 Codex 告诉你 Task completed不要只问“测试通过了吗”还应该问“为什么这个结果值得接受”。如果一个 AI 任务能够留下完整 Evidence目标满足、修改合理、业务符合、风险可接受那么你才能真正放心地把更多工作交给 Agent。所以 Agent 时代真正的信任不应该来自“模型很强”而应该来自“我有足够证据知道它做对了”。未来 AI Coding 真正拉开差距的也许不是谁生成得最多而是谁能够用最低的验证成本建立最可靠的 Evidence 链。