Code Roulette: How Prompt Variability Affects LLM Code Generation

この論文は、大規模言語モデルによるコード生成の品質がプロンプトのバリエーションに敏感であることを明らかにし、特定のタスクやモデルに依存せずプロンプトの増強に対する感度を測定する汎用的な評価パイプラインを提案し、その有効性を示す実験結果とコードを公開しています。

Andrei Paleyes, Radzim Sendyka, Diana Robinson, Christian Cabrera, Neil D. Lawrence

公開日 2026-03-19
📖 1 分で読めます☕ さくっと読める

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

この論文は、**「AI にコード(プログラム)を書かせる時、少しだけ言い方を変えただけで、出来上がるものがどれくらい変わるのか?」**という疑問に答える研究です。

タイトルは『Code Roulette(コード・ルーレット)』。まるでルーレットを回すように、入力文(プロンプト)を少しだけ変えてみたら、AI が返す答えがどう変わるかを調べる実験です。

以下に、専門用語を避けて、日常の例え話を使って分かりやすく解説します。


1. 背景:なぜこの研究が必要なの?

今、AI(大規模言語モデル)は「プログラミングの先生」や「助手」として大活躍しています。
「〇〇という機能を作りたい」と人間が自然な言葉で言えば、AI がコードを書いてくれます。

しかし、ここで大きな問題があります。
**「同じ『料理を作りたい』という注文でも、注文する人の言葉遣いが少し違うだけで、シェフ(AI)が作る料理が全然違う味になるかもしれない」**ということです。

  • 例え話:
    • あなたが「卵焼きを作って」と言ったら、AI はふわふわの卵焼きを作りました。
    • でも、あなたが「卵を焼いて」と言い直したり、「卵を焦がさないように焼いて」と付け加えたり、あるいは「卵焼き」を「オムレツ」と言い間違えたりしたら、AI は「炒め卵」や「焦げ卵」を作ってしまうかもしれません。

このように、**「同じ意味でも、言葉の微妙な違い(タイプミス、言い換え、表現の違い)に AI がどれだけ敏感か」**を測る必要があります。そうしないと、ユーザーは「なぜ同じ指示なのに、昨日は動いたのに今日は動かないんだ?」と混乱してしまいます。

2. 実験方法:AI に「変な注文」をさせてみる

研究者たちは、AI の「言葉の揺らぎ」に対する反応を測るための新しいテスト方法(パイプライン)を作りました。

実験のステップ:

  1. 基準を作る: まず、普通の言葉で「A というコードを書いて」と AI に指示し、何回も同じことをさせて「基準のコード」を作ります。
  2. 注文をいじる: 次に、元の注文を少しずつ「いじります」。
    • キーボードの隣り合わせのキーを間違える(タイプミス): 「卵」を「卵」ではなく「卵」の隣にあるキーで「卵」のように打つ。
    • 同義語に置き換える: 「作る」を「作成する」や「生成する」に変える。
    • 言い回しを変える(パラフレーズ): 「卵焼きを作って」を「卵を焼いたものをお願いします」のように言い換える。
  3. 結果を比べる: いじった注文で AI にコードを書かせ、元のコードとどれだけ違うかを測ります。

測るもの:
コードが「正しく動いているか」ではなく、**「コードの見た目(構造)がどれだけ変わってしまったか」**を測ります。

  • 例え話: 料理の味(機能)が同じでも、盛り付けや器の形(コードの構造)が全く違っていたら、それは「同じ注文」に対して「不安定な対応」をしたことになります。

3. 驚きの結果:AI は「タイプミス」に弱かった!

4 つの有名な AI(GPT-4o mini, Claude 3, Gemini 2.0, Llama 3.3)で実験したところ、面白い結果が出ました。

  • タイプミスには極端に弱い:
    キーボードの隣り合わせのキーを間違えるだけで、AI が作るコードは劇的に変わってしまいました
    • 例え話: 「卵焼き」を「卵焼」や「卵やき」と言い間違えただけで、AI は「卵焼き」ではなく「卵の炒め物」や「全く別の料理」を作ってしまうほど敏感でした。
  • 言い換えには強い:
    「作る」を「作成する」に変えたり、文の言い回しを変えたりする程度なら、AI は比較的安定して同じようなコードを作りました。
  • 「古い問題」は簡単すぎる:
    AI が過去に勉強したことがある有名な問題(LeetCode の古い問題)だと、どんなに注文をいじっても、AI は「あ、これ知ってる!」と即座に正解を出しました。これは「データ汚染(AI が答えを丸暗記している状態)」と呼ばれ、本当の能力を測るには不向きです。
  • 「新しい問題」は不安定:
    AI が初めて見るような新しい問題だと、注文を少し変えるだけで、AI が作るコードは大きく変わってしまいました。

4. この研究が教えてくれること

この研究は、私たちに以下の重要なメッセージを伝えています。

  1. AI は「完璧な理解者」ではない:
    私たちが「同じ意味」だと思っていても、AI は「言葉の形」に敏感に反応して、全く違う結果を出してしまう可能性があります。
  2. 信頼するには「安定性」が必要:
    開発者が AI を使う際、少しの言葉の揺らぎでコードが壊れたり、違うものになったりするのは危険です。AI が「どんな言い方をされても、同じ意図なら同じ結果を出す」ように安定させる必要があります。
  3. ユーザーへのアドバイス:
    AI に指示を出すときは、**「タイプミスに注意する」**ことが非常に重要です。また、AI が不安定な分野(新しい問題など)では、指示をより具体的にするか、複数の指示を試して確認する必要があるかもしれません。

まとめ

この論文は、**「AI という魔法の箱に、言葉の『揺らぎ』を注入すると、中から出てくるコードがどう踊るのか」**をルーレットのように回して調べました。

結果、AI は**「タイプミス」にはとても弱く、少しの間違いで大きく反応してしまう**ことが分かりました。これは、私たちが AI と付き合う際、言葉の選び方や入力方法に気を配る必要があることを示しています。

今後は、AI がもっと「人間の言葉のニュアンス」を理解し、どんな言い方をされても**「同じ料理(コード)」を安定して作れるようになること**が期待されています。