A framework for assessing the capabilities of code generation of constraint domain-specific languages with large language models

本文提出了一种通用框架,用于评估大语言模型从文本规范生成约束领域特定语言(如 OCL 和 Alloy)代码的能力,并通过实验发现其性能不如生成 Python 代码,同时揭示了上下文窗口大小、代码修复及多次尝试等策略对生成质量的关键影响。

David Delgado, Lola Burgueño, Robert Clarisó

发布于 2026-03-06
📖 1 分钟阅读☕ 轻松阅读

Each language version is independently generated for its own context, not a direct translation.

这篇论文就像是一份**“大语言模型(LLM)写代码的能力体检报告”,专门测试这些 AI 在写“专业领域小语种”(比如约束语言)时的表现,并给出了一套“如何让它写得更好”的实操指南**。

为了让你轻松理解,我们可以把整个过程想象成**“招聘一位全能程序员”**的故事。

1. 背景:AI 是个“偏科”的天才

现在的 AI(大语言模型)就像是一个读过海量书籍的超级天才

  • 写通用代码(如 Python): 就像让它写“日常对话”或“流行歌曲”。因为它读过的书(训练数据)里全是这些,所以它写得行云流水,几乎完美。
  • 写专业代码(如 OCL、Alloy): 就像让它写“量子物理公式”或“古埃及象形文字”。这些是**“低资源语言”**,书里很少见。AI 没怎么见过,所以它经常写错语法,或者逻辑不通,就像让一个没学过乐理的人去指挥交响乐,容易跑调。

2. 核心问题:怎么给 AI“出题”和“阅卷”?

作者发现,直接让 AI 写这些专业代码,效果往往不好。于是,他们设计了一个**“万能评估框架”**(就像一套标准化的考试系统),用来测试 AI 到底行不行,以及怎么让它行。

这个框架主要做三件事:

  1. 出题(Prompting): 怎么给 AI 下指令?是给它看一张图(模型),还是给它一段话(描述)?是让它一次写 10 道题,还是写一道改一道?
  2. 阅卷(Evaluation): 怎么判断 AI 写得好不好?
    • 语法检查(Well-formedness): 就像检查作文有没有错别字、标点符号对不对。如果代码连编译器都跑不通,直接淘汰。
    • 逻辑检查(Correctness): 就像检查作文内容是否切题。代码能不能真正解决提出的问题?
  3. 改错(Repair): 如果 AI 写错了,是让它**“重写一遍”(多试几次),还是让它“根据老师的批注修改”**(代码修复)?

3. 实验过程:一场大规模的“模拟考”

作者用这套框架,让 4 种不同的 AI(包括 GPT-4o 和开源的 Llama 等)去写三种语言的代码:

  • Python: 通用语言(学霸)。
  • OCL 和 Alloy: 约束语言(偏科生,专门用来给软件系统定规矩,比如“库存不能为负”)。

他们总共进行了近 10 万次的模拟测试,就像让 AI 做了一万套试卷,然后统计分数。

4. 关键发现:AI 写代码的“避坑指南”

通过这场大考,作者总结出了几个非常有趣的结论,用比喻来说就是:

  • 结论一:选对“老师”比“怎么问”更重要。

    • 比喻: 如果你要教一个不懂法语的人说法语,你问问题的方式(Prompt)再花哨也没用。你必须先找一个懂法语的老师(在训练数据里见过这种语言的 AI)。
    • 事实: 对于 Python,GPT-4 和 GPT-4o-mini 表现都很好。但对于 OCL/Alloy,只有 GPT-4o 表现尚可,开源的小模型(如 DeepSeek 6.7B)因为“见识少”,经常连语法都写不对,直接“挂科”。
  • 结论二:不要“死磕”提示词(Prompt),多试几次更管用。

    • 比喻: 就像你让 AI 写代码,与其绞尽脑汁想一个完美的“魔法咒语”(复杂的提示词模板),不如多让它试几次
    • 事实: 实验发现,提示词的格式(比如给不给它看图表、给不给它解释)对结果影响不大。但是,“多试几次”(Multiple Attempts)“让它改错”(Code Repair) 能显著提高正确率。这就好比让 AI 写 3 遍,总有一遍能蒙对;或者写错了让它自己改,往往能改对。
  • 结论三:一次写一堆,比一次写一个更稳。

    • 比喻: 如果你让 AI 一次性写 5 个相关的规则,它更容易保持逻辑一致(就像写一篇文章,上下文连贯)。如果你让它今天写规则 A,明天写规则 B,它可能会忘记昨天的设定,导致 A 和 B 打架(冲突)。
    • 事实: 把同一领域的多个约束任务放在一个提示词里(Batch delivery),比分开一个个问(Isolated delivery)效果更好,且不容易产生逻辑冲突。
  • 结论四:小模型搞不定“大任务”。

    • 比喻: 约束语言需要同时记住“规则”和“背景设定”(比如这个规则是应用在哪个公司、哪个产品上的)。小模型的“记忆容量”(上下文窗口)太小,装不下这么多信息,所以容易写崩。

5. 给开发者的“锦囊妙计”

基于以上发现,作者给想使用 AI 写专业代码的人提了几条建议:

  1. 挑对模型: 如果你的任务很冷门(如 OCL),一定要选那个“见过世面”的大模型(如 GPT-4o),别为了省钱用太小的模型。
  2. 少折腾提示词: 别花太多时间研究复杂的提示词模板,用简单直接的指令就行。
  3. 多用“重试”和“修复”: 如果代码错了,别急着放弃。让 AI 多试几次,或者让它根据错误信息自己修改,这比换一种问法更有效。
  4. 打包任务: 把相关的任务打包在一起发给 AI,保持上下文连贯。

总结

这篇论文告诉我们:AI 写代码很厉害,但在处理“生僻”的专业领域时,它需要“好老师”(大模型)和“多练习”(多次尝试/修复),而不是靠“花哨的提问技巧”。 作者提供的这套框架,就是帮助开发者找到最适合自己项目的“训练方法”和“考试标准”。