プロンプティングの基本は、どのモデルにも当てはまります。このガイドでは、ChatGPT アプリと API の両方における OpenAI のモデルに固有の点と、その挙動が書き方をどう変えるべきかを扱います。
モデル名や制限は頻繁に変わるので、このガイドでは世代を超えて安定している挙動を説明します。最新のモデル一覧は OpenAI のドキュメントで確認してください。
異なるプロンプトを求める 2 つのファミリー
OpenAI は、汎用のチャットモデルと推論モデルを提供しています。モデル名より、この区別のほうが重要です。
| 汎用チャットモデル | 推論モデル | |
|---|---|---|
| 仕組み | 直接答える | 答える前に内部で考える |
| 最適なプロンプトの書き方 | 明示的でステップごとの指示 | 目標、制約、成功基準 |
| 「ステップごとに考えて」 | 役立つことがある | 不要。逆効果になることも |
| 例 | しばしば有用 | まずは例なしで試す |
| コストと遅延 | 低い | 高い。推論の労力で調整可能 |
考え方としては、チャットモデルには手順が必要な有能な若手に説明するように、推論モデルには目的が必要な経験豊富な同僚に説明するように伝えるのが有効です。
メッセージのロール
API はロール付きのメッセージを受け取ります。アプリケーションの作成者からの指示はシステムメッセージに入れます。新しい OpenAI の API ではこれを developer メッセージと呼びます。ユーザーの入力はユーザーメッセージに入れます。モデルは developer の指示を優先します。
常設のルール、ロール、出力形式は developer メッセージに置きます。タスクとそのデータはユーザーメッセージに置きます。システムプロンプトとロールプロンプティングを参照してください。
ChatGPT アプリでは、カスタム指示とプロジェクトの指示がシステムメッセージの役割を果たします。
文字どおり、明示的に
最近の OpenAI のモデルは、指示に忠実かつ文字どおりに従います。そこから次の 2 点が言えます。
- 暗に示したことではなく、言ったことを実行します。 依頼した修正に加えて提案もほしいなら、両方を頼みましょう。
- 明確な 1 文で、たいていの挙動は直せます。 大文字や繰り返しは必要ありません。強い強調は、ルールの過剰適用を招くことがあります。
Markdown と区切りで構造化する
OpenAI のモデルは、指示の整理には Markdown の見出しやリストを、ドキュメントや入力を囲むには XML 風のタグを、うまく扱います。
## Task
Summarize the incident report for the on-call team.
## Requirements
- 5 bullet points.
- Include root cause, customer impact, and fix.
## Output format
A markdown list. No introduction.
<report>
{{report}}
</report>
長い文脈
プロンプトに大きなドキュメントが含まれる場合は、指示を先頭と末尾の両方に置きます。1 回しか置けないなら、ドキュメントの前に置きます。これは、長い文脈のプロンプトに関する OpenAI 自身のガイダンスに沿っています。
Structured Outputs
コードが解析するものには、API の Structured Outputs 機能を、strict モードの JSON Schema とともに使います。応答がスキーマに制約され、パース失敗の一群がなくなります。
- フィールドに適切な名前と説明を付けます。モデルはスキーマを読みます。
- 値が固定された集合には enum を使います。
- 説明がほしい場合は、結果のフィールドの前に推論のフィールドを置きます。
- それでも検証します。応答は出力上限で途切れたり、拒否されたりすることがあります。
詳しくは構造化出力のプロンプトを参照してください。
関数呼び出し
ツールは、名前、説明、パラメーターのスキーマで定義されます。説明は、モデルがいつツールを呼ぶかを決めるのに使うプロンプトなので、何をするか、いつ使うか、何を返すかを書きます。strict モードは引数をスキーマに制約します。AI エージェント向けのプロンプトを参照してください。
推論の労力
推論モデルには、どれだけ考えるかを設定する項目があります。単純な抽出や分類には低い労力を、複数ステップの分析や難しいコードには高い労力を使います。この設定を調整するほうが、プロンプトに推論の指示を足すより効果的です。
トークン数は正確に数えられる
OpenAI はトークナイザーを公開しているので、プロンプトのトークン数をオフラインで数え、送信前に入力コストを把握できます。PromptFlowEngine は OpenAI のモデルにそのトークナイザーを使い、結果を「正確」と表示します。ワークスペースでプロンプトを確認するか、トークン最適化を参照してください。
プロンプトキャッシュは、最小の長さを超える繰り返しのプロンプトの先頭部分に自動で適用されます。変わらない内容を先に、変動する内容を最後に置いてください。
ChatGPT アプリでのプロンプティング
- 文脈は一度だけ与える。 常設の好みは、毎回入力し直すのではなく、カスタム指示やプロジェクトで設定します。
- 話題が変わったら新しいチャットを始める。 長い会話には古い指示が残ります。
- 資料を添付する。 ファイルを説明する代わりに、アップロードします。
- 形式を頼む。 表、チェックリスト、語数制限など。
- メモリを確認する。 保存された記憶が望まない形で回答を誘導しているなら、見直すか無効にします。
- 秘密情報を貼らない。 チャットに入れたキーや顧客データは、あなたの管理を離れています。
PromptFlowEngine の Chrome 拡張機能は ChatGPT の中で動作します。プロンプト欄の下書きを分析し、大まかな依頼を再構成し、下書きに認証情報が含まれていると警告します。
OpenAI のモデルでよくある間違い
| 間違い | 起こること | 対策 |
|---|---|---|
| 推論モデルにステップごとの指示を出す | 遅くなるだけで良くならない | 目標と制約を書く |
| 文章だけで JSON を頼む | ときどき無効な出力が出る | Structured Outputs を使う |
| 長いドキュメントの下に指示が埋もれる | 指示の重みが下がる | ドキュメントの後で繰り返す |
| すべてのルールを強調する | ルールが過剰適用される | 素直に書き、理由を説明する |
| 文字数でトークン数を見積もる | 予算を外す | トークナイザーで数える |
ChatGPT のプロンプトを最適化する
- 1 行目でタスクを述べる。
- 対象読者、制約、出力形式を加える。
- 貼り付けた資料をタグで囲む。
- つなぎの言葉と繰り返しを取り除く。
- 実際の入力でテストし、バージョンを比較する。
PromptFlowEngine のプロンプトオプティマイザーは、手順 3 と 4 を行い、要件が失われていないことを検証します。
Claude のプロンプティングガイドと Gemini のプロンプティングガイドとも比較してみてください。