効果的なプロンプト設計ガイド(Part 1)
生成AIから質の高い応答を引き出すためのプロンプト設計のベストプラクティスを、具体例とともに分かりやすく解説する記事です。
Table of contents
author: segcp
Introduction
生成AIがさまざまなアプリケーションに活用されるようになった今、「どのように質問するか」がAIの応答の質を大きく左右します。AIチャットボット、ライティング支援ツール、データ分析アシスタントなど、言語モデルを活用したサービスでは、プロンプトの設計(プロンプトエンジニアリング)がとても重要です。 この記事では、効果的なプロンプト設計の主要原則について、Vertex AIのGeminiモデルを使用して再現可能な実例を交えながら解説します。記事には実際のAI生成出力は含まれていませんが、ご自身でプロンプトを効果的に構成し、テストする方法を習得できます。
なぜプロンプト設計が重要なのか
従来のプログラムとは異なり、大規模言語モデル(LLM)は自然言語の指示だけでユーザーの意図を推測します。そのため、曖昧で構造化されていないプロンプトでは、期待とは異なる応答や的外れな回答が返ってくることがあります。 効果的なプロンプトは、以下の特徴を持っています。
- 簡潔で明確
- 内容が具体的で定義がはっきりしている
- 一度に1つのタスクに集中している
- 必要に応じて例を含んでいる
プロンプト設計のベストプラクティス
1. 簡潔に伝える
冗長な表現は避けましょう。短く明快なプロンプトの方が、より正確な応答を得られます。
❌ 避けるべき例。
「スマートフォンケースのデザインと販売をしている会社に合いそうな名前の候補をいくつか教えてください。」
✅ おすすめの例。
「スマートフォンケースブランドの名前を提案してください。」
2. 具体的かつ明確にする
あいまいなプロンプトは、一般的または的外れな回答を生む可能性があります。
❌ 抽象的な例。
「大阪について教えてください。」
✅ 具体的な例。
「大阪が他の都市と異なる特徴を3つ紹介してください。」
3. タスクは1つずつ分ける
1つのプロンプトで複数の質問をすると、AIが混乱することがあります。
❌ 避けるべき例。
「地球温暖化が進むと、どのような影響がありますか?そして日本で人気の観光地も教えてください。」
✅ おすすめの例。
「地球温暖化が進むと、どのような影響がありますか?」「日本で人気の観光地を教えてください。」
4. システム指示で制約を加える
システム指示を使うことで、AIのキャラクターや対応範囲を設定できます。 たとえば、書店のカスタマーサポートチャットボットの場合。
system_instruction =
[
あなたはオンライン書店のサポート担当者です。本や注文に関する質問のみに答えてください。
それ以外の質問には『本や注文に関する内容のみご案内できます』と返答してください。
]
✅ 適切な質問。
「注文した本の配送状況を確認できますか?」
❌ 不適切な質問。
「明日の天気はどうですか?」
5. ハルシネーション(誤情報)への注意
AIは時に事実と異なる情報を“それらしく”答えることがあります。特に、最新の出来事や具体的な数値を尋ねる場合には注意が必要です。
❌ 不正確な応答につながりやすい例。
「現在の東京都の正確な人口は?」
✅ 安全な表現。
「最新データに基づく東京都の推定人口はどれくらいですか?」
6. 自由記述ではなく選択肢に変える
自由形式の質問は回答のばらつきが大きくなります。選択肢を与えることで応答の一貫性が高まります。
❌ 自由すぎる例。
「新しい言語を学ぶには何をすればいいですか?」
✅ 選択肢付きの例。
「言語を学ぶ最適な方法を選んでください:a) アプリを使う b) 語学学校に通う c) ネイティブスピーカーと会話する」
7. 例を含めて精度を上げる
コンテキストに合った例を加えることで、モデルがより期待通りの出力をしやすくなります。以下は、例を使った3つのアプローチです。
Zero-Shot(例なし)
何の事前情報も与えずにタスクだけを提示する方法です。モデルは文脈を自力で推測する必要があります。
プロンプトの例。
次のレビューの感情を、positive / neutral / negative のいずれかで分類してください:『この商品、2日で壊れました』
One-Shot(1つの例)
1つの例を与えてから本題の入力を提示することで、モデルに出力の形式や基準を学習させる方法です。
プロンプトの例。
レビュー:『配送が早くて品質も良かった!』感情:positive
レビュー:『この商品、2日で壊れました』感情:
Few-Shot(複数の例)
複数の例を提示することで、出力のばらつきを減らし、より一貫した回答を得やすくする方法です。
プロンプトの例。
レビュー:『配送が早くて品質も良かった!』感情:positive
レビュー:『梱包がひどく、対応も最悪でした。』感情:negative
レビュー:『特に印象はなかった。』感情:neutral
レビュー:『この商品、2日で壊れました』感情:
実際に試してみたい方へ:プロンプトの比較検証方法
この記事では、プロンプトごとのAI出力結果は掲載していませんが、実際に動かして比較検証する方法をご紹介します。 以下の手順で、Google ColabとVertex AIのGeminiモデルを使って、ご自身の環境でプロンプトを試すことができます。
① ライブラリをインストール(初回のみ)。
まず、Google Generative AI用のSDKをインストールします。
import subprocess, sys, importlib.util
def ensure_package(pkg: str):
"pip install されていなければインストール"
if importlib.util.find_spec(pkg) is None:
subprocess.check_call([sys.executable, "-m", "pip", "install", "-q", pkg])
ensure_package("google-genai")
ensure_package("ipython") # Markdown 表示用(Colab 以外では無視される)
print("✅ google‑genai をインストールしました")
② Colabでの認証。
Google Colabを使っている場合、Googleアカウントでの認証が必要です。
import sys
def colab_login_if_running():
if "google.colab" in sys.modules:
from google.colab import auth
auth.authenticate_user()
print("✅ Colab authentication ok")
colab_login_if_running()
③ プロジェクト情報の設定とクライアントの初期化。
Google CloudプロジェクトIDとリージョンを設定し、GenAIクライアントを作成します。
import os
from google import genai
# プロジェクト ID を取得
# - 環境変数 GOOGLE_CLOUD_PROJECT が最優先
# - 手動入力する場合は "my‑gcp‑project" のように書き換え
PROJECT_ID = os.getenv("GOOGLE_CLOUD_PROJECT") or "my-gcp-project"
if PROJECT_ID in ("", "my-gcp-project", "[your-project-id]"):
raise EnvironmentError(
"⚠️ PROJECT_ID が未設定です。\n"
" ▶ 環境変数 GOOGLE_CLOUD_PROJECT をセットするか\n"
" ▶ ソースコード内の PROJECT_ID の「my-gcp-project」を自分のProject IDに書き換えてください。"
)
# リージョンは環境変数で上書き可
REGION = os.getenv("VERTEX_REGION", "us-east1")
# Gemini クライアントを初期化
client = genai.Client(vertexai=True, project=PROJECT_ID, location=REGION)
print(f"Connected to Vertex AI (project={PROJECT_ID}, region={REGION})")
④ プロンプトの送信と応答の表示。
モデルにプロンプトを送信して、生成された回答を表示します。
import os
from IPython.display import Markdown, display
# デフォルト値(環境変数で上書きできる)
DEFAULT_MODEL = os.getenv("GENAI_MODEL", "gemini-2.0-flash-001")
DEFAULT_PROMPT = os.getenv("GENAI_PROMPT",
"スマートフォンケースブランドの名前を5つ提案してください。")
# 生成AIへ問い合わせ → 結果を Markdown / print で出力
def ask_genai(prompt: str = DEFAULT_PROMPT,
model_id: str = DEFAULT_MODEL) -> None:
"""Prompt Gemini and pretty‑print the response."""
result = client.models.generate_content(model=model_id, contents=prompt)
text = getattr(result, "text", str(result)) # SDK バージョン差異に備える
# NotebookならMarkdown、そうでなければ標準出力
try:
display(Markdown(f"### ✨ Result\n{text}"))
except Exception:
print("\n=== Result ===\n", text)
# 実行例
ask_genai()
※ プロジェクトの設定とVertex AI APIの有効化が必要です。
詳細はこちら:https://cloud.google.com/vertex-ai/docs/start/cloud-environment?hl=ja
この方法を使えば、この記事で紹介した「避けるべきプロンプト」と「おすすめのプロンプト」を実際に比較できます。自分なりのバリエーションを試して、どのような応答の違いがあるかを観察してみましょう。 なお、上記コードではgemini-2.0-flash-001を書いていますが、Vertex AIのGemini APIでは他にも複数のモデルが提供されています。ユースケースに応じて適切なモデルを選択してください。
利用可能なモデル一覧は以下の公式ページをご参照ください: Geminiモデル一覧
「避けるべきプロンプト」と「おすすめのプロンプト」をそれぞれ試し、どのような出力の違いがあるか比較してみてください。また、ご自身でプロンプトを改良してみるのも良いトレーニングになります。
まとめ
プロンプト設計は、AIを効果的に活用するための重要なステップです。本記事では、実際の業務やユースケースで応用しやすい「プロンプトの書き方」に焦点を当て、効果的な設計に役立つ代表的かつ実践的なアプローチを紹介しました。 プロンプトの構造や言葉の選び方、例の活用などを通じて、応答の質を高めるための基本的な考え方と手法を理解できる内容になっています。出力を見ながら試行錯誤を重ねて、少しずつご自身のプロンプトスキルを磨いていきましょう。 大規模言語モデルは進化し続けており、それに応じてプロンプト設計のアプローチも柔軟に進化させていく必要があります。
参考
https://cloud.google.com/vertex-ai/generative-ai/docs/learn/prompts/introduction-prompt-design?hl=ja
https://cloudskillsboost.google/paths/118/course_templates/976
https://cloud.google.com/gemini/docs/discover/write-prompts?hl=ja
※本記事は、ジーアイクラウド株式会社の見解を述べたものであり、必要な調査・検討は行っているものの必ずしもその正確性や真実性を保証するものではありません。
※リンクを利用する際には、必ず出典がGIC dryaki-blogであることを明記してください。
リンクの利用によりトラブルが発生した場合、リンクを設置した方ご自身の責任で対応してください。
ジーアイクラウド株式会社はユーザーによるリンクの利用につき、如何なる責任を負うものではありません。