MENU

【開発者向け】ChatGPT 4o API完全ガイド:料金体系・使い方(Python例)・機能・制限を解説

ChatGPT 4o API 完全ガイド

早川 誠司|生成AI活用コンサルタント/業務効率化アドバイザー

「自社のサービスにChatGPTの機能を組み込みたい」

「ChatGPT 4o APIって、GPT-4 Turbo APIと何が違うの?」

「APIの料金体系や使い方、制限について詳しく知りたい」

OpenAIの最新フラッグシップモデルChatGPT 4oは、その高性能さだけでなく、開発者向けAPIの進化も大きな注目点です。GPT-4o APIを活用することで、あなたのアプリケーションやサービスに強力なAI機能を統合できます。

しかし、APIを利用するには、料金体系、使い方、利用可能な機能、そして制限事項などを正確に理解しておく必要があります。

この記事は、ChatGPT 4o APIの利用を検討している、あるいはすでに利用を開始した開発者の方々に向けて、以下の内容を網羅的に解説する完全ガイドです。

  • ChatGPT 4o APIの概要とGPT-4 Turbo APIとの違い
  • 詳細な料金体系(トークン課金、コスト計算)
  • APIキーの取得と安全な管理方法
  • Pythonを使った基本的な使い方とコード例
  • 主要機能(JSONモード, Function Calling, Vision等)の実装方法
  • 利用制限(Rate Limits, Quotas)の詳細と対策
  • セキュリティに関するベストプラクティス

この記事を読めば、ChatGPT 4o APIの全体像を把握し、自信を持って開発を進めるための知識が身につきます。十分なボリュームで詳細まで解説しますので、ぜひ参考にしてください。

目次

ChatGPT 4o APIとは?GPT-4 Turbo APIとの違い

ChatGPT 4o APIは、開発者がプログラムを通じてChatGPT 4oモデルの機能を利用するためのインターフェースです。これにより、チャットボット、コンテンツ生成ツール、データ分析支援システムなど、様々なAI搭載アプリケーションを構築できます。

GPT-4 Turbo APIとの主な違い:

OpenAIの発表によると、GPT-4o APIは従来のGPT-4 Turbo APIと比較して、以下の点で優れています。

  • 速度: 2倍高速な処理速度を実現。リアルタイム性が求められるアプリケーションに適しています。
  • 料金: 半額のAPI利用料金。コスト効率が大幅に向上しました。
  • Rate Limit: 5倍高いRate Limit(単位時間あたりの利用上限)。より多くのリクエストを処理可能です。
  • 性能: GPT-4 Turboと同等以上の知能レベルに加え、特にマルチモーダル性能(テキスト、画像、音声の統合処理)と多言語対応が強化されています。

これらの進化により、GPT-4o APIはより多くの開発者にとって魅力的で実用的な選択肢となっています。既存のGPT-4 Turbo APIを利用している場合、GPT-4o APIへの移行を検討する価値は大きいでしょう。

ChatGPT 4o APIの料金体系

ChatGPT APIの料金は、基本的にトークン (Token) という単位に基づいて計算されます。

トークンとは?

トークンは、テキストを処理するための基本的な単位です。英語の場合、おおよそ1単語が1トークンに相当しますが、日本語の場合はひらがな1文字、漢字1文字などがそれぞれ1〜数トークンとしてカウントされることが多く、言語によって異なります。

OpenAIは、APIリクエストで入力として送信したテキストのトークン数と、APIが出力として生成したテキストのトークン数の両方に対して課金します。

OpenAIのTokenizerツールを使うと、特定のテキストが何トークンに相当するかを確認できます。

GPT-4o APIのトークン単価

GPT-4o APIの具体的なトークン単価は以下の通りです(2025年4月時点)。

モデル入力トークン単価 ($ / 1M tokens)出力トークン単価 ($ / 1M tokens)
GPT-4o$0.15$15.00 \$

比較として、低コスト版の[GPT-4o Mini]や旧モデルの料金も参考にしてください(最新情報は必ず[OpenAI Pricingページ]でご確認ください)。

モデル入力トークン単価 ($ / 1M tokens)出力トークン単価 ($ / 1M tokens)
GPT-4o Mini$5.00$0.60
GPT-4 Turbo (参考)$10.00$30.00

(注: 料金は予告なく変更される場合があります。1M tokens = 100万トークン)

コスト計算の考え方

APIコストは、(入力トークン数 / 1,000,000) * 入力単価 + (出力トークン数 / 1,000,000) * 出力単価 で計算されます。

例えば、GPT-4o APIを使って、入力1,000トークン、出力300トークンのリクエストを1回行った場合のコストは以下のようになります。

  • 入力コスト: (1000 / 1,000,000) * $5.00 = $0.005
  • 出力コスト: (300 / 1,000,000) * $15.00 = $0.0045
  • 合計コスト: $0.005 + $0.0045 = $0.0095

開発中は、コストを意識するために、リクエストごとのおおよそのトークン数とコストをモニタリングすることが重要です。詳細な料金体系や他のモデルの料金については、ChatGPT 4oの料金プランと制限の詳細解説も参照してください。

APIキーの取得と設定

ChatGPT APIを利用するには、まずAPIキーを取得する必要があります。

  1. OpenAIアカウント作成: OpenAI Platform にアクセスし、アカウントを作成(またはログイン)します。
  2. APIキー発行: ダッシュボードの「API keys」セクションに移動し、「Create new secret key」ボタンをクリックします。キーに名前を付け(任意)、「Create secret key」をクリックすると、APIキーが表示されます。
    • 重要: このAPIキーは一度しか表示されません。必ず安全な場所にコピーして保管してください。紛失した場合、再発行はできますが同じキーは二度と表示されません。
  3. 支払い情報の設定: APIを継続的に利用するには、支払い情報(クレジットカードなど)を登録する必要があります。「Billing」セクションで設定してください。

APIキーの安全な管理方法

APIキーは、あなたのアカウントでのAPI利用を認証するための重要な秘密情報です。絶対にコード内に直接書き込んだり、GitHubなどの公開リポジトリにコミットしたりしないでください。

推奨される管理方法は以下の通りです。

  • 環境変数: OSの環境変数にAPIキーを設定し、プログラムからは os.getenv("OPENAI_API_KEY") のように読み込む。
  • .envファイル: プロジェクトルートに.envファイルを作成し、そこにキーを記述 (OPENAI_API_KEY=sk-xxxx...)。.gitignore.envを追加し、リポジトリに含めないようにする。Pythonでは python-dotenv ライブラリなどで読み込む。
  • シークレット管理サービス: AWS Secrets ManagerやGoogle Secret Managerなどのクラウドサービスを利用する。

【Pythonコード例】ChatGPT 4o APIの基本的な使い方 (テキスト生成)

ここでは、Pythonの公式ライブラリ openai (v1.x以降) を使った基本的なAPIの呼び出し方を示します。

1. ライブラリのインストール:

Bash

pip install openai

2. 基本的なAPI呼び出しコード:

Python

import os
from openai import OpenAI

# APIキーを環境変数から読み込む (推奨)
# 事前に export OPENAI_API_KEY='sk-...' を実行しておくか、
# .env ファイル + python-dotenv を使用する
client = OpenAI()
# もし環境変数以外で設定する場合: client = OpenAI(api_key="sk-...")

MODEL = "gpt-4o" # 利用するモデルを指定

try:
    response = client.chat.completions.create(
        model=MODEL,
        messages=[
            {"role": "system", "content": "あなたは親切なアシスタントです。"},
            {"role": "user", "content": "ChatGPT 4o APIの主な利点は何ですか?"}
        ],
        temperature=0.7, # 生成されるテキストのランダム性 (0-2)
        max_tokens=150   # 生成される最大トークン数
    )

    # レスポンスから生成されたテキストを取得
    generated_text = response.choices[0].message.content
    print(generated_text)

    # 消費したトークン数なども確認可能
    # print(response.usage)

except Exception as e:
    print(f"API呼び出し中にエラーが発生しました: {e}")

主要なパラメータ:

  • model: 使用するモデルID (gpt-4o, gpt-4o-mini など)。
  • messages: 対話履歴をリスト形式で指定。役割 (role) は system (AIへの指示), user (ユーザーの発言), assistant (AIの過去の応答) があります。
  • temperature: 値が低いほど決定的で一貫した応答に、高いほど多様で創造的な応答になります。(デフォルト: 1)
  • max_tokens: レスポンスとして生成されるトークンの最大数を制限します。コスト管理にも役立ちます。
  • その他、top_p, frequency_penalty, presence_penalty など、多様なパラメータで生成を制御できます。詳細は公式APIリファレンスを確認してください。

【実践Tips】エラーハンドリングとリトライ

API利用時には、ネットワークエラー、Rate Limit超過、サーバー側の問題などでエラーが発生することがあります。堅牢なアプリケーションを構築するには、適切なエラーハンドリングとリトライ処理が不可欠です。

Python

import time
from openai import OpenAI, RateLimitError, APIError

client = OpenAI()
MODEL = "gpt-4o"

MAX_RETRIES = 3
RETRY_DELAY = 5 # seconds

def call_chat_completion_with_retry(messages):
    retries = 0
    while retries < MAX_RETRIES:
        try:
            response = client.chat.completions.create(
                model=MODEL,
                messages=messages,
                temperature=0.7,
                max_tokens=150
            )
            return response.choices[0].message.content
        except RateLimitError as e:
            retries += 1
            print(f"Rate limit exceeded. Retrying in {RETRY_DELAY}s... ({retries}/{MAX_RETRIES})")
            print(f"Error details: {e}")
            time.sleep(RETRY_DELAY)
        except APIError as e:
            retries += 1
            print(f"OpenAI API error occurred. Retrying in {RETRY_DELAY}s... ({retries}/{MAX_RETRIES})")
            print(f"Error details: {e} (Status code: {e.status_code})")
            # 5xx系エラーならリトライ、4xx系ならリトライしないなどの判断も可能
            if e.status_code == 429: # Rate Limit Error (別の形)
                 time.sleep(RETRY_DELAY)
            elif e.status_code >= 500: # Server error
                 time.sleep(RETRY_DELAY)
            else:
                 print("Non-retryable API error.")
                 raise e # リトライせずにエラーを再送出
        except Exception as e:
            print(f"An unexpected error occurred: {e}")
            raise e # 予期せぬエラーはリトライせずに終了
    print("Max retries exceeded.")
    return None # または例外を送出

# 利用例
messages = [
    {"role": "system", "content": "あなたは親切なアシスタントです。"},
    {"role": "user", "content": "エラーハンドリングについて教えてください。"}
]
result = call_chat_completion_with_retry(messages)
if result:
    print(result)

(上記はシンプルなリトライ例です。指数バックオフなどを実装するとより効果的です)

ChatGPT 4o APIの主要機能と使い方

GPT-4o APIは、基本的なテキスト生成以外にも高度な機能を提供します。

JSONモード

APIレスポンスを確実にJSON形式で受け取りたい場合に利用します。response_format={"type": "json_object"} を指定し、プロンプト内でJSON形式で出力するように指示します。

Python

response = client.chat.completions.create(
  model=MODEL,
  response_format={ "type": "json_object" }, # JSONモードを指定
  messages=[
    {"role": "system", "content": "あなたはユーザーの指示に従ってJSON形式で出力するアシスタントです。"},
    {"role": "user", "content": "名前が'山田太郎'、年齢が30歳のユーザー情報をJSONで出力してください。"}
  ]
)
print(response.choices[0].message.content)
# 出力例: {"name": "山田太郎", "age": 30} (文字列として)
# json.loads() でパース可能

### Function Calling

ChatGPTに関数の説明を提供し、ユーザーのリクエストに応じて適切な関数と引数をJSON形式で返させる機能です。これにより、外部API連携やデータベース操作などを実現できます。

Python

import json

# 1. 関数の説明を定義
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "指定された場所の現在の天気を取得する",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "天気情報を取得したい都市名 (例: 東京都)",
                    },
                    "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
                },
                "required": ["location"],
            },
        },
    }
]

messages = [{"role": "user", "content": "大阪の今の天気は?"}]

# 2. API呼び出し (toolsとtool_choiceを指定)
response = client.chat.completions.create(
    model=MODEL,
    messages=messages,
    tools=tools,
    tool_choice="auto",  # 必要なら特定の関数を強制も可能
)

response_message = response.choices[0].message
tool_calls = response_message.tool_calls

# 3. レスポンスに関数呼び出しが含まれているかチェック
if tool_calls:
    # 4. 呼び出す関数と引数を取得
    available_functions = {
        "get_current_weather": get_current_weather, # 実際の関数を定義しておく
    }
    function_name = tool_calls[0].function.name
    function_to_call = available_functions[function_name]
    function_args = json.loads(tool_calls[0].function.arguments)

    # 5. 実際の関数を実行 (ここではダミー関数)
    def get_current_weather(location, unit="celsius"):
        print(f"天気API呼び出し: location={location}, unit={unit}")
        return json.dumps({"location": location, "temperature": "25", "unit": unit})

    function_response = function_to_call(
        location=function_args.get("location"),
        unit=function_args.get("unit"),
    )

    # 6. 関数の実行結果を再度APIに送り、最終的な応答を得る
    messages.append(response_message) # AIの応答 (関数呼び出し指示) を履歴に追加
    messages.append(
        {
            "tool_call_id": tool_calls[0].id,
            "role": "tool",
            "name": function_name,
            "content": function_response, # 関数の実行結果
        }
    )
    second_response = client.chat.completions.create(
        model=MODEL,
        messages=messages,
    )
    print(second_response.choices[0].message.content) # 最終的なユーザーへの応答
else:
    print(response_message.content) # 通常のテキスト応答

画像入力 (Vision)

GPT-4o APIは画像入力をサポートしています。messages 内の content をリスト形式にし、typeimage_url を指定して画像のURLまたはBase64エンコードデータを渡します。

Python

response = client.chat.completions.create(
  model="gpt-4o", # Visionはgpt-4oなどの対応モデルが必要
  messages=[
    {
      "role": "user",
      "content": [
        {"type": "text", "text": "この画像には何が写っていますか?"},
        {
          "type": "image_url",
          "image_url": {
            # "url": "https://example.com/image.jpg", # URL指定の場合
            "url": "data:image/jpeg;base64,{base64_encoded_image_data}", # Base64の場合
            "detail": "low" # low / high / auto - 精度とコストのトレードオフ
          },
        },
      ],
    }
  ],
  max_tokens=300,
)

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

音声入力/出力 (TTS/Speech-to-Text)

OpenAIは音声合成(Text-to-Speech, TTS)と音声認識(Speech-to-Text)のAPIも提供しており、GPT-4oの高速性と組み合わせることで、リアルタイム音声対話アプリケーションの構築が可能です。詳細はAudio APIドキュメントを参照してください。

API利用制限 (Rate Limits & Quotas)

APIを安定して利用するためには、利用制限を理解しておく必要があります。

  • Rate Limits: 単位時間あたりに送信できるリクエスト数(RPM: Requests Per Minute)やトークン数(TPM: Tokens Per Minute)の上限です。モデルやアカウントの利用状況(Tier)によって異なります。
    • 確認方法: OpenAI Platformの「Limits」セクションで確認できます。
    • 超過した場合: RateLimitError (HTTP 429) が返されます。適切な待機とリトライ処理が必要です。
    • 制限緩和: 利用実績に応じて自動的に引き上げられる場合や、申請によって緩和される場合があります。
  • Quotas (Usage Limits): アカウント全体または組織全体での月間の利用金額上限を設定できます。「Billing」セクションの「Usage limits」で設定可能です。コストの想定外の超過を防ぐために設定を推奨します。

セキュリティとベストプラクティス

APIを利用する上で、セキュリティは非常に重要です。

  • APIキー管理の徹底: 前述の通り、APIキーは絶対に漏洩させないように厳重に管理してください。
  • プロンプトインジェクション対策: ユーザーからの入力をそのままプロンプトに含める場合、悪意のある指示(プロンプトインジェクション)によって意図しない動作を引き起こされる可能性があります。入力のサニタイズや、システムプロンプトでの指示、ユーザー入力とシステム指示の明確な分離などの対策が必要です。
  • 機密情報の扱い: 個人情報や機密情報を含むデータをAPIに送信する場合は、プライバシーポリシーや利用規約を確認し、リスクを十分に評価してください。可能であればマスキングなどの処理を検討しましょう。
  • コスト管理: 意図しない大量リクエストによる高額請求を防ぐため、Quotasの設定や、アプリケーションレベルでの利用状況モニタリング、アラート設定などを行いましょう。
  • ログとモニタリング: APIリクエスト/レスポンス、エラー、トークン消費量などをログに記録し、モニタリングすることで、問題の早期発見やパフォーマンス改善に役立ちます。

まとめ:GPT-4o APIで広がる開発の可能性

ChatGPT 4o APIは、従来のモデルと比較して速度、コスト、性能、Rate Limitの点で大幅に改善され、開発者にとって非常に強力なツールとなりました。

  • 高速・低コスト: リアルタイムアプリケーションや大規模処理の実現性が向上。
  • 高性能・マルチモーダル: テキストに加え、画像も扱える高度なAI機能を統合可能。
  • 豊富な機能: JSONモード、Function Callingなどで、より複雑なアプリケーション構築に対応。

一方で、料金体系、利用制限、セキュリティといった注意点を理解し、適切に対処することが安定したサービス運用には不可欠です。

この記事を参考に、ぜひChatGPT 4o APIを活用し、革新的なアプリケーションやサービスの開発に挑戦してみてください。より詳細な情報や最新情報については、常にOpenAI Platformの公式ドキュメントを参照することをお勧めします。基礎から学びたい方はChatGPT API入門ガイドも役立つでしょう。

早川 誠司(執筆・監修専任)
生成AI活用コンサルタント/業務効率化アドバイザー
大手IT企業でDX推進に従事後、独立。100社以上の中小企業に生成AIソリューションを提供。「すぐ使える業務効率化」をモットーに発信中。
目次