标准回答
一、为什么验证是瓶颈
2026 年 7 月 OpenAI 科学计算报告(poolId 17)量化揭示:大模型生成代码的能力飞速提升,但验证正确性的能力严重滞后。生成一个候选解法只要几秒,判断它是否正确可能要几小时。当生成成本趋零,价值从"能不能写出来"转移到"能不能确认它对",验证吞吐成为整条流水线的上限。
二、第一层设计:可验证性约束(Design for Verification)
破解验证瓶颈的第一性原理不是造更强的验证工具,而是让代码从一开始就容易被验证。把可验证性写进 Agent 的生成约束:①内置断言与不变量——代码自己声明"什么必须为真"(能量守恒、数值范围、量纲一致),运行时自动触发自我验证;②模块化契约——把复杂计算拆成可独立验证的小单元,每个单元有明确输入输出契约;③确定性优先——减少随机性、隐式状态、环境依赖,必须用随机时显式固定种子;④附带验证规格——生成代码的同时生成"这段代码应满足什么性质"的规格说明。
三、第二层设计:分层验证漏斗
验证不是单一动作,而是从廉价到昂贵的分层体系:①静态检查(毫秒级)——类型检查、Linter、量纲分析,无条件对所有候选执行;②单元测试/契约验证(秒级)——运行自带断言,验证模块契约;③性质测试(秒-分钟)——验证普适性质(守恒律、稳定性、对称性),对发现科学计算的"静默错误"特别有效;④交叉验证(分钟级)——用不同方法/实现/模型验证同一结论,多路径一致则可信度大增;⑤专家审查(小时级)——仅对通过前四层且影响重大的结果投入稀缺专家。漏斗的价值:把"线性全量审查"变成"逐级过滤",验证吞吐提升数个数量级。
四、第三层设计:验证驱动工作流
把验证嵌入 Agent 工作流,而非放在末端做质检:①generate-verify loop——生成候选后立即验证,把失败原因反馈给 Agent 让它修正,验证从"事后裁判"变成"实时教练";②best-of-N 采样 + 验证排序——生成 N 个候选,用验证通过率/置信度排序,选验证表现最好的;③spec-first——生成前先写验证规格,代码生成和验证都以规格为准;④验证预算分配——按候选重要性和置信度动态分配验证资源。
五、基础设施支撑
需要验证编排器(调度各层、漏斗裁决)、沙箱执行环境(隔离、可复现、资源受限)、结果缓存(避免重复验证)、反例库(沉淀错误模式反哺生成端)、验证可观测性(记录各层耗时与结果)。
六、边界认知
自动化验证能检查"代码是否正确实现了某个模型",但很难检查"这个模型本身是否正确描述了现实"。建模假设的正确性、规格的完整性、新颖性判断,仍需领域专家。正确分工:自动化过滤已知类型错误,专家专注建模假设与价值权衡。
常见误区
⚠️ 常见踩坑
误区一:只优化生成速度。当验证已是瓶颈,让 Agent 写得更快只会产生更多待验证候选,反而加重瓶颈。优化重点应放在验证侧。误区二:验证放在末端做质检。所有生成成本都花了才发现大部分候选是错的。应把验证前置到生成闭环,错误候选早期淘汰。误区三:忽视可验证性设计。让 Agent 自由发挥写"能跑就行"的代码,再指望测试兜底——不可验证的代码再多工具也救不回来。误区四:过度信任自动化验证。"所有测试通过"不等于"建模正确",自动化验证给的是实现正确性信心,不是建模正确性信心,重大结论仍需专家把关。
追问
追问 1:科学计算的"静默错误"为什么特别危险?性质测试如何发现它?
静默错误指代码不崩溃、照样输出漂亮图表,但结论完全错误——单位换算错一位、边界条件设反、数值方法用错。危险在于:①难以察觉——没有报错信号,人工审查容易漏检;②后果严重——可能导致整个科学结论错误;③生成可容错但验证不能漏检。性质测试(property-based testing)不针对具体用例,而是验证代码是否满足普适性质:能量是否守恒、质量是否守恒、结果对输入扰动是否稳定、对称性是否保持。这些性质是物理规律约束,与具体数值无关,能有效捕获“看似合理实则违背物理”的静默错误。
追问 2:如何把验证成本前移到生成阶段?具体约束有哪些?
核心是"可验证性设计"(Design for Verification),把可验证性当成和可读性同等重要的工程属性,写进 Agent 的生成约束:①内置断言与不变量——要求代码声明"什么必须为真"(守恒律、数值范围、量纲一致),运行时自动自我验证;②模块化契约——复杂计算拆成可独立验证的小单元,每个单元有明确输入输出契约;③确定性优先——减少随机性和隐式状态,必须用随机时固定种子,保证可复现;④附带验证规格——生成代码的同时生成"应满足什么性质"的规格说明,让出题人同时给判分标准;⑤避免炫技写法——要求"啰嗦但可验证"的代码,中间结果显式命名、关键步骤可独立检查。这些约束让后续验证难度下降一个数量级。
追问 3:验证驱动工作流和传统"先写后测"有什么本质区别?
本质区别在于验证信号是否参与生成决策。传统"先写后测"是线性流水线:生成→测试→发现错误→人工修复,验证是末端质检,所有生成成本都花了才知道大部分候选是错的。验证驱动工作流把验证嵌入生成闭环:①generate-verify loop——生成候选后立即验证,失败原因实时反馈给 Agent 让它修正,验证从"期末考试"变成"实时教练";②best-of-N 排序——生成 N 个候选,用验证表现排序选最优,用生成数量换验证后质量;③验证信号即梯度——类比训练模型用损失信号指导参数更新,编码 Agent 用验证反馈指导代码生成。结果是错误候选早期淘汰,生成成本被验证信号实时引导,整体效率大幅提升。
延伸学习
按主题分类的相关资源,便于系统复习
