💨

gpt-4o-miniからgpt-5-nanoに変更

に公開

最近は、Claude Codeを使って開発していますが、
新しいAPIはLLMがわからないので悩みます。

OpenAIのAPIを、gpt-4o-miniからgpt-5-nanoに変更するとき、reasoningを設定したくて、
調べてもなかなか出てこず、少し時間がかかったのでメモです。

gpt-4o-mini


def test_openai_model(model_name, api_key):
    """指定されたモデルでOpenAI APIをテスト"""

    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }

    data = {
        "model": model_name,
        "messages": [
            {
                "role": "system",
                "content": "あなたはアシスタントです。簡潔にJSONで応答してください"
            },
            {
                "role": "user",
                "content": "本日は晴れです。雲一つありません"
            }
        ],
        "temperature": 1,
        "response_format": {"type": "json_object"},
        "max_completion_tokens": 500,
    }

    print(f"Testing model: {model_name}")
    print(f"Request data: {json.dumps(data, ensure_ascii=False, indent=2)}")

    try:
        response = requests.post(
            "https://api.openai.com/v1/chat/completions",
            headers=headers,
            json=data,
            timeout=30
        )

        print(f"Status Code: {response.status_code}")

        if response.status_code == 200:
            result = response.json()
            print("Success!")
            print(f"Response: {json.dumps(result, ensure_ascii=False, indent=2)}")
            return True
        else:
            print("Error!")
            print(f"Error Response: {response.text}")
            return False

    except Exception as e:
        print(f"Exception: {str(e)}")
        return False

gpt-5-nano

reasoningを使用するには、"https://api.openai.com/v1/responses" を使う必要がありました。
data内のjsonの記述等も変更。


def test_openai_model(model_name, api_key):
    """指定されたモデルでOpenAI APIをテスト"""

    headers = {
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json"
    }

    data = {
        "model": model_name,
        "input": [
            {
                "role": "system",
                "content": "あなたはアシスタントです。簡潔にJSONで応答してください"
            },
            {
                "role": "user",
                "content": "本日は晴れです。雲一つありません"
            }
        ],
        "reasoning": { "effort": "low" },
        "text": {"format": {"type": "json_object"}},
        "max_output_tokens": 500
    }

    print(f"Testing model: {model_name}")
    print(f"Request data: {json.dumps(data, ensure_ascii=False, indent=2)}")

    try:
        response = requests.post(
            "https://api.openai.com/v1/responses",
            headers=headers,
            json=data,
            timeout=30
        )

        print(f"Status Code: {response.status_code}")

        if response.status_code == 200:
            result = response.json()
            print("Success!")
            print(f"Response: {json.dumps(result, ensure_ascii=False, indent=2)}")
            return True
        else:
            print("Error!")
            print(f"Error Response: {response.text}")
            return False

    except Exception as e:
        print(f"Exception: {str(e)}")
        return False

精度が実際にどの程度変わるかは楽しみですので、これから試してみます。

Discussion