プロンプトエンジニアリング¶
効果的なプロンプト(指示文)の作り方を学び、生成AIからより良い回答を引き出しましょう。
プロンプトエンジニアリングとは¶
プロンプトエンジニアリングとは、AIモデルに対して適切な指示を与え、望む回答を得るための技術です。
なぜ重要?
同じモデルでも、プロンプトの書き方によって回答の品質が大きく変わります。 適切なプロンプトを書くことで、より正確で有用な回答を得られます。
基本テクニック¶
1. 明確で具体的な指示¶
❌ 悪い例
✅ 良い例
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からファイルをダウンロードする関数を作成
ネガティブプロンプト¶
「やってほしくないこと」を明示することも効果的です:
実践例¶
例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. 曖昧な指示
2. 情報の不足
3. 複数のタスクを一度に要求
ハンズオン課題¶
課題: プロンプトを改善する
以下の悪い例を、学んだテクニックを使って改善してください。
悪い例:
改善のポイント: 1. 具体的な要件を追加 2. 出力形式を指定 3. 制約条件を明示 4. 例を提供(任意)
次のステップ¶
プロンプトエンジニアリングの基本を学んだら、最後にリソースの確認を行いましょう。