はじめに
AIを使った個人開発をしていたら、突然AIが不気味な返答しか返さなくなってしまったのでその原因と解消方法を記録します。
前提
英単語を検索するとその単語についての辞書データを AIにJSONで生成させフロントエンド(React)でそのまま表示する というアプリを個人開発していました。
- 入力:ユーザーが検索した英単語
- 処理:AIが辞書エントリ(意味・品詞・例文など)をJSONで生成
- 出力:そのJSONをそのままUIに流して表示
起きたこと
次のような現象が起きました。
tame という単語を検索しているのに、画面には undefined という身に覚えのない単語が検索されたことになっていました。

何度やってもユーザーの意思に反してAIが勝手にundefinedという言葉をとってきてしまい検索ワードに上書きしてしまう、という怪奇現象が起きていました。
原因はコードではなくAIに渡していたプロンプト
プロンプト上ではAIにとって tame は
- 「検索語」ではある
- しかし 主語として明示的に指定されていない
という状態でした。
AI はどう考えたか
AIは次に、こう判断したようです。
「このタスクを一番うまく達成できる主語は何か」
ここで AI 独自の評価軸が入ります。
| 候補 | AI視点 |
|---|---|
| tame | ・多義語( 動詞 / 比喩) ・語源説明がやや複雑 |
| undefined | ・抽象的 ・定義しやすい ・意味の衝突が起きにくい |
その結果
「タスク達成しやすさ」で
undefinedが勝つ
という判断が行われました。
自分に抜け落ちていた視点は タスクの達成しやすさで判断するということはAIにとって自然で合理的な選択 だという点です。
どう直したか
プロンプトに次のルールを明示的に追加しました。
CRITICAL RULES:
- The word "${word}" is ALWAYS the MAIN word.
- You MUST generate the entry for "${word}" itself.
- NEVER replace it with another word.
- NEVER choose a different word as the main entry.
ここでやったことは、大きく分けて3つです。
1. 検索語を「主語(main)」だと明言
${word} は単なる入力値ではなく
辞書エントリの中心となる単語であることを明示しました。
2. 別の単語に置き換える余地を完全に禁止した
「説明しやすい単語に差し替える」という
AIにとっての逃げ道を塞いでいます。
3. 判断の余地を残さない言い切り表現を使った
ALWAYS / MUST / NEVER を使い、
「解釈の幅」を極力なくしました。
これによりAIは勝手に説明しやすい抽象語に逃げることができなくなり必ず検索語そのものを主語として扱う ようになりました。
まとめ
- 問題の原因
- プロンプトで主語を固定していなかった
- 結果
- AIが別の単語を主語として採用
- 対策
- 主語を明示的に縛る
AIは「正しさ」より「タスクの達成しやすさ」を優先して出力するということが、今回の怪奇現象の原因でした。
次からはそこを意識してプロンプトを書こうと思います。
