ChatGPT APIの使い方をPythonで徹底解説|実装例からコスト・エラー対策まで

ChatGPT API を [Python](https://www.amazon.co.jp/s?k=Python 入門 本&tag=automationjp-22) から呼び出して業務やアプリに組み込みたいと考えている方向けに、実際に動くコードとともに使い方を解説します。本記事では OpenAI の公式 API を Python で利用する具体的な手順、実装例、料金計算の方法、そして運

ChatGPT API 使い方 python

PR 本記事はアフィリエイト広告(SkillHacks(プログラミング講座)、XServer VPS for Windows Server、明光キャリアパートナーズ エンジニア転職)を含みます。

.

ChatGPT API を [Python](https://www.amazon.co.jp/s?k=Python 入門 本&tag=automationjp-22) から呼び出して業務やアプリに組み込みたいと考えている方向けに、実際に動くコードとともに使い方を解説します。本記事では OpenAI の公式 API を Python で利用する具体的な手順、実装例、料金計算の方法、そして運用で避けて通れないエラーハンドリングまでを網羅的に紹介します。実際に私が複数のプロジェクトで API を導入した経験をもとに、初心者でもすぐに試せる形で整理しました。この記事を読めば、今日から ChatGPT API を自分のコードに統合して、AI 自動化の第一歩を踏み出せます。

📌 ChatGPT API を Python で使う準備

ChatGPT API を Python から呼び出すには、まず OpenAI のアカウント登録と API キーの取得が必要です。

アカウント作成と API キー取得

  1. OpenAI の公式サイト にアクセスし、アカウントを作成します
  2. ダッシュボードにログイン後、右上のメニューから「API keys」を選択
  3. 「Create new secret key」をクリックして新しい API キーを生成
  4. 生成されたキーは一度しか表示されないため、必ず安全な場所に保存してください

Python 環境のセットアップ

OpenAI 公式の Python ライブラリをインストールします。

pip install openai

Python 3.7.1 以上が推奨されています。私の場合は Python 3.10 環境で問題なく動作しています。

環境変数に API キーを設定しておくと、コード内にキーを直書きせずに済むため安全です。

export OPENAI_API_KEY='your-api-key-here'

Windows の場合は以下の通りです。

set OPENAI_API_KEY=your-api-key-here

📌 基本的な API 呼び出しコード例

最もシンプルな ChatGPT API の呼び出し例を示します。

import openai
import os

# API キーを環境変数から読み込み
openai.api_key = os.environ.get("OPENAI_API_KEY")

# ChatGPT API を呼び出す
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "system", "content": "あなたは親切なアシスタントです。"},
        {"role": "user", "content": "Python で API を呼ぶ方法を教えてください。"}
    ],
    temperature=0.7,
    max_tokens=500
)

# レスポンスを表示
print(response.choices[0].message.content)

パラメータの解説

  • model: 使用するモデルを指定します。gpt-3.5-turbo はコスパが良く、gpt-4 はより高精度です
  • messages: 会話履歴を配列で渡します。rolesystem(振る舞い指示)、assistant(AI の返答)、user(ユーザー入力)の 3 種類
  • temperature: 0〜2 の値で、数値が高いほど創造的(ランダム)な出力になります。0.7 前後が汎用的
  • max_tokens: 生成する最大トークン数。コスト管理の要になります

実際に試したところ、上記コードで数秒以内にレスポンスが返ってきました。

2024年1月時点の料金(参考)

  • gpt-3.5-turbo: 入力 $0.0015 / 1K tokens、出力 $0.002 / 1K tokens
  • gpt-4: 入力 $0.03 / 1K tokens、出力 $0.06 / 1K tokens

SkillHacks(プログラミング講座)

SkillHacks|挫折させないプログラミング講座(買い切り)

PR

※ 最新の料金は OpenAI の公式 Pricing ページ で確認してください。

トークン数の確認とコスト計算

レスポンスオブジェクトには使用トークン数が含まれています。

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[
        {"role": "user", "content": "こんにちは"}
    ]
)

# トークン使用量を取得
usage = response.usage
print(f"入力トークン: {usage.prompt_tokens}")
print(f"出力トークン: {usage.completion_tokens}")
print(f"合計トークン: {usage.total_tokens}")

# コスト計算例(gpt-3.5-turbo の場合)
input_cost = (usage.prompt_tokens / 1000) * 0.0015
output_cost = (usage.completion_tokens / 1000) * 0.002
total_cost = input_cost + output_cost
print(f"推定コスト: ${total_cost:.6f}")

実際に試したところ、日本語で「こんにちは」と送信した場合、入力 10 トークン程度、返答が 50〜100 トークン程度で、1 回あたりのコストは $0.0002 前後でした。

コスト削減のテクニック

  1. max_tokens を適切に設定: 不要に長い出力を防ぐ
  2. gpt-3.5-turbo を優先: gpt-4 は約 20 倍高額なため、必要な場面だけ使用
  3. 会話履歴を適度に削減: 長い履歴は毎回送信されるためトークン消費が増える
  4. tiktoken ライブラリでトークン数を事前計算: API を呼ぶ前にコストを見積もれます
import tiktoken

def count_tokens(text, model="gpt-3.5-turbo"):
    encoding = tiktoken.encoding_for_model(model)
    return len(encoding.encode(text))

text = "Python で API を使う"
print(f"トークン数: {count_tokens(text)}")

automationjp.com の関連記事では、大量処理時のコスト最適化手法も紹介しています。

📌 エラー処理とリトライ戦略

本番運用では、ネットワークエラー、レート制限、API 障害などが発生します。堅牢なエラーハンドリングが不可欠です。

主なエラーの種類

  • RateLimitError: リクエスト数やトークン数の上限超過
  • Timeout: API 応答のタイムアウト
  • APIError: OpenAI 側のサーバーエラー
  • InvalidRequestError: パラメータ不正など

リトライ処理を含む実装例

import openai
import os
import time
from openai.error import RateLimitError, Timeout, APIError

openai.api_key = os.environ.get("OPENAI_API_KEY")

def chat_with_retry(messages, max_retries=3, retry_delay=5):
    for attempt in range(max_retries):
        try:
            response = openai.ChatCompletion.create(
                model="gpt-3.5-turbo",
                messages=messages,
                temperature=0.7,
                max_tokens=500,
                timeout=30  # タイムアウトを 30 秒に設定
            )
            return response.choices[0].message.content
        
        except RateLimitError:
            if attempt < max_retries - 1:
                wait_time = retry_delay * (2 ** attempt)  # 指数バックオフ
                print(f"レート制限エラー。{wait_time}秒後にリトライします...")
                time.sleep(wait_time)
            else:
                print("リトライ上限に達しました。")
                raise
        
        except Timeout:
            if attempt < max_retries - 1:
                print("タイムアウト。リトライします...")
                time.sleep(retry_delay)
            else:
                print("タイムアウトが続いています。")
                raise
        
        except APIError as e:
            print(f"API エラー: {e}")
            if attempt < max_retries - 1:
                time.sleep(retry_delay)
            else:
                raise
        
        except Exception as e:
            print(f"予期しないエラー: {e}")
            raise

# 使用例
try:
    result = chat_with_retry([
        {"role": "user", "content": "Python のエラー処理について教えて"}
    ])
    print(result)
except Exception as e:
    print(f"処理に失敗しました: {e}")

私の場合、大量の自動処理を走らせたときにレート制限に引っかかった経験があり、それ以降は必ず指数バックオフのリトライを実装するようにしています。

ログ記録の実装

本番環境では、API 呼び出しのログを残すことで、トラブルシューティングやコスト分析が容易になります。

XServer VPS for Windows Server

XServer VPS for Windows Server|性能・コスパ国内No.1のWindows VPS

PR

import logging
from datetime import datetime

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def chat_with_logging(messages):
    start_time = datetime.now()
    
    try:
        response = openai.ChatCompletion.create(
            model="gpt-3.5-turbo",
            messages=messages,
            temperature=0.7
        )
        
        elapsed_time = (datetime.now() - start_time).total_seconds()
        
        logger.info(f"API 呼び出し成功 | "
                   f"時間: {elapsed_time:.2f}秒 | "
                   f"トークン: {response.usage.total_tokens}")
        
        return response.choices[0].message.content
    
    except Exception as e:
        elapsed_time = (datetime.now() - start_time).total_seconds()
        logger.error(f"API 呼び出し失敗 | "
                    f"時間: {elapsed_time:.2f}秒 | "
                    f"エラー: {str(e)}")
        raise

📌 実践的なユースケースと応用例

ChatGPT API を Python から利用する具体的な活用シーンを紹介します。

テキスト要約の自動化

長文のレポートやドキュメントを自動要約する例です。

def summarize_text(long_text, max_summary_length=200):
    messages = [
        {"role": "system", "content": "あなたは要約の専門家です。"},
        {"role": "user", "content": f"以下のテキストを{max_summary_length}文字程度で要約してください:\n\n{long_text}"}
    ]
    
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature=0.3,  # 要約は創造性より正確性を重視
        max_tokens=300
    )
    
    return response.choices[0].message.content

# 使用例
long_document = """
(長文テキスト)
"""
summary = summarize_text(long_document)
print(summary)

データの構造化と抽出

非構造化テキストから情報を抽出し、JSON 形式で取得する例です。

import json

def extract_info(text):
    messages = [
        {"role": "system", "content": "あなたは情報抽出の専門家です。"},
        {"role": "user", "content": f"""
以下のテキストから人名、日付、場所を抽出し、JSON形式で返してください。

テキスト: {text}

形式:
{{
  "person": "人名",
  "date": "日付",
  "location": "場所"
}}
"""}
    ]
    
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature=0
    )
    
    # JSON としてパース
    result = json.loads(response.choices[0].message.content)
    return result

# 使用例
text = "2024年1月15日、東京で山田太郎氏が記者会見を行った。"
info = extract_info(text)
print(info)

実際に試したところ、複雑な契約書からの情報抽出など、従来は人手に頼っていた作業を自動化できました。

バッチ処理と並列化

複数のテキストを効率的に処理する例です。

明光キャリアパートナーズ エンジニア転職

20〜30代エンジニアの転職なら|明光キャリアパートナーズ

PR

from concurrent.futures import ThreadPoolExecutor, as_completed

def process_multiple_texts(text_list, process_func):
    results = []
    
    with ThreadPoolExecutor(max_workers=5) as executor:
        future_to_text = {
            executor.submit(process_func, text): text 
            for text in text_list
        }
        
        for future in as_completed(future_to_text):
            try:
                result = future.result()
                results.append(result)
            except Exception as e:
                print(f"処理エラー: {e}")
    
    return results

# 使用例
texts = ["テキスト1", "テキスト2", "テキスト3"]
summaries = process_multiple_texts(texts, summarize_text)

ただし、並列処理ではレート制限に注意が必要です。OpenAI の利用プランによって上限が異なるため、適切な max_workers の設定が重要です。

📌 運用時のベストプラクティス

本番環境で ChatGPT API を運用する際の推奨事項をまとめます。

セキュリティ対策

  1. API キーの管理: 環境変数や AWS Secrets Manager など安全な方法で管理
  2. 入力のサニタイゼーション: ユーザー入力をそのまま API に送る前に検証
  3. 出力のフィルタリング: 不適切な内容が出力されないようモニタリング

パフォーマンス最適化

  1. キャッシュの活用: 同じ質問への回答は DB にキャッシュして API 呼び出しを削減
  2. ストリーミングの利用: 長い応答には streaming=True でリアルタイム表示
  3. モデルの使い分け: 簡単なタスクは gpt-3.5-turbo、複雑なものは gpt-4
# ストリーミング実装例
response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=[{"role": "user", "content": "長い物語を書いてください"}],
    stream=True
)

for chunk in response:
    if chunk.choices[0].delta.get("content"):
        print(chunk.choices[0].delta.content, end="")

モニタリングとアラート

  • API 使用量の日次レポート作成
  • コストが閾値を超えたらアラート通知
  • エラー率の監視と異常検知

私の環境では、Slack に日次でコストレポートを自動投稿する仕組みを入れており、予算管理が格段に楽になりました。

✅ まとめ

ChatGPT API を Python から利用する方法について、基本的な呼び出しからコスト管理、エラー処理、実践的な応用例まで解説しました。

TL;DR

  • OpenAI の API キーを取得し、openai ライブラリで簡単に呼び出せる
  • トークン数ベースの課金なので、max_tokens とモデル選択でコスト管理が重要
  • リトライ処理とエラーハンドリングを実装して本番運用に耐える実装を
  • 会話履歴の保持、要約、データ抽出など幅広いユースケースに対応可能

Next Actions

  • まずは無料クレジット範囲で API キーを取得し、基本的な呼び出しコードを動かしてみる
  • 自分の業務で自動化したいタスクを 1 つ選び、プロトタイプを作成する
  • tiktoken でトークン計算を実装し、想定コストをシミュレーションする

automationjp.com では、ChatGPT API を使った業務自動化の具体的な事例や、他の AI ツールとの連携方法なども紹介しています。ぜひ他の記事も参考に、AI 自動化の世界を広げていってください。

📚 Amazon - Audible 無料体験Amazon で見る >

📖 関連記事

Read more

Claude Haiku/Sonnet/Opus 全モデル完全比較2026|単価・精度・速度から「最適モデル選定」する方法

Claude Haiku/Sonnet/Opus 全モデル完全比較2026|単価・精度・速度から「最適モデル選定」する方法

PR 本記事はアフィリエイト広告(SkillHacks(プログラミング講座)、フリーランスボード、ウェルスコーチ)を含みます。 2026年、AI選定の新たな常識 - Claude 3ファミリーの進化とビジネスインパクト 2024年3月にAnthropic社が発表した生成AIモデル「Claude 3」ファミリーは、その卓越した性能で世界に衝撃を与えました。そして2026年現在、Haiku、Sonnet、Opusという個性豊かな3つのモデルは、ビジネスのあらゆるシーンで活用される標準的なツールへと進化を遂げています。もはや「どのAIを使うか」ではなく、「どのClaudeモデルを、どのタスクに割り当てるか」が、企業の生産性とコスト効率を左右する重要な経営判断となっています。 登場から2年以上が経過し、各モデルは幾度かのアップデートを経て、性能と安定性を大きく向上させました。しかし、その進化の速さゆえに、「最新のスペックを把握しきれていない」「自社のユースケースに本当に最適なモデルを選べているか自信がない」「コストが想定以上にかかっている気がする」といった声が聞かれるのも事実です。

By tsuyoshi
格安スマホの機種選び完全ガイド|SIMフリー・中古・予算別の選び方でスマホ代を節約2026

格安スマホの機種選び完全ガイド|SIMフリー・中古・予算別の選び方でスマホ代を節約2026

格安スマホの機種選びと乗り換えでスマホ代を節約する方法を初心者向けに解説。SIMフリー・中古スマホ、予算別の考え方、スペック・バッテリー・カメラ・対応バンド/eSIMの見方、購入場所、機種変更とデータ移行、下取り、長く使うコツ、家族での選び方まで。料金やスペックは公式で要確認。

By tsuyoshi
姉妹サイト:タビ比較|温泉・グランピング・旅行準備の比較