GPT-5.4 API の使い方

Ashley Innocent

Ashley Innocent

6 3月 2026

GPT-5.4 API の使い方

TL;DR / 簡潔な回答

GPT-5.4 APIを使用するには:OpenAI SDKをインストールし(pip install openai)、APIキーでクライアントを初期化し、モデルgpt-5.4を使用してchat.completions.create()を呼び出します。主な機能:コンピューター利用(ネイティブブラウザ自動化)、ツール検索(トークン削減47%)、1Mコンテキストウィンドウ、ビジョン機能。料金:入力トークン1Mあたり2.50ドル、出力トークン1Mあたり15ドル。このガイドでは、セットアップ、コード例、コンピューター利用の設定、ツール統合、および本番環境でのベストプラクティスについて説明します。

はじめに

GPT-5.4は単なるモデルのアップグレードではありません。これは、ネイティブなコンピューター利用機能、効率的なツール検索、1Mトークンのコンテキストウィンドウを備えたOpenAI初の汎用モデルです。GPT-5.4を効果的に使用するには、これらの新しい機能を理解し、ワークフローに統合する方法を知る必要があります。

このガイドでは、GPT-5.4の主要な機能ごとに動作するコード例を提供します。コンピューター利用の自動化の実装、MCPサーバー向けのツール検索の設定、高解像度画像の処理、長文のコードベースの扱い、および本番環境デプロイメントのコスト最適化について学びます。

AIエージェントの構築、ブラウザワークフローの自動化、既存アプリケーションへのGPT-5.4の統合など、どのような場合でも、このガイドは必要な実装の詳細を提供します。

💡
GPT-5.4をアプリケーションに統合する際は、Apidogを使用してAPIエンドポイントを設計、テスト、および文書化してください。Apidogの統合プラットフォームは、APIリクエストのデバッグ、自動テストスイートの作成、開発中の応答のモック、およびチーム向けのドキュメント生成に役立ちます。これは、GPT-5.4と他のサービスを組み合わせたAIを活用した機能を構築する際に特に価値があります。
button

クイックスタート:初めてのGPT-5.4リクエスト

5分以内にGPT-5.4を使い始めましょう。コードを書く前に、ApidogでGPT-5.4 APIリクエストをテストしてください:

  1. POSTで https://api.openai.com/v1/chat/completions への新しいHTTPリクエストを作成します
  2. Authorizationヘッダーを追加: Bearer YOUR_API_KEY
  3. モデル、メッセージ、パラメータを含むリクエストボディを設定します
  4. 送信して応答を検査します
  5. 繰り返しテストのためにコレクションに保存します
  6. APIキーを切り替えるために環境変数を使用します
この視覚的なアプローチは、初期テストを迅速化し、コードで実装する前にAPI構造を理解するのに役立ちます。

前提条件

Python クイックスタート

from openai import OpenAI
import os

# Initialize client
client = OpenAI(
    api_key=os.getenv("OPENAI_API_KEY")
)

# Make request
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[
        {"role": "system", "content": "You are a helpful coding assistant."},
        {"role": "user", "content": "Write a Python function to sort a list of dictionaries by a key."}
    ]
)

print(response.choices[0].message.content)

Node.js クイックスタート

const OpenAI = require('openai');

const client = new OpenAI({
    apiKey: process.env.OPENAI_API_KEY
});

async function main() {
    const response = await client.chat.completions.create({
        model: 'gpt-5.4',
        messages: [
            { role: 'system', content: 'You are a helpful coding assistant.' },
            { role: 'user', content: 'Write a Python function to sort a list of dictionaries by a key.' }
        ]
    });

    console.log(response.choices[0].message.content);
}

main();

期待される出力

def sort_dicts_by_key(dict_list, key, reverse=False):
    """
    Sort a list of dictionaries by a specified key.

    Args:
        dict_list: List of dictionaries to sort
        key: The dictionary key to sort by
        reverse: If True, sort in descending order

    Returns:
        Sorted list of dictionaries
    """
    return sorted(dict_list, key=lambda x: x.get(key, ''), reverse=reverse)

# Example usage
data = [
    {'name': 'Alice', 'age': 30},
    {'name': 'Bob', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

sorted_by_age = sort_dicts_by_key(data, 'age')
print(sorted_by_age)
# [{'name': 'Bob', 'age': 25}, {'name': 'Alice', 'age': 30}, {'name': 'Charlie', 'age': 35}]

GPT-5.4 の機能の理解

GPT-5.4は4つの主要な分野で優れています。これらを理解することは、各ユースケースに適切なアプローチを選択するのに役立ちます。

1. 知識作業 (GDPval 勝率 83%)

最適用途:

2. コンピューター利用 (OSWorld検証済み 75%)

最適用途:

3. コーディング (SWE-Bench Pro 57.7%)

最適用途:

4. ツール統合 (Toolathlon 54.6%)

最適用途:

コンピューター利用API

GPT-5.4のネイティブなコンピューター利用機能は、このリリースにおける最大の飛躍を表しています。このモデルは、スクリーンショット、マウスコマンド、およびキーボード入力を介してコンピューターを操作できます。

コンピューター利用機能を備えたアプリケーションを構築する際は、ワークフローの各ステップをApidogでテストしてください:

コンピューター利用の仕組み

コンピューター利用ワークフローでは、APIリクエストで computer ツールを使用します。モデルは次のように動作します:

  1. 現在の画面状態のスクリーンショットを受け取る
  2. UI要素を分析し、アクションを決定する
  3. コンピューターコマンド(クリック、タイプ、スクロールなど)を返す
  4. アプリケーションがコマンドを実行し、新しいスクリーンショットをキャプチャする
  5. タスクが完了するまでループを続ける

基本的なコンピューター利用のセットアップ

from openai import OpenAI
import base64

client = OpenAI()

def take_screenshot():
    """現在の画面状態をキャプチャします - プラットフォームに合わせて実装してください。"""
    # pyautogui、PIL、またはプラットフォーム固有のスクリーンショットを使用
    import pyautogui
    screenshot = pyautogui.screenshot()
    import io
    buffer = io.BytesIO()
    screenshot.save(buffer, format='PNG')
    return base64.b64encode(buffer.getvalue()).decode('utf-8')

def execute_computer_command(command):
    """コンピューターコマンドを実行します - コマンドタイプに基づいて実装してください。"""
    import pyautogui

    action = command.get('action')

    if action == 'click':
        x, y = command.get('coordinate', [0, 0])
        pyautogui.click(x, y)
    elif action == 'type':
        text = command.get('text', '')
        pyautogui.write(text, interval=0.05)
    elif action == 'scroll':
        amount = command.get('scroll_amount', 0)
        pyautogui.scroll(amount)
    elif action == 'keypress':
        key = command.get('key', '')
        pyautogui.press(key)

    # アクション後に新しいスクリーンショットを返す
    return take_screenshot()

# コンピューター利用の会話
messages = [{
    "role": "user",
    "content": [
        {
            "type": "text",
            "text": "Navigate to gmail.com and log in with the credentials I provided."
        },
        {
            "type": "image_url",
            "image_url": {
                "url": f"data:image/png;base64,{take_screenshot()}"
            }
        }
    ]
}]

# コンピューターツールを使用したリクエスト
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=messages,
    tools=[{
        "type": "computer",
        "display_width": 1920,
        "display_height": 1080,
        "display_number": 1
    }],
    tool_choice="required"
)

# コンピューターコマンドを解析して実行
for tool_call in response.choices[0].message.tool_calls:
    if tool_call.type == "computer":
        command = tool_call.function.arguments
        new_screenshot = execute_computer_command(command)

        # 新しいスクリーンショットで会話を続ける
        messages.append({
            "role": "assistant",
            "content": response.choices[0].message.content
        })
        messages.append({
            "role": "user",
            "content": [{
                "type": "image_url",
                "image_url": {"url": f"data:image/png;base64,{new_screenshot}"}
            }]
        })

コンピューター利用の安全ポリシー

リスク許容度に基づいて安全動作を設定します:

# セーフモード - 機密性の高いアクションには確認が必要
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=messages,
    tools=[{
        "type": "computer",
        "display_width": 1920,
        "display_height": 1080,
        "confirmation_policy": "always"  # または「never」または「selective」
    }],
    # 安全性に関するカスタムシステムメッセージ
    system_message="""あなたはコンピューターを操作しています。以下の安全ルールに従ってください:
    1. 明示的なユーザー確認なしに資格情報を入力しないでください
    2. ファイルやデータを削除する前に尋ねてください
    3. メールやメッセージを送信する前に確認してください
    4. エラーや予期せぬ状態は直ちに報告してください
    """
)

ブラウザ自動化の例

Playwright統合でブラウザタスクを自動化します:

from playwright.sync_api import sync_playwright

def browser_automation_workflow():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()

        # ページに移動
        page.goto("https://example.com")

        # GPT-5.4用のスクリーンショットを取得
        screenshot = page.screenshot()
        screenshot_b64 = base64.b64encode(screenshot).decode('utf-8')

        messages = [{
            "role": "user",
            "content": [
                {"type": "text", "text": "Find the login form and fill it out."},
                {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{screenshot_b64}"}}
            ]
        }]

        # GPT-5.4からコンピューターコマンドを取得
        response = client.chat.completions.create(
            model="gpt-5.4",
            messages=messages,
            tools=[{"type": "computer"}],
            tool_choice="required"
        )

        # ブラウザ上でコマンドを解析して実行
        for tool_call in response.choices[0].message.tool_calls:
            if tool_call.type == "computer":
                command = json.loads(tool_call.function.arguments)

                if command.get('action') == 'click':
                    x, y = command.get('coordinate', [0, 0])
                    page.mouse.click(x, y)
                elif command.get('action') == 'type':
                    page.keyboard.type(command.get('text', ''))

                # 新しいスクリーンショットを取得して続行
                new_screenshot = page.screenshot()
                # ... ループを続ける

メールとカレンダーの自動化

実世界の例:メールを処理し、イベントをスケジュールする:

def process_email_and_schedule_meeting():
    """
    ワークフロー:未読メールを読み取り、会議リクエストを抽出、
    カレンダーの空き状況を確認し、カレンダー招待を送信します。
    """

    workflow_prompt = """
    このワークフローを完了してください:
    1. Gmailを開き、過去24時間以内の未読メールを探します
    2. 会議リクエストやスケジュールに関する質問を特定します
    3. 各会議リクエストについて:
       - 提案された日付/時間を抽出します
       - 出席者と会議の目的をメモします
    4. Googleカレンダーを開き、空き状況を確認します
    5. 確定した会議のカレンダー招待を送信します
    6. スケジュールされた時間を確定する返信メールを送信します

    達成されたことの要約を報告してください。
    """

    # 受信トレイのスクリーンショットから開始
    screenshot = take_screenshot()

    messages = [{
        "role": "user",
        "content": [
            {"type": "text", "text": workflow_prompt},
            {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{screenshot}"}}
        ]
    }]

    # 複数ターンコンピューター利用ワークフローを実行
    for turn in range(10):  # 無限ループを防ぐためターンを制限
        response = client.chat.completions.create(
            model="gpt-5.4",
            messages=messages,
            tools=[{"type": "computer"}],
            tool_choice="required"
        )

        # タスクが完了したか確認
        if "complete" in response.choices[0].message.content.lower():
            print(f"Workflow completed in {turn + 1} turns")
            break

        # コンピューターコマンドを実行し、新しいスクリーンショットを取得
        # ... (以前の例からのコマンド実行ロジック)

パフォーマンスの最適化

Mainstayが3万件の固定資産税ポータルを処理した結果:

最適化のヒント:

  1. 高品質のスクリーンショットを使用(最低1920x1080)
  2. 明確で具体的なタスク記述を提供する
  3. ループを防ぐためにターン制限を実装する
  4. 冗長なキャプチャを避けるためにスクリーンショットをキャッシュする
  5. 信頼できるワークフローには選択的な確認ポリシーを使用する

ツール検索と統合

ツール検索はトークン使用量を47%削減し、大規模なツールエコシステムでの作業を可能にします。

ツール検索の仕組み

すべてのツール定義を事前に読み込むのではなく、モデルは軽量なリストを受け取り、オンデマンドで定義を検索します。

基本的なツール検索のセットアップ

# 利用可能なツールを定義(軽量リスト)
available_tools = [
    {
        "name": "get_weather",
        "description": "場所の現在の天気を取得"
    },
    {
        "name": "send_email",
        "description": "受信者にメールを送信"
    },
    {
        "name": "calendar_search",
        "description": "カレンダーでイベントを検索"
    },
    # ... 他にも数百のツール
]

# 最初のリクエスト - モデルはツールリストを参照し、完全な定義は参照しない
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[
        {"role": "user", "content": "What's the weather in Tokyo and send it to my team?"}
    ],
    tools=available_tools,
    tool_choice="auto"
)

# モデルがツールを使用したい場合、定義を要求する
# その時点でアプリケーションが完全な定義を提供する

MCPサーバー統合

ScaleのMCP Atlasベンチマークでは、ツール検索によりトークンが47%削減されることが示されました。

# 多くのツールを備えたMCPサーバー
mcp_servers = [
    {
        "name": "filesystem",
        "description": "ファイルシステム操作",
        "tool_count": 12
    },
    {
        "name": "database",
        "description": "データベースクエリ操作",
        "tool_count": 8
    },
    {
        "name": "web-search",
        "description": "ウェブ検索とスクレイピング",
        "tool_count": 15
    }
    # ... ベンチマークの36のMCPサーバー
]

# ツール検索設定
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[
        {"role": "user", "content": "Find all Python files modified today and search for TODO comments."}
    ],
    tools=mcp_servers,
    # このパターンを使用するとツール検索が自動的に有効になる
    parallel_tool_calls=True
)

# モデルは必要に応じてツール定義を要求します
# トークン削減:すべての定義を事前に読み込む場合と比較して47%

Toolathlonスタイル多段階ワークフロー

Toolathlonは複雑な多段階ツールワークフローをテストします:

def grade_assignments_workflow():
    """
    複雑なワークフロー:添付ファイル付きのメールを読み込み、
    採点システムにアップロードし、課題を採点し、
    結果をスプレッドシートに記録します。
    """

    workflow_steps = """
    1. 学生からの課題添付ファイル付きメールを読み込みます
    2. 各添付ファイルをダウンロードします
    3. 採点ポータルにアップロードします
    4. ルーブリックを使用して各課題を採点します
    5. スプレッドシートに成績を記録します
    6. 学生に確認メールを送信します
    """

    tools = [
        {"name": "email_read", "description": "受信トレイからメールを読み込む"},
        {"name": "email_send", "description": "メールを送信する"},
        {"name": "file_download", "description": "ファイル添付ファイルをダウンロードする"},
        {"name": "file_upload", "description": "ウェブポータルにファイルをアップロードする"},
        {"name": "web_form_fill", "description": "ウェブフォームを入力して送信する"},
        {"name": "spreadsheet_write", "description": "スプレッドシートにデータを書き込む"},
        {"name": "rubric_evaluate", "description": "ルーブリックに対して作業を評価する"}
    ]

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[
            {"role": "user", "content": workflow_steps}
        ],
        tools=tools,
        parallel_tool_calls=True  # 並列ツール実行を有効にする
    )

    # GPT-5.4はToolathlonで54.6%を達成(GPT-5.2は45.7%)
    # 鍵:より良いツール選択と少ないターン数で済む

ビジョンと画像処理

GPT-5.4は、最大10.24Mピクセルのオリジナル画像詳細で、強化された視覚認識をサポートします。

画像詳細レベル

# オリジナル詳細 - 最高品質 (10.24Mピクセル、最大6000px)
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{
        "role": "user",
        "content": [
            {
                "type": "image_url",
                "image_url": {
                    "url": "https://example.com/high-res-image.jpg",
                    "detail": "original"  # または「high」または「low」
                }
            },
            {"type": "text", "text": "Analyze this technical diagram."}
        ]
    }]
)

# 高詳細 - 2.56Mピクセル、最大2048px
# 低詳細 - 最速処理、低精度

ドキュメント解析の例

OmniDocBench:エラー率 0.109(GPT-5.2は0.140)

def parse_complex_document(pdf_path):
    """テーブルや図を含む複数ページのPDFを解析します。"""

    # PDFページを画像に変換
    from pdf2image import convert_from_path
    pages = convert_from_path(pdf_path, dpi=300)

    messages = [{"role": "user", "content": []}]

    for i, page in enumerate(pages[:5]):  # 最初の5ページ
        import io, base64
        buffer = io.BytesIO()
        page.save(buffer, format='PNG')
        img_b64 = base64.b64encode(buffer.getvalue()).decode()

        messages[0]["content"].append({
            "type": "image_url",
            "image_url": {
                "url": f"data:image/png;base64,{img_b64}",
                "detail": "high"
            }
        })

    messages[0]["content"].append({
        "type": "text",
        "text": """
        このドキュメントからすべてのデータを抽出します:
        1. 行/列ヘッダー付きのテーブル
        2. 主要な図とそのキャプション
        3. テキストで言及されている要約統計
        構造化されたJSONとして返します。
        """
    })

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=messages
    )

    return response.choices[0].message.content

UIスクリーンショット分析

def analyze_ui_screenshot(screenshot_path):
    """アクセシビリティの問題についてUIスクリーンショットを分析します。"""

    with open(screenshot_path, 'rb') as f:
        img_b64 = base64.b64encode(f.read()).decode()

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": f"data:image/png;base64,{img_b64}",
                        "detail": "original"
                    }
                },
                {
                    "type": "text",
                    "text": """
                    このUIスクリーンショットをアクセシビリティの問題についてレビューしてください:
                    1. 色のコントラストの問題
                    2. ラベルやaltテキストインジケーターの欠落
                    3. キーボードナビゲーションの問題(可視フォーカス状態)
                    4. テキストサイズと可読性
                    5. スクリーンリーダーの互換性に関する懸念

                    特定の位置と重要度で問題をリストアップしてください。
                    """
                }
            ]
        }]
    )

    return response.choices[0].message.content

長文コンテキストワークフロー

GPT-5.4は最大1Mトークンのコンテキストウィンドウをサポートします(実験的)。

標準コンテキスト (272Kトークン)

# 大きなコードベースファイルを読み込む
with open('large_codebase.py', 'r') as f:
    code = f.read()

response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[
        {"role": "system", "content": "あなたはコードレビューアシスタントです。"},
        {"role": "user", "content": f"""
        このコードベースを次の点についてレビューしてください:
        1. セキュリティの脆弱性
        2. パフォーマンスの問題
        3. コードスタイルの不整合
        4. エラー処理の欠落

        コード:
        {code}
        """}
    ],
    max_tokens=4000
)

拡張コンテキスト (100万トークン)

APIパラメータを介して設定します:

response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[
        {"role": "user", "content": large_document}
    ],
    # 拡張コンテキスト設定
    extra_body={
        "model_context_window": 1048576,  # 100万トークン
        "model_auto_compact_token_limit": 272000  # 272K後に自動圧縮
    }
)

# 注意:272Kを超えるリクエストは使用量が2倍としてカウントされます

複数ドキュメント分析

def analyze_multiple_documents(documents):
    """単一のコンテキストで10以上のドキュメントを分析します。"""

    content_parts = []

    for i, doc in enumerate(documents):
        content_parts.append(f"=== Document {i+1}: {doc['title']} ===\n")
        content_parts.append(doc['content'][:50000])  # 必要に応じて切り詰める
        content_parts.append("\n\n")

    combined_content = "".join(content_parts)

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{
            "role": "user",
            "content": f"""
            これらのドキュメントを分析し、以下を提供してください:
            1. すべてのドキュメントにわたる主要テーマの要約
            2. ドキュメント間の矛盾または不整合
            3. いずれかのドキュメントで言及されているアクションアイテム
            4. 該当する場合のイベントのタイムライン

            {combined_content}
            """
        }],
        max_tokens=8000
    )

    return response.choices[0].message.content

コーディングと開発ワークフロー

GPT-5.4は、SWE-Bench ProでGPT-5.3-Codex (57.7%) と同等の性能を持ち、コンピューター利用機能が追加されています。

フロントエンド生成

def generate_frontend_component(spec):
    """スタイリング付きの完全なReactコンポーネントを生成します。"""

    prompt = f"""
    この仕様に基づいて完全なReactコンポーネントを作成してください:

    {spec}

    要件:
    1. フックを使用した関数コンポーネント
    2. すべてのpropsとstateに対するTypeScript型
    3. スタイリングにはTailwind CSS
    4. レスポンシブデザイン(モバイル、タブレット、デスクトップ)
    5. アクセシビリティ(ARIAラベル、キーボードナビゲーション)
    6. Jest/React Testing Libraryを使用した単体テスト

    完全なコードを返してください:
    - コンポーネントファイル (.tsx)
    - スタイル(Tailwind以外の場合)
    - テストファイル (.test.tsx)
    """

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{"role": "user", "content": prompt}],
        max_tokens=6000
    )

    return response.choices[0].message.content

# 例:テーマパークシミュレーション(OpenAIデモより)
theme_park_spec = """
インタラクティブなアイソメトリックテーマパークシミュレーションゲームを作成してください:
- タイルベースのパス配置
- 乗り物と景観の建設
- ゲストの経路探索とキューイング
- 公園の指標(お金、ゲスト、幸福度、清潔さ)
- Playwrightテストによるブラウザプレイ可能
- 生成されたアイソメトリックアセット
"""

component_code = generate_frontend_component(theme_park_spec)

複雑な問題のデバッグ

def debug_with_full_context(error_logs, codebase_files, stack_trace):
    """ログ、コード、スタックトレースの完全なコンテキストを使用してデバッグします。"""

    context = f"""
    エラーログ:
    {error_logs}

    スタックトレース:
    {stack_trace}

    関連コードファイル:
    {codebase_files}

    タスク:根本原因を特定し、修正を提供します。
    考慮事項:
    1. 競合状態またはタイミングの問題
    2. メモリリークまたはリソース枯渇
    3. データフローに関する誤った仮定
    4. 処理されていないエッジケース
    5. 外部依存関係の問題

    提供するもの:
    1. 根本原因分析
    2. 必要な特定のコード変更
    3. 回帰を防ぐためのテスト
    """

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{"role": "user", "content": context}],
        max_tokens=4000
    )

    return response.choices[0].message.content

Playwrightインタラクティブテスト

ブラウザプレイテスト用の実験的なCodexスキル:

def playwright_interactive_debug():
    """
    ブラウザプレイテストにはPlaywright Interactiveを使用します。
    GPT-5.4は、アプリを構築しながらテストできます。
    """

    prompt = """
    todoウェブアプリケーションを構築し、構築しながらテストします:

    1. HTML構造を作成
    2. CSSスタイリングを追加
    3. JavaScript機能の実装
    4. 各機能の後、Playwrightを使用して以下を行います:
       - 要素の可視性を検証
       - ユーザーインタラクションをテスト
       - 状態の永続性を確認
       - エッジケースを検証

    テスト中に見つかった問題を報告し、修正してください。
    """

    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{"role": "user", "content": prompt}],
        tools=[{"type": "playwright_interactive"}],
        max_tokens=8000
    )

    return response.choices[0].message.content

ストリーミング応答

ストリーミングは、長い応答に対する知覚遅延を低減します。

Python ストリーミング

from openai import OpenAI

client = OpenAI()

stream = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "Write a detailed explanation of quantum computing."}],
    stream=True
)

for chunk in stream:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

Node.js ストリーミング

const stream = await client.chat.completions.create({
    model: 'gpt-5.4',
    messages: [{ role: 'user', content: 'Write a detailed explanation of quantum computing.' }],
    stream: true
});

for await (const chunk of stream) {
    if (chunk.choices[0].delta.content) {
        process.stdout.write(chunk.choices[0].delta.content);
    }
}

トークンカウント付きストリーミング

def stream_with_usage(stream):
    """ストリーミング中のトークン使用量を追跡します。"""
    total_tokens = 0

    for chunk in stream:
        if chunk.choices[0].delta.content:
            content = chunk.choices[0].delta.content
            print(content, end="", flush=True)
            total_tokens += len(content) // 4  # おおよその見積もり

        if chunk.usage:
            print(f"\n\nUsage: {chunk.usage.total_tokens} tokens")

    return total_tokens

エラー処理とリトライロジック

本番環境のコードには堅牢なエラー処理が必要です。

包括的なエラー処理

from openai import OpenAI, RateLimitError, APIError, AuthenticationError
import time

client = OpenAI()

def make_request_with_retry(messages, max_retries=3):
    """指数バックオフ再試行ロジックでリクエストを行います。"""

    for attempt in range(max_retries):
        try:
            response = client.chat.completions.create(
                model="gpt-5.4",
                messages=messages,
                max_tokens=2000,
                temperature=0.7
            )
            return response

        except RateLimitError as e:
            if attempt == max_retries - 1:
                raise

            wait_time = 2 ** attempt  # 1秒、2秒、4秒
            print(f"レート制限されました。{wait_time}秒待機しています...")
            time.sleep(wait_time)

        except APIError as e:
            if e.status_code >= 500:  # サーバーエラー、再試行
                if attempt == max_retries - 1:
                    raise
                wait_time = 2 ** attempt
                time.sleep(wait_time)
            else:
                raise  # クライアントエラー、再試行しない

        except AuthenticationError:
            print("無効なAPIキーです。資格情報を確認してください。")
            raise

        except Exception as e:
            print(f"予期せぬエラー:{e}")
            raise

    raise Exception("最大再試行回数を超過しました")

# 使用方法
try:
    response = make_request_with_retry([
        {"role": "user", "content": "Hello, GPT-5.4!"}
    ])
    print(response.choices[0].message.content)
except Exception as e:
    print(f"リクエスト失敗:{e}")

タイムアウト処理

import httpx

# タイムアウトを設定
client = OpenAI(
    timeout=httpx.Timeout(60.0, connect=10.0)  # 合計60秒、接続10秒
)

try:
    response = client.chat.completions.create(
        model="gpt-5.4",
        messages=[{"role": "user", "content": "Long-running task..."}]
    )
except httpx.TimeoutException:
    print("リクエストがタイムアウトしました。ストリーミングを使用するか、複雑さを軽減することを検討してください。")

本番環境でのベストプラクティス

本番APIワークフローにApidogを使用する

GPT-5.4統合を本番環境にデプロイする前に、堅牢なテストおよび監視ワークフローを確立してください:

APIテストパイプライン:

チームコラボレーション:

統合パターン:

コスト最適化戦略

プロンプトの最適化

# 悪い例:冗長なプロンプト
bad_prompt = """
こんにちは!お元気ですか。何かお手伝いいただけないでしょうか。ここにコードがあるのですが、それが何をするのかよくわかりません。
説明していただけますか?コードはこちらです:
""" + code

# 良い例:直接的なプロンプト
good_prompt = f"このコードが何をするのか説明してください:\n{code}"

# トークン節約:約50トークン = 1リクエストあたり0.000125ドル
# 月間100万リクエストの場合:125ドルの節約

応答長さの制御

# max_tokensを適切に設定
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "Summarize this article."}],
    max_tokens=200  # 冗長にならないように
)

# ストップシーケンスを使用
response = client.chat.completions.create(
    model="gpt-5.4",
    messages=[{"role": "user", "content": "List 5 items."}],
    stop=["\n\n", "6."]  # リストの後に停止
)

バッチ処理

# 50%割引のためにバッチAPIを使用
from openai import OpenAI

client = OpenAI()

# バッチファイルを作成
batch_requests = []
for article in articles:
    batch_requests.append({
        "custom_id": article["id"],
        "method": "POST",
        "url": "/v1/chat/completions",
        "body": {
            "model": "gpt-5.4",
            "messages": [{"role": "user", "content": article["content"]}]
        }
    })

# アップロードして処理
batch_file = client.files.create(
    file=json.dumps(batch_requests),
    purpose="batch"
)

batch = client.batches.create(
    input_file_id=batch_file.id,
    endpoint="/v1/chat/completions",
    completion_window="24h"
)

# 非リアルタイムワークロードで50%のコスト削減

繰り返しリクエストのキャッシュ

import hashlib
import json

class ResponseCache:
    """同一のAPI応答をキャッシュします。"""

    def __init__(self):
        self.cache = {}

    def _get_key(self, messages):
        return hashlib.md5(json.dumps(messages).encode()).hexdigest()

    def get_or_create(self, client, messages, **kwargs):
        key = self._get_key(messages)

        if key in self.cache:
            return self.cache[key]

        response = client.chat.completions.create(
            model="gpt-5.4",
            messages=messages,
            **kwargs
        )

        self.cache[key] = response
        return response

# 使用方法
cache = ResponseCache()
response = cache.get_or_create(client, messages)

結論

GPT-5.4は、AIを活用したアプリケーションに新たな可能性を開きます。ネイティブなコンピューター利用は、ブラウザ自動化とアプリケーション間のワークフローを可能にします。ツール検索は、より大規模なツールエコシステムをサポートしながらコストを47%削減します。強化されたビジョンは複雑なドキュメント解析を処理します。そして、1Mトークンのコンテキストウィンドウはコードベース全体を処理します。

GPT-5.4で本番アプリケーションを構築するには、堅牢なAPIテスト、デバッグ、およびドキュメント作成ワークフローが必要です。Apidogは、完全なAPIライフサイクルに対応する統合プラットフォームを提供します。

button

AIエージェントの構築、ワークフローの自動化、またはGPT-5.4を搭載した顧客向け機能の作成など、堅実なAPI開発プラクティスを持つことで、デリバリーを加速し、バグを削減できます。

基本的なチャット補完から始め、ユースケースに応じてコンピューター利用、ツール検索、ビジョンを重ねていきます。初期デプロイメント中はコストを注意深く監視し、プロンプトとキャッシュ戦略を最適化してください。

よくある質問 (FAQ)

GPT-5.4のコンピューター利用機能はどのように使用しますか?

APIリクエストで computer ツールを使用します。スクリーンショットを画像として送信し、応答としてコンピューターコマンド(クリック、タイプ、スクロール)を受け取ります。pyautoguiまたはPlaywrightを使用してコマンドを実行し、新しいスクリーンショットを送信します。タスクが完了するまでループします。リスク許容度に基づいて安全ポリシーを設定します。

ツール検索とは何ですか、どのように有効にしますか?

ツール検索は、ツール定義を事前に読み込むのではなくオンデマンドで読み込み、トークン使用量を47%削減します。リクエストで軽量なツールリストを提供することで有効になります。モデルは必要に応じて完全な定義を要求します。MCPサーバーでは自動的に機能します。

100万トークンのコンテキストウィンドウはどのように使用しますか?

extra_body パラメータを介して設定します:model_context_window: 1048576model_auto_compact_token_limit: 272000。注意:272Kトークンを超えるリクエストは使用量が2倍としてカウントされます。Codexで実験的に利用可能です。

gpt-5.4 と gpt-5.4-pro の違いは何ですか?

GPT-5.4 Proは複雑な推論でより高い精度(BrowseCompで89.3% vs 82.7%)を提供しますが、コストは12倍高くなります(30ドル/180ドル vs 2.50ドル/15ドル)。ほとんどのワークロードには標準モデルを、最高の精度を必要とするタスクにはProを使用してください。

GPT-5.4 APIのコストを削減するにはどうすればよいですか?

キャッシュされた入力を使用(90%節約)、プロンプトの長さを最適化し、max_tokens制限を設定し、バッチAPIを使用(50%割引)、応答キャッシュを実装し、画像には適切な詳細レベルを選択してください。

GPT-5.4は1つのリクエストで複数の画像を処理できますか?

はい、可能です。単一のメッセージに複数の image_url コンテンツ部分を含めます。複数ページのドキュメント、比較タスク、または連続したスクリーンショットに役立ちます。

本番環境でレート制限を処理するにはどうすればよいですか?

指数バックオフ再試行ロジック(1秒、2秒、4秒の遅延)を実装し、バッチAPIを一括処理に使用し、リクエストを時間的に分散させ、大量のニーズに対しては制限の引き上げを要求してください。

GPT-5.4が最も得意とするプログラミング言語は何ですか?

GPT-5.4は、Python、JavaScript/TypeScript、React、Node.js、および一般的なウェブ技術に優れています。また、Java、Go、Rust、SQLにも強いです。GPT-5.3-Codexの性能(SWE-Bench Pro 57.7%)と同等です。

GPT-5.4の応答をストリーミングするにはどうすればよいですか?

APIリクエストで stream=True を設定します。チャンクを反復処理し、各デルタを処理します。長い応答に対する知覚遅延を低減します。

GPT-5.4は本番ワークロードに適していますか?

はい、適しています。GPT-5.4はGPT-5.2と比較して事実誤りが33%少なく、トークンをより効率的に使用し、堅牢なエラー処理を備えています。本番デプロイメントには、再試行ロジック、監視、およびコスト追跡を実装してください。

ApidogでAPIデザイン中心のアプローチを取る

APIの開発と利用をよりシンプルなことにする方法を発見できる