Administrator
Published on 2026-10-20 / 3 Visits
0
0

低资源编程语言需要迁移评测,而不只是代码翻译演示

把 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,但不能成为唯一权威。遗留行为中可能包含历史缺陷、环境特例或已不符合现行政策的输出。由同一个模型根据待迁移代码生成测试,也可能把它自己的理解偏差复制进测试。

一条更可靠的验证链包括:

  1. 在完成隐私审查后冻结代表性生产输入,并保留来源。
  2. 运行旧系统,采集输出、状态变化、外部调用、错误路径和性能范围。
  3. 由领域负责人把行为标成必须保留、允许差异、计划修复或暂时未知。
  4. 为余额守恒、记录完整性等规则补充属性测试和变形测试。
  5. 从历史事故、对账异常和支持工单中构造对抗样本。
  6. 把保护测试留在迁移 Agent 的上下文之外。
  7. 同时对比旧实现和经过批准的业务合同,避免把历史缺陷永久固化。

低资源语言的公开代码和资料较少,企业内部运行历史反而可能很丰富。批处理文件、报表、对账记录、调用轨迹和事故日志能够成为可执行规格。它们同时包含敏感信息与过时行为,需要数据治理和领域判断。

用证据阶梯替代单一通过率

迁移项目适合按五级证据推进:

第一级:机械有效

目标代码能编译,依赖可解析,静态检查通过,语言要求满足。它排除局部错误,无法证明业务等价。

第二级:冻结基准有效

候选系统在固定环境中通过声明的可见和隐藏测试。大多数迁移 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 迁移只做逐字节一致够吗?

当输出字节完整定义正确性时,它是很强的标准。它无法覆盖隐藏状态、外部依赖、性能、安全、恢复和明确允许的差异。

为什么低资源编程语言对模型更难?

公开训练代码和文档较少。企业内部的重要规则还可能只存在于可执行代码、批处理配置、数据布局和运维习惯中。

最大的遗留迁移陷阱是什么?

把编译成功或单个测试集通过,当成系统迁移完成。新代码可能通过可见检查,同时改变没有被测量的业务规则或运行依赖。

参考资料


Comment