把 COBOL 改写成 Java、Python 或 Rust,越来越像一个生成问题。证明改写后的系统还能正确结算、处理缺失记录、维持事务顺序,并在故障后恢复,仍然是一个验证问题。
OpenAI 新发布的低资源编程语言评测有一个值得重视的变化:它同时测试从零构建和迁移现有程序,并把可观察行为是否一致放进验收条件。这个方向比代码翻译演示更接近真实现代化项目。距离生产迁移仍有一段明确的证据缺口。
两个评测回答两类问题
MultiLangBench 要求模型使用 20 种编程语言之一,从零实现一个兼容 SQLite 的数据库引擎。候选程序读取初始数据库与 SQL 查询,生成修改后的数据库文件;真正的 SQLite 再运行验证查询,结果必须与预期字符串完全一致。
OpenAI 报告称,GPT-6 Astra 的 20 种语言平均通过率为 87.4%,GPT-5.6 Sol 为 26.8%。COBOL 仍是最难的一种,从 10.9% 提升到 72.1%。这个评测关注的是在稀缺训练语料下构建复杂软件的能力。
第二个评测更接近企业迁移:把 COBOL 程序改写成 C++、Java、Kotlin、Python 或 Rust。隐藏测试要求可观察输出逐字节一致,所有测试均通过才算一次迁移成功。OpenAI 特别提到定点数语义:COBOL 在没有显式要求时会直接丢弃多余小数位。目标语言若默认四舍五入,程序可以顺利运行,却会生成不同的财务结果。
OpenAI 报告 GPT-6.1 Sol 在低推理强度下达到 86.6%,GPT-5.6 Sol 为 5.4%,前者 API 成本为后者的 61%;提高推理强度后达到 97.9%。这些是官方基准结果,不能换算成企业项目的生产迁移成功率。OpenAI 原文也明确保留了专家审核,以及针对组织业务规则和依赖做测试的要求。
公开工件决定了能验证到哪一层
MultiLangBench 的评测代码和测试已经公开。仓库提供了更精确的口径:
- 目标版本为 SQLite 3.40.1;
- SQLite 约 5.1 万个 TCL 测试中,约 2.4 万个被转换成评测格式;
- 默认评测指引只要求运行测试名以
00、01、02开头的 272 个样本,全量运行需要单独披露; - 输出不匹配、程序崩溃或超过 60 秒都计为失败;
- 环境禁止联网,也要移除已安装的 SQLite 实现;
- 分数同时记录 API 成本和测试通过率。
公开仓库让第三方能够检查测试结构,但还不是复现文章成绩的完整包。仓库没有完整 Agent Harness、prompt、模型配置、逐语言运行产物和成本日志;官方文章也没有说明报告数字使用默认 272 个样本还是全部已转换测试。它仍然限定了 87.4% 这类数字的含义:这是 20 种语言在指定 SQLite 行为样本上的平均成绩,不能证明完整兼容、故障韧性或生产接口已经实现。
COBOL 迁移评测在官方文章中有方法说明,但 OpenAI 链出的公开仓库是 MultiLangBench。迁移数据集、隐藏测试、样本构成和运行器没有通过该发布一起开放。因此 86.6% 和 97.9% 属于提供方报告的内部基准结果,复现层级与 MultiLangBench 不同。
当数字接近饱和时,这种区别尤其重要。97.9% 可以说明模型几乎解决了当前任务分布,也可能说明测试集已经难以区分剩余生产风险。正确动作是扩展评测合同,而不是直接宣布迁移问题已经解决。
行为等价至少分五层
逐字节一致在某些场景很强,在另一些场景中既可能遗漏关键行为,也可能过度严格。时间戳、生成 ID、无关顺序或展示格式允许变化时,业务正确并不要求每个字节相同;事务状态、外部调用和恢复行为没有进入输出时,相同字节也无法证明系统等价。
| 层次 | 核心问题 | 证据 |
|---|---|---|
| 功能输出 | 相同输入是否得到允许的结果 | 黄金样本、差分测试、业务不变量 |
| 状态与事务 | 余额、记录、顺序、幂等和提交边界是否保留 | 状态快照、事务轨迹、重放 |
| 集成 | 文件、调度器、数据库、消息和下游消费者是否兼容 | 合同测试、依赖模拟、端到端运行 |
| 故障行为 | 缺失数据、部分文件、超时、重启和重复投递如何处理 | 故障注入、恢复测试、对账 |
| 运行合同 | 吞吐、延迟、安全、审计和支持边界是否达标 | 负载、安全、影子运行、运维手册 |
IBM 对 COBOL 现代化的说明也强调了系统边界:语言翻译只是路径之一,完整现代化还涉及数据架构、运行时替换、事务处理完整性和平台工程。源代码只保存了系统合同的一部分。
行为 Oracle 需要独立来源
旧系统可以作为差分测试的 Oracle,但不能成为唯一权威。遗留行为中可能包含历史缺陷、环境特例或已不符合现行政策的输出。由同一个模型根据待迁移代码生成测试,也可能把它自己的理解偏差复制进测试。
一条更可靠的验证链包括:
- 在完成隐私审查后冻结代表性生产输入,并保留来源。
- 运行旧系统,采集输出、状态变化、外部调用、错误路径和性能范围。
- 由领域负责人把行为标成必须保留、允许差异、计划修复或暂时未知。
- 为余额守恒、记录完整性等规则补充属性测试和变形测试。
- 从历史事故、对账异常和支持工单中构造对抗样本。
- 把保护测试留在迁移 Agent 的上下文之外。
- 同时对比旧实现和经过批准的业务合同,避免把历史缺陷永久固化。
低资源语言的公开代码和资料较少,企业内部运行历史反而可能很丰富。批处理文件、报表、对账记录、调用轨迹和事故日志能够成为可执行规格。它们同时包含敏感信息与过时行为,需要数据治理和领域判断。
用证据阶梯替代单一通过率
迁移项目适合按五级证据推进:
第一级:机械有效
目标代码能编译,依赖可解析,静态检查通过,语言要求满足。它排除局部错误,无法证明业务等价。
第二级:冻结基准有效
候选系统在固定环境中通过声明的可见和隐藏测试。大多数迁移 benchmark 停留在这一层。
第三级:组织真实任务等价
候选系统通过来自真实工作流的差分、合同和故障测试,领域负责人完成允许差异的裁决。
第四级:影子运行
旧系统继续作为事实源,新系统处理镜像流量或历史重放。团队在明确的时间与业务量范围内持续对账输出和状态迁移。
第五级:可回退的生产切流
限定用户或业务单元进入新系统,同时监测业务对账、性能、安全和运维信号。扩大流量之前,回退阈值、数据兼容方案和决策责任人都已完成演练。
每一级只支持对应强度的结论。公开 benchmark 可以支持启动下一轮评估,无法单独支持关闭旧系统。
评估完整迁移流程
模型榜单记录单个样本的 API 成本。企业真正需要的是每个可验收迁移单元的总成本:
模型调用 + Harness 计算 + 测试构建 + 领域审核 + 修复 + 影子运行 + 切流 + 回退准备
至少记录以下指标:每一级证据的到达率;模型自产测试与独立测试各自发现的缺陷;人工审核时间;按业务风险分类的等价失败;重试和重新生成成本;影子差异与生产逃逸;回退与状态对账耗时;每个生产验收单元的总成本。
这与编程语言也是 Agent Harness的结论一致:真正决定能力上限的是生成周围的反馈接口。它也与 Cursor MiniSQLite 的边界保持区分:隐藏 SQL 测试能够提供语义正确性证据,不能替代数据库的完整生产验收。
对于完整重写,还应保留中间基线。AI Runtime 重写的五本账把语言、架构、验证和总成本拆开,避免把所有改善都归因于代码翻译。
最小迁移评测合同
自主迁移启动前,至少冻结这些字段:
source:
repository_hash: ...
compiler_runtime: ...
dependencies: ...
target:
language_runtime: ...
allowed_architecture_changes: ...
behavior:
required_outputs: ...
state_invariants: ...
allowed_differences: ...
protected_tests: ...
operations:
performance_budgets: ...
failure_scenarios: ...
observability_requirements: ...
release:
shadow_window: ...
canary_scope: ...
rollback_trigger: ...
rollback_state_plan: ...
owners:
business_rules: ...
verification: ...
cutover: ...
Agent 可以在合同内部选择实现路径。修改业务不变量、允许差异、保护测试或回退条件,需要进入独立决策记录。这样,优化过程就无法静默改写成功定义。
常见问题
AI 能迁移遗留代码吗?
AI 可以加速代码库分析、测试构建、翻译、调试和文档整理。生产迁移仍需独立行为 Oracle、组织真实任务验证、依赖测试、领域审核、分阶段切流和经过演练的回退路径。
遗留系统迁移评测应该测什么?
同时测功能输出、状态与事务语义、外部集成、故障恢复、运行属性、人工审核、总成本和回退能力,并绑定冻结的验收合同。
COBOL 迁移只做逐字节一致够吗?
当输出字节完整定义正确性时,它是很强的标准。它无法覆盖隐藏状态、外部依赖、性能、安全、恢复和明确允许的差异。
为什么低资源编程语言对模型更难?
公开训练代码和文档较少。企业内部的重要规则还可能只存在于可执行代码、批处理配置、数据布局和运维习惯中。
最大的遗留迁移陷阱是什么?
把编译成功或单个测试集通过,当成系统迁移完成。新代码可能通过可见检查,同时改变没有被测量的业务规则或运行依赖。