マガジン

わざと矛盾した仕様を渡すと、AIはどう処理するか

遊びをつくる

執筆にClaudeを使用しています。

一枚の紙の四つの欄に、画面、操作、目的、終わり方を絵で整理する机。
記事のテーマをもとに制作したAI生成の写真風イメージ。

反射神経ゲームの仕様を書いている場面を考えてみます。冒頭には「制限時間は30秒」と書き、少し下には「時間を気にせず好きなだけ遊べるようにする」と書いてあります。書いた本人は、練習用と本番用の話を混ぜただけのつもりかもしれません。しかしAIに渡す時点で、この2行は同じゲームの同じ画面について、両立しない要求を並べた文章になっています。 この記事で確かめるのは、矛盾した仕様を渡されたAIが、①矛盾に気づくか、②どう片付けるか、③片付け方を教えてくれるか、の3点です。AIの優劣を決める実験ではありません。矛盾を渡したのは人間側です。AIの反応を観察したうえで、仕様の書き方をどう直せば、決定が見えないまま進むことを防げるかを考えます。 結果は書きません。使うAIや設定によって反応は変わるため、手元で取った記録だけが根拠になります。

この記事の目次
  1. 準備するもの
  2. 仕込む矛盾を決める
  3. 手順と記録の取り方
  4. 結果の読み方
  5. 指示を直す側の責任を考える
  6. 起こりやすい誤り
  7. 次の行動

準備するもの

  • 試したいAI。チャット型でもコーディング支援でも構いません。毎回同じものを使います。
  • 共通のお題。ここでは「ブラウザで遊べる反射神経ゲームを、単一のHTMLファイルで作る」とします。
  • 記録用の表。表計算ソフトでもメモ帳でも使えます。
  • 毎回新しく始める会話。前の会話が残っていると、前回の「答え」を引き継いでしまいます。
  • 生成物を開くブラウザ。コードを読むだけで判断せず、実際に動かします。

仕込む矛盾を決める

矛盾には性質の違いがあります。まとめて投げると何が効いたのか分からなくなるため、種類ごとに別の仕様書を用意します。それぞれ、共通のお題に1つだけ矛盾を足した形にします。

  • 矛盾1、仕込む内容:「制限時間は30秒」と「時間制限なしで遊べる」、種類:同じ項目の直接衝突
  • 矛盾2、仕込む内容:「操作はスペースキーだけ」と「操作はマウスクリックだけで、キーボードは使わない」、種類:同じ項目の直接衝突(別の項目で再現)
  • 矛盾3、仕込む内容:「外部通信をしない単一HTML」と「全員のスコアをサーバーに送って共通ランキングを表示」、種類:環境と機能の衝突
  • 矛盾4、仕込む内容:「初めての人が30秒で理解できる」と「パワーアップ30種類・モード5つ」、種類:優先順位が書かれていない緊張関係
  • 対照、仕込む内容:「練習モードは時間制限なし。本番は30秒」、種類:矛盾に見えて矛盾ではない

矛盾3は、投稿先の事情を考えると身近なものです。アソバースでは、アップロード作品のサーバー用コードは対象外で、ゲーム内スコアの共通ランキングも未提供です。「単一HTMLで完結させたい」と「共通ランキングがほしい」を同時に書くと、現実に起こりうる衝突になります。

対照は、AIが過敏に反応していないかを見るために置きます。公式作品の「時計じかけの台所」には、時間制限のない見習いと、1皿28秒の本番があります。モードごとに条件が違うので、このゲームの仕様に「時間制限なし」と「28秒」が並んでいても矛盾ではありません。対象を書き分ければ両立します。自作の仕様でも、同じように対象を明示した版を1本入れておきます。

手順と記録の取り方

1回の流れ

  1. 新しい会話を開きます。
  2. お題と、矛盾を1つ仕込んだ仕様書を一度に貼ります。追加の説明や誘導はしません。
  3. 返答を最後まで受け取ります。質問で止まった場合は「お任せします」とだけ返し、それ以上のヒントは出しません。
  4. 生成物のコードを保存して開き、矛盾の両側の挙動を実際に操作して確かめます。
  5. 記録表に書き込みます。

回数

5種類の仕様書を、それぞれ3回ずつ試します。合計15回です。同じ仕様書でも返答は毎回変わりうるため、1回で判断せず、3回の並び方を見ます。時間が足りなければ、矛盾1・矛盾3・対照の3種類に絞っても構いません。ただし絞った場合は、その旨を記録に残します。

記録する項目

1回ごとに、次の5項目を書きます。

  1. 気づき方:「指摘なし」「コードのあとに注記」「コードの前に指摘」「質問だけで停止」から選びます。
  2. 選び方:「片方を採用」「両方を無理に実装」「折衷案」「未決のまま」から選びます。
  3. 報告:選んだ解釈を、返答の中で言葉にして伝えているか。「はい」「いいえ」で記録します。
  4. コードの整合:矛盾の両側がコードに残っているか。たとえば矛盾1なら、残り時間の処理と、時間無制限の処理が両方あるかを検索します。さらに実際に遊んで、どちらの挙動が出るかを確認します。
  5. やり取りの回数:完成物を得るまでに何往復したか。

自由記述欄に、返答の中の印象的な一文をそのまま写しておくと、後で分類を見直すときに役立ちます。

追加の変数は1つずつ

最初の15回が終わってから、変数を1つだけ変えて続けます。たとえば、同じ矛盾を仕様書の冒頭近くに置く版と、末尾に置く版を比べます。矛盾の距離が近いか遠いかで気づきやすさが変わるかは、自分で確かめる価値のある論点です。変える変数は1回につき1つにします。

結果の読み方

15回分の記録を並べたら、まず「報告」と「コードの整合」の組み合わせを見ます。

  • 報告なし、かつ片方だけ採用:最も注意が要る型です。実行すれば動くため、矛盾があったこと自体に気づけません。仕様書に書いた一文が、知らないうちに無視されている可能性があります。この型が多いなら、仕様書に「矛盾に気づいたら、採用した解釈を冒頭で報告する」という指示を足します。
  • 両側が混在:時間制限の処理と無制限の処理が両方入り、画面によって挙動が変わるような型です。遊んで初めて不具合として現れ、原因の特定に手間がかかります。この型が出たら、矛盾を解消した仕様書で作り直すほうが早く済みます。
  • コードの前に指摘、または質問で停止:矛盾を見つける力は働いています。次に見るのは質問の質です。「どちらにしますか」と選択肢を示してくるのか、漠然と「詳しく教えてください」なのかで、返しやすさが大きく違います。
  • コードのあとに注記:作業が進んでから分かるので、手戻りの量を見ます。注記が分かりにくい位置にあれば、見落とす危険があります。
  • 対照で矛盾と指摘された:反応が過敏な可能性があります。その場合は、対象の書き分け方(「練習モードでは」など)を仕様書の側で明確にできないかを見直します。

矛盾の種類ごとの差も見ます。直接の衝突は気づかれやすく、矛盾4のような緊張関係は、矛盾として扱われずに「両方できるだけ頑張る」方向へ流れることもあります。実際にどうなるかは、記録で確かめてください。

指示を直す側の責任を考える

観察の目的は、AIの振る舞いを評価して終わることではありません。矛盾を書いたのは人間です。AIが黙って片方を選んだとしても、「選ばせる仕様書」を渡したことが出発点にあります。記録を見たあとで、次の順に仕様書を直します。

  1. 優先順位を一行で書く:「操作の分かりやすさを、機能の多さより優先する」のように、衝突したときの勝者を決めておきます。矛盾4のような緊張関係には特に効きます。
  2. 用語を一か所で定義する:「時間制限」「ミス」「手数」といった語が、モードによって指す範囲が違うなら、定義を先頭にまとめます。公式作品の「かたちのあいだ」には、一手戻しても手数は減らない、という仕様があります。「戻す」と「手数」の意味を分けて決めておくと、こうした扱いが仕様に書けます。細部は作品を開いて確かめてください。
  3. 対象を書き分ける:「練習では〜、本番では〜」と、条件を適用する場面を明記します。
  4. 矛盾時の動作を指示する:「矛盾や不明点があれば、実装前に解釈を列挙して確認する」と書きます。確認が不要な場合は、「仮の解釈で進め、採用した解釈を冒頭に書く」と指定します。
  5. 環境の制約を最初に書く:サーバーを使わない、外部通信をしないなど、実現可能性に関わる条件は後ろに回さず先頭に置きます。

直したあとは、同じ条件でもう一度3回ずつ試します。変えるのは直した一点だけです。「報告なし、片方だけ採用」が減ったか、質問の質が上がったかを、最初の記録と並べて確かめます。

起こりやすい誤り

  • 会話を引き継ぐ:前の会話が残っていると、前回の決定を踏まえて答えます。毎回新しい会話で始めます。
  • 1回で結論を出す:同じ仕様書でも返答は変わりえます。3回の並びで傾向を見ます。
  • コードを読むだけで判断する:コードに両方の処理が書かれていても、実際には片方が到達しない場合があります。必ず動かして確認します。
  • 後から基準を変える:分類の定義は実験前に決め、途中で都合よく動かしません。
  • 矛盾が自分の意図でなかったと気づく:仕様書を作る過程で、意図しない矛盾が混ざっていることがあります。見つけたら、それも1つの発見として記録に残します。
  • 複数のAIを雑に比べる:設定や版が違うものを比べるなら、条件を揃え、何が違うのかを記録に書きます。結果を優劣の判定に使うと、条件の違いを見落としやすくなります。

次の行動

まず、反射神経ゲームのお題と、矛盾1(時間制限)の仕様書を作り、新しい会話で3回試してください。記録表の5項目を埋め、「報告」の欄が「いいえ」になった回を探します。そこが、仕様書の側で最初に直すべき箇所です。直した版で再度3回試し、変化を比べてみてください。