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.

この論文は、**「AI(大規模言語モデル)に、専門用語や特殊なルールで書かれた『魔法の呪文(コード)』を書かせることができるか?」**という問題を、非常に丁寧な実験を通じて解き明かした研究報告です。

専門用語を避け、日常の例え話を使って解説しますね。

1. 背景:AI は「万能」ではない?

最近の AI(チャットボットなど)は、普通のプログラミング言語(Python や Java など)なら、まるでベテランの職人のようにコードを書くことができます。これは、AI がインターネット上の膨大な「普通のコード」を学習しているからです。

しかし、**「ドメイン固有言語(DSL)」**と呼ばれる、特定の分野(ここでは「システムのルールや制約」を定義する言語)に特化した言語になると、AI の性能はガクンと落ちます。

  • 例え話: AI が「料理のレシピ(Python)」は完璧に作れるのに、「化学実験の特殊な手順書(OCL や Alloy)」を書かせようとすると、失敗ばかりしてしまうようなものです。なぜなら、その「特殊な手順書」のレシピ本が、AI の学習データにほとんどないからです。

2. この研究の目的:AI の「料理上手さ」を測る新しい「採点表」

研究者たちは、AI がこの特殊な言語でどれだけ上手にコード(ルール)を書けるかを測るための、**「新しい採点システム(フレームワーク)」**を作りました。

このシステムは、以下の 3 つのステップで AI を評価します。

  1. 文法チェック(Well-formedness): 書いた文章が、その言語のルールに合っているか?(例:「主語と動詞が合っているか?」)
  2. 正解チェック(Correctness): 書いたコードが、本当に意図したルールを正しく表現しているか?(例:「『赤信号で止まれ』というルールを、本当に『止まれ』と書いているか?」)
  3. 直し作業(Code Repair): もし間違っていたら、AI に「ここが間違ってるよ」と教えて、直させることができるか?

3. 実験:Python と「魔法の言語」を比べる

研究者たちは、この採点システムを使って、以下の 3 つの言語で AI をテストしました。

  • Python: 一般的な料理(よく知られた言語)
  • OCL と Alloy: 特殊な化学実験手順書(あまり知られていない言語)

そして、4 種類の AI(GPT-4o など)を使って、約 10 万回もの実験を行いました。

4. 驚きの結果と教訓

実験から、いくつかの面白い発見がありました。

① 言語によって AI の実力は天と地ほど違う

  • Pythonでは、AI はほぼ完璧にコードを書きました。
  • しかし、OCL や Alloyのような特殊な言語では、AI は文法ミスばかりしたり、意味の通らないルールを書いてしまったりしました。
  • 結論: 特殊な言語を扱う場合、AI の「言語ごとの得意不得意」が非常に重要です。

② 「指示の出し方(プロンプト)」はあまり重要ではない

「AI にどう指示を出せばいいか?」という悩みがありますが、実験では**「指示の出し方を変えても、結果はあまり変わらない」**ことがわかりました。

  • 例え話: 料理人に「最高のステーキを作ってください」と言うか、「最高のステーキを作ってください、塩は控えめに」と言うかで、結果に大きな差は出ませんでした。重要なのは「その料理(言語)を熟知している料理人(AI)を選ぶこと」です。

③ 「何回も試す」と「直す」のが最強の秘訣

一番効果があったのは、以下の 2 つの組み合わせでした。

  • 複数回挑戦(Multiple Attempts): 1 回で失敗しても、3 回、5 回と AI に書かせて、一番良いものを選ぶ。
  • 直し作業(Code Repair): 間違っていたら、「ここが間違ってるよ」と教えて、AI に修正させる。
  • 結論: 「1 回で完璧な答え」を期待するより、「何回も試して、間違ったら直す」というプロセスを踏むと、劇的に品質が上がります。

④ 一度に全部書かせるのがおすすめ

複数のルールを同時に書かせるか、1 つずつ書かせるかという実験では、**「一度に全部書かせる(バッチ処理)」**方が、ルール同士の矛盾が起きにくく、結果が良い傾向がありました。

5. まとめ:私たちに何ができるか?

この研究は、AI を使う人への**「実践的なガイドライン」**を提供しています。

  • AI を選ぶときは慎重に: 特殊な言語を使うなら、その言語に強い AI を選んでください。
  • 完璧を求めない: 1 回で完璧なコードが出ないのは当たり前です。
  • プロセスを重視する: 「何回も試して、間違ったら直す」という作業をシステムに組み込むのが、最もコストパフォーマンスが良い方法です。

つまり、**「AI は魔法の杖ではなく、練習が必要な見習い職人」**です。適切な言語を選べば、そして「練習(複数回挑戦と直し)」をさせれば、驚くほど素晴らしい成果を出してくれる、というのがこの論文のメッセージです。