💨
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