生成AIの進化に伴い、プロンプト設計について改めて考えてみました。
生成AIの進化ともに、プロンプト設計の仕方に変更はあったか
ChatGPT 3.5や4が登場したあたりで、「プロンプト」(LLMに与える指示や質問)についてさかんに話題に上がりました。
その後、生成AIも日々進化しており、2024年12月現在では、ChatGPTも4oもアップデートしたほか、o1やo1 proといったモデルも出てきています。Claudeも、Claude3.5 Sonnet、Geminiも、2.0 flashモデルを試験使用できるようになってきています。
LLM側が非常に賢くなっている今、プロンプト設計の仕方に何らか変更があったのか気になりました。
Gemini 2.0で見直してみた、”理想的なプロンプトテンプレート”
そこで、Gemini 2.0 Flash Experimentalに、理想的なプロンプトのテンプレートについて、改めて聞いてみました。
結果、依然としてプロンプトは重要であり、以下のような要素を踏まえてプロンプトが望ましいと整理するに至りました。
基本的には、プロンプトやその各要素の重要性というものはこれまでと変わりないということが分かります。
#指示 (Instructions)
- 具体的な指示
(AIに実行してほしい具体的なタスクを記述)
(例: 以下の文章を日本語に翻訳してください、このデータに基づいてグラフを作成してください、500字以内で要約してくださいなど)- 制約条件
(文字数、形式、スタイルなど、出力に対する制約を記述)
(例: 100文字以内、箇条書きで、丁寧な言葉遣いでなど)- 出力形式
(期待する出力の形式を明示的に指定)
(例: マークダウン、JSON、HTML、Pythonコードなど。具体的な例を示すとさらに効果的)#文脈 (Context)
- あなたの役割
(AIにどのような役割を担ってほしいかを記述)
(例: プロの翻訳家、小説家、マーケターなど)- 私の役割
(あなたの立場を記述)
(例: 顧客、編集者、学生など)- 目的
(このプロンプトの目的を明確に記述)
(例: ウェブサイトのキャッチコピーを作成する、英文の手紙を翻訳する、プログラミングコードを生成するなど)- 背景情報/前提条件
(タスクに関連する背景情報や前提条件を記述)
(例: ターゲット層、既存の資料、使用するプログラミング言語など)#入力データ (Input Data)
(AIに処理させるデータ)
(テキスト、URL、表、コードなど。※必要に応じてここにデータを記述するか、ファイルのアップロード方法などを指示)#AIへの追加指示 (Additional Instructions for AI)
- 出力の質を高めるために必要な情報があれば質問してください。質問を通してプロンプトを改善してください。
- 複数の案を生成する場合は、それぞれの案の根拠や利点を説明し、ユーザーに提示して選択を促してください。
- ユーザーの選択に基づいて再実行またはタスクを完了するかどうかをユーザーに確認してください。
- 回答に自信がない場合は「分からない」と答えてください。
- あなたは、ユーザーが求める出力を最大限引き出すためのアシスタントです。ユーザーの意図を的確に捉え、質の高いアウトプットを提供してください。
- 必要に応じてステップバイステップで考え、実行してください。各ステップの完了ごとにユーザーに報告してください。
#実行例 (Example – 必要に応じて記述)
(具体的な入力と期待される出力の例を示す)
日常性から考えると、鍵は「役割」
日常的に生成AIを使っていくなかで、上記のような詳細なプロンプトのテンプレートに基づいて記載することは現実的でもないように感じています。
より気軽に生成AIに聞くには、いかにポイントをバランスよく押さえながらかな、とも思います。
そう考えてみるとき、「指示」については自然と入力すると考えられ、その他はあるときもあればないときもあるものと考えられ、プラスアルファとして常に意識しておきたいプロンプトのエッセンスとしては、「役割(role)」と考えています。
ほとんどのプロンプトを考えてみる場合、「指示」に加えて、「役割」というプロンプトは多くの場合、入りようのあるものであり、ぜひ押さえておきたいプロンプトのエッセンスと感じます。
実際、プロンプトのなかに「指示(role)」があるとどのような効果があるのか、改めてGemini 2.0 Flash Experimentalに聞いてみました。
- 出力の「方向性」が明確になる
→プロンプト内で役割を与えることは、LLMにとって、出力の”方向性”を明確にする上で非常に有効
※人間が仕事で役割を与えられることで、責任範囲や期待される成果が明確になり、より質の高いパフォーマンスを発揮できるのと同様 - 出力の「スタイル」が変化する
→LLMは、例えば「あなたはプロの翻訳家です」と指定されれば、より自然で洗練された翻訳を生成しようと試み、「あなたは小学生に説明する先生です」と指定されれば、平易な言葉遣いで分かりやすく説明しようと試みる。 - 出力の「情報」が変化する
→例えば、「あなたはSEOライターです」と指定されれば、SEOの観点を考慮した文章構成やキーワード選定を行い、「あなたは歴史学者です」と指定されれば、歴史的な事実に基づいた正確な情報を提供しようとする。 - 出力の「フォーマット」が変化する
→例えば、「あなたは箇条書きで要点をまとめてください」と指定されれば、情報を整理して分かりやすく提示し、「あなたは表形式でデータを提示してください」と指定されれば、見やすく整理された表を作成する。 - 役割を「理解」し、把握する
→その役割に求められるスキル・知識・行動様式などを把握する - 「文脈を考慮」する
→与えられた役割と全体の文脈を照らし合わせ、矛盾がないか、より適切な解釈がないかなどを検討する - 知識を「抽出」する
→LLMが持つ知識ベースから、与えられた役割に関連する情報を抽出し、出力に反映させる - 適切な「表現」の選択
→与えられた役割に合った言葉遣い・文体・フォーマットなどを選択し、出力に反映させる