Chapter 16: プロンプトエンジニアリング基礎
効果的なプロンプトの書き方
16.1 プロンプトとは
**プロンプト(Prompt)**とは、AI に渡す「入力テキスト」のことです。検索エンジンへのキーワード入力とは異なり、プロンプトは AI への「指示書」です。どのように書くかで、出力の質が大きく変わります。
プロンプトエンジニアリングとは、このプロンプトを意図した出力が得られるように設計・改善する技術です。
16.2 良いプロンプトの5原則
原則1: 役割を与える
AI に「あなたは〇〇です」と役割を伝えると、それに適した視点で回答してくれます。
悪い例: バグを直して
良い例: あなたは Python の経験豊富なバックエンドエンジニアです。
以下のコードにあるバグを特定し、修正案を提示してください。原則2: 文脈(背景)を提供する
「なぜ」「どんな状況で」必要なのかを伝えると、的外れな回答を防げます。
悪い例: ユーザー登録のコードを書いて
良い例: FastAPI を使った Web API を開発しています。
PostgreSQL に接続しており、ユーザー登録エンドポイントを
POST /users で実装したいです。バリデーションは Pydantic で行います。原則3: 具体的なタスクを指定する
何を、どこまでやってほしいかを明確に書きます。
悪い例: このコードについて教えて
良い例: このコードの(1)処理の流れ、(2)潜在的なバグ、
(3)パフォーマンス上の問題点 の3点を説明してください。原則4: 出力形式を指定する
表・箇条書き・コード・JSON など、欲しい形式を指定します。
悪い例: 比較して
良い例: 以下の2つのアプローチを比較し、
メリット・デメリットを Markdown の表形式で出力してください。原則5: 制約・条件を明示する
文字数、言語、禁止事項などを明示します。
悪い例: まとめて
良い例: 300文字以内で、専門用語を使わずに日本語でまとめてください。
箇条書きは使わず、段落形式で書いてください。16.3 Zero-shot / Few-shot プロンプティング
Zero-shot(例なし)
例を示さずに直接タスクを依頼します。シンプルなタスクに適しています。
以下の文章を英語に翻訳してください。
「本日はお忙しい中お集まりいただきありがとうございます。」Few-shot(例あり)
期待する入出力の例をいくつか示してから、同じパターンでの処理を依頼します。精度が上がります。
以下のルールで変換してください。
入力: 2024-01-15
出力: 2024年1月15日(月)
入力: 2024-03-20
出力: 2024年3月20日(水)
入力: 2025-08-01
出力:Few-shot は特に「一貫したフォーマット変換」「分類タスク」「特定のスタイルでの文章生成」に効果的です。
16.4 Chain of Thought(思考の連鎖)
複雑な問題を解かせるとき、**「段階的に考えてください」**と指示するだけで精度が向上します。これを Chain of Thought(CoT)プロンプティングと呼びます。
以下の問題を、ステップバイステップで考えながら解いてください。
問題: あるシステムで、1日あたり 10,000 件のリクエストがあります。
そのうち 2% がエラーになります。
エラーの 30% はリトライで解決します。
最終的に1日何件のエラーが残りますか?
まず計算の過程を示し、最後に答えを出してください。「ステップバイステップで」「まず〇〇を考えてから」「理由を説明しながら」といった言葉が CoT のトリガーになります。
16.5 システムプロンプトとユーザープロンプト
LLM への入力には2種類あります。
| 種類 | 役割 | 設定者 |
|---|---|---|
| システムプロンプト | AIの振る舞いや制約を定義 | 開発者・管理者 |
| ユーザープロンプト | 実際のタスクや質問 | エンドユーザー |
ChatGPT や Claude.ai の「Custom Instructions」や「Projects」機能を使うと、システムプロンプト相当の設定をノーコードで行えます。
TODO: あとで実際のスクリーンショットに置き換え - ChatGPT の Custom Instructions 設定画面
16.6 プロンプトのデバッグと改善
思った出力が得られないときは、以下のサイクルで改善します。
よくある問題と対策:
| 問題 | 対策 |
|---|---|
| 回答が長すぎる・短すぎる | 「〇文字以内で」「箇条書き5項目で」と明示 |
| 的外れな回答が来る | 文脈・背景情報を追加する |
| コードが動かない | 言語バージョン・依存ライブラリを明示する |
| フォーマットが崩れる | 「Markdown で」「JSON で」と出力形式を指定 |
| 同じことを繰り返す | 「一度だけ」「重複なく」と明示する |
プロンプトは1回で完璧にしようとせず、試行錯誤しながら育てていく感覚が大切です。