ABEJA Tech Blog

中の人の興味のある情報を発信していきます

Googleプロンプトエンジニアリングホワイトペーパー完全解説:実践テクニックとベストプラクティス

はじめに


こんにちは!ABEJAのシステム開発部でソフトウェアエンジニアをしている関です。

日々の業務でLLMを活用する中で、「AIにどう指示すれば効率的に期待どおりの結果が得られるのか」という課題に直面していました。試行錯誤の繰り返しで時間を取られることも多く、このやりとりを効率化したいと考えていた時に出会ったのが、Googleが2025年2月に公開したプロンプトエンジニアリングに関するホワイトペーパーです。その内容は非常に実践的で、私のLLM活用スキル向上に大いに役立つものでした。

このホワイトペーパーは、プロンプトエンジニアリングの基礎から応用まで、実践的な手法を網羅的に解説しています。ホワイトペーパーが述べるように、「データサイエンティストや機械学習エンジニアである必要はありません—誰でもプロンプトは書けます」。しかし、より正確で有用な出力を安定して得るためには、やはり知識と体系的なアプローチが不可欠です。

本記事は、「プロンプトエンジニアリングに初めて触れる方」はもちろん、「既にLLMを使っているものの、もっと効果的なプロンプトの書き方を学びたい方」、そして「Googleのホワイトペーパーに関心があるけれど、全文を読むのは大変だと感じている方」に向けて書いています。Googleのホワイトペーパーから主要な知見を簡潔にまとめつつ、特に効果的だと感じたベストプラクティスを厳選して解説しています。

プロンプトエンジニアリングとは何か、そしてなぜ重要なのか


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

ホワイトペーパーではプロンプトエンジニアリングを「LLMが正確な出力を生成するために、高品質なプロンプトを設計するプロセス」と定義しています。このプロセスでは、モデルの応答を最適化するため、プロンプトの構造、フォーマット、内容を体系的に検証します。効果的なプロンプトは、AIモデルが要求内容とその回答方法を理解するための明確なフレームワークとなります。

大規模言語モデルのメカニズム

プロンプトエンジニアリングの重要性を理解するには、LLMの基本的な仕組みを把握する必要があります。ホワイトペーパーが説明するように、LLMは本質的に予測エンジンとして機能します: 「モデルはテキストを順次入力として受け取り、トレーニングデータに基づいて次のトークンを予測します。LLMはこのプロセスを繰り返し実行し、予測したトークンを入力テキストの末尾に追加しながら、次のトークンを予測していきます。」 このトークンベースの予測プロセスにおいて、プロンプトのわずかな変更が出力に大きな影響を及ぼす可能性があります。適切に設計されたプロンプトは、この予測プロセスを有益な結果へと導くための明確なコンテキストと構造を提供します。

※トークンとは… AIが言葉を処理する最小単位です。単語、単語の一部、記号などがトークンになります。

LLMの出力設定

プロンプト技術の詳細な説明に入る前に、ホワイトペーパーではLLMの出力設定パラメータの重要性を強調しています。これらの設定は、AIが生成する応答の質と特性を直接左右します:

  1. 出力の長さ:トークン制限により生成されるテキスト量が決まります
  2. サンプリングコントロール:温度、top-K、top-Pなどの設定により、出力の多様性と創造性が変化します
    • 温度:ランダム性を制御(0-1のスケール)
      • 低い値(0-0.3):より確実で事実に基づいた応答
      • 高い値(0.7-1):より独創的で多様な出力
    • Top-Kとtop-P:高確率のトークンに選択肢を絞る手法

事実の正確性が求められるタスクでは、ホワイトペーパーは一般的な初期設定として温度0.2、top-P 0.95、top-K 30を推奨しています。一方、創造的なタスクでは、温度0.9、top-P 0.99、top-K 40などのより高い設定値を使用することで、より魅力的な結果を生成できる可能性があります。

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


Googleのホワイトペーパーでは、目的に合わせて活用できる多様なプロンプトテクニックを詳しく解説しています。

1. ゼロショットプロンプティング

ゼロショットプロンプティングは、最も基本的なアプローチです。このテクニックでは例を示さず、単にタスクの説明だけを提供します。モデルが十分なトレーニングデータを持っている単純なタスクにおいて、この方法は効果的に機能します。

映画レビューをPOSITIVE、NEUTRAL、NEGATIVEに分類してください。
レビュー:「Her」はAIが無制限に進化すると人類が向かう方向を明らかにする不穏な研究です。このような傑作がもっとあればいいのに。

2. ワンショットとフューショットプロンプティング

ゼロショットで十分な結果が得られない場合、例を提供することでモデルの性能を向上させることができます。

  • ワンショット:1つの例を提供
  • フューショット:複数の例を提供(一般的に3〜5例)

ホワイトペーパーによると、フューショットプロンプティングは特定の出力形式やエッジケースの処理が必要なタスクで特に効果を発揮します。

//フューショットプロンプティングの例
タスク: 顧客からのメールを意図に基づいて「問い合わせ」「苦情」「返品要求」「その他」に分類してください。

例1:
メール: 先日購入した商品について質問があります。この製品は防水ですか?
分類: 問い合わせ

例2:
メール: 注文した商品が届きましたが、説明と異なる色でした。とても不満です。
分類: 苦情

例3:
メール: 購入した商品に不具合があるため、返品して返金を希望します。どのような手続きが必要ですか?
分類: 返品要求

メール: 先週オンラインで注文した商品の到着予定日を教えていただけますか?
分類:

3. システム、ロール、コンテキストプロンプティング

これらのテクニックは、モデルがどのように応答すべきかの土台を設定するのに役立ちます。

  • システムプロンプティング:全体的なコンテキストと目的を定義
  • ロールプロンプティング:言語モデルが採用する特定のキャラクターまたはアイデンティティを割り当てる
  • コンテキストプロンプティング:タスクに関連する背景情報を提供
//a.システムプロンプトの例
映画レビューをポジティブ、ニュートラル、ネガティブに分類してください。有効なJSONを返してください:
レビュー:「Her」は、AIが野放しにされたまま進化し続ければ、人類がどのような方向に向かうのかを明らかにする不穏な作品である。あまりの不穏さに、私は見ることができなかった。

スキーマ:
MOVIE:
{
"sentiment": String "POSITIVE" | "NEGATIVE" | "NEUTRAL",
"name": String
}
MOVIE REVIEWS:
{
"movie_reviews": [MOVIE]
}

//b.ロールプロンプトの例
あなたは経験豊富な旅行ガイドです。旅行者に親切で詳細な情報を提供することを心がけてください。私の場所について書きますので、私の近くで訪問するための3つの場所を提案してください。現在私は東京の浅草にいます。

//c.コンテキストプロンプトの例
コンテキスト: このブログは技術愛好家向けのウェブサイトで、主にプログラミング、AIの進歩、新しいガジェットについて取り上げています。読者は主に20〜35歳のIT専門家です。

タスク: 「生成AIが小規模企業にもたらす5つのメリット」というタイトルのブログ記事を書いてください。記事は技術的に正確でありながら、専門知識のない読者にも理解できるようにしてください。

4. コードプロンプティング

開発者向けに、ホワイトペーパーは、コード生成、説明、変換、およびデバッグのためのテクニックを提供しています。コードを要求する際、プログラミング言語、機能、および制約について具体的に述べることで、より有用な結果が得られます。

//a.コードデバッグの例
以下のPythonコードはエラーを出します:
Traceback (most recent call last):
  File "/Users/username/Documents/test_folder/rename_files.py", line 7, in <module>
    text = toUpperCase(prefix)
NameError: name 'toUpperCase' is not defined

何が問題なのかデバッグし、コードを改善する方法を説明してください。

//b.コード変換の例
以下のBashコードをPythonに変換してください。
#!/bin/bash
echo "Enter the folder name: "
read folder_name
if [ ! -d "$folder_name" ]; then
echo "Folder does not exist."
exit 1
fi
files=( "$folder_name"/* )
for file in "${files[@]}"; do
new_file_name="draft_$(basename "$file")"
mv "$file" "$new_file_name"
done
echo "Files renamed successfully."

//c.コード生成の例
以下の要件を満たすPythonスクリプトを作成してください:
1. CSVファイルを読み込む
2. 特定の列の平均値を計算する
3. 平均値より高い値を持つ行だけを新しいCSVファイルに保存する
4. エラー処理を含める

コードは効率的で、読みやすく、コメント付きであるべきです。

5. 自動プロンプトエンジニアリング

自動プロンプトエンジニアリングは、AIにプロンプトの異なるバリエーションを生成させる手法です。生成されたプロンプトを評価し、効果的なものを選択・改良しながら、このプロセスを反復的に実施します。この手法により、人間の入力の必要性を軽減することができます。

プロンプト:
バンドマーチャンダイスのTシャツを販売するウェブショップを運営しています。チャットボットをトレーニングするために、「メタリカのTシャツをSサイズで1枚」という注文のさまざまな言い方が必要です。意味は同じままで10種類のバリエーションを生成してください。

出力:
1. メタリカのTシャツをSサイズで1枚購入したいです。
2. Sサイズのメタリカのシャツを注文できますか?
3. メタリカのTシャツを小さいサイズで1枚買いたいです。
4. メタリカのシャツ、Sサイズを1枚お願いします。
5. Sサイズのメタリカのシャツを1枚欲しいです。
6. メタリカのTシャツをSサイズで1枚注文したいと思います。
7. 小さいサイズのメタリカのTシャツを1枚ください。
8. メタリカのTシャツをSサイズで探しています。
9. メタリカのTシャツをSサイズで1枚用意してもらえますか?
10. メタリカのSサイズのTシャツを1枚ください。

6. ステップバックプロンプティング

ステップバックプロンプティングは、LLMが直接的な質問に答える前に、まず広い視点や一般的な原則について考えるよう促す手法です。特定の問題に取り組む前に「一歩下がって」考えることで、より深い理解と質の高い回答を導き出します。

//ステップバックプロンプト
人気のあるファーストパーソンシューターアクションゲームに基づいて、ファーストパーソンシューターゲームの挑戦的で魅力的なレベルのストーリーラインに貢献する5つの架空の重要な設定は何でしょうか?

//ステップバック結果(AIの出力)
1. **廃棄軍事基地**: 変異した兵士や暴走ロボットがはびこる広大な戦後黙示録的な軍事施設で、挑戦的な銃撃戦に理想的です。

2. **サイバーパンク都市**: ネオンに照らされた未来的な都市環境で、高層ビルと密集した路地があり、サイバネティックに強化された敵とハッキングの仕組みが特徴です。

3. **エイリアン宇宙船**: 地球に不時着した巨大なエイリアン船で、不気味な廊下、無重力セクション、遭遇する地球外生物が特徴です。

4. **ゾンビだらけの町**: 攻撃的なゾンビの大群に支配された荒廃した町で、激しい近接戦闘と安全な通路を見つけるためのパズル解決が特徴です。

5. **水中研究施設**: 水で溢れた深海研究所で、変異した水生生物がいっぱいで、生き残るためにはステルスと水中探索スキルが必要です。

//最終プロンプト(ステップバックの結果を含む)
これらのテーマの1つを選んで、ファーストパーソンシューターゲームの新しいレベルのための、挑戦的で魅力的な一段落のストーリーラインを書いてください。
次の背景情報を使用して:
ファーストパーソンシューターゲームの魅力的なテーマ5つ:
1. **廃棄軍事基地**: 変異した兵士や暴走ロボットがはびこる広大な戦後黙示録的な軍事施設で、挑戦的な銃撃戦に理想的です。
2. **サイバーパンク都市**: ネオンに照らされた未来的な都市環境で、高層ビルと密集した路地があり、サイバネティックに強化された敵とハッキングの仕組みが特徴です。
3. **エイリアン宇宙船**: 地球に不時着した巨大なエイリアン船で、不気味な廊下、無重力セクション、遭遇する地球外生物が特徴です。
4. **ゾンビだらけの町**: 攻撃的なゾンビの大群に支配された荒廃した町で、激しい近接戦闘と安全な通路を見つけるためのパズル解決が特徴です。
5. **水中研究施設**: 水で溢れた深海研究所で、変異した水生生物がいっぱいで、生き残るためにはステルスと水中探索スキルが必要です。

7. 思考の連鎖(CoT)

思考の連鎖(Chain of Thought、CoT)プロンプティングは、LLMに段階的な推論プロセスを示すよう促すことで、特に論理的・数学的タスクの精度を大幅に向上させる手法です。LLMに「考える過程」を示すよう指示することで、モデルは最終的な答えに至るまでの推論ステップを明示的に生成します。

私が3歳のとき、私のパートナーは私の年齢の3倍でした。今、私は20歳です。パートナーは何歳ですか?ステップバイステップで考えましょう。

8. 自己一貫性

自己一貫性は、同一のプロンプトで複数回出力を生成し、最も一貫した回答を選び出す手法です。高い温度設定をを使用することで、モデルが問題に対して、異なる推論経路や視点を生成するよう促します。この手法により、LLMの応答の精度と一貫性が向上しますが、コストが高くなる欠点があります。

//プロンプト例
EMAIL:
--
こんにちは、
あなたのウェブサイトにWordpressが使われているのを拝見しました。
私も過去にも使ったことがあります。素晴らしいユーザープラグインがたくさん付属している。
そして、かなりセットアップも簡単です。
コンタクトフォームでバグに気づきました。
名前フィールドを選択したときに起こります。添付のスクリーンショット
名前フィールドにテキストを入力しているところです。JavaScriptのアラートボックスに注目してください。
しかし、それ以外は素晴らしいウェブサイトだ。
ありがとう、
ハリー・ザ・ハッカー
--

上記のメールを重要か重要でないか分類してください。なぜ重要なのかステップバイステップで考え、その理由を説明しましょう
//一回目の出力結果
...
バグの潜在的な影響と送信者の信頼性に基づいて、メールは**重要**に分類されるべきです。
受信者はバグを修正し、ウェブサイトを攻撃から守るために...

//二回目の出力結果
...
結論: 重要ではない。

//三回目の出力結果
...
上記の要因から、このメールは**重要**に分類されるべきである。
コンタクトフォームのバグは深刻なセキュリティリスクで...

9. 思考の木(ToT)

思考の木(Tree of Thoughts、ToT)は、Cotプロンプティングのコンセプトを一般化し、LLMが複数の異なる推論経路を同時に探索できるようにする手法です。ToTは、探索を必要とする複雑なタスクに特に適したものとなります。

この質問について、3人の異なる専門家が回答していると想像してください。
すべての専門家は、自分の思考の1つのステップを書き留め、
それをグループと共有します。
その後、すべての専門家は次のステップに進みます。以後同様です。
もし専門家の中に、いかなる時点で誤りに気づいた場合は、退場します。
質問は...

10. ReAct(理由と行動)

ReAct(理由と行動)は、外部ツールと組み合わせることで、複雑な複雑なタスクを解決する手法です。AIがAPIなどの外部ツールを使って情報を集め、その結果に基づいて再び推論するサイクルを繰り返すことで、より正確な答えを導き出せます。

# コード
Python
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import VertexAI

prompt = "メタリカのメンバーには子供が何人いる?"

llm = VertexAI(temperature=0.1)
tools = load_tools(["serpapi"], llm=llm)

agent = initialize_agent(tools, llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
agent.run(prompt)
//出力結果

エージェント実行チェーンに入ります...
メタリカには4人のメンバーがいます。
行動: 検索
行動内容: ジェームズ・ヘットフィールドには子供が何人いますか?
観測: 3人の子供
思考: 1/4完了、子供は合計3人
行動: 検索
行動内容: ラーズ・ウルリッヒには子供が何人いますか?
観測: 3
思考: 2/4完了、子供は合計6人
行動: 検索
行動内容: カーク・ハメットには子供が何人いますか?
観測: ハメットは1998年から2番目の妻ラニと結婚しています。彼らには2人の息子、エンジェル(2006年9月29日生まれ)とヴィンチェンツォ(2008年6月28日生まれ)がいます。
思考: 3/4完了、子供は合計8人
行動: 検索
行動内容: ロバート・トゥルージロには子供が何人いますか?
観測: 2
思考: 4/4完了、子供は合計10人
最終回答: 10

効果的なプロンプトエンジニアリングのためのベストプラクティス


ホワイトペーパーは包括的なベストプラクティスのセットで締めくくられています。以下では、その中からすぐに実践可能なベストプラクティスを選んで解説します。

1. 例を提供する

最も重要なベストプラクティスは、可能な限りプロンプト内に例を含めることです。これらの例はモデルにとって強力な教材として機能し、精度、スタイル、トーンを向上させます。

映画の短いレビューを生成してください。レビューは100単語以内で、映画の主なプラスとマイナスの点を含める必要があります。

例:
「インターステラー」は視覚的に圧倒的で、感情的に強烈な宇宙冒険映画です。壮大な宇宙の映像と感動的なストーリーテリングが魅力ですが、複雑な物理学の概念と長い上映時間(約3時間)が一部の視聴者には課題となるかもしれません。全体として、野心的なビジョンと傑出した演技により、このクリストファー・ノーラン監督作品は見る価値があります。

「アベンジャーズ:エンドゲーム」についてレビューを生成してください。

2. シンプルに設計する

プロンプトは簡潔で明確である必要があります。ホワイトペーパーでは、「分析する」、「分類する」、「比較する」、「要約する」などの意図したタスクを説明する動詞を使用することを提案しています。

// 便利な動詞一覧
行動する、分析する、分類する、比較する、対比する、作成する、定義する、説明する、評価する、抽出する、見つける、生成する、特定する、リスト化する、測定する、整理する、解析する、選択する、予測する、提供する、ランク付けする、推奨する、返す、検索する、書き換える、選択する、表示する、並べ替える、要約する、翻訳する、書く
//改善前のプロンプト
私は今ニューヨークに来ていて、良い場所について知りたいです。3歳の子供が2人います。休暇中にどこに行くべきですか?

//改善後のプロンプト
旅行ガイドとして行動してください。3歳の子供連れでニューヨークのマンハッタンで訪れるべき素晴らしい場所を説明してください。

3. 出力について具体的にする

望ましい出力フォーマット、長さ、スタイルについての明確な指示は、モデルがより関連性の高い応答を生成するのに役立ちます。

トップ5のビデオゲームコンソールについて3段落のブログ記事を生成してください。ブログ記事は情報提供的で魅力的であり、会話的なスタイルで書かれるべきです。各段落は5-7文で構成し、技術仕様、市場への影響、代表的なゲームタイトルについて触れてください。

4. 制約よりも指示を使用する

ポジティブな指示(何をするべきか)は、制約(何をしないべきか)よりも効果的な傾向があります。

//制約を使用した例
トップ5のビデオゲームコンソールについてのブログ記事を書いてください。ビデオゲーム名をリストしないでください。

//指示を使用した例
トップ5のビデオゲームコンソールについてのブログ記事を書いてください。各コンソールについて、製造会社、発売年、総販売数のみについて論じてください。

5. 出力フォーマットを実験する

データ中心のタスクでは、JSONなどの構造化された出力が一貫性を強制し、幻覚を減らすのに役立ちます。ホワイトペーパーでは、JSONフォーマットが以下のような特性を持つことに注目しています:

  • 一貫したスタイルでデータを返す
  • 要求された情報に集中する
  • 幻覚の可能性を減らす
  • 特定のデータタイプをサポートする
  • 簡単にソートまたは処理できる
次の製品レビューから以下の情報を抽出し、JSONフォーマットで返してください:
- 製品名
- 総合評価(5点満点)
- 主なメリット(配列)
- 主なデメリット(配列)

レビュー:「XYZ社のワイヤレスヘッドフォンは音質が素晴らしく、バッテリー寿命も20時間と長いです。ノイズキャンセリング機能も優れていますが、やや重く、価格が高いのが難点です。全体的には4.2/5点の評価です。」

6. 変数を使ってプロンプトを動的にする

プロンプトを再利用し、異なる入力に対して柔軟に対応できるようにするには、変数を使用すると効果的です。

{都市} = "東京"

プロンプト:
旅行ガイドとして、{都市}についての事実を教えてください。主要な観光スポット、地元の料理、交通手段について3つずつ挙げてください。

7. 入力フォーマットと文章スタイルを実験する

同じ目的でも、質問形式、命令形式、説明形式など、異なる表現方法を試すことで結果が大きく変わることがあります。

//質問形式
セガドリームキャストとは何ですか?なぜそれは革命的なコンソールだったのですか?

//命令形式
セガドリームキャストコンソールについて説明し、なぜそれがそれほど革命的だったのかを説明する単一の段落を書いてください。

8. プロンプトの試みを文書化する

ホワイトペーパーは、モデルパラメータと結果を含むすべてのプロンプトの試みを詳細に文書化することの重要性を強く強調しています。この文書化は、パターンの識別、改善の追跡、およびプロンプトエンジニア間のコラボレーションの促進に役立ちます。

文書化テンプレート:

名前: [プロンプトの名前とバージョン]
目標: [この試みの目標の簡潔な説明]
モデル: [使用したモデルの名前とバージョン]
温度: [0-1の値] トークン制限: [数値]
Top-K: [数値] Top-P: [数値]
プロンプト: [プロンプトの全文]
出力: [出力または複数の出力]

9. 他のエンジニアと実験する

良いプロンプトを作成する必要がある場合、複数の人に試してもらったり、複数人で実験すると効果的です。それぞれのメンバーがこの記事でご紹介したテクニックやベストプラクティスに従って作業すると、様々なパフォーマンスの違いが見られるでしょう。

まとめ


本記事では、Googleのホワイトペーパーで紹介されているテクニックとベストプラクティスの一部をご説明してきました。まずは基本的な手法から始め、ゼロショットやフューショットプロンプティングといった基礎テクニックを習得した上で、段階的により高度な技術を取り入れることをお勧めします。

実験結果を文書化し、アプローチを継続的に改善し、得られた知見をチームで共有することで、より効果的なAIとのコミュニケーション能力を養うことが可能となります。

We Are Hiring!


ABEJAは、テクノロジーの社会実装に取り組んでいます。

技術はもちろん、技術をどのようにして社会やビジネスに組み込んでいくかを考えるのが好きな方は、下記採用ページからエントリーください! (新卒の方やインターンシップのエントリーもお待ちしております!) careers.abejainc.com