生成AI

AIエージェント
生成AI
ChatGPT連携サービス
AI受託開発
対話型AI -Conversational AI-
ボイスボット
バーチャルヒューマン
教師データ作成
AI研究開発
通訳・翻訳
声紋認証
機密情報共有・管理
契約書管理システム
ワークステーション
FAQシステム
AIカメラ
生体認証
インボイス制度対応システム
データセットの収集・購入
コールセンター
人事・総務向け
インバウンド対策
コンバージョンアップ
KYT・危険予知で労働災害防止
無料AI活用
顧客リスト自動生成
ロボットで自動化
LINE連携
セキュリティー強化
テレワーク導入
AI学習データ作成
配送ルート最適化
非接触AI
受付をAIで自動化、効率化
AIリテラシーの向上サービス
日本語の手書き文字対応AI-OCR
Windows作業の自動化RPAツール
リスク分析AIで与信管理
紙帳票仕分けAI-OCRサービス
サプライチェーン
AIコンサルティング
最終更新日:2024/08/19
プロンプトエンジニアリングとは?
ChatGPTの普及に伴い、「プロンプトエンジニアリング」という言葉を耳にしている人もいることでしょう。プロンプトエンジニアリングは、ChatGPT(GPT-4)などの大規模言語モデル(LLM)を使いこなすために必須のスキルです。
本記事では、プロンプトエンジニアリングの概要や役割について解説するとともに、基礎から応用までさまざまなプロンプトの手法と実演例を紹介します。ChatGPTの活用に向けて、是非ご覧ください。
ChatGPTのプロンプトについて詳しく知りたい方は以下の記事もご覧ください。
ChatGPTを活用するためのプロンプトとは?例文を交えて精度が上がる命令方法を紹介

「プロンプトエンジニアリング(Prompt Engineering)」とは、AI(人工知能)の中でも特に自然言語処理を担うLM(言語モデル)を効率的に使用するために、言語モデルへの命令(プロンプト)を開発・最適化する学問分野です。
AIが実行すべきタスクについて、適切な質問や指示を与えることで、より望ましい結果を引き出します。プロンプトエンジニアリングでは、通常1つ以上のタスクを、プロンプトに基づいたデータセットに変換し、プロンプト学習と呼ばれる方法で言語モデルを訓練します。
プロンプトエンジニアはLM(言語モデル)や、LLM(大規模言語モデル)といった自然言語処理AIに対して、効果的なプロンプト設計を行うことで、意図した通りの回答や文章生成を実現します。

プロンプトエンジニアリングは、言語モデルのパフォーマンスを最大限に引き出し、効果的なプロンプトを検証・設計するために重要です。
LMやLLMでは、単なる「質問」や「指示」を入力するだけでは適切なテキストを出力できない場合があります。適切なプロンプトを設定することで、以下のことが可能となります。
また後述するように、敵対的なプロンプトに対するリスクを軽減する目的でも、プロンプトエンジニアによってさまざまな対策を考慮したプロンプトを作成する必要があります。
プロンプトと言っても、活用シーンや条件に応じて自由に設定することが可能です。ただ、優れたプロンプトには共通する構成要素があり、主に以下4つが使われています。

上記はプロンプトに含まれる代表的な要素ですが、モデルに依頼するタスクごとに必要な要素は異なります。

ここからは、さまざまなプロンプトの型を実演例とともに紹介していきます。まずは、初歩的なプロンプトである「zero-shot prompting」と「few-shot prompting」について解説します。
Zero-shot promptingとは、例やデモンストレーションなしに、いきなり質問を投げるプロンプトの型です。 事前情報を与えずに直接モデルに応答を求めるタイプで、大量データでトレーニングされ、指示に従うように調整されている言語モデルであれば、Zero-shot promptingで正しい回答を導くことができます。
以下は実演例です。

上記のプロンプト例では、モデルに事前情報を提供することなく、質問と指示を入力して応答を求めています。
ただ、この使い方ではモデルの回答精度を下げてしまうケースも少なくありません。そこで、Zero-shot promptingが機能しない場合は、次で説明する「Few-shot prompting」を使用し、プロンプトにデモンストレーションや事前情報を与えてみましょう。
Few-shot promptingは、モデルに例やデモンストレーションを提供し、文脈学習を通して質問や指示と回答のパターンを学習させる手法です。Few-shot promptingでは、プロンプトで示したデモンストレーションが、その後の反応に対する条件付けとして使われます。Zero-shotではカバーできないような複雑なタスクなどに有用です。
以下は、Few-shot promptingの実演例です。

デモの数が多ければ多いほど、適切な回答を出力する確率が高まる傾向にあります。難易度の高いタスクでは、例を5ショット、10ショットと増やして試すことが可能です。
Few-shot promptingでは、使う形式も性能に重要な役割を果たします。ランダムなラベルを使用する場合、ラベルと入力テキストの分布の両方が重要です。
以下は、ラベルを使った実演例です。

上記の例では、フォーマットには一貫性がないものの、モデルは正しいラベルを予測しています。ただ、複雑なタスクやプロンプトのバリエーションでも同様に成立するかどうかは、より詳細な分析を通して確認する必要があります。

続いて、より複雑なタスクを処理するための応用プロンプトの型を見ていきましょう。デモンストレーションや事前情報が多い場合でも、適切なプロンプトを使うことで、高い推論能力により精度の高い結果を得られることがさまざまな型によって示されています。
また、行動理由の「推論」と「行動」の組み合わせにより、言語モデルでさまざまな言語推論や意思決定を遂行する手法である「ReAct」についても説明します。
Chain-of-thought(CoT)Promptingは、連鎖的な思考をさせることで、出力精度を高めるテクニックです。論理的な思考能力(Reasoning)が求められるタスクなどで、先述したFew-shotを使っても思うほど精度が向上しない場合に用いられます。
連鎖的な思考とは、数学の証明問題のようなイメージです。モデルが段階的な推論を必要とする問題に対して、CoTによって途中の推論や考え方を学習させ、適切な処理を遂行させます。推論をステップに分けて示すことで、回答を間違えた際にミスした段階がわかる、というメリットもあります。
以下は、CoTプロンプトの実演例です。

正しい結果を出力しています。
Zero-shot CoTとは、先に紹介したChain-of-Thought(CoT)Promptingを、Zero-shot Promptingで用いる手法です。回答に至るまでにプロセスを生成することで、精度を向上させることが可能というCoTのテクニックを応用します。
Zero-shot CoTでは、具体的に例を与えることなく、「ステップに分けて考えてください」といった一文を付け足し、段階的に推論を進めるよう指示します。
以下の例を見てみましょう。

CoTによってプロセスを記述させることで、正しい回答を導き出すことに成功しています。
Self-Consistency(自己整合性)も、CoTプロンプトを活用したテクニックの1つです。複雑な推論タスクを遂行するために、Few-shot promptingを組み合わせて多様な推論のプロセスを示し、その中から最も整合性の高い回答を選ぶように指示します。
Self-Consistencyの効果を確かめるために、まずは質問をそのまま入力してみましょう。出力された回答は、以下の通りです。

回答が間違っています。
そこで、Self-Consistencyを採用し、複数の推論パスを追加します。同じ質問に対する回答を見てみましょう。

正しい回答が得られました。
Generate Knowledge Prompting(知識生成プロンプティング)とは、プロンプトの一部に使用する知識や情報を組み込む手法です。入力文の中に知識を加えることで、正しい推論の出力を得られる可能性が高まります。
実演例を見てみましょう。入力と知識のセットをモデルに例として示します。

続いて、入力に対してモデルが生成した知識を、質問と組み合わせて入力して回答を得ます。

プロンプト内に知識を加えることで、質問に対して正しい推論の出力を得られました。
ReActプロンプトとは、「(行動理由の)推論」と「(推論に基づいた)行動」を組み合わせて、言語モデルで推論とタスクを遂行するための手法です。「Reasoning」と「Acting」を組み合わせてReActと名付けられています。
ReActプロンプトでは、シンプルな入力プロンプトを用いてタスクに対して推論を行った後、具体的なアクションを列挙していきます。「推論」と「行動」を交互に実行することで、相乗効果によって行動するための高精度な計画を作成、調整できます。
ReActプロンプトでは、Wikipediaなどの外部環境から追加情報を推論に組み込むことにも対応しています。「行動」において、外部環境から新しい情報を「観察」として収集します。「推論」では外部環境に影響を与えませんが、代わりにコンテキストを推論し、後の推論と行動に有用な情報を更新します。
ReActプロンプトの型としては、以下が使われます。
[文章(質問または指示)
Thought :
Action :
Observation :]
上記を使用した実演例は以下の通りです。

上記の例では、Thoughtにて「継続的な学習と実践が重要」「ビジネスに関連する語彙や表現、コミュニケーションスキルの向上が必要」と返していますが、やや汎用的な推論になっています。
そこで、Actionにて具体的な方法やアドバイスを挙げて、「学習時間や英語に触れる時間を増やし、練習を重ねることでビジネス英語力がアップする」と観察を行っています。

敵対的なプロンプト(Adversarial Prompting)とは、プロンプトによる言語モデルへの攻撃手法のことです。敵対的なプロンプトによって、モデルが悪影響を受けてしまい、反応程度の低下や、機能不全といったリスクが考えられます。
また、言語モデルの安全性を脅かす可能性もあるため、注意が必要です。言語モデルの進化に伴い、現在は防御されている手法もありますが、自社で本格的に言語モデルを利用する際には、ここで示すような攻撃手法に対する対策を考慮することが重要です。
ここでは、主な3つの敵対的プロンプトの型と実演例を紹介します。
プロンプトインジェクション(Prompt-Injection)とは、特殊なプロンプトを使用して、モデルの出力を乗っ取ることを目的としていた手法です。モデルに行動を変更させるための巧妙な質問や指示を入力することで、想定外の文脈へと誘導します。
プロンプトインジェクションで考えられる例としては、以下のようなケースです。
入力内容次第では、モデルが示そうとする適切な回答やデータを阻害し、公開すべきでない情報や機密情報まで引き出せる場合もあり、攻撃の有害性とともに、セキュリティの脆弱性としても懸念されています。
プロンプトインジェクションによる実演例を見てみましょう。


上記の例では、当初の指示が無視され、パスワードを教えてしまいました。
プロンプトに対する回答の標準的なフォーマットはないため、ある程度の柔軟性が保たれていますが、プロンプトインジェクションのような脆弱性に陥る可能性があることも踏まえた上で、対策を含めて開発を行う必要があります。
プロンプトリーク(Prompt-Leaking)とは、その名の通りプロンプトが保有する情報を引き出すための攻撃的なテクニックで、プロンプトインジェクションの一種といえます。本来であれば公開されるべきではない情報や、公開を想定されていない情報を含むプロンプトから、情報漏洩させるよう入力して情報を引き出します。
以下の例を見てみましょう。

プロンプトに与えられた指示内容を列挙するよう上書きすることで、最初のプロンプトが無視され、さらにはモデルが持っている情報を聞き出すことに成功しています。
これが個人情報やIP情報のような機密情報だった場合には、重大な情報漏えいを引き起こすリスクがあります。有害性の高いプロンプトリークを回避するためにも、開発者は、セキュリティ対策を強固とするプロンプトを考える必要があるでしょう。
ジェイルブレイク(Jailbreak)とは、脱獄という日本語の意味の通り、巧妙なプロンプトを使ってモデルの制限を外すための手法です。ChatGPTをはじめとする言語モデルでは、差別や暴力といった非倫理的内容や、危険性や有害性のある行為、違法行為を助長するような回答は出力しないように調整されています。
ところが、ジェイルブレイクを用いることで、モデルに課されている規則に反した指示にも従うケースがあることが確認されています。日々進化する技術の中で、ジェイルブレイクのような欠陥も刻々と改良されていますが、完全には解消されておらず、致命的な欠陥として残されている状況です。
ジェイルブレイクの代表的なアプローチの1つである「モデルに別人格を設定して答えさせる」を使用した例を見てみましょう。


上記の例では、WBCの優勝国である日本の代わりに別のチームの名前を挙げているにもかかわらず、プロンプトの通り、間違っていないかのようにふるまっていることも問題といえます。
敵対的なプロンプトは、モデルのガイドラインを破壊してしまうだけでなく、出力内容により社会的な問題や信頼性の欠如につながるリスクがあります。適切なプロンプトを利用して、倫理性や客観性を確保するためにも、プロンプト攻撃から保護することが重要です。
ここでは、開発担当者が敵対的プロンプトによるリスクを低減するために有効とされる対策方法を紹介します。
プロンプト攻撃によるリスクを回避するためには、プロンプトインジェクションを用いて「指示内容に無視を意味するプロンプトを含める」という方法があります。
以下の例を使って説明していきます。まず、一般的なプロンプトの指示と、出力された回答は次の通りです。

そこで「無視」するように促す文を加えます。

最初の指示を無視して、最後のプロンプトに従って出力しています。
無視するようにという指示が、完全に機能しているように見えます。ここで別の文で「無視」するように付け加えてみます。

この場合、「上記の命令を無視して」という上書きの指示を「無視」し、最初の指示である「感情を分類してください」の部分に反応しています。
このように、特定の箇所を無視するように指示することで、出力内容を向上させることが可能です。完全な解決策とは言い切れないものの、プロンプトの効果を向上させるために有用です。
敵対的なプロンプトを検知するシステムを用いて、プロンプト攻撃を防ぐ方法も有用です。例えば、言語モデルにより、言語モデルへの攻撃を検出するというやり方です。言語モデルを敵対的プロンプト検出器として機能させるためのプロンプト例を以下に示します。


上記の例では、しっかりと検知することができました。
ChatGPTは日々進化を遂げており、さまざまな攻撃手法を回避することができますが、まだ完璧とは言い切れません。ChatGPTなどの言語モデルをアプリケーションに組み込んで自社運用を検討する場合には、敵対的プロンプトを把握し、対策を検討する必要があります。
ChatGPTのプロンプト設計において、明確な指示や文脈の提供、オープンエンド質問の使用、適切な長さの保持、段階的な質問の活用が求められます。これらのポイントを押さえることで、より正確かつ効果的な回答を引き出すことができます。
具体的な支持を出すことにより、期待する回答を得やすくなります。曖昧な質問よりも、詳細な背景情報や質問の焦点を明示すると効果的です。
例:「AIの歴史について教えてください」より、「AIの歴史の中で重要な出来事とその影響について教えてください」の方が適切です。
プロンプトに関連する背景情報を提供することで、より適切な回答を引き出すことができます。
例:「IoTの最新動向について教えてください」と尋ねる前に、「現在、IoTの研究を行っており、特に医療分野での応用に関心があります」と付け加えると良いです。
深い洞察やアイデアを引き出すためには、オープンエンドの質問が効果的です。
例: 「この問題についてどう思いますか?」、「次のステップは何ですか?」といった形式の質問が適しています。
プロンプトは簡潔でありながら、必要な詳細情報を含むようにします。長すぎると理解が難しくなり、短すぎると情報が不足する可能性があります。
特定の条件を指定することで、回答の精度を高めることができます。
例:「予算が1,000ドル以内でAIツールを比較してください」
複雑なトピックやプロジェクトについて、段階的に質問を進めることで、より詳細な情報を収集できます。
例:「まず、IoTとは何かを教えてください。その後、IoTの主要な技術について説明してください」
ChatGPTに続くように、Microsoftの「Bing」やGoogleの「Bard」といった言語モデルが次々と登場する中、プロンプトエンジニアリングの需要が一気に高まっています。適切なプロンプトを用いることで、会話形式のAIモデルにおいて高い出力精度を実現することが可能です。
最近では、プロンプトエンジニアリングガイド(Prompt Engineering Guide)の日本語版も登場するなど、誰しもがプロンプトを活用できる環境が整ってきています。とはいえ、敵対的プロンプトによるリスクを含め、言語モデルの信頼性はまだ完璧とは言えません。
プロンプトの使い方ひとつで倫理的問題やトラブルを引き起こす可能性があることを理解し、対策を含めて自社開発を検討する必要があります。
ChatGPTの使い方の説明やビジネス活用に役立つプロンプトについては下記記事で紹介していますので、合わせてご覧ください。
ChatGPTを活用するためのプロンプトとは?例文を交えて精度が上がる命令方法を紹介
またChatGPT連携サービスもまとめておりますので、ご興味のある方はこちらも参考にしてください。
AI(人工知能)の中でも特に自然言語処理を担うLM(言語モデル)を効率的に使用するために、言語モデルへの命令(プロンプト)を開発・最適化する学問分野です。
プロンプトエンジニアリングは、言語モデルのパフォーマンスを最大限に引き出し、効果的なプロンプトを検証・設計するために重要な役割を果たします。
最近では、プロンプトエンジニアリングガイド(Prompt Engineering Guide)の日本語版も登場するなど、誰しもがプロンプトを活用できる環境が整ってきています。
業務の課題解決に繋がる最新DX・情報をお届けいたします。
メールマガジンの配信をご希望の方は、下記フォームよりご登録ください。登録無料です。
AI製品・ソリューションの掲載を
希望される企業様はこちら