こんにちは、hachi8833です。
今回も、AIに効果的な指示を出して、期待に沿う結果を増やすためのノウハウを順次紹介していきます。どのノウハウも、AIサービスの種類やLLMの種類や課金の種類に依存しません。もっと言えば、日本語でも英語でもJSでもPythonでも変わらない内容を扱います。
これまでノウハウを貯めてきてみて驚いたのは、AIに対して有効なノウハウは、人間に対する基本的なマナーと驚くほど似ているということです。あくまで「形のうえでは」ですが。
🔗 大事なコツ: 「絶対XXするなよ」だけ書くのは失敗を誘いやすい
AIコーディングなどで「AIに"絶対XXするなよ"などと指示すると、むしろ失敗しやすくなる」は、最近よく報告されています。
本シリーズ第1回↓をお読みいただいた方なら、すぐさま原因に思い当たるでしょう。慌てて記事を開く前に、何が原因かを考えてみましょう。チッチッチッチッ⏰
🔗 理由: ネガティブフィードバックに「具体的な修正方法」がないのと同じ構造だから
前回記事をお読みいただければ十分かと思うのですが、念のため書いておきます。
それは、「それじゃダメだ」を伝えても、「じゃあどうすればいいんですか?」に相当する具体的な行動訂正情報も添えられてなければ、AIは今ダメ出しされた方法以外のあらゆる方法を探索して、手ごろな方法を見つけ、それで対応しようとするからです。
AIパフォーマンスの最適化を学ぶ(1)適切なレスポンスが重要な理由より
おわかりですね。「絶対XXするなよ」だけ書くのは、ネガティブフィードバックの「よくないパターン」と同じ構造になっているのです。
「絶対XXするなよ、今度やったら...」などといくら語気を強めても、そこに「じゃあどうしろと?」に相当する情報が同時に添えられていなければ、AIは上と同じ罠にまんまとハマってしまうわけです。
しかも、「絶対に」といった感じであの手この手で強調すればするほど、むしろAIの注意がその文全体に引き寄せられてしまい、あたかも人間が「するなと言われたことを逆にやってしまう」のにも似た形で裏目に出やすくなるでしょう。これは一般に「皮肉過程理論」とか「ピンクの象のパラドックス」などと呼ばれます。
AIが「絶対XXするなよ」以外の莫大な情報空間をがっつり探索して、最初に見つけたそれっぽいものを拾い上げて何とかしようとするのも無理はありません。そこには何の不思議もありません。
他のプロンプトでカバーされていなければ、その結果が「あたり🎯」である確率は、おそらく相当低いでしょう。
本記事と直接関係あるわけではありませんが、ちょうどこんなポストをXで見かけました。
We have been systematically testing lots of received prompting wisdom & for recent AI models:
🚫Threats, saying please, being insulting, & promising tips do not change average performance on challenging tasks
⛓️Chain-of-thought no longer helps even non-reasoner performance much pic.twitter.com/xKJeAhhwXo— Ethan Mollick (@emollick) August 2, 2025
私たちは最近のAIモデルに対して、プロンプトのコツであると一般に信じられているものを体系的に多数テストしてきました:
🚫「脅迫すること」「下手に出て懇願すること」「あなどり、侮辱すること」「チップを払うと約束すること」は、どれも、難しいタスクでの平均的なパフォーマンスに影響を与えません。
⛓️Chain-of-thought(思考の連鎖: 段階的に問題を解かせることで精度を上げるプロンプトテクニック)は、推論専用でないモデルのパフォーマンスにも大した効果はありません。
🔗 「XXするな」の根本的な曖昧さ
別の見方をすると、「XXするな」というだけの指示は、実はAIにとって何も直接的な行動につながらないのです。これは、Claudeとやりとりしていて気づきました。Claudeは「"XXするな"と言われただけでは、何もすることがない」と言い切ったのです。
そんなバカな、とお思いかも知れませんが、「XXするな」というだけの指示は、日常で実によく見かけるにもかかわらず、よく考えると実は指示としては極めて不完全なのです。
そこで、危険な場所にありがちな「立入禁止」という看板を考えてみましょう。
これは、極端に言えば「立ち入らなければ何をしたっていい」とも受け取れるので、金網の隙間から棒を突っ込んでも、金網越しにゴミを捨てたとしても、写真を撮影しても、指示には何も違反していないことになります。
解釈が逆方向に振れると、「立入禁止」は「何もするな、一歩も動くな、近づくことすらするな、息もするな」とすら受け取れます。
AIがどのように解釈するかは、本当に運次第です。「ここに立入らないでください」と丁寧に書いたところで、文が否定形である限り、同じように解釈されるでしょう。
人間界の常識では「立入禁止」だけで何もかも伝わるに決まってるじゃないかと思われがちですが、実はこれほどの曖昧さを含んでいるのです。
立入禁止看板は脱出することを禁止していない pic.twitter.com/RwaPBa5nUQ
— uraEMON 廃(はい)るンだわ (@EMON51983792) July 21, 2024
人間社会が、こんなものに依拠して動いていると思うと、怖くなりませんか?私は怖いです。
単純否定文は、アビスへの扉を開く禁断の魔法、と言っては大袈裟でしょうか?
🔗 対応方法: 「XXするな」を「YYせよ」に変える
これをたとえば「立入禁止区域につき、ここから立ち去りなさい」という具体的な指示を含む肯定文(平叙文)に変えたとしましょう。
すると、人間にとっては大して変わらないように思えますが、具体的な行動につながる指示に変わるため、それまでの曖昧さが一気に解消し、AIに適切な行動を促します。ここが肝心なのです。
これは、否定文と肯定文の根本的な違いに起因するため、日本語で書こうと英語で書こうと何語で書こうと変わりません。
子どもの躾でも、「XXするな」「YYするな」「ZZするな」「ダメなものはダメ」といった禁則縛りだけで済ませずに、せめて「XXではなく、AAしようね」と導いてあげたいものです(自分自身の反省も込めて😅)。
さもないと、たいていの子どもは「あれもこれもダメで、じゃあどうしろっていうの?!」と途方に暮れるか、さもなければ怒りを爆発させるかするでしょう。
🔗 本当にありそうな怖いケースと、より良い避け方
これは、Claude Opusが本記事のレビュー中に私にサジェストしてくれたアイデアです。例は3つもあれば十分でしょう。お断りしておきますが、サンプルの文面は私が書きました。
- ❌️ SQLインジェクションは「絶対に」避けること
- ✅ SQL文にユーザー入力を渡すときはプリペアドステートメントを経由すること
- ❌️いかなる場合であってもXSSは「絶対に」発生させてはならない
- ✅ ユーザー入力をビューに表示するときはエスケープすること
- ❌️個人情報は誰が何と言おうと「絶対に」漏洩させないこと
- ✅個人を特定可能な情報は匿名化してから使うこと
❌️のパターンが実際に発生したらどうなるかは、皆さんの方がお詳しいでしょう。いずれにしろセキュリティについては詳しい人間によるレビューが不可欠ですね。
ところで、お気づきでしょうか?第1回の「ネガティブフィードバック」の例では、「そうではなく、こう」の形にしていましたが、今回の改善例では、そこから一歩踏み込んで、否定文を肯定文(平叙文)に変えています。
しかも、単なる肯定文ではなく、「どんな場合に」というコンテキストやスコープを明示する形に改善しています。それに、この肯定文には「絶対」といった強調も特に含めていませんが、これで十分なのです。
物足りないと思いますか?実は私も正直言うと物足りないのですが、こういう「絶対」などの強いワードは、ここぞというときのために取っておきましょう。さもないと、教科書のほぼ全文にカラーマーカーを引いたような状態になってしまいかねません。
🔗 さらによい書き方の例
もっと丁寧に書くなら、たとえばこうなるでしょう。
- ❌️ SQLインジェクションは「絶対に」避けること
- ✅ SQL文にユーザー入力を渡すときはプリペアドステートメントを経由すること(SQLインジェクション防止のため)
- ❌️いかなる場合であってもXSSは「絶対に」発生させてはならない
- ✅ ユーザー入力をビューに表示するときはエスケープすること(XSS防止のため)
- ❌️個人情報は誰が何と言おうと「絶対に」漏洩させないこと
- ✅個人を特定可能な情報は匿名化してから使うこと(個人情報の漏洩防止のため)
今度は何を改善したかはおわかりですね。改善後は、すべてが肯定文でありながら、「SQLインジェクション」「XSS」「個人情報の漏洩」といった重要なワードも含めているので、人間にもこうしたワードが目につきやすくなり、検索もしやすくなります。
なお、"(SQLインジェクション防止のため)"のようにかっこ書きで後ろに足した理由は、AIに行動の目的よりも、指示を先に読んで欲しいという意図を込めたまでのことです。書き方にはまだまだ工夫の余地があるはずです。
大事なのは、文章を型にはめることではなく、認知の負荷を下げる工夫をこらすことです。「こう書きさえすれば大丈夫」と丸暗記するのではなく、認知の負荷を下げる文章の書き方を、常日頃から工夫しましょう。
以上の改善を一般化すると、「基本的に肯定文で書き、具体的な行動とスコープを常に明示すること」となります。これなら、少なくともその部分に関してはAIが「どうしたらいいんだ...😣」と頭を抱えて適当な動きをすることはないはずです。
一般則: 基本的に肯定文で書き、具体的な行動とスコープを常に明示すること
🔗 AIプロンプトは「認知の負荷をいかに下げるか」が勝負
本シリーズ全体を貫いているのは、「認知の負荷が低い文章は、AIにとっても人間にとっても有用である」というプラクティスです。
しかし、いくらご立派なことを書いたところで、認知の負荷を下げる具体的な方法を伴わなければ、そんなものはただの掛け声、お題目、マントラでしかありません。
本シリーズは今後も、AIの認知負荷を下げる「具体的な方法」を順次解説していきます。紹介を予定しているプラクティスは、1つや2つではなく、まだまだ続きます。
本シリーズではAIをたびたび擬人化していますが、冗談でやっているわけではありません。AIの本質を理解したうえで、AIに無理をさせないプロンプトやドキュメントを工夫することが、結局実行時間やトークンの節約や品質の向上につながると考えているからです。その意味で、AIを擬人化するというプラクティスは、コンテキストエンジニアリングにおいて有用だと思っています。
🔗 参考: Claude Opus 4にも聞いてみた
とおっしゃっております。留保事項もつけていただいて助かります🙏。
ついでに注意機構(attention mechanism)についても質問してみました。
とおっしゃっております。
次回もお楽しみに!
本記事は、CC BY-SA 4.0ライセンスで公開します。
本記事の文面は、明示している部分を除き、AIでは生成していません。
本シリーズ記事では簡単のため、特に断らない限り、各種AIサービスやLLM(大規模言語モデル)といった個別の要素を捨象して、一般的な語である「AI」と呼ぶことにしています。
本シリーズ記事で扱うAIは、特に断らない限り、以下の分類で言う「生成AI」、その中でも会話(自然言語)による指示で動くAIに限定しています。また、AIの用途も基本的に業務用を想定しています。