0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GPT-5 移行時に知っておくべきパラメータ変更点 完全ガイド

Last updated at Posted at 2025-11-15

はじめに

GPT-4系のAPIを使っているアプリケーションをGPT-5に移行しようとして、こんな経験はありませんか?

  • 「急に status: "incomplete" が返ってくるようになった」
  • temperature=0.3 を設定したらエラーになった」
  • 「以前と同じパラメータなのに動かない」

実は、GPT-5への移行は単なる「モデル名の変更」では済みません。従来のGPT-4系モデルで利用できていた多くのパラメータが、GPT-5(特にreasoningモデル)では非推奨・無効化されているのです。

本記事では、GPT-5へ移行するために必要なパラメータ変更点を網羅し、具体的なコード例と共に解説します。


目次

  1. GPT-5移行時の重要チェックポイント
  2. パラメータ比較表:旧モデル vs GPT-5
  3. 各パラメータの詳細解説とコード例
  4. incomplete レスポンスへの対処法
  5. 実践:安全な移行手順
  6. 移行チェックリスト

1. GPT-5移行時の重要チェックポイント

まず、GPT-5への移行で最も注意すべきパラメータをリストアップします。

❌ GPT-5で使えなくなった(または制限された)パラメータ

パラメータ名 状況 影響度
temperature 1のみサポート(0〜1の任意値は不可) ⚠️ 非常に高い
top_p 非推奨または無効 ⚠️ 高い
presence_penalty 非対応 ⚠️ 高い
frequency_penalty 非対応 ⚠️ 高い
logprobs / top_logprobs 非対応 △ 中程度
logit_bias 非対応の可能性 △ 低〜中程度
max_tokens 非推奨(代わりに max_output_tokens を使用) ⚠️ 非常に高い

✅ GPT-5で新たに追加されたパラメータ

パラメータ名 用途 重要度
max_output_tokens 出力トークン数の上限設定 ⚠️ 必須
reasoning_effort 推論の深度を制御(minimal/low/medium/high) ⭐ 推奨
verbosity 説明の詳細度を制御(low/medium/high) ⭐ 推奨

なぜこれらの変更が行われたのか?

GPT-5、特にreasoningモデルは、従来のモデルとは根本的に異なる「推論プロセス」を持っています。そのため、従来の生成制御パラメータ(temperatureやpenalty系)が意味をなさなくなったのです。


2. パラメータ比較表:旧モデル vs GPT-5

実務で使いやすいように、詳細な比較表を用意しました。

パラメータ名 旧モデル(GPT-4.1系) GPT-5の挙動 具体的な対応
temperature 0〜1の任意値(例: 0.3, 0.7)が指定可能 1のみ。それ以外はエラー パラメータを削除、または 1 に固定
top_p nucleus samplingで生成制御 非対応または効果なし パラメータを削除
presence_penalty 新規語彙を増やす補正 非対応(エラーの可能性) パラメータを削除
frequency_penalty 繰り返し防止 非対応(エラーの可能性) パラメータを削除
logprobs / top_logprobs トークン確率の取得 非対応 デバッグ用途は別手段を検討
logit_bias 特定トークンの出現確率調整 非対応の可能性 パラメータを削除
max_tokens 出力量の上限 非推奨。incomplete応答の原因に max_output_tokens に置き換え
max_output_tokens (新パラメータ) GPT-5で正式サポート 必須パラメータとして設定
reasoning_effort (存在しない) 推論の深度を制御 minimal/low/medium/highから選択
verbosity (存在しない) 説明の詳細度を制御 low/medium/highから選択

3. 各パラメータの詳細解説とコード例

3-1. temperature(最重要⚠️)

GPT-4系での使い方(旧)

# GPT-4系では、temperatureで生成のランダム性を調整できた
response = openai.ChatCompletion.create(
    model="gpt-4-turbo",
    messages=[{"role": "user", "content": "Pythonで素数判定"}],
    temperature=0.3  # 低い値で安定した出力
)

GPT-5での正しい使い方(新)

# GPT-5では temperature=1 のみサポート
response = openai.ChatCompletion.create(
    model="gpt-5",  # 実在するモデル名: gpt-5, gpt-5-mini, gpt-5-nano
    messages=[{"role": "user", "content": "Pythonで素数判定"}],
    # temperature パラメータは指定しない(デフォルト=1)
    # または明示的に temperature=1
)

❌ やってはいけないこと

# これはエラーになる!
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[...],
    temperature=0.3  # ❌ GPT-5では1以外はエラー
)

移行のポイント

  • RAGシステムやエージェントで temperature=0.1〜0.3 を使っていた場合は、全て削除する
  • 出力の安定性が必要な場合は、プロンプトで制御する(例:「簡潔に答えてください」)
  • または reasoning_effort パラメータで推論の質を調整する

3-2. max_tokens → max_output_tokens(必須変更⚠️)

問題:max_tokens を使うと何が起きるか

GPT-5で max_tokens をそのまま使うと、以下のような問題が発生します:

# ❌ 旧パラメータを使うと...
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[...],
    max_tokens=1000  # ❌ 非推奨
)

# 結果: status="incomplete" で途中終了する可能性が高い
print(response.choices[0].finish_reason)  # "incomplete"

✅ 正しい方法

# ✅ GPT-5では max_output_tokens を使う
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[...],
    max_output_tokens=1000  # ✅ 正式対応パラメータ
)

コード移行の自動化

大量のコードベースで置換が必要な場合:

# sedコマンドで一括置換(バックアップ推奨)
find . -name "*.py" -exec sed -i '' 's/max_tokens=/max_output_tokens=/g' {} +

3-3. penalty系パラメータ(削除推奨)

GPT-4系での使い方(旧)

# GPT-4系では、繰り返しや新規語彙を制御できた
response = openai.ChatCompletion.create(
    model="gpt-4-turbo",
    messages=[...],
    presence_penalty=0.6,   # 新しいトピックを促す
    frequency_penalty=0.5   # 繰り返しを抑制
)

GPT-5での対応(新)

# ✅ パラメータは削除し、プロンプトで制御
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[
        {"role": "system", "content": "多様な表現を使い、同じフレーズの繰り返しを避けてください"},
        {"role": "user", "content": "..."}
    ]
    # presence_penalty, frequency_penalty は指定しない
)

プロンプトでの代替例

旧パラメータ 目的 プロンプトでの代替例
presence_penalty=0.6 新しいトピックを促す 「多様なトピックについて述べてください」
frequency_penalty=0.5 繰り返し抑制 「同じ表現の繰り返しを避け、バリエーションを持たせてください」

3-4. GPT-5の新パラメータ:reasoning_effort

reasoning_effortとは?

GPT-5の「思考の深さ」を制御する新パラメータです。

特徴 推奨用途 コスト 速度
minimal 最小限の推論 簡単な質問応答、チャット 高速
low 軽い推論 一般的なタスク 普通
medium 標準的な推論 複雑な文章生成 中〜高 やや遅い
high 深い推論 コード解析、数学問題、論理的推論 遅い

実装例

# 簡単な質問応答:minimal
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "Pythonのバージョン確認コマンドは?"}],
    reasoning_effort="minimal"  # 高速・低コスト
)

# 複雑なコード設計レビュー:high
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "このアーキテクチャの問題点を指摘してください"}],
    reasoning_effort="high"  # 深い推論
)

使い分けのベストプラクティス

def get_reasoning_effort(task_type):
    """タスクタイプに応じた推論レベルを返す"""
    mapping = {
        "chat": "minimal",
        "translation": "low",
        "article_generation": "medium",
        "code_review": "high",
        "math_problem": "high",
        "security_audit": "high"
    }
    return mapping.get(task_type, "medium")

# 使用例
task = "code_review"
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[...],
    reasoning_effort=get_reasoning_effort(task)
)

3-5. GPT-5の新パラメータ:verbosity

verbosityとは?

出力の「詳細度」を制御するパラメータです。

特徴 推奨用途
low 簡潔な出力 CLI出力、通知メッセージ、要約
medium 標準的な説明 一般的な文章生成
high 詳細で丁寧な説明 チュートリアル、技術文書、レポート

実装例

# 簡潔な要約が欲しい場合
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "機械学習とは?"}],
    verbosity="low"  # 簡潔な回答
)

# 詳細なチュートリアルが欲しい場合
response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[{"role": "user", "content": "Dockerの使い方を教えて"}],
    verbosity="high"  # 詳細で丁寧な説明
)

実際の出力比較例

プロンプト:「Gitのブランチとは?」

# verbosity="low"
# 出力: 「Gitのブランチは、開発ラインを分岐させる機能です。」

# verbosity="medium"
# 出力: 「Gitのブランチは、独立した開発ラインを作成する機能です。
#        mainブランチから分岐して新機能を開発し、完成後にマージします。」

# verbosity="high"
# 出力: 「Gitのブランチは、バージョン管理において独立した開発ラインを作成するための機能です。
#        たとえば、mainブランチで安定版を管理しながら、feature/新機能という
#        ブランチで新しい機能を開発できます。開発が完了したら、プルリクエストを
#        作成してmainにマージします。これにより...(以下詳細な説明が続く)」

4. incomplete レスポンスへの対処法

問題:status: "incomplete" とは?

GPT-5では、出力が途中で止まった際に以下のようなレスポンスが返ってきます:

response = openai.ChatCompletion.create(
    model="gpt-5",
    messages=[...],
    max_output_tokens=100  # 少なめの設定
)

print(response.choices[0].message)
# {
#   "content": "プログラムの設計において重要なのは...",
#   "status": "incomplete"  # ← 途中で止まった!
# }

incomplete が発生しやすい状況

  1. max_output_tokens が少なすぎる
  2. reasoning_effort="high" で推論コストが高い
  3. バッチ処理で大量生成している
  4. 長文の続きを生成しようとしている

解決策1:再実行ロジックの実装

def generate_with_retry(messages, max_retries=3):
    """incomplete対応の生成関数"""
    full_content = ""
    current_messages = messages.copy()

    for attempt in range(max_retries):
        response = openai.ChatCompletion.create(
            model="gpt-5",
            messages=current_messages,
            max_output_tokens=2000
        )

        content = response.choices[0].message.content
        full_content += content

        # 完了したら返す
        if response.choices[0].message.get("status") != "incomplete":
            return full_content

        # incomplete の場合、続きを生成
        current_messages.append({"role": "assistant", "content": content})
        current_messages.append({"role": "user", "content": "続きをお願いします"})

    return full_content

# 使用例
result = generate_with_retry([
    {"role": "user", "content": "AIの歴史について3000字で"}
])

解決策2:max_output_tokensの適切な設定

# ❌ 小さすぎる設定
max_output_tokens=100  # 途中で止まりやすい

# ✅ 余裕を持った設定
max_output_tokens=4000  # 長文生成でも安心

# ✅ タスクに応じた動的設定
def calculate_max_tokens(task_type):
    """タスクに応じた適切なトークン数を返す"""
    mapping = {
        "summary": 500,
        "chat": 1000,
        "article": 3000,
        "report": 5000,
        "code_generation": 2000
    }
    return mapping.get(task_type, 2000)

解決策3:タスク分割

def generate_long_article(topic, sections):
    """長文記事を sections に分けて生成"""
    results = []

    for section in sections:
        response = openai.ChatCompletion.create(
            model="gpt-5",
            messages=[
                {"role": "user", "content": f"{topic}について、{section}のセクションを書いてください"}
            ],
            max_output_tokens=1500  # セクションごとに適切な長さ
        )
        results.append(response.choices[0].message.content)

    return "\n\n".join(results)

# 使用例
article = generate_long_article(
    "機械学習入門",
    ["概要", "基本的なアルゴリズム", "実装例", "まとめ"]
)

5. 実践:安全な移行手順

ステップ1:既存コードの洗い出し

まず、GPT-5で問題となるパラメータを使っている箇所を特定します。

# temperature の使用箇所を検索
grep -rn "temperature" . --include="*.py"

# max_tokens の使用箇所を検索
grep -rn "max_tokens" . --include="*.py"

# penalty系の使用箇所を検索
grep -rn "presence_penalty\|frequency_penalty" . --include="*.py"

ステップ2:移行対応表の作成

ファイル名 行番号 旧パラメータ 新パラメータ 対応状況
chat.py 45 temperature=0.3 削除
generate.py 78 max_tokens=1000 max_output_tokens=1000
agent.py 120 frequency_penalty=0.5 削除(プロンプト修正)

ステップ3:サンプルコードでの移行例

Before(GPT-4系)

def generate_response(user_message):
    response = openai.ChatCompletion.create(
        model="gpt-4-turbo",
        messages=[
            {"role": "system", "content": "あなたは親切なアシスタントです"},
            {"role": "user", "content": user_message}
        ],
        temperature=0.3,
        max_tokens=1000,
        presence_penalty=0.6,
        frequency_penalty=0.5,
        top_p=0.9
    )
    return response.choices[0].message.content

After(GPT-5)

def generate_response(user_message, task_type="chat"):
    # reasoning_effortを動的に設定
    effort = {
        "chat": "minimal",
        "analysis": "medium",
        "coding": "high"
    }.get(task_type, "medium")

    response = openai.ChatCompletion.create(
        model="gpt-5",
        messages=[
            {
                "role": "system",
                "content": "あなたは親切なアシスタントです。多様な表現を使い、繰り返しを避けてください"
            },
            {"role": "user", "content": user_message}
        ],
        # temperature, top_p, penalty系は削除
        max_output_tokens=1500,  # max_tokensから変更
        reasoning_effort=effort,  # 新パラメータ
        verbosity="medium"        # 新パラメータ
    )

    # incomplete 対応
    if response.choices[0].message.get("status") == "incomplete":
        # 再実行ロジック(省略)
        pass

    return response.choices[0].message.content

ステップ4:段階的なロールアウト

# 環境変数でモデルを切り替えられるようにする
import os

MODEL_NAME = os.getenv("OPENAI_MODEL", "gpt-4-turbo")

def get_completion_params(model_name, user_message):
    """モデルに応じたパラメータを返す"""

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

    if model_name.startswith("gpt-5"):
        # GPT-5用のパラメータ
        return {
            base_params,
            "model": model_name,
            "max_output_tokens": 2000,
            "reasoning_effort": "medium",
            "verbosity": "medium"
        }
    else:
        # GPT-4系のパラメータ
        return {
            base_params,
            "model": model_name,
            "temperature": 0.7,
            "max_tokens": 2000
        }

# 使用例
params = get_completion_params(MODEL_NAME, "Pythonで素数判定")
response = openai.ChatCompletion.create(params)

ステップ5:本番環境での監視

import logging
from datetime import datetime

def generate_with_monitoring(messages, kwargs):
    """監視ログ付きの生成関数"""
    start_time = datetime.now()

    try:
        response = openai.ChatCompletion.create(
            messages=messages,
            kwargs
        )

        # メトリクス記録
        duration = (datetime.now() - start_time).total_seconds()
        status = response.choices[0].message.get("status", "complete")

        logging.info({
            "duration": duration,
            "status": status,
            "model": kwargs.get("model"),
            "reasoning_effort": kwargs.get("reasoning_effort"),
            "tokens_used": response.usage.total_tokens
        })

        return response

    except Exception as e:
        logging.error(f"API Error: {e}")
        raise

6. 移行チェックリスト

実際の移行作業で使えるチェックリストです。

📋 移行前の確認

  • 既存コードで使用しているパラメータをリストアップした
  • temperature, top_p, penalty系, max_tokens の使用箇所を特定した
  • 移行対象のAPIエンドポイントを洗い出した
  • テスト環境でGPT-5 APIにアクセスできることを確認した

📋 コード修正

  • temperature パラメータを削除(または 1 に固定)した
  • max_tokensmax_output_tokens に置き換えた
  • presence_penalty, frequency_penalty を削除した
  • top_p を削除した
  • logprobs, logit_bias を削除した
  • reasoning_effort を適切に設定した
  • verbosity を適切に設定した

📋 エラーハンドリング

  • status: "incomplete" の検知ロジックを実装した
  • 再実行(retry)ロジックを実装した
  • タイムアウト処理を見直した
  • エラーログを適切に記録するようにした

📋 テスト

  • 単体テストを実行し、全てパスした
  • 統合テストを実行し、全てパスした
  • 実際のユースケースで動作確認した
  • 出力品質が許容範囲内であることを確認した
  • レスポンス時間が許容範囲内であることを確認した

📋 本番移行

  • カナリアリリース(一部ユーザーのみ)でテストした
  • モニタリングダッシュボードを設定した
  • コストとレイテンシの監視を開始した
  • ロールバック手順を確認した
  • 全ユーザーへロールアウトした

📋 移行後の最適化

  • reasoning_effort の最適値を調整した
  • verbosity の最適値を調整した
  • max_output_tokens の最適値を調整した
  • コストとパフォーマンスのバランスを確認した
  • ユーザーフィードバックを収集・反映した

まとめ:GPT-5移行の3つの重要ポイント

GPT-5への移行は「単なるモデル変更」ではなく、APIパラメータ仕様の大幅な刷新です。

✅ 移行で絶対に押さえるべき3つのポイント

  1. temperature は1のみ。旧来の0〜1の任意値は全て削除

    • RAGやエージェントで temperature=0.3 を使っていた場合は要注意
    • 出力の安定性はプロンプト設計で担保する
  2. max_tokens は非推奨。必ず max_output_tokens に移行

    • そのままだと status: "incomplete" が頻発する
    • 再実行ロジックの実装も検討する
  3. GPT-5の新パラメータ(reasoning_effort / verbosity)を活用

    • タスクに応じて推論の深さと出力の詳細度を調整
    • コスト・速度・品質のバランスを最適化できる

参考資料

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?