For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
メインナビゲーション
Theme

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

プロンプトエンジニアリングで生成結果を改善します。

OpenAI API では、大規模言語モデルを使って、ChatGPT と同じようにプロンプトからテキストを生成できます。コード、数式、構造化された JSON データ、人が書いたような自然な文章など、モデルはほぼあらゆる種類のテキストを生成できます。

Responses API を使った簡単な例を見てみましょう。

簡単なプロンプトからのテキスト生成
import OpenAI from "openai";
const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  input: "Write a one-sentence bedtime story about a unicorn.",
});

console.log(response.output_text);

レスポンスの output プロパティには、モデルが生成したコンテンツが配列として格納されます。この例の出力は、次の 1 件だけです。

[
  {
    "id": "msg_67b73f697ba4819183a15cc17d011509",
    "type": "message",
    "role": "assistant",
    "content": [
      {
        "type": "output_text",
        "text": "Under the soft glow of the moon, Luna the unicorn danced through fields of twinkling stardust, leaving trails of dreams for every child asleep.",
        "annotations": []
      }
    ]
  }
]

レスポンスの output 配列には複数の要素が含まれることがよくあります。 ツール呼び出しや、リーズニングモデルが生成した推論トークンに関するデータなどが含まれる場合があります。モデルが出力したテキストが必ず output[0].content[0].text にあると仮定しないでください。

一部の公式 SDK では、モデルのレスポンスに output_text プロパティが用意されています。このプロパティを使うと、モデルが出力したすべてのテキストを 1 つの文字列として簡単に取得できます。

プレーンテキストに加えて、JSON 形式の構造化データをモデルに返させることもできます。この機能を構造化出力と呼びます。

モデルの選び方

API でコンテンツを生成する際は、どのモデルを使うかが重要です。上のコード例では model パラメータで指定しています。利用可能なモデルの一覧を参照してください。テキスト生成用のモデルを選ぶ際は、次の点を考慮します。

  • リーズニングモデル は、内部で思考の連鎖を生成して入力プロンプトを分析します。複雑なタスクの理解や、複数のステップにわたる計画の立案が得意です。一般に、GPT モデルよりも応答に時間がかかり、利用コストも高くなります。
  • GPT モデルは高速でコスト効率が良く、高い能力を備えています。タスクの進め方を具体的に指示すると、より良い結果が得られます。
  • 大型モデルと小型モデル(mini または nano) では、速度、コスト、能力のバランスが異なります。大型モデルはプロンプトの理解や幅広い分野での問題解決に優れています。一方、小型モデルは一般に高速で、利用コストを抑えられます。

どれを選ぶか迷ったら、汎用的なテキスト生成やプロンプトの試行錯誤には gpt-6-astra が適しています。

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

プロンプトエンジニアリングとは、要件を満たすコンテンツをモデルが安定して生成できるように、効果的な指示を設計することです。

モデルの出力は非決定的で、同じ入力でも結果が変わることがあります。そのため、狙いどおりの出力を得るには、体系的な手法と試行錯誤の両方が必要です。実績のある手法やベストプラクティスを取り入れると、良い結果を安定して得やすくなります。

メッセージのロールを使い分けるなど、どのモデルでも使える手法があります。一方、リーズニングモデルと GPT モデルのように、モデルの種類によっては、最良の結果を得るために指示の出し方を変える必要があります。同じ系列のモデルでも、スナップショットが異なれば結果が変わることがあります。そのため、より複雑なアプリケーションを開発する際は、次の対応を強く推奨します。

  • 本番アプリケーションで使用するモデルのスナップショットを特定のバージョン(例:gpt-4.1-2025-04-14)に固定し、動作の一貫性を確保する
  • プロンプトの挙動を測定するテストと評価スイートを用意し、プロンプトの改善時やモデルのバージョン変更・アップグレード時に性能を追跡できるようにする

ここからは、プロンプトを組み立てるためのツールと手法を見ていきます。

メッセージのロールと指示の優先順位

モデルに優先順位の異なる指示を与えるには、API の instructions パラメータまたはメッセージのロールを使います。

instructions パラメータでは、口調、目標、適切な回答例など、応答を生成する際の基本方針をモデルに伝えます。ここで指定した指示は、input パラメータに含まれるプロンプトよりも優先されます。

指示に基づくテキスト生成
import OpenAI from "openai";
const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "low" },
  instructions: "Talk like a pirate.",
  input: "Are semicolons optional in JavaScript?",
});

console.log(response.output_text);

上の例は、input 配列で次のメッセージを渡す場合とほぼ同じです。

異なるロールのメッセージを使ったテキスト生成
import OpenAI from "openai";
const client = new OpenAI();

const response = await client.responses.create({
  model: "gpt-6-astra",
  reasoning: { effort: "low" },
  input: [
    {
      role: "developer",
      content: "Talk like a pirate.",
    },
    {
      role: "user",
      content: "Are semicolons optional in JavaScript?",
    },
  ],
});

console.log(response.output_text);

instructions パラメータが適用されるのは、現在の応答生成リクエストだけです。会話の状態を管理する際に previous_response_id パラメータを使っても、以前のターンで指定した instructions はコンテキストに含まれません。

OpenAI Model Spec では、モデルがメッセージのロールに応じて優先順位を決める仕組みを説明しています。

developer user assistant
developer メッセージはアプリケーション開発者からの指示で、user メッセージよりも優先されます。 user メッセージはエンドユーザーからの指示で、developer メッセージよりも優先順位が低くなります。 モデルが生成したメッセージのロールは assistant です。

複数ターンの会話には、こうしたメッセージが複数含まれるほか、開発者やモデルが提供する別の種類のコンテンツも含まれることがあります。詳しくは、会話の状態管理を参照してください。

developer メッセージと user メッセージの関係は、プログラミング言語の関数とその引数にたとえることができます。

  • developer メッセージは関数の定義に相当し、システムのルールやビジネスロジックを定めます。
  • user メッセージは関数の引数に相当し、developer メッセージの指示を適用する対象となる入力や設定を渡します。

コードによるプロンプトのバージョン管理

本番用のプロンプトは、再利用可能なプロンプトオブジェクトを作成する代わりに、アプリケーションのコード内に保存してください。コードで管理すると、型付きの入力、コードレビュー、テスト、通常のデプロイ手順を利用してモデルの動作を変更できます。

OpenAI は、API の再利用可能なプロンプトオブジェクトを段階的に廃止します。2026 年 6 月 3 日以降はプロンプトオブジェクトの新規作成を積極的には推奨せず、2026 年 11 月 30 日に v1/prompts を停止する予定です。最新のスケジュールは廃止予定のページで確認してください。

新たにプロンプトを設計する際は、次のように進めてください。

  • プロンプトを組み立てる処理は、それを使う機能のコードの近くに小さなモジュールとしてまとめます。
  • 顧客データ、ファイル、タスクのオプションなどの動的な値には、型付きの関数引数またはスキーマを使います。
  • 生成した instructions と input を Responses API に直接渡します。
  • 本番用のプロンプトを変更する前に、代表的なケースのテストフィクスチャ、テスト、評価項目を追加します。
  • プロンプトの変更は通常のデプロイシステムを通じてリリースします。段階的にリリースする場合は、機能フラグや設定を利用します。

すでにプロンプト ID やバージョンを指定して保存済みのプロンプトを呼び出している場合は、プロンプトオブジェクトの移行ガイドに沿って、そのプロンプトをコードに移してください。

Markdown と XML によるメッセージの書式設定

developer メッセージや user メッセージを書く際に、Markdown の書式と XML タグを組み合わせると、プロンプトやコンテキストデータの論理的な区切りがモデルに伝わりやすくなります。

Markdown の見出しやリストを使うと、プロンプトの各セクションを区別し、階層構造をモデルに示せます。開発者にとってもプロンプトが読みやすくなります。XML タグは、参考資料など、ひとまとまりのコンテンツの始まりと終わりを明示するのに役立ちます。XML 属性でプロンプト内のコンテンツにメタデータを付け、指示の中で参照することもできます。

開発者メッセージには通常、次のセクションをこの順序で含めます。ただし、最適な内容や順序は、使用するモデルによって変わることがあります。

  • 役割: アシスタントの用途、コミュニケーションのスタイル、全体の目標を示します。
  • 指示: 望ましい応答を生成する方法をモデルに伝えます。守るべきルール、行うべきこと、決して行ってはならないことを明示します。用途に応じて、カスタム関数の呼び出し方などを個別のサブセクションに分けて説明できます。
  • 例: 想定される入力と、それに対してモデルに期待する出力を対にして示します。
  • コンテキスト: 学習データに含まれない非公開データや独自データ、タスクとの関連性が特に高いとわかっているデータなど、応答の生成に必要な追加情報を渡します。生成リクエストごとに異なるコンテキストを含めることがあるため、通常はプロンプトの末尾付近に置くのが適しています。

次の例では、Markdown と XML タグを使い、developer メッセージをセクションに分けて、指示を補足する例を加えています。

コード生成用の開発者メッセージ
# Identity

You are coding assistant that helps enforce the use of snake case
variables in JavaScript code, and writing code that will run in
Internet Explorer version 6.

# Instructions

* When defining variables, use snake case names (e.g. my_variable)
  instead of camel case names (e.g. myVariable).
* To support old browsers, declare variables using the older
  "var" keyword.
* Do not give responses with Markdown formatting, just return
  the code as requested.

# Examples

<user_query>
How do I declare a string variable for a first name?
</user_query>

<assistant_response>
var first_name = "Anna";
</assistant_response>

プロンプトキャッシュによるコストとレイテンシの削減

メッセージを組み立てる際は、API リクエストで繰り返し使う予定の内容をプロンプトの先頭に置きます。さらに、Chat Completions または Responses に渡す JSON リクエストボディでも、その内容を含む API パラメータを先頭付近に置くようにしてください。こうすると、プロンプトキャッシュによるコストとレイテンシの削減効果を最大限に引き出せます。

フューショット学習

フューショット学習では、プロンプトに少数の入出力例を含めることで、大規模言語モデルをファインチューニングせずに、新しいタスクの進め方を示せます。モデルは例からパターンを読み取り、それをプロンプトに適用します。例を用意する際は、さまざまな入力を取り上げ、それぞれに期待する出力を示してください。

通常、例は API リクエストの developer メッセージに含めます。次の developer メッセージでは、製品やカスタマーサービスに関するレビューを、肯定的、否定的、中立のいずれかに分類する方法を例で示しています。

# 役割

あなたは、短い製品レビューに「Positive」「Negative」「Neutral」のいずれかのラベルを付けるアシスタントです。

# 指示

* 回答には単語を 1 つだけ出力してください。書式や補足説明は加えないでください。
* 製品レビューに表れている感情に応じて、「Positive」「Negative」「Neutral」のいずれか 1 語だけを返してください。

# 例

<product_review id="example-1">
このヘッドホン、本当に気に入っています。音質が抜群です!
</product_review>

<assistant_response id="example-1">
Positive
</assistant_response>

<product_review id="example-2">
バッテリーの持ちはまずまずですが、イヤーパッドは安っぽく感じます。
</product_review>

<assistant_response id="example-2">
Neutral
</assistant_response>

<product_review id="example-3">
カスタマーサービスの対応がひどかったです。もう二度とここでは買いません。
</product_review>

<assistant_response id="example-3">
Negative
</assistant_response>

関連するコンテキストの追加

モデルに渡すプロンプトには、応答の生成に役立つ追加情報を含めると効果的です。たとえば、次のような目的でコンテキストを追加します。

  • 独自データなど、モデルの学習データセットに含まれないデータをモデルが利用できるようにする
  • モデルが応答の根拠とする資料を、特に有用と判断したものに限定する

モデルへの生成リクエストに関連するコンテキストを追加する手法は、検索拡張生成(RAG) と呼ばれることがあります。コンテキストを追加する方法はさまざまです。たとえば、ベクトルデータベースを検索して得られたテキストをプロンプトに含める方法や、OpenAI の組み込みのファイル検索ツールを使い、アップロードしたドキュメントに基づいてコンテンツを生成する方法があります。

コンテキストウィンドウを考慮した設計

モデルが 1 回の生成リクエストでコンテキストとして扱えるデータ量には上限があります。この上限をコンテキストウィンドウと呼び、トークン(テキストや画像などの入力データを分割した単位)の数で表します。

コンテキストウィンドウのサイズはモデルによって異なり、10 万トークン台前半のものから、新しい GPT-4.1 モデルでは 100 万トークンに達するものまであります。各モデルの具体的なサイズは、モデルのドキュメントを参照してください。

現行モデル向けのプロンプト設計

gpt-6-astra などの GPT モデルでは、タスクの遂行に必要なロジックとデータをプロンプトに明示し、具体的に指示すると効果的です。最新モデルの能力を引き出すには、まず現行のプロンプトガイドを参照してください。

GPT-6 Astra prompting guide

最新モデルの能力を引き出すプロンプトの書き方を、最新の指針、実践例、移行時の注意点とともに紹介します。

最新モデル向けプロンプトのベストプラクティス

現行の指針を網羅した解説は、最新モデル向けプロンプトのベストプラクティスを参照してください。以下の実践上のポイントも引き続き有効です。

リーズニングモデル向けのプロンプト設計

リーズニングモデルと GPT モデルでは、効果的な指示の出し方が異なります。一般に、リーズニングモデルでは、大まかな方針だけを示したほうが良い結果が得られます。一方、GPT モデルでは、具体的で正確な指示が効果的です。

リーズニングモデルと GPT モデルの違いは、次のように考えることができます。

  • リーズニングモデルは、経験豊富な同僚に似ています。達成したい目標を伝えれば、具体的な進め方は任せられます。
  • GPT モデルは、経験の浅い同僚に似ています。作ってほしい成果物を具体的に示し、明確な指示を与えると、最も力を発揮します。

リーズニングモデルを使う際のベストプラクティスについて詳しくは、こちらのガイドを参照してください。

次のステップ

テキストの入出力の基本を押さえたら、目的に応じて次のリソースを活用してください。

Playground でのプロンプト作成

Playground でプロンプトを作成し、試しながら改善できます。

構造化出力による JSON データの生成

モデルが出力する JSON データを指定の JSON スキーマに準拠させる方法を説明します。

API リファレンス

API リファレンスで、テキスト生成に使えるすべてのオプションを確認できます。

その他のリソース

プロンプト設計のヒントをさらに探すには、OpenAI Cookbook を参照してください。サンプルコードのほか、次のような外部リソースへのリンクも掲載しています。