0
0

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-6 Astra・Sol・Luna入門、API移行で踏んだ落とし穴4つ

0
Posted at

はじめに

GPT-6 世代のモデルが 3 週間のうちに 3 つ出そろいました。9 月 3 日にフラッグシップの GPT-6 Astra、9 月 22 日に GPT-6 Sol と GPT-6 Luna です。名前は GPT-5.6 世代と同じ「Sol」「Luna」を引き継いでいるのに、階層の中での立ち位置は変わっています。コード中の gpt-5.6-sol を gpt-6-sol に書き換えれば済むのか、それとも最上位の Astra に乗り換えるべきなのか、判断に迷う方も多いと思います。

対象読者は、OpenAI API を GPT-6 系へ切り替えようとしている開発者です。

この記事で分かること

  • GPT-6 Astra / Sol / Luna の位置づけと、GPT-5.6 世代からの階層の変化
  • 3 モデルの API 料金と、GPT-5.6 世代からの値動き
  • 実際に API を叩いて確認した、移行時の落とし穴(Astra のアクセス制限、max_tokens の拒否、ツール呼び出しと reasoning effort・サンプリングパラメータの組み合わせ制約)

料金・性能・リリース経緯は公式発表を報じた二次情報に基づいて整理し、出典を明記します。API の挙動(モデル一覧・エラー内容・レスポンス形式・パラメータの組み合わせ)だけは、筆者が実際にリクエストを送って確認した結果です。

TL;DR

  • GPT-6 世代は Astra(最上位)→ Sol(中位)→ Luna(高速・大量処理) の 3 段です。GPT-5.6 世代で最上位だった Sol は中位に下がり、中位だった Terra の後継は用意されていません
  • API 料金は Astra が入力 $10 / 出力 $50(100 万トークンあたり)、Sol が $2 / $10、Luna が $0.10 / $0.50 と報じられています。Sol と Luna は前世代から約半額です
  • 実際に試したところ、筆者の API プロジェクトでは gpt-6-astra がモデル一覧に出てこず、直接呼ぶと model_not_found で拒否されました
  • gpt-6-sol は max_tokens を受け付けず、max_completion_tokens に書き換える必要がありました
  • gpt-6-sol を Chat Completions でツール呼び出し付きで呼ぶと既定では拒否され、reasoning_effort: "none" を付けるか Responses API に切り替える必要がありました

GPT-6 ラインアップの全体像

GPT-6 世代の 3 モデルは、発表時期も役割も分かれています。報道をもとに整理すると次のとおりです。

モデル 発表 役割(報道ベース)
GPT-6 Astra 2026-09-03(限定プレビュー)→ 09-04 から順次拡大 世代全体のフラッグシップ
GPT-6 Sol 2026-09-22 日常的だが難度の高い仕事向けの中位モデル
GPT-6 Luna 2026-09-22 要約・抽出・短い質疑など大量処理向けの軽量モデル

MindStudio の解説 によると、Astra はまず限られたテスターとパートナー組織に提供され、その後 ChatGPT Plus / Pro / Business / Enterprise と API、Amazon Bedrock、Microsoft Azure へ広げる計画でした。Sol と Luna について TechCrunch は、ChatGPT Work・Codex・API で大半の有料アカウントが使えるようになり、Luna は Free と Go のユーザーにも開放されたと報じています。

GPT-5.6 世代からの階層の変化

名前が同じでも中身は別物です。GPT-5.6 世代は Sol・Terra・Luna の 3 段で、Sol が最上位でした。GPT-6 世代では Astra がその上に立ち、Sol は中位へ、Luna は高速・大量処理向けへと配置し直されています。Aivy の比較記事 などの報道では、GPT-5.6 の中位だった Terra に相当する GPT-6 版は無いと整理されています。同記事によると GPT-5.6 の Sol・Terra・Luna は引き続き提供されているため、GPT-6 の登場で旧モデルが即座に使えなくなるわけではありません。

ここで押さえておきたいのは、gpt-6-sol は gpt-5.6-sol の改良版というより「Astra と同じ手法で訓練された新しい中位モデル」だという点です。TechCrunch によると、OpenAI は GPT-6 Sol について「前世代に比べてミスがおよそ半分で、Astra 級の信頼性をはるかに低いコストで実現する」と説明しています。MacRumors も、専門職タスク・事実性・コーディング・コンピュータ操作・アライメントの改善を安価なモデルへ持ち込んだと伝えています。

料金比較:Sol と Luna は約半額、Astra は前世代最上位の 2.5 倍

API 料金を GPT-5.6 世代と並べると、値動きの方向がモデルごとに逆なのが分かります(いずれも 100 万トークンあたりの米ドル)。

モデル 入力 出力 GPT-5.6 世代との比較
GPT-6 Astra $10 $50 GPT-5.6 Sol($4 / $20)の 2.5 倍
GPT-6 Sol $2 $10 GPT-5.6 Sol の半額
GPT-6 Luna $0.10 $0.50 GPT-5.6 Luna($0.20 / $1.20)から値下げ
(参考)GPT-5.6 Terra $2 $12 GPT-6 世代に後継なし

出典: Astra は eesel AI、Sol と Luna は MacRumors、GPT-5.6 世代は Codersera の整理によります。なお GPT-5.6 Sol の $4 / $20 はプロモーション価格で、Codersera は少なくとも 2026 年 11 月 21 日まで続くと説明しています。

Astra は利用形態によって単価が大きく動きます。eesel AI がまとめた内訳は次のとおりです。

Astra の利用形態 入力 出力
Standard $10 $50
Cached input(キャッシュ読み込み) $1.00 ー
Cache write(キャッシュ書き込み) $12.50 ー
Batch / Flex $5 $25
Fast mode $20 $100
長文コンテキスト(入力 272K 超・Standard) $20 $75

長文コンテキストの行は、入力が 272K トークンを超えた時点で リクエスト全体 がこの単価になると説明されています。大きなドキュメントを丸ごと渡す使い方では、想定の倍近い請求になりうる点に注意が必要です。

この表から読み取れる移行の目安は 2 つあります。GPT-5.6 Terra($2 / $12)を使っていたワークロードは、入力単価が同じで出力単価が安い GPT-6 Sol が素直な移行先になります。一方で GPT-5.6 Sol(プロモ価格 $4 / $20)から「最上位だから」という理由で Astra へ乗り換えると、単価は 2.5 倍に跳ね上がります。前世代の最上位をそのまま最上位へ置き換えるのではなく、用途ごとに Sol と Astra を選び直すのが安全です。

実際に API で確認したこと

ここからは筆者が OpenAI API へ実際にリクエストを送って確認した結果です。環境は、OPENAI_API_KEY を環境変数で渡したクラウド上のシェルから curl で Chat Completions API・Responses API を呼ぶ構成です。確認の流れは次のとおりでした。

確認 1:モデル一覧に gpt-6-astra が出てこない

最初に、自分の API キーで使えるモデルの一覧を取得しました。

curl -s https://api.openai.com/v1/models -H "Authorization: Bearer $OPENAI_API_KEY"

返ってきた一覧には gpt-6-sol と gpt-6-luna が含まれていましたが、gpt-6-astra は見当たりませんでした。

確認 2:gpt-6-astra を直接呼ぶと model_not_found

一覧に無いだけで呼べる可能性もあるため、gpt-6-astra を指定して直接リクエストを送りました。

curl -s https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-astra","messages":[{"role":"user","content":"hello"}],"max_tokens":10}'

返ってきたのは次のエラーです(プロジェクト ID は伏せています)。

{"error":{"message":"Project `proj_xxxxxxxxxxxxxxxxxxxxxxxx` does not have access to model `gpt-6-astra`","type":"invalid_request_error","param":null,"code":"model_not_found"}}

code は model_not_found ですが、メッセージを読むと「モデルが存在しない」のではなく「このプロジェクトにアクセス権が無い」という意味です。このリクエストには後述の max_tokens も入っていますが、パラメータの検証より前にアクセス権で弾かれています。

一般提供が始まったと報じられた後でも、少なくとも筆者のプロジェクトでは Astra は既定で使える状態になっていませんでした。どの設定や条件でアクセスが開くのかまでは確認できていません。Astra を前提に移行計画を立てる場合は、まず自分のプロジェクトで GET /v1/models の結果に gpt-6-astra が含まれるかを確かめるのが確実です。

なお、公式ドキュメント(Latest Model Guide・GPT-6 Astra モデルページ)によると、Astra は reasoning effort の none に対応しておらず、代わりに low を使う必要があるとされています。この制約自体は筆者の環境からは Astra にアクセスできず実機検証できませんでしたが、後述する gpt-6-sol の検証結果(reasoning effort が none 以外のときサンプリングパラメータを外す必要がある挙動)と符合する内容です。

確認 3:gpt-6-sol は max_tokens を受け付けない

次に、gpt-6-sol を従来どおりの max_tokens 付きで呼びました。

curl -s https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","messages":[{"role":"user","content":"1文で自己紹介して"}],"max_tokens":100}'

結果はパラメータエラーでした。

{"error":{"message":"Unsupported parameter: 'max_tokens' is not supported with this model. Use 'max_completion_tokens' instead.","type":"invalid_request_error","param":"max_tokens","code":"unsupported_parameter"}}

max_tokens は無視されるのではなく、リクエスト自体が失敗します。古いサンプルコードや社内ラッパーで max_tokens を固定で渡している場合、モデル名だけを gpt-6-sol に書き換えると全リクエストがエラーになります。

確認 4:max_completion_tokens に直すと正常に応答する

パラメータ名だけを max_completion_tokens に変えて再送しました。

curl -s https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","messages":[{"role":"user","content":"1文で自己紹介して"}],"max_completion_tokens":200}'

今度は正常に応答が返りました(主要部分を抜粋しています)。

{
  "model": "gpt-6-sol",
  "choices": [{"message": {"role": "assistant", "content": "私は、質問への回答や文章作成などをお手伝いするAIアシスタントです。"}, "finish_reason": "stop"}],
  "usage": {
    "prompt_tokens": 12, "completion_tokens": 26, "total_tokens": 38,
    "prompt_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0, "audio_tokens": 0},
    "completion_tokens_details": {"reasoning_tokens": 0, "audio_tokens": 0, "accepted_prediction_tokens": 0, "rejected_prediction_tokens": 0}
  }
}

usage.prompt_tokens_details には cached_tokens と並んで cache_write_tokens というフィールドが含まれていました。Astra の料金表でキャッシュ書き込み(Cache write)に別の単価が設定されていることと対応する項目と考えられます。コスト集計を prompt_tokens と completion_tokens の 2 項目だけで組んでいる場合、キャッシュ書き込みの課金が見えなくなる可能性があるため、集計側でこのフィールドも拾っておくと安心です。なお、このフィールドがどの世代から出力されているかまでは確認していません。

completion_tokens_details.reasoning_tokens は今回 0 でした。1 文の自己紹介という軽い質問だったためで、難しいタスクでどの程度増えるかは今回の範囲では測っていません。

確認 5:temperature を明示すると拒否される

前段の応答では temperature を指定していませんでした。既定値以外を明示するとどうなるか確認しました。

curl -s https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","messages":[{"role":"user","content":"1文で自己紹介して"}],"max_completion_tokens":100,"temperature":0.7}'
{"error":{"message":"Unsupported value: 'temperature' does not support 0.7 with this model. Only the default (1) value is supported.","type":"invalid_request_error","param":"temperature","code":"unsupported_value"}}

gpt-6-sol は既定の reasoning effort(後述の確認 8 で medium と分かりました)のとき、temperature に既定値(1)以外を渡すと拒否されます。GPT-5.1 以前の設定を引き継いで temperature: 0.7 のようなコードをそのまま gpt-6-sol に持ち込むと、モデル名を変えただけで壊れます。

確認 6:ツール呼び出しを Chat Completions で試すと reasoning_effort で拒否される

天気を調べる関数を1つ定義し、gpt-6-sol に Chat Completions でツール呼び出し付きのリクエストを送りました。

curl -s https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","messages":[{"role":"user","content":"東京の天気を調べて"}],"max_completion_tokens":300,"tools":[{"type":"function","function":{"name":"get_weather","description":"指定した都市の天気を取得する","parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}}]}'
{"error":{"message":"Function tools with reasoning_effort are not supported for gpt-6-sol in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'.","type":"invalid_request_error","param":"reasoning_effort","code":null}}

このエラーメッセージは珍しく対処法まで書いてくれています。「Responses API を使うか、reasoning_effort を none にせよ」という指示です。

確認 7:reasoning_effort: "none" を付けると Chat Completions でも成功する

エラーメッセージの指示どおり reasoning_effort: "none" を追加して再送しました。

curl -s https://api.openai.com/v1/chat/completions \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","messages":[{"role":"user","content":"東京の天気を調べて"}],"max_completion_tokens":300,"reasoning_effort":"none","tools":[{"type":"function","function":{"name":"get_weather","description":"指定した都市の天気を取得する","parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}}]}'
{
  "model": "gpt-6-sol",
  "choices": [{
    "message": {
      "role": "assistant",
      "content": null,
      "tool_calls": [{"id": "call_3jfeo0CJWHZeWEw4Wxfvw8Lp", "type": "function",
        "function": {"name": "get_weather", "arguments": "{\"city\":\"東京\"}"}}]
    },
    "finish_reason": "tool_calls"
  }],
  "usage": {"prompt_tokens": 137, "completion_tokens": 17, "total_tokens": 154}
}

tool_calls が正常に返りました。確認 6 とのリクエストの違いは reasoning_effort: "none" の1行だけです。既存の「Chat Completions + tools」コードを gpt-6-sol へ移行する最短の手直しは、この1パラメータの追加になります。

確認 8:Responses API では既定の reasoning effort のままツール呼び出しが成功する

同じツール定義を、今度は Responses API(/v1/responses)に投げてみました。reasoning_effort は指定していません。

curl -s https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-6-sol","input":"東京の天気を調べて","max_output_tokens":300,"tools":[{"type":"function","name":"get_weather","description":"指定した都市の天気を取得する","parameters":{"type":"object","properties":{"city":{"type":"string"}},"required":["city"]}}]}'
{
  "model": "gpt-6-sol",
  "output": [{"type": "function_call", "arguments": "{\"city\":\"東京\"}", "name": "get_weather", "status": "completed"}],
  "reasoning": {"context": "all_turns", "effort": "medium", "mode": "standard", "summary": null},
  "temperature": 1.0,
  "top_p": 0.98,
  "usage": {"input_tokens": 55, "output_tokens": 18, "output_tokens_details": {"reasoning_tokens": 0}}
}

reasoning_effort を何も指定していないのに、Responses API ではツール呼び出しがそのまま成功しました。レスポンスに含まれる reasoning.effort を見ると、gpt-6-sol の既定値は medium であることも分かりました(公式ドキュメントには既定値の記載が見当たらず、今回の実測で確認できた値です)。あわせて temperature: 1.0 / top_p: 0.98 が既定値としてレスポンスに明示されている点も確認できました。top_p の既定が 1.0 ちょうどではなく 0.98 になっている点は、今回リクエストを送るまで気づいていませんでした。

つまり gpt-6-sol の「Chat Completions ではツールが reasoning_effort と衝突する」という制約は、reasoning effort を明示的に none へ落とさない限り Responses API に切り替えたほうが確実、ということになります。既存コードがツールを多用しているなら、パラメータを1個足すその場しのぎより、Responses API への移行を検討したほうが長期的には安全です。

試して気づいたこと

実際に試したところ、つまずいたのは性能ではなく「呼べるかどうか」の手前でした。筆者が意外だったのは、確認 2 と確認 3 の 2 つのエラーがどちらも invalid_request_error という同じ種別で返ってくる点です。エラーの type だけでリトライ判定やアラートを分岐させていると、「アクセス権が無い(設定で解決する)」と「パラメータが古い(コードで解決する)」が同じ扱いになってしまいます。移行時のログ監視では、code の値(model_not_found と unsupported_parameter)まで見て切り分けるのが実務的です。

もう 1 つは、エラーメッセージが修正方法まで書いてくれている点です。max_tokens のエラーは Use 'max_completion_tokens' instead.、ツール呼び出しのエラーは use /v1/responses or set reasoning_effort to 'none' と、どちらも具体的な直し方を示しており、メッセージを読めば数行の修正で直ります。逆に Astra のアクセス拒否は、メッセージからは何を設定すれば開くのかが分かりません。移行作業の見積もりでは、コードで直る問題と、プロジェクトや組織の設定を待つ必要がある問題を分けて考えておくと、手戻りが減ります。

GPT-6 系へ切り替えるときのチェックリスト

最後に、既存コードを GPT-6 系へ切り替える前に確認しておきたい項目を並べます。

  1. 使いたいモデルがプロジェクトで有効か:GET /v1/models の結果に gpt-6-astra / gpt-6-sol / gpt-6-luna が含まれるかを確認します。筆者の環境では Astra が含まれていませんでした
  2. max_tokens を渡していないか:gpt-6-sol は max_tokens を拒否します。SDK のラッパーや共通設定ファイルに max_tokens が残っていないかを検索し、max_completion_tokens に置き換えます
  3. temperature / top_p を固定値で渡していないか:既定の reasoning effort(gpt-6-sol は既定 medium)のままでは、temperature に既定値(1)以外を渡すと拒否されます。値を外すか、reasoning_effort: "none" に切り替えるかを選びます
  4. ツール呼び出しを Chat Completions で使っていないか:gpt-6-sol で Chat Completions + tools を使うには reasoning_effort: "none" が必須です。恒常的にツールを使うなら Responses API への移行を検討します。Astra はツール呼び出しに Responses API が必須という制約が公式ドキュメントに明記されています(筆者はアクセス権が無く未検証)
  5. エラー分岐が code まで見ているか:アクセス権不足とパラメータ不備は、どちらも invalid_request_error で返ります
  6. コスト集計が新しい usage 項目を拾っているか:cache_write_tokens や reasoning_tokens を無視していないかを確認します
  7. 移行先を単価で選び直したか:GPT-5.6 Terra の利用分は GPT-6 Sol、GPT-5.6 Sol の利用分は GPT-6 Sol と Astra のどちらが用途に合うかを見直します。Astra は前世代最上位の 2.5 倍の単価で、入力 272K 超ではリクエスト全体が長文コンテキスト料金になると報じられています

Luna については今回、応答速度や品質・reasoning effortの既定値を実測していません。要約・抽出などの大量処理を Luna へ寄せる場合は、自分のデータで品質とレイテンシを測ってから切り替えることをおすすめします。

関連記事

参考リンク

0
0
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
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?