コンテンツにスキップ

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

効果的なプロンプト(指示文)の作り方を学び、生成AIからより良い回答を引き出しましょう。


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

プロンプトエンジニアリングとは、AIモデルに対して適切な指示を与え、望む回答を得るための技術です。

なぜ重要?

同じモデルでも、プロンプトの書き方によって回答の品質が大きく変わります。 適切なプロンプトを書くことで、より正確で有用な回答を得られます。


基本テクニック

1. 明確で具体的な指示

悪い例

AWSについて教えて

良い例

AWSのEC2インスタンスタイプの選び方について、
以下の観点から説明してください:
1. CPU性能の比較
2. メモリ容量の目安
3. コスト最適化のポイント


2. 出力形式の指定

出力形式を明示することで、一貫した回答を得られます:

AWSのリージョン一覧を、以下のJSON形式で出力してください:

{
  "regions": [
    {
      "code": "リージョンコード",
      "name": "リージョン名",
      "location": "地理的な場所"
    }
  ]
}

3. 役割(ロール)の設定

AIに特定の役割を与えることで、専門的な回答を得られます:

あなたは10年以上の経験を持つAWSソリューションアーキテクトです。

以下の要件に対して、最適なアーキテクチャを提案してください:
- 月間100万PVのウェブサイト
- 画像のアップロード機能あり
- 99.9%の可用性が必要

4. 例示(Few-shot Learning)

例を示すことで、期待する回答形式を伝えます:

以下の例に従って、AWSサービスの説明を生成してください。

例1:
サービス: S3
説明: オブジェクトストレージサービス。ファイルをクラウドに保存できます。

例2:
サービス: Lambda
説明: サーバーレスコンピューティング。コードを実行するだけでサーバー管理不要。

では、以下のサービスについて説明してください:
サービス: DynamoDB
説明:

高度なテクニック

Chain of Thought(思考の連鎖)

AIに段階的に考えさせることで、複雑な問題も解決できます:

以下の問題を、ステップバイステップで考えて解決してください。

問題: EC2インスタンスが突然停止しました。原因を特定したい。

手順:
1. まず、考えられる原因をリストアップしてください
2. 各原因の確認方法を説明してください
3. 最も可能性が高い原因から順に調査手順を示してください
4. 最後に、再発防止策を提案してください

制約条件の明示

回答に制約を設けることで、より適切な回答を得られます:

以下の制約に従って、コードを生成してください:

制約条件:
- Python 3.9 を使用
- 外部ライブラリは boto3 のみ使用可能
- 関数は1つの責務のみを持つ
- エラーハンドリングを必ず含める
- コメントは日本語で記述

タスク: S3からファイルをダウンロードする関数を作成

ネガティブプロンプト

「やってほしくないこと」を明示することも効果的です:

AWSのセキュリティベストプラクティスを説明してください。

注意事項:
- 具体的なアカウントIDやシークレットは含めない
- 廃止された機能は推奨しない
- コンソールでの手順は不要(CLIのみ)

実践例

例1: コードレビュー

あなたは経験豊富なPythonプログラマーです。
以下のコードをレビューして、改善点を指摘してください。

レビューの観点:
1. バグの可能性
2. パフォーマンスの問題
3. セキュリティの懸念
4. 可読性の改善
5. Pythonのベストプラクティスへの準拠

コード:
"""
import boto3

def get_items(table_name):
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table(table_name)
    response = table.scan()
    return response['Items']
"""

各観点について、具体的な改善案とコード例を示してください。

例2: ドキュメント生成

以下のPythonコードに対して、Google Styleのdocstringを生成してください。

コード:
"""
def calculate_cost(instance_type, hours, region='us-east-1'):
    prices = {
        't3.micro': 0.0104,
        't3.small': 0.0208,
        't3.medium': 0.0416
    }

    base_price = prices.get(instance_type, 0)
    region_multiplier = 1.0 if region == 'us-east-1' else 1.2

    return base_price * hours * region_multiplier
"""

docstringには以下を含めてください:
- 関数の説明
- Args(引数の説明)
- Returns(戻り値の説明)
- Raises(例外の説明、該当する場合)
- Example(使用例)

例3: トラブルシューティング

AWSのトラブルシューティングエキスパートとして、以下のエラーを診断してください。

エラーメッセージ:
"""
botocore.exceptions.ClientError: An error occurred (AccessDenied) 
when calling the GetObject operation: Access Denied
"""

コンテキスト:
- Lambda関数からS3オブジェクトを取得しようとしている
- Lambda関数には基本的な実行ロールが設定されている
- S3バケットはプライベート設定

以下の形式で回答してください:
1. 考えられる原因(可能性が高い順)
2. 各原因の確認方法
3. 解決手順
4. 再発防止のベストプラクティス

プロンプトテンプレート

よく使うプロンプトをテンプレート化しておくと便利です:

prompt_templates.py
# コードレビューテンプレート
CODE_REVIEW_TEMPLATE = """
あなたは経験豊富な{language}プログラマーです。
以下のコードをレビューして、改善点を指摘してください。

コード:
\"\"\"
{code}
\"\"\"

レビューの観点: {aspects}
"""

# ドキュメント生成テンプレート
DOCSTRING_TEMPLATE = """
以下のコードに対して、{style}スタイルのdocstringを生成してください。

コード:
\"\"\"
{code}
\"\"\"
"""

# 使用例
prompt = CODE_REVIEW_TEMPLATE.format(
    language="Python",
    code="def hello(): print('hello')",
    aspects="バグ、パフォーマンス、可読性"
)

よくある間違い

避けるべきパターン

1. 曖昧な指示

❌ 良いコードを書いて
✅ エラーハンドリング付きのPythonコードを書いて

2. 情報の不足

❌ エラーを直して
✅ 以下のエラーメッセージと状況から、解決策を提案して
   エラー: [エラーメッセージ]
   状況: [実行環境、コード]

3. 複数のタスクを一度に要求

❌ コードを書いて、テストして、デプロイして
✅ 最初にコードを書いてください。その後、テストについて質問します。


ハンズオン課題

課題: プロンプトを改善する

以下の悪い例を、学んだテクニックを使って改善してください。

悪い例:

AWSで何か作って

改善のポイント: 1. 具体的な要件を追加 2. 出力形式を指定 3. 制約条件を明示 4. 例を提供(任意)


次のステップ

プロンプトエンジニアリングの基本を学んだら、最後にリソースの確認を行いましょう。

クリーンアップへ進む