この記事のポイント
- プロンプトエンジニアリングの目的から応用まで詳しく解説。
- 入門編から応用編まで、様々なレベルに応じたプロンプトエンジリアリングのコツを説明。
- 深津式やReActといった、プロンプトエンジニアリングの代表的なフレームワークについても紹介。
監修者プロフィール
坂本 将磨
Microsoft AIパートナー、LinkX Japan代表。東京工業大学大学院で技術経営修士取得、研究領域:自然言語処理、金融工学。NHK放送技術研究所でAI、ブロックチェーン研究に従事。学会発表、国際ジャーナル投稿、経営情報学会全国研究発表大会にて優秀賞受賞。シンガポールでのIT、Web3事業の創業と経営を経て、LinkX Japan株式会社を創業。
AI技術が急速に進化するなか、言語モデルを最大限活用するための新たな手法「プロンプトエンジニアリング」に注目が集まっています。
この記事では、プロンプトエンジニアリングとは何か、その重要性から実践的なテクニック、課題までを幅広く解説していきます。
ChatGPTの可能性を引き出し、より精度の高い結果を目指したプロンプトの設計法や応用例について紹介しながら、AIの賢明な活用とそれに伴う課題にも焦点を当てています。
ChatGPTについてはこちらの記事で詳しく解説しています
➡️ChatGPTとは?今さら聞けない基礎知識を徹底解説!
目次
プロンプトエンジニアリングとは
プロンプトエンジニアリングとは、AIに対して提示する質問や命令、つまり「プロンプト」と呼ばれるテキストをより効果的に設計する手法のことを指します。
AIが学習した知識を最大限に引き出し、目的に沿った応答を得られるようにするため、質問の仕方や命令の文脈を工夫することが非常に重要です。
プロンプトエンジニアリングの手法を用いることで、従来のAIモデルの訓練やファインチューニングといった高コストなアプローチに頼らずに、より目的に沿った出力を引き出すことが可能になります。
【関連記事】
➡️ChatGPTのプロンプトとは?効果的な書き方やコツ、活用例を紹介
プロンプトエンジニアリングの重要性
プロンプトエンジニアリングの目的は、AIの応答をユーザーの要求に合わせて最適化することです。これにより、AIの利用効率を向上させるとともに、より信頼性の高い結果を得ることが可能になります。
例えば、「森林保護の重要性について文章を書いてください」 というプロンプトをAIに入力するとします。
これだけだと、生成される内容にムラが出る可能性があります。「森林保護は必要ない」という立場の意見を作る可能性もありますし、想定より出力された文量が少ないこともあり得ます。
しかし、プロンプトを次の様に変更するとどうでしょう。
「森林保護の重要性を説明し、具体的に国が取り組むべき施策を2つ以上提示せよ。文字数は300字以上で」
このように、役割や条件をプロンプトに織り込むことで、生成される文章の品質や方向性をコントロールすることが可能になります。
もちろん完璧な出力を保証するものではありませんが、ユーザーが理想とする内容の文章を生成するためにプロンプトエンジニアリングは重要だと考えられます。
プロンプトの構成要素
効果的なプロンプトを作成するためには、いくつかの要素を適切に組み合わせることが重要です。主な構成要素としては以下の4つが挙げられます。
Instruction(命令・指示)
生成AIモデルが実行する指示やタスクです。例えば「要約を生成せよ」「推薦商品を3つ挙げよ」など、実際に行なってほしいことを具体的に指示します。
Context(背景・文脈)
出力の質を高めるために、生成AIに考慮してほしい背景情報や文脈を示します。例えば、「20代の女性の目線で」や「小学生でもわかるように」対象ユーザーの属性や状況などを提示し、個別事情に応じた出力を促します。
Input Data(入力)
生成AIモデルに回答してほしい具体的な質問や入力データです。例えば「東京と大阪を比較せよ」のように解析対象の対象を示します。
Output Indicator(出力形式)
出力してほしい形式やフォーマットの種類を指示します。例えば「300字以内で要約せよ」「商品特徴を5つのポイントで列挙せよ」など、出力のスタイルを指定します。
プロンプトエンジニアリングのコツ
プロンプトの構成要素を踏まえ、作成時のポイントについて例を挙げながら紹介していきます。
タスクの具体的指示
「要約を生成してください」「推薦商品を3つ挙げてくだあい」など、AIに実際に実行してほしい内容を具体的に指示します。要約の項目や推薦する観点をより詳細に示すことで、より適切な出力が得られます。
スタイルやトーンの指定
「小学生でもわかるように」や「20代の女性の目線で」などの要求により、生成される文章のスタイルやトーンをある程度意図した方向に導くことができます。
事実確認の要求
「以下の内容が事実か確認しながら回答せよ」「WHOの最近のレポートを参考に回答せよ」と要求を加えることで、AIは回答する前提となる事実関係について確認する動機付けがされます。参照すべきデータベースや論文も指定できます。
制約条件の設定
文字数制限を設けたり、参照可能なデータソースを限定したりすることで、ある程度の枠組みを作ることができます。
例えば 「300字以内で要約を生成せよ」 、「商品特徴を5つのポイントで列挙して」 と文字数制限を設けたり、フォーマットの種類を指定することで、目的に沿った出力形式が期待できます。
プロンプト設計においては、単一の手法に限定するのではなく、上記の複数の要素を適切に組み合わせていくことが大切です。
しかし最初から最適なプロンプトを構築するのは難しいので、使用しながら改善していくことが合理的なアプローチといえるでしょう。
レベル別:プロンプトエンジニアリングのテクニック集
「入門編」
Zero-Shotプロンプティング
Zero-Shotプロンプティングは、モデルが以前に見たことのないタスクに対して、事前の例示や情報なしに推論を行う方法です。つまり、特定のタスクに対する直接的な指示のみをモデルに与える手法です。以下は、実際にこのテクニックを使用してみた例です。
Zero-Shotプロンプティングの使用例
画像から分かるように、このプロンプトでは、感情分析のタスクに対してモデルに具体的な指示を与えますが、感情分析に関する事前の例示やデータは提供していません。
LLMが大量のデータでトレーニングされ、指示に従うように調整されているという事によって、事前の情報提供をせずとも応答できるようになっています。
質問や指示の内容によってはうまく応答されないため、その場合は次に紹介する同じく入門編のFew-Shotプロンプティングを実践してみましょう。
Few-Shotプロンプティング
Few-Shotプロンプティングは、モデルが新しいタスクを解決する際に、少数の例示(例えば、テキストのサンプルや問題の解答)を用いて学習する手法です。この方法では、少数の例を通じてモデルがタスクのコンテキストを理解し、未見の問題に対応する能力を高めます。以下は、実際にこのテクニックを使用してみた例です。
Few-Shotプロンプティングの使用例
このFew-Shotプロンプティングの例では、2個の文を用いて異なる感情や状況を示し、その後に新しい文を提示し、その意味を解釈させています。
今回は2個だけ例示を用いましたが、難しいタスクに対しては5個、10個と例示の数を増やすことで有効な場合もあります。このテクニックは例えとなるラベルの存在が重要なので、ラベルがランダムな場合でも、試してみることをお勧めします。
これらのテクニックでも求める応答が得られない場合は、中級編へ移動しましょう。
「中級編」
Chain-of-Thoughtプロンプティング
Chain-of-Thoughtプロンプティングは、複雑な問題を解決する際に、中間ステップや推論過程を明示的に示すことによって、言語モデルの理解と回答の精度を向上させるアプローチです。この手法では、モデルに問題を提示する際に、解決過程で考えるべきステップやロジックを順を追って示します。これにより、モデルはより複雑な推論タスクや、複数のステップを要する問題に対しても、より正確に回答を導き出すことができます。以下は、実際にこのテクニックを使用してみた例です。
Chain-of-Thoughtプロンプティングの使用例
逆に、このテクニックを使わず最終的な質問だけ聞く(Zero-Shotプロンプティング)とどうなるでしょうか。その結果は以下の通りです。
Chain-of-Thoughtプロンプティングを使わなかった場合
最終的な偶数という答えは合っているものの、途中過程の合計の値が間違っています。思考のプロセスを事前に提示するだけで、ここまで精度が向上することが分かります。これでもまだ求める応答が返ってこない場合は、次のSelf-Consistencyを実践してみてください。
Self-Consistency
Self-Consistencyは、先に紹介したFew-ShotプロンプティングとChain-of-Thoughtプロンプティングを組み合わせたイメージのテクニックです。
問題とその解決のためのロジックを1まとまりに、それを複数用意します。次に、複数の文脈を事前に提供することにより、自ら推論する能力を高め、結果の精度を向上させることが期待できます。
また、この用意というプロセスをモデルに生成してもらうということも可能です。
以下は、このテクニックを使わない時と、実際にこのテクニックを使用した時の例です。
Self-Consistencyを使用した場合
Self-Consistencyを使った場合の例
Self-Consistencyを使用していない場合
Self-Consistencyを使用していない場合の例
今回はChain-of-Thoughtプロンプティングの時とは異なり、テクニックを使わない時では最終的な求める値も間違っていることが分かります。ここまでのテクニックを駆使してもまだなお、求める応答が得られないという方は応用編へと進み、実践してみてください。
「応用編」
方向性刺激プロンプティング
方向性刺激プロンプティングは、目的に沿った推論結果を返すように言語モデルを誘導するために、適切な方向性を持つ「刺激(ヒント)」を与えるテクニックです。このアプローチは、言語モデルに特定の回答や推論プロセスへと向けるための指示を明示的に設定することにより、より関連性の高いまたは期待される出力を引き出すことを目指しています 。通常時とこのテクニックを使用した時の違いは、以下の通りです。
方向性刺激プロンプティングの使用例
今回はトピックや入力の文章、予想される出力も全てAIに任せていますが、方向性プロンプティングのイメージは画像で分かる通りです。自分が求めているような答えにAIを誘導するためのヒントとなる文章やキーワードを設定してあげるのがこのテクニックのポイントです。
PAL(プログラム支援言語モデル)
PALは、自然言語で表された問題を解析し、その解決過程をプログラムの形で生成する方法です。このアプローチでは、大規模言語モデル(LLM)を利用して、問題の解決に必要な中間ステップをプログラムとして出力します。
解答を自由形式のテキストではなく、Pythonインタプリタのような実行可能なプログラムとして提供することで、解決プロセスを具体的な実行ステップへと移行させます。
それでは実際の例を、このテクニックの開発者が載せている [https://github.com/reasoning-machines/pal/tree/main/pal/prompt] から一つ取り出して紹介します。なお、公式のものから少しだけ編集を加えています。
- システムに対する指示を書きます。
システムへの指示
2. 次にタスクを記述します。
タスクの記述
3. プログラムを解答のプロセスに使って答えを導き出します。
AIからの応答
このように、問題解決のためのステップやロジックがプログラムによって書かれていることが分かり、このテクニックを用いることで他のタスクに対しても精度の向上が期待できます。先ほどのgithubに飛ぶと、今回紹介した数学的な問題以外にも、日付に関する問題などが例として挙げられています。
## 代表的なプロンプトエンジリアリングのフレームワーク
プロンプトエンジニアリングにおいて注目されている代表的な手法に、「深津式プロンプト」と「ReAct」があります。
深津式プロンプト
深津式プロンプトは、対象・条件・構造・敬語の4要素から成り立つプロンプト構成法です。簡潔でわかりやすい指示、達成可能な条件設定などが特徴です。条件を追加することで制御性も高められます。
深津式プロンプトについて詳しく知りたい方は、こちらの記事も参考にしてみてください。
➡️ChatGPTの深津式プロンプトとは?例文付きで徹底解説!
ReAct
ReActは、「推論」と「行動」を組み合わせたプロンプトエンジニアリングの手法です。この手法は、言語モデルが推論とタスクを遂行するために、推論の理由とその推論に基づいた行動を組み合わせることにより構成されています。"Reasoning"(推論)と"Acting"(行動)を組み合わせて"ReAct"と名付けられました。
このように体系化された手法やテンプレートがあるため、最初からすべて自分で構築するよりも、既存の手法を参考にしながらプロンプトを作成することもプロンプトエンジニアリングを学ぶ上で効率的な手段の1つです!
既存の設計手法をカスタマイズしつつ、試行錯誤を重ねながらプロンプトを改善していくアプローチを推奨します。
本記事で紹介したフレームワーク以外にも、コピーしてすぐに使えるプロンプトテンプレート集を紹介しています。
ぜひこちらの記事もご覧ください。
➡️【すぐに使える】ChatGPTのプロンプトテンプレート30選
プロンプトエンジニアリングの課題と今後の展開
信頼性や偏りへの対応
生成された内容には依然として偏りやハルシネーションが存在することが課題です。完全に偏りのない正確な文章生成を保証するには多くの技術的障壁があるのが実情です。
具体的には、トレーニングデータの選定やモデル構造の改善などの対策が求められます。また、出力結果の透明性と説明責任のさらなる向上も重要課題といえます。
現状の言語モデルはブラックボックス的な側面が強く、 「なぜそのような内容が生成されたのか」 といった内部プロセスを明らかにすることが求められます。
プライバシーやセキュリティへの配慮
個人情報保護への対応は喫緊の課題です。プロンプト設計から生成コンテンツの取扱いに至るまで、プライバシーへの配慮は必須です。
加えて、敵対的プロンプトの使用等により言語モデル自体の弱点が指摘されつつあり、技術面も含めたセキュリティ対策の必要性が高まっています。内部情報漏洩や改ざんといった脅威に対する体制構築が求められており、事前の対応力強化が急務とされています。
プロンプトインジェクション
プロンプトインジェクション は、意図しない生成結果を引き起こす可能性がある問題点です。ユーザーが意図的または偶発的に、特定のキーワードやフレーズを入力することで、AIが予期せぬ回答や不適切な内容を生成することがあります。
この現象は、言語モデルが入力されたプロンプトに基づいて出力を生成する仕組みに起因しており、悪意あるユーザーによって悪用される恐れもあります。
対策としては、入力プロンプトに対する厳格なフィルタリングや検証メカニズムの導入が考えられます。しかし、過剰な制限を加えると、ユーザーの自由な表現や創造性を阻害する可能性もあるため、バランスの取れたアプローチが求められます。
また、AIが不適切な内容を生成するリスクを低減するための、継続的な学習やモデルの調整も重要です。
【関連記事】
➡️ChatGPTの問題点とは?その危険性や社会に与える影響を解説
まとめ
今回はAI技術のなかでも注目を集めている「プロンプトエンジニアリング」について詳しく取り上げました。
プロンプトエンジニアリングは生成AIの活用において欠かせない手法であり、個人から企業、分野を問わず幅広いニーズが存在します。プロンプト次第でモデルの出力結果をある程度コントロールできる可能性がある点が大きな魅力だと考えられています。
一方で完全な出力を求めるには技術的な障壁も依然多く、ハルシネーション対策や個人情報、著作権の保護といった課題も存在感を増しています。プロンプトエンジニアリングの効用と限界を併せて認識し、適切な活用の在り方を考えていくことが重要人とAIの適切な役割分担を念頭に置き、時には互いを補完し合う関係を築くなかで、より魅力的で安全なAI活用の姿が実現されていくものと考えられます。