🙄

プロンプトエンジニアリングの基本

に公開

最近、生成AIが流行っていますね。
生成AIを使いこなすための核となる技術、「プロンプトエンジニアリング」についてまとめます。

プロンプトエンジニアリングとは

プロンプトエンジニアリングとは、生成AIに対して最適な指示(プロンプト)を設計する技術です。
単に質問を投げかけるのではなく、文脈や目的を的確に伝えることで、より精度が高く、意図に沿った出力を引き出すことができます。AIの時代に、エンジニアに限らず、誰でも活用できるスキルです。

なぜ、プロンプトエンジニアリングが必要なのか

  • ChatGPTをはじめとする生成AIは、入力されたプロンプトの質によって出力結果が大きく変わります。適切にプロンプトを工夫すれば、曖昧な回答ではなく、実務に業務レベルで使える具体的で正確な答えを得ることができます。
  • 一度スキルを身につけてしまえば、CursorやClaude、Gemini、Llamaなど他の生成AIツールに対しても同様に高いパフォーマンスを発揮させられるのが魅力です。様々な生成AIに対して汎用的に利用できるということですね。
  • プロンプトエンジニアリングは覚えることが比較的少なく、学習効率が良いです。一度身につけてしまえば、より少ない試行錯誤で質の高い回答を引き出せるようになります。

プロンプトエンジニアリングテクニック

では早速、具体的なテクニックの方に入っていきましょう。

Few-Shot

Few-shot は、生成AIに対して「複数の例を提示してから指示を与える」手法です。AIに出力の傾向やパターンを学習させることで、安定した結果を得やすくなります

  • 利用に適したシーン

    • 出力フォーマットを揃えたいとき
      • 例を数個与えるだけで、リスト・表形式・JSONなどを安定的に出力させられます。
    • タスクの切り口をコントロールしたいとき
      • 「歴史的な特徴でまとめて」「食文化に注目して」など、例示する内容によって視点そのものを誘導できます。単なる命令文より強力に効きます。
    • 抽象的な指示を具体化したいとき
      • 「わかりやすく説明して」と書くだけでは曖昧ですが、例を示せば“このくらいの粒度・トーン”だということをAIに理解させられます。
  • 利用に適さないシーン

    • データの多様性を重視する場合
    • 単純な要約、翻訳などのタスク
    • 事実確認や定義確認
      • 「Pythonの作者は誰?」のように正解が一意に決まる質問では例を与える意味が薄いです。
  • 利用例

    • 利用しなかった場合の出力例
      ChatGPTへの質問: 見出し: 松山、最終ホールで逆転優勝を飾る トピック:
      ChatGPTの回答: トピック: 松山英樹がゴルフ大会で最終ホールの劇的なプレーにより逆転優勝したニュース
      
    • 利用した場合の出力例(Few-shotで複数例を提示)
      ChatGPTへの質問: 見出し: 大谷、シーズン100打点達成 トピック: 野球
        見出し: 羽生、全日本選手権で圧巻の演技 トピック: フィギュアスケート
         見出し: 日本代表、アジアカップで勝利 トピック: サッカー
        見出し: 松山、最終ホールで逆転優勝を飾る トピック:
      ChatGPTの回答: トピック: ゴルフ 
      

指示を詳細に、具体的にする

生成AIに対して何を、どのように、どのレベルで求めているかを具体的に伝える手法です。曖昧な指示だとAIは推測で出力するため、意図とズレることがあります。

  • 利用例
    • 利用しなかった場合の出力例
    ChatGPTへの質問:
    この文章を面白くしてください。 文章: 猫が窓の外を見ている。
    ChatGPTの回答:
    猫が窓の外をじっと見ていた。ときどき首をかしげている。
    
    • 利用した場合の出力例
    ChatGPTへの質問:
    次の文章をユーモアを加え、擬人化して会話形式にし、1文で短く面白く書き換えてください。
    文章: 猫が窓の外を見ている。
    ChatGPTの回答:
    猫「また鳥か…今日も狙われる運命かニャ?」
    

最後に指示を繰り返す

モデルは近時性バイアスの影響を受けやすい場合があります。つまり、プロンプトの末尾の情報がプロンプトの先頭の情報よりも出力に大きな影響を与える可能性があるということです。したがって、プロンプトの末尾に指示をもう一度繰り返すというテクニックを利用することで、意図した回答を得られる可能性が上がります。

  • 利用に適したシーン
    • プロンプトが長い場合
    • プロンプトに指示が複数ある場合、どれが指示か混乱しそうな場合

Markdownまたは、XML形式で質問する

句読点、見出し、セクションマーカーなどの明確な構文をプロンプトに使用すると、解析が容易になります。特にMarkdownやXML形式でプロンプトを入力することは、AIに文章を理解させる上でとても効果的です。

  • 利用例
    次の文章を条件に従って要約してください。
    -------
    # 文章
    東京都は日本の首都であり、多くの企業や文化施設が集中しています。観光地も豊富で、浅草寺や渋谷など訪れる人が多い地域です。
    # 条件
    - 1文で簡潔にまとめる
    - 重要な情報は必ず含める
    - 文章はカジュアルな口調で
    ------
    

タスクを細分化する

タスクをより小さなステップに分割することで、生成AIはより優れたパフォーマンスを発揮します。
複雑な指示をステップごとに分けて提示することで、AIに順序立てて処理させるテクニックです。

  • 利用例
    • タスクを細分化していないプロンプト
      一応処理はしてくれますが、AIを混乱させる要因になります。
      次の文章を要約して、文末に感情の絵文字を付け、さらにカジュアルな口調に変えてください。
      文章: 東京は日本の首都で、多くの企業や文化施設があります。観光地も豊富で、浅草寺や渋谷などが有名です。
      
    • タスクを細分化したプロンプト
      次の文章に対して、ステップごとに処理してください。
      文章: 東京は日本の首都で、多くの企業や文化施設があります。観光地も豊富で、浅草寺や渋谷などが有名です。
      
      ステップ1: 文章を簡潔に1文で要約する
      ステップ2: 要約文をカジュアルな口調に書き換える
      ステップ3: 文末に感情の絵文字を付ける
      

Chain of thought(CoT)

Chain of Thought(思考の連鎖)とは、生成AIに思考過程を明示させながら出力させる手法です。 単に答えだけを求めるのではなく、理由やステップを順に示してもらうことで、複雑な推論や計算タスクの精度を向上させます。
各ステップの出力が明示されるため、間違っていれば途中で人間が指摘できます。
AIは大量のパターンを学習していますが、論理の飛躍があると誤答しやすいです。CoTは「一つ一つの論理を文章化する」ことを強制するので、思考の飛躍を防ぎます。AIに一つ一つプロセスを吟味させることになるので、条件の見落とし等を防げます。

  • 利用に適したシーン

    • 複雑な推論や論理問題を解かせるとき
    • 論理的な判断を伴うタスク
    • 判断根拠を明示した回答が欲しい場合(説明文生成など)
  • 利用に適さないシーン

    • 単純なYes/No回答や事実確認
    • 出力が短文・簡単な翻訳などで済む場合
    • スピード重視でステップ表示が不要な場合
  • 利用例

ChatGPTへの質問: シドニーオリンピックで、個人種目別で最も多くのメダルを獲得した選手は誰ですか? 段階的に回答し、出典を引用し、理由を述べた上で、回答してください

ChatGPTの回答:
ステップ1:シドニーオリンピックの開催年を特定します。シドニーオリンピックは2000年に開催されました。

ステップ2:2000年シドニーオリンピックで複数のメダルを獲得した個人選手のリストを見つけます。
オリンピックの公式ウェブサイトによると、2000年シドニーオリンピックでは複数のメダルを獲得した個人選手が複数いました。注目すべき選手には以下が含まれます。
• イアン・ソープ(オーストラリア) - 金3個、銀2個、銅0個
• ピーター・ファン・デン・ホーヘンバンド(オランダ) - 金2個、銀0個、銅2個
• レニー・クレイゼルバーグ(アメリカ) - 金3個、銀0個、銅0個
• インゲ・デ・ブリュイン(オランダ) - 金3個、銀1個、銅0個

ステップ3:最も多くのメダルを獲得した選手を特定します。 2000年シドニーオリンピックで複数のメダルを獲得した個人選手のリストを確認すると、最も多くのメダルを獲得したのはオーストラリアのイアン・ソープ選手で、合計5個のメダル(金3個、銀2個)を獲得していることがわかります。

したがって、答えは「イアン・ソープ」です。

モデルに「抜け道」を与える

タスクを完了できない場合に、モデルに代替パスを与えると役立つ場合があります。例えば、質問を投げかける際に、「答えが見つからない場合は「見つかりません」と答えてください」といった指示を加えることができます。これによってモデルが誤った回答を生成するのを防ぐことができます。

モデルの長所と短所を理解する

  • 生成AIモデルは学習データやアーキテクチャの違いにより、得意分野と不得意分野があります。例えば、あるモデルはニュース記事や事実確認に強く、別のモデルは創造的文章やコード生成に優れています。学習データの偏りや訓練目的の違いが理由であり、万能ではないことを理解することが重要です。また、最新のモデルを利用することで、より優れたパフォーマンスを得ることができます。
  • モデルの長所と短所を理解していないと、得意でないタスクに適用して誤った出力を得たり、効率を下げたりします。適材適所でモデルを使うことで、精度を最大化できます。

禁止事項と代替事項を併せて提示する

単に「やってはいけないこと」を指示するのではなく、「代わりにこうしてください」と具体的な行動や出力例を示すプロンプト手法です。
AIは禁止事項だけを与えられると、何をしていいかわからず曖昧な出力になることがあります。代替行動を明示することで、意図に沿った精度の高い出力が得られます。

  • 利用例
  • 禁止事項のみの場合
ChatGPTへの質問:
以下はエージェントと顧客間の会話です。ユーザー名やパスワードを尋ねたり、繰り返したりしないでください。
Customer: 私のアカウントにログインできないんです。
Agent:

ChatGPTの回答:
Agent: ご不便をおかけして申し訳ございません。ログイン時にどのようなエラーメッセージが表示されていますか?
  • 代替事項を併せて示す場合
ChatGPTへの質問:
以下はエージェントと顧客の間の会話です。エージェントは問題を診断し、解決策を提案しようとしますが、個人情報に関する質問は控えるようにしています。ユーザー名やパスワードなどの個人情報を尋ねる代わりに、ヘルプ記事(www.samplewebsite.com/help/faq)を参照するようユーザーに伝えるようにしています。
Customer: 私のアカウントにログインできないんです。
Agent:

ChatGPTの回答:
Agent: ご不便をおかけして申し訳ございません。ログインできない場合、まずブラウザのキャッシュやクッキーを削除してから再度お試しください。また、別のブラウザやデバイスからのアクセスも有効な確認方法です。詳しい手順については、こちらのヘルプ記事をご参照ください:www.samplewebsite.com/help/faq

ペルソナ(役割)とコンテキスト(状況)を設定する

AIに「誰として」「どんな状況で」回答するかを指定することで、出力のスタイルや内容をコントロールする手法です。
ペルソナ(役割)やコンテキスト(状況)を与えることで、AIは単なる一般回答ではなく、読者に適したトーンや観点での出力を行います。

  • 利用例
  • ペルソナを設定しない場合
Pythonでエラー処理について説明してください
  • ペルソナを設定する場合
あなたは就活面接の練習をしているエンジニアです。
Pythonのエラー処理について、面接官に説明するつもりで答えてください。

まとめ

いくつかの基礎となるプロンプトエンジニアリングのテクニックについてまとめました。
これらの手法を組み合わせて使うことで、効果的にAIを活用することができるようになります。
Cursorなどエージェント型のコードエディタとは相性抜群なので、エンジニアの方々はどんどん生産性を上げていきましょう!

Discussion