AIを導入したものの望んだ出力を得られない―。そんな時には、プロンプトの質を改善して出力の質を向上させる「プロンプトエンジニアリング」が解決策の一つとなります。
この記事では、プロンプトエンジニアリングの概要と重要性、具体的な手法とプロンプト例、プロンプトの構成要素や設計における注意点をご紹介します。
1. プロンプトエンジニアリングとは
プロンプトエンジニアリングとは、AIから自分の望む出力を得やすくするための技術・学問です。AIに対するプロンプト(「○○をして」「○○とは?」などといったAIに送信する指示文)の質を引き上げ、出力のクオリティを向上させる取り組みを指します。
ChatGPTに代表される話題の生成AIは、LLM(大規模言語モデル)と呼ばれる仕組みにより膨大なテキストデータを学習して構築されています。プロンプトエンジニアリングは、生成AIに「(莫大な学習データのなかから)この辺りの情報を使って生成して」と分かりやすく指示してあげる作業にあたります。
生成AIとLLM(大規模言語モデル)については、それぞれ以下の記事で詳しく解説しています。
>>LLM(大規模言語モデル)とは?仕組みや活用事例について詳しく解説
2. プロンプトエンジニアリングの重要性
続いて、プロンプトエンジニアリングの重要性と期待できる効果を見ていきましょう。
2.1 質や精度の高い回答が得られるようになる
ChatGPTなどの出力に不満を感じたことのある方は多いと思いますが、生成AIの出力のクオリティはプロンプトの質に大きく依存しています。プロンプトエンジニアリングを実践すれば、生成AIが自らの能力を発揮しやすくなり、結果として質や精度の高い回答を得やすくなります。
2.2 AIの使用用途が広がる
質の良い回答を得られるようになれば、AIを思い通りに動かしやすくなります。AIに任せるのを諦めていた業務も、プロンプトエンジニアリングを習得すれば任せられるようになるかもしれません。
2.3 ユーザー体験の向上に繋がる
AIを自社の業務に活用すれば、ユーザーに従来とは異なる顧客体験を届けられます。24時間365日リアルタイムで顧客の質問に答えるチャットボットを問い合わせ窓口とするなど、人力では困難なサービスも実現でき、自社ビジネスに新たなインパクトを生み出すことが可能です。
3. 「プロンプト」の意味
プロンプトエンジニアリングを成功させるためには、プロンプトとは何か、今一度把握しておく必要があります。
前述の通り、プロンプトとはAIに送信する指示文や質問文のことです。「カスタマージャーニーとは何?」などと尋ねる文章を指し、生成AIに「学習済みのデータからこの辺りを引き出して回答して」と伝える役割を持ちます。この引き出す情報を伝える役割だと覚えておくと、プロンプトエンジニアリング全体を理解しやすくなります。
ちなみに、プロンプトという言葉はIT分野で昔から使われてきました。AI以前の時代では、コンピューターが利用者に対して入力を促す記号(例:Windowsのコマンドプロンプトに表示される「>」)を指しており、AI分野とは少し意味が異なります。
4. プロンプトの構成要素
プロンプトの構成要素の理解には、AI研究の民主化を目指す団体「DAIR.AI」が作成した「Prompt Engineering Guide」による以下の4種類の分類が役立ちます。
命令(Instruction) | モデルに実行してほしい特定のタスクまたは命令 |
文脈(Context) | モデルをより良い応答に導くための外部情報や追加の文脈 |
入力データ(Input Data) | 応答を見つけたい入力または質問 |
出力指示子(Output Indicator) | 出力のタイプや形式 |
出典:DAIR.AI「Prompt Engineering Guide」より引用・一部改変
>>プロンプトの要素 | Prompt Engineering Guide
>>Elements of a Prompt | Prompt Engineering Guide
作業内容にもよりますが、プロンプトの構成要素は基本的に命令のみが必須で、残りはなくても機能します。しかし、4要素を適切に用意できると出力の質を向上させられます。
4.1 命令(Instruction)
命令(Instruction)はプロンプトの主役となる構成要素です。「○○とは何か教えて」「○○を要約して」「○○を紹介して」など、AIに行ってほしい作業を伝える部分です。なお、日本語では「命令」と訳されますが、文章は命令形である必要はなく「○○とは何?」のように疑問形でも機能します。
4.2 文脈(Context)
文脈(Context)は、回答の生成の参考にしてほしい追加情報のことです。
例えばカスタマージャーニーの解説を希望するのであれば、「マーケティングの専門家の視点で」「高校生にも分かるように」といった指示が考えられます。
4.3 入力データ(Input Data)
入力データ(Input Data)は、希望の作業のためにAIに処理してもらうべく与えるデータや情報のことです。
例えば、文章の要約を任せる際に与える要約元のテキストや、分類タスクを任せる際の分類元データなどが該当します。文脈と少し似ていますが、より必須度の高い情報(与えないとタスクをこなせないようなデータ)を指します。
4.4 出力指示子(Output Indicator)
出力指示子(Output Indicator)は、回答の形式を指定するための要素です。「5つの箇条書きで」「文字数は200~300文字で」「見やすいグラフの形に」など、このような形式で命令をこなしてほしいと具体的に指定する部分にあたります。
5. 【基本】プロンプトエンジニアリングの手法
プロンプトエンジニアリングの具体的な手法を、基本と応用に分けて見ていきましょう。まずは基本の手法の特徴とプロンプト例、生成結果例(ChatGPT4)をご紹介します。
5.1 Zero-shot prompting
Zero-shot promptingは、例示なしでAIに作業を行わせる、もっとも単純なプロンプトです。手軽さが魅力ですが、作業の難易度やモデルの性能によっては出力の質が低くなる傾向にあります。
<プロンプト例>
<プロンプト例> 次の文章を良い・普通・悪いのいずれかに分類してください。 文章:交通事故に遭った 分類: <生成結果例> この文章「交通事故に遭った」は、内容に基づいて分類すると「悪い」になります。文章自体が交通事故というネガティブな出来事を述べているため、このカテゴリーが適切です。 |
5.2 Few-shot prompting
Few-shot promptingは、いくつかの例を与えてZero-shot promptingよりも質の高い回答を生成させるプロンプトです。
<プロンプト例> 次の文章を良い・普通・悪いのいずれかに分類してください。 例:先生に酷く怒られた “悪い” 最高に面白い映画を見た“良い” 何事もない一日だった“普通” 文章:友達から遊びの誘いの電話があった 分類: <生成結果例> この文章「友達から遊びの誘いの電話があった」は、内容に基づいて分類すると「良い」になります。友達からの遊びの誘いは楽しい活動への期待を含み、ポジティブな経験と見なされるためです。 |
5.3 Chain-of-Thought(CoT)
Chain-of-Thought(CoT)は、結果だけでなく回答の過程(思考の過程)も例示することで生成の質を高めるプロンプトです。答えの導き方まで教えてAIに真似をさせます。名前のCoTは「思考の連鎖」などと訳されます。
<プロンプト例> 質問:太郎は5個のリンゴを持っている。お腹が空いたので1個を食べ、近くの友達にも2個を配った。今、太郎は何個のリンゴを持っている? 回答:太郎は最初に5個のリンゴを持っており、1個を食べたので「5個-1個=4個」となりました。さらに、2個を友達に配ったので「4個-2個=2個」が残っています。今、太郎が持っているリンゴの数は「2個」です。 質問:花子は7個のバナナを持っている。1個をお母さんにプレゼントし、自分も1個のバナナを食べた。今、花子は何個のバナナを持っている? 回答: <生成結果例> 回答:花子が最初に7個のバナナを持っていたところ、1個をお母さんにプレゼントし、さらに自分も1個食べたので、「7個 - 1個 - 1個 = 5個」と計算されます。したがって、現在、花子が持っているバナナの数は「5個」です。 |
6.【応用】プロンプトエンジニアリングの手法
続けて、より応用的なプロンプトエンジニアリングの手法について解説します。
6.1 ReAct
ReAct(Reason Act)は、「Thought(初期の推論)」→「Action(必要な行動の考察)」→「Observation(最終的な見解)」の3つの段階を辿らせて、優れた出力を求めるプロンプトです。AI自身に考察を行わせることで、初期段階(Thought)よりも最終段階(Observation)のほうが質の高い回答を導ける傾向にあります。
<プロンプト例>
プロンプトエンジニアリングを習得するための方法について教えてください。
・Thought:
・Action:
・Observation:
上記のプロンプトを送信すると、Thought(初期の推論)→Action(必要な行動の考察)→Observation(最終的な見解)の順番に生成されます。
最後のObservationは、最初のThoughtからActionを踏まえた回答になっており、より精度の高い意見を提供してくれる仕組みとなっています。
6.2 Self-Consistency
Self-Consistency(自己整合性)は、CoTを発展させたプロンプトです。希望の出力に関連する多様なCoTを与えてAIの連想的・論理的な思考を引き出し、数学的推論のようなAIが苦手とする作業も可能にします。
<プロンプト例>
質問:太郎は5個のリンゴを持っている。お腹が空いたので1個を食べ、近くの友達にも2個を配った。今、太郎は何個のリンゴを持っている?
回答:太郎は最初に5個のリンゴを持っており、1個を食べたので「5個-1個=4個」となりました。さらに、2個を友達に配ったので「4個-2個=2個」が残っています。今、太郎が持っているリンゴの数は「2個」です。
質問:花子は7個のバナナを持っている。1個をお母さんにプレゼントし、自分も1個のバナナを食べた。今、花子は何個のバナナを持っている?
回答:花子が最初に7個のバナナを持っていたところ、1個をお母さんにプレゼントし、さらに自分も1個食べたので、「7個 - 1個 - 1個 = 5個」と計算されます。したがって、現在、花子が持っているバナナの数は「5個」です。
質問:隆史は3台の車を持っている。新たに気に入った車を購入するために、2台を売却した。そして、欲しかった車1台を購入した。現在、隆史は何台の車を持っている?
回答:隆史は3台の車を持っていましたが、2台を売却し「3台-2台=1台」となりました。その後、追加で1台を購入したため、現在は「1台+1台=2台」です。
質問:章子は20本のチューリップを育てている。しかし、7本が病気で枯れてしまった。その後、新しく11本のチューリップを育てはじめた。現在、章子は何本のチューリップを育てている?
回答:章子は20本のチューリップを育てていましたが、7本を枯らしてしまい「20本-7本=13本」となりました。そして、11本のチューリップを追加で育てはじめたため、「13本+11本=24本」。今、章子は24本のチューリップを育てています。
質問:浩二は30個のビー玉を持っている。弟がほしがったので、14個分けてあげた。その後、お父さんが8個のビー玉を新しくくれた。現在、浩二が持っているビー玉の数は?
回答:
<生成結果例>
浩二が最初に30個のビー玉を持っていましたが、弟に14個を分けてあげたので、「30個 - 14個 = 16個」となります。その後、お父さんが新しく8個のビー玉をくれたので、「16個 + 8個 = 24個」と計算されます。したがって、現在、浩二が持っているビー玉の数は「24個」です。
6.3 Generate Knowledge Prompting
Generate Knowledge Prompting(知識生成プロンプティング)は、ある推測の前にAIに自ら知識を生成させ、推測の妥当性と正確さを向上させる手法です。多様な例を与えるという点でSelf-Consistencyに、段階を踏ませるという点でReActに似ています。
Generate Knowledge Promptingでは、知識生成用のプロンプトと、その結果を受けて推論を行わせるプロンプトの2つのプロンプトを使います。今回は最終目的が「1日あたりで摂取すべきカロリーは男性と女性で異なります。正しいか、間違っているか?」と質問することだと仮定し、プロンプト例を用意しました。
<知識生成用 プロンプト例>
入力:サッカーは11人でプレイするスポーツです。
知識:サッカーはピッチ上に11人対11人が入り、互いにゴール数を競い合うスポーツです。90分の試合を経て、最終的にゴール数が多いチームが勝利します。ピッチの11人は、一人がゴールキーパー、10人がフィールドプレイヤーとしてプレイします。サッカーの大きな大会としては、ワールドカップやチャンピオンズリーグがあります。
入力:マーケティング分野では、新規顧客獲得よりも既存顧客との関係強化の方がコストがかからないといわれています。
知識:マーケティングの一般的な見解において、既存顧客との関係強化は新規顧客獲得よりもコストがかかりません。「1:5の法則」によれば、新規顧客からの売上獲得は既存顧客からの売上獲得と比べて、5倍のコストがかかるとされています。その背景には、ビジネス競争の熾烈化、既存の販売データを活用できるかどうか、過去の販売で獲得した顧客ロイヤルティなどがあります。
入力:1日当たりに摂取すべきカロリーは男性と女性で異なります。
知識:
<知識生成用 生成結果例>
知識:1日当たりの推奨カロリー摂取量は性別、年齢、身体活動レベルによって異なります。一般的に、成人男性の場合、平均して約2,500キロカロリーが推奨され、成人女性の場合は約2,000キロカロリーが推奨されます。これらの数値は基礎代謝率(身体の基本的な機能を維持するのに必要なエネルギー量)と日常活動によるエネルギー消費を基に算出されています。また、特に活動的なライフスタイルを送る人々や、特定の健康状態や体重管理の目標を持つ人々は、これらの平均値から逸脱する場合があります。栄養士や医師と相談し、個々の健康状態や活動レベルに最適化したカロリー摂取量を設定することが重要です。
<推論用 プロンプト例>
質問:1日当たりに摂取すべきカロリーは男性と女性で異なります。正しいか、間違っているか?
知識:1日当たりの推奨カロリー摂取量は性別、年齢、身体活動レベルによって異なります。一般的に、成人男性の場合、平均して約2,500キロカロリーが推奨され、成人女性の場合は約2,000キロカロリーが推奨されます。これらの数値は基礎代謝率(身体の基本的な機能を維持するのに必要なエネルギー量)と日常活動によるエネルギー消費を基に算出されています。また、特に活動的なライフスタイルを送る人々や、特定の健康状態や体重管理の目標を持つ人々は、これらの平均値から逸脱する場合があります。栄養士や医師と相談し、個々の健康状態や活動レベルに最適化したカロリー摂取量を設定することが重要です。
回答:
<推論用 生成結果例>
質問「1日当たりに摂取すべきカロリーは男性と女性で異なります」に対する回答は「正しい」です。栄養学において、1日当たりの推奨カロリー摂取量は性別、年齢、身体活動レベルに基づいて異なることが認められています。具体的には、一般的な成人男性は約2,500キロカロリー、成人女性は約2,000キロカロリーの摂取が推奨されることが多いです。この違いは、男性と女性で基礎代謝率が異なるため、同じ身体活動レベルでもカロリーの必要量が変わるためです。また、個人の具体的な健康状態や活動レベルに応じて、これらの数値は変動するため、個別に栄養士や医師の助言を求めることが推奨されます。
6.4 Directional Stimulus Prompting
Directional Stimulus Prompting(方向性刺激プロンプティング)は、ヒントにより回答の方向性を誘導して質の高い出力を求める、プロンプト本来の役割に即した手法です。例えば、文章の要約時に要約から漏らしてほしくない要素をヒントとして与える方法を指します。
例として、Brazeを活用して広告からの収益率を4倍に増やしたKFCフィリピンの事例を要約させてみましょう。
>>KFCフィリピンがオーディエンス連携を使って収益を4倍に増やした方法
<プロンプト例>
以下の文章を200~300文字で要約してください。
ヒント:広告からの収益率4倍、キャンバスフロー、2つの戦略的目標、30%低い予算
要約元文章:「(※事例ページの本文をここにコピーペースト)」
<生成結果例>
KFCフィリピンは、329の店舗とアプリを通じて革新的なカスタマージャーニーをテストし、最適化しています。2022年、広告費の削減が進むなか、KFCフィリピンはBrazeプラットフォームを活用して、顧客再エンゲージと信頼構築に努めました。特に、カゴ落ちキャンペーンや非アクティブユーザー向けキャンペーンを通じて、ユーザー行動に基づいたパーソナライズされたコミュニケーションを展開しました。これにより、広告からの収益率が4倍に増加し、顧客獲得単価は50%削減されました。さらに、30%低い予算でこれらの成果を達成し、統合された技術スタックとチームの努力により、高い運用効率が実現しています。
6.5 Multimodal CoT
Multimodal CoTは、マルチモーダルAI(複数種類のコンテンツを扱えるAI。例:文章に加えて画像も理解できる)に対して、複数種類のコンテンツを同時に与える手法です。2023年の論文(Zhang et al., 2023)で登場した新しい概念であり、画像と文章を同時に与えることで(Input)回答の質を向上させます(Output)。文章のみならず実物の画像なども用意することで精度を引き上げられます。
7. 敵対的プロンプトについて
プロンプトの手法に関連する知識としてもう一つ押さえておきたいのが、「敵対的プロンプト(Adversarial Prompting)」の存在です。AI(LLM)に攻撃を仕掛ける悪意を持ったプロンプトを指します。
敵対的プロンプトは、本来はLLMから取り出せない学習データを抜き出したり、サービスが制限している内容を生成させたりします。例えば、ChatGPTは政治や犯罪に関する回答を避けるように制限されていますが、ある敵対的プロンプトにより仮想人格を演じさせると、このような話題にも答えるようになります。
通常、敵対的プロンプトの使用はサービスの規約違反となるため注意しなければいけません。
8. プロンプトを設計する際のポイントや注意点
最後に、プロンプトを設計する際のポイントと注意点をご紹介します。
8.1 シンプルな指示からはじめてみる
プロンプトエンジニアリングでは、シンプルな内容からプロンプトを作り上げていくことが大切です。最初から多数の作業をこなすように求めたり、出力の制限条件を20個も30個も用意したりしては、望んだ結果が得られない可能性が高まります。少しずつ内容を充実させていきましょう。
8.2 何度も試して精度を高めていく
プロンプトエンジニアリングでは、何度もプロンプトを試して改善していくことが重要です。通常、生成AIは学習やモデルの構築に時間がかかりますが、出力は素早く行えます。何度も試しやすい魅力を活かし、プロンプトの表現や言い回しを変えたり、与える参考データを変更したりするなど、繰り返し修正していきましょう。
8.3 要素ごとに改善点を見つける
プロンプトの改善を進める際には、構成要素でご紹介した4つの要素に分類しながら検討していくのがおすすめです。少なくとも以下のポイントはチェックしてみてください。
【命令(Instruction)】
求める作業内容が多すぎないか
具体的な指示ができているか(例:「良い感じの訴求文を」→「ECサイトに掲載する自社商品Aの訴求文を」)
【文脈(Context)】
不要な指示をしていないか
相反する指示内容はないか(例:「専門家として高度な視点で」「初心者にも分かりやすく」)
【入力データ(Input Data)】
AIが理解しやすいようにデータがある程度整理されているか
例示にミスや誤りがないか
【出力指示子(Output Indicator)】
制限の数が多すぎないか
具体的な指示ができているか(例:「良い感じにまとめて」→「○○を基準に表へ」「4つの箇条書きを利用する形で」)
9. まとめ
プロンプトエンジニアリングとは、プロンプトの質を向上させてAIからの出力クオリティを向上させる技術・学問です。AIから思うような出力が得られない問題の解決策となる可能性を秘めています。
ここでご紹介した8つの手法と構成要素を参考に、ぜひ自社の望みを叶えてくれるプロンプトを作り上げてください。