概要

Claudeに何かを依頼したところ、指示していない範囲まで勝手に変更されてしまった——そんな経験をした人もいるのではないでしょうか。こうした「暴走」とも呼べる状況を防ぐためのプロンプト制御テクニックが、複数の実践者から共有されています。

テクニック1:対象範囲を明示的に限定する

最も基本的な制御方法が、「〜以外は変更しないでください」というように、変更してよい範囲を明示的に限定することです。Claudeは指示されたタスクを達成しようとするあまり、関連する周辺部分まで手を加えてしまうことがあるようです。あらかじめ「触ってよい範囲」と「触ってはいけない範囲」を線引きしておくことで、意図しない変更を未然に防げそうです。

テクニック2:XMLタグで指示と例を分離する

プロンプトが長くなってくると、Claudeが「指示」と「参考にすべき例」と「補足情報」を混同してしまうことがあります。これを防ぐために有効なのが、XMLタグを使って情報を視覚的に区切る方法です。たとえば<instructions>タグの中に本来の指示を、<example>タグの中に参考例を入れることで、Claudeがどの情報をどう扱えばよいかを解析しやすくなるようです。

テクニック3:重要な制約は文末で念押しする

長いプロンプトの冒頭で伝えた制約が、後半で忘れられたかのように無視されてしまうことがあります。これを防ぐために効果的なのが、特に守ってほしい重要な制約については、プロンプトの文末でもう一度繰り返して念押しするという方法です。単純ですが効果のあるテクニックとして紹介されています。

Few-shotプロンプティングで出力のブレを抑える

制御テクニックとあわせて紹介したいのが、Few-shotプロンプティングという手法です。これは、AIに対して「入力と出力の具体例」をあらかじめ2〜3件示しておく方法で、出力フォーマットのブレが少なくなり、結果として修正の手間が減るという効果があるです。

毎回の指示ではなく「システムプロンプト」で制御する

同じ制約を毎回のプロンプトに書き込むのが面倒になってきたら、システムプロンプトという仕組みを使う方法もあります。これは、会話が始まる前にあらかじめ設定しておく指示のことで、Claude.aiのProjects機能を使えば、プロジェクト単位でシステムプロンプトを保存しておくことができます。「この役割で振る舞ってほしい」「この禁止事項は常に守ってほしい」といった、毎回変わらない制約はシステムプロンプト側に、その都度変わる具体的なタスク内容は通常のメッセージ側に書き分けると、指示がすっきり整理され、暴走も抑えやすくなるようです。

禁止事項(いわゆるネガティブプロンプト)を書く際のコツとして紹介されているのが、「抽象的な禁止」ではなく「具体的な行動の禁止」を書くという点です。「余計なことをしないでください」のような抽象的な表現よりも、「〜以外のファイルは変更しないでください」「テストコードは削除しないでください」のように、実際に過去に起きた失敗から逆算して具体的な禁止事項を書き起こしていくと、効果が出やすいです。設定は一度で完成させようとせず、実際に暴走が起きるたびに一つずつ禁止事項を追加していく、という育てる意識が大切なようです。

基本の3ステップを土台にする

これらのテクニックを使う前提として、まずプロンプトの基本構成を押さえておきたいところです。「Setting the stage(前提の共有)」でどんな状況・目的なのかを伝え、「Defining the task(タスクの定義)」で具体的に何をしてほしいかを明確にし、「Specifying rules(ルールの指定)」で守ってほしい制約を伝える。この3ステップに沿ってプロンプトを組み立てるだけでも、精度は大きく向上するです。

まとめ:暴走を防ぐプロンプトチェックリスト

Claudeに意図と異なる動きをされて困った経験がある人は、次のチェックリストを意識してみてください。

  1. 変更してよい範囲・してはいけない範囲を明示的に限定する
  2. プロンプトが長くなる場合はXMLタグで指示と例を分離する
  3. 重要な制約は文末でも繰り返し念押しする
  4. 入出力の具体例を2〜3件示すFew-shotプロンプティングを活用する
  5. 前提共有→タスク定義→ルール指定という3ステップを基本形にする

プロンプトは一度書いたら終わりではなく、意図と違う結果が返ってきたら「なぜそうなったのか」を分析し、少しずつ改善していくものと考えられます。これらのテクニックを組み合わせることで、Claudeとの対話はより思い通りのものに近づいていきそうです。

関連記事