SAKURUG TECHBLOG

生成AIにおけるプロンプトエンジニアリングの基礎

timestampauthor-name
Tomomitsu

なぜプロンプトエンジニアリングは必要?

AIの回答は確率的な性質を持っているから

たとえ、同じプロンプトでもたとえ同じモデルでも実行するたびに異なる結果を返す場合があります。

プロンプトエンジニアリングの手法はより適切なガイドラインを提供してこうしたばらつきを減らすことに役立ちます。

AIは回答をねつ造することがあります

モデルは大規模ながらしかしながら有限の学習データで事前トレーニングされているため学習データを超える知識はありません。

その結果、不正確、架空、または事実と異なる回答を出力する場合があります。プロンプトエンジニアリングの手法はこのようなねつ造を特定して軽減することに役立ちます。

一般的には、幻覚(ハルシネーション)という言葉で事実と異なる回答を出力する事象を表現されることがあります。

しかしながら、Microsoftでは責任あるAIガイドラインの枠組みにおいて幻覚という擬人化された言葉の使用をせず、ねつ造あるいは有害な出力などの表現をするようにしています。これは、一部の文脈で不快感を与えたり排他的であったりする印象を与える用語であるためです。

プロンプトの組み立て

指示を含むプロンプト

例えば、指示を含むプロンプトはテキストを通じてより詳細にタスクを指定することによってAIに対する指示を改善することができます。

例)Microsoftについて教えてください。

上記の例ですと確かにMicrosoftについての説明文が返ってくると予想できます。

しかしながら、実行するたびに異なる角度からの説明がされることが想像できます。これは、Microsoftに対してのトレーニングデータが様々な角度からされていると予想できるからです。

実際、上記同じ質問をしているのにもかかわらず異なる回答が返ってきてることが分かります。

例)Microsoftについて教えてください。Microsoftの歴代のCEOと主要なクラウド製品を記述してください。

より詳細に質問文を書いてみました。

今回は、歴代のCEOと主要なクラウド製品についての回答が含まれていることが期待できます。

さらに、詳細に質問文を細かくすることによって回答のブレが少なくなってくることが期待されます。

回答にまだブレはあるものの、歴代のCEOとクラウド製品の回答は含まれていることが分かります。

さらに、質問文を細かくすることによってコントロールできることが期待できます。

例)Microsoftの歴代のCEOの貢献についてそれぞれ重要なポイントを3つ箇条書きで記述してください。出力はJSONフォーマットで返してください。

出力がよりポイントを絞ったものになり、なおかつ出力フォーマットがJSONフォーマット形式に整形されたデータを出力するようになります。

これによって、より他のアプリケーションで再利用しやすい形式になります。

それぞれ、生成するたびに内容は異なるものの指示に従い、それぞれのCEOの貢献について3つ書かれているという点ではよさそうです。

この例では、LLMが事前にトレーニングされたデータのうちどの部分を出力するかを決定する余地がありました。

そのために、生成するたびに内容が異なる余地が生まれます。

指示と関連する内容を含むプロンプト

例)以下の文章を100文字以下に要約してください。

あらゆるWebサイトやアプリケーションはとある情報を届けることを目的にしていたり、インタラクティブな対話を通して何らかのコミュニケーションを達成することを目的にしています。

その結果として、動画視聴であったりゲームなどの娯楽であったり、オンライン銀行やネット証券などの取引ができたり様々なサービスを享受することができます。

このようなことができているのも、正常な視覚をあり正常な聴覚がありそして五体満足であり健康であるからこそこのようなサービスを満足に享受することができています。

想像してください。

モノトーンの世界を。

想像してください。

暗闇の世界を。

想像してください。

音のない世界を。

想像してください。

自分の手が満足に動かせない世界を。

このような状態でも自身の作ったサービスがきちんと利用できると言えますか?

これは、長い文章を100文字以下にまとめてくださいという指示の例です。

この例はより効果的な指示を出すためにさまざまな方法で利用できます。

  • 実例(モデルに明確な指示を出す代わりに実行すべき実例を与えてそのパターンを推測させます)
  • キュー・手がかり(完了を示す合図に従ってモデルをより関連性の高い回答に誘導します)
  • テンプレート(繰り返し再利用できるプロンプトのレシピで特定の用途に合わせて入力データをカスタマイズできるプレイスホルダーを持ちます)

ゼロショット

例)「今日はいい天気です」を英語に翻訳してください

ゼロショットでは明示的な指示を与えてLLMに実行させています。

ワンショット

例)「今日は雨です。」 => 「It's raining today.」

「今日はいい天気です」 =>

ゼロショットプロンプトでは明示的に英語に翻訳してくださいといった指示をしていましたがワンショットプロンプトでは例示をして回答を推測させます。

さらに、フューショットプロンプトでは複数の例示をして正確な推論をさせるようにします。

プロンプトキュー

実例の代わりにキューを提供する選択肢もあります。この場合、期待する回答を反映した言葉で始めてモデルを正しい方向に誘導します。

すなわち、期待する回答の最初の部分をプロンプトに含めます。

例)

あらゆるWebサイトやアプリケーションはとある情報を届けることを目的にしていたり、インタラクティブな対話を通して何らかのコミュニケーションを達成することを目的にしています。

その結果として、動画視聴であったりゲームなどの娯楽であったり、オンライン銀行やネット証券などの取引ができたり様々なサービスを享受することができます。

このようなことができているのも、正常な視覚をあり正常な聴覚がありそして五体満足であり健康であるからこそこのようなサービスを満足に享受することができています。

想像してください。

モノトーンの世界を。

想像してください。

暗闇の世界を。

想像してください。

音のない世界を。

想像してください。

自分の手が満足に動かせない世界を。

このような状態でも自身の作ったサービスがきちんと利用できると言えますか?

要約すると、Webサイトやアプリケーションは

プロンプトのキューを受け取ってその流れから回答を始めていきます。

まとめ

以上のようなパターンが基本的なプロンプトの構造となっています。

また、これらを応用してより実践的なテクニックがあります。

それは別記事にて記述したいと考えています。

記事をシェアする

ABOUT ME

author-image
Tomomitsu
2017年2月中途入社。業務ではAzureへのモダナイゼーションを行っています。Microsoft MVP for Developer Technologies 2022 -