プロンプトエンジニアリングとは?生成AIを効果的に使うコツやプロンプトの応用例を解説
生成AIをより効果的に使いこなすためには、AIへの指示や命令を最適化する「プロンプトエンジニアリング」のスキルを身につけることが重要です。
本記事では、プロンプトエンジニアリングの概要から、効果的にプロンプトを設計するコツやプロンプトの応用例を紹介します。
POINT
- プロンプトエンジニアリングとは、ChatGPTなど生成AIから望ましい出力を得るために、AIへの指示や命令を最適化する技術や手法のこと
- プロンプトエンジニアリングは、回答の質や関連性の高い出力を獲得するために欠かせない工程
- プロンプトエンジニアリングはコード生成にも活用できるスキルである
Contents
プロンプトエンジニアリングとは
プロンプトエンジニアリングとは、わかりやすく説明すると人工知能(AI)システム、特に言語モデルやChatGPTのような生成AIから望ましい出力を得るために、AIへの指示や命令(プロンプト)を最適化する技術や手法です。
AIが出力する回答の質は、与えられたプロンプトに大きく左右されます。意図した通りの出力を得るためのプロンプトを作るスキル、すなわちプロンプトエンジニアリングの重要性は、今後のAI時代において高まっていくと考えられます。
プロンプトとは
そもそもプロンプトとは、生成AIに対して利用者が入力する指示や命令のことです。なお、IT領域ではシステムに処理を促す文字列全般をプロンプトと呼びますが、この記事では、対話型生成AIのプロンプトに絞って説明します。
プロンプトに使用されるのは、人間が用いる自然言語です。たとえば「お菓子メーカーの新商品開発のための企画書を作成してください」「顧客へのお礼を伝えるメールの文章を作成してください」といった単純な文章でも、生成AIは回答を出力してくれます。
しかし、より効果的なプロンプトを生み出すためには、「なぜ生成AIを利用しているのか」「どのような回答を得たいのか」など目的を明確化することや、回答の条件を提示するなど、プロンプトを具体的に記すことが重要になります。
なぜプロンプトエンジニアリングが必要なのか
前述したように、求めている通りの出力を生成AIから得るためには、適切なプロンプトが必要です。つまりプロンプトエンジニアリングは、回答の質や関連性の高い出力を獲得するために欠かせない工程になります。
一方、求めている出力に対してプロンプトが適切でない場合、AIから得られる回答の質は低くなりがちです。たとえば、タスクに優先順位をつけて効率的に業務をこなしたいと考え、「タスクを整理して」と生成AIに命令しても「一般的なタスク整理の方法」が出力されてしまいます。
一方、プロンプトに順位付けしてほしいタスクを箇条書きにすると、実効性のある回答を得られる精度は高まります。
プロンプトの要素
プロンプトエンジニアリングを解説する資料「Prompt Engineering Guide」では、プロンプトの要素として「命令」「文脈・背景」「入力データ」「出力形式」の4つに言及しています。
- 命令(Instruction):生成AIに実行させる命令
- 文脈・背景(Context):生成AIに考慮してほしい背景、情報
- 入力データ(Input Data):生成AIに応答を求める入力や質問
- 出力形式(Output Indicator):出力してほしい形式・フォーマット
命令とは、「書く」「要約する」「分類する」「翻訳する」「並べ替える」など、生成AIで達成したいことを定義し入力する指示のことです。たとえば、「次の文章を300字以内で要約してください」といったプロンプトが命令に該当します。
文脈・背景は、出力結果の精度向上に役立つプロンプトです。生成AIに考慮してほしい背景や情報を与えることで、文脈に基づいた応答を出力できるようになります。
入力データとは、命令文に補足する必要な情報です。この入力データがあることで、AIはより適切な出力を行えるようになります。また出力形式とは、出力される情報のフォーマットを指します。出力形式を含めたプロンプトを用意することで、出力結果の品質向上を図れます。
なお、この4つの要素は、すべてのケースにおいて必須となるものではありません。必要な要素はタスクによって異なります。
効果的にプロンプトを設計するコツ
では、望む回答を出力させるために、具体的にどのようにプロンプトを設計すればよいのでしょうか? ここからは、効果的にプロンプトを設計するための4つのコツを紹介します。
- 出力形式を指定する
- 回答例を記載する
- 段階的に推論させる
- 事前情報を与える
出力形式を指定する
出力形式の指定によって、AIは目的に沿ったわかりやすい回答を出力できるようになります。たとえば、「タイトルと本文をつくるように指示する」「表を使うように指示する」といった方法です。
出力形式を指定する際は、「箇条書き」「表形式」「マークダウン」「HTML」など具体的な形式を指定します。プロンプトには条件に加え、フォーマットの見本を添えることでも、より品質の高い出力結果を得られます。
回答例を記載する
プロンプトに回答例を含めることで、AIが法則性を学習して、回答例と同様の形式で応答してくれるようになります。
回答例を記載しない場合、上記のような質問をするとテキストの羅列が表示されます。一方、回答例をプロンプトに含めることで、ある程度の形式に則った回答が出力されるため、回答のわかりやすさや可読性を向上させることが可能です。
タスクが複雑な場合には、回答例を2つ以上用意するなど工夫してみましょう。
段階的に推論させる
AIは出力した結果に対し、「なぜ」その結論が出るのかを理解できません。そこで生成AIに段階的に推論させることで、論理的な結論を出力結果に含められるようになります。これにより、さらに高度な推論タスクが可能になります。
段階的に推論させたい場合、プロンプトには段階的に考える道筋を示し学習させることが重要です。上記の例では、AI自身が出力した結果を踏まえ、さらに何が主食として適しているのかを理由つきで示してくれています。
事前情報を与える
生成AIは、プロンプトからヒントを得て結果を出力するため、プロンプトに事前情報が多いほど、求める出力結果を得やすくなります。
AIに事前情報を与える際には、文脈や設定、条件を命令と合わせて入力します。上記の例の場合、あまり空腹ではないこと、冷蔵庫にある食材をプロンプトに含めたことで、朝食に適する献立のレシピも提示してくれています。
プロンプトの応用例
ここからは、プロンプトエンジニアリングにて活用できると望ましい、主なプロンプトの応用例を紹介します。
- ReAct
- Chain-of-Thought Prompting
- Self-Consistency
- Generate Knowledge Prompting
ReAct
ReActは、「推論」と「推論に基づいた行動」を組み合わせたプロンプトです。ReActでは、シンプルな入力プロンプトで推論を行わせた後、具体的な行動を列挙し出力を求めます。
ReActを使用する際には、「思考」「行動」「観察」のフレームワークを活用することで、より高精度な回答を導けるようになります。
[質問や指示]
<Thought>:
<Action>:
<Observation>:
出力された結果に疑問がある場合には、追加質問をして新たな結果を出力させるようにしましょう。
Chain-of-Thought Prompting
Chain-of-Thought Prompting(CoT)は、AIに連鎖的な思考をさせ精度を高める手法です。数学の証明問題のように、段階的な推論を必要とする問題に対して推論や考え方を学習させることで、適切な処理を促し必要な結果へと誘導します。
なお、Chain-of-Thought Promptingを使用する際には、生成AIはそもそも推論が得意ではないという特徴を理解しておく必要があります。Chain-of-Thought Promptingによって、回答を導き出した処理の内容をチェックして、回答の正誤を必ず確認しましょう。
Self-Consistency
Self-Consistencyは、Chain-of-Thought Promptingをさらに応用した手法で、複雑な推論タスクの遂行に役立ちます。Self-Consistencyでは、複数の推論プロセスのなかから、もっとも整合性の高い回答を選択するように指示する必要があります。
たとえば、次のように年齢の計算をさせると、計算の過程が与えられていないためにAIは誤った回答を導き出します。
正しい答えを導き出すために、複数の推論プロセスを示すことで、AIは正しい回答を導き出せるようになります。
Self-Consistencyを活用する際には、複数のプロント手法を含めたプロンプトの作成がポイントになります。推論プロセスが少ない場合、Self-Consistencyを活用しない場合と同様に誤った回答が導き出されてしまうことがあります。
Generate Knowledge Prompting
Generate Knowledge Promptingとは、大規模言語モデルが生成する知識をプロンプトに使用する手法です。AIに知識を与えることで、正しい結果を出力する可能性が高まります。
Generate Knowledge Promptingでは、次のようにAIから知識を出力し、その後質問と生成された知識を組み合わせ、回答を出力させます。
知識がない状態で同様の質問をすると、AIは「いいえ」と答えるのみで、その理由までは出力しません。知識を組み合わせることで、回答に至った経緯がわかるようになります。
プロンプトエンジニアリングによるコード生成
「ChatGPTはプログラミングができるのか?」「コード生成を効率化できるのか?」といった議論がエンジニア界隈にて活発化しています。「使えるものなら使いたい」と考えているエンジニアも少なくないでしょう。
結論からいうと、ChatGPTによるプログラミングは可能です。ただし効率化につなげるためには、適切なプロンプトエンジニアリングが求められます。
ここでは「あなたは優秀なプログラマーです」と背景情報を付記し、出力形式をPythonと指定した結果、適切な出力を得られました。
出力結果の右上に「Copy code」の機能も搭載されているように、インターフェイスも優れています。ChatGPTとコード生成の相性は悪くありません。これからのエンジニアやプログラマーにとって、プロンプトエンジニアリングは有効なスキルになっていくでしょう。
- プロンプトエンジニアリングとは、ChatGPTのような生成AIから望ましい出力を得るために、AIへの指示や命令(プロンプト)を最適化する技術や手法のこと
- AIが出力する回答の質は、与えられたプロンプトに大きく左右される
- 「出力形式を指定する」「事前情報を与える」など、プロンプトエンジニアリングのコツを押さえておくと、高精度な出力結果を得られるようになる
- 「ReAct」「Chain-of-Thought Prompting」などの手法によって、より高精度な回答を導けるようになる
- プロンプトエンジニアリングはコード生成にも活用できるスキルである