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?

画像生成APIの「品質ティア」は等間隔ではない — 移行時に静かに一段下がる話

0
Posted at

画像生成APIの「品質ティア」は等間隔ではない — 移行時に静かに一段下がる話

画像生成APIを本番に載せていると、quality パラメータは「とりあえず high」で
固定されがちです。読み物としては地味ですが、この一行がモデルを乗り換えた瞬間に
意味を変える
ことがあります。しかも、エラーにも警告にもなりません。

この記事は特定のモデルの宣伝ではなく、ティア名という文字列を跨いで運ぶと何が起きるか
という一般論です。最後に実例として GPT Image 2.5 の数字を置きます。

1. ティア名は「相対的なラベル」であって「絶対的な品質」ではない

多くの画像生成APIは low / medium / high のような列挙型で品質を指定します。
ここで見落としやすいのは、この列挙型はモデルごとに再定義されるという点です。

high が指しているのは「このモデルの中で上から数えて何番目か」であって、
「何ピクセル相当の計算量を使うか」ではありません。だからモデルが世代交代して
ティアが5段階に増えると、同じ high という文字列が前の世代の medium
計算予算
に対応する、ということが普通に起きます。

# 世代をまたいでこの一行を持ち越すと、名前は同じでも中身が変わりうる
resp = client.images.generate(model=MODEL, prompt=p, quality="high")

型は通ります。バリデーションも通ります。請求額だけが下がり、出力品質も下がる。
気づくきっかけが「なんとなく絵が甘くなった」しかないのが、この問題の厄介なところです。

2. 段差は等間隔ではない — ここが投資判断の本体

もうひとつの誤解が「ティアを1つ上げれば、品質も価格も1段ぶん上がる」という
線形イメージです。実際には段差の幅はバラバラで、費用対効果が最も高い一段と、
ほとんど無意味な一段が混在します

一般化すると、だいたいこういう形になります。

区間 ありがちな実態
最下位 → 中位 解像感が明確に変わる。ここをケチると用途が限られる
中位 → 上位 段差が最大。価格も跳ねるが、見た目の改善も一番大きい
上位 → 最上位付近 価格差は小さいのに、差が出る題材が限られる
最上位 特定の題材(細かい文字、緻密なテクスチャ)でのみ効く

つまり「予算が許すから最上位」は、たいてい払い過ぎです。
面白いことに、OpenAI自身のプロンプトガイドにも
「高い設定にすれば必ず良い結果になるとは限らない」という趣旨の注意書きがあります。
ベンダー側が「常に最上位を使え」と言っていないのに、実装側が固定で最上位を
選んでいる、という構図はわりとよく見ます。

3. 実務としてどう決めるか

私が勧める順番はシンプルです。

(a) 用途を2つに割る。 画面表示(サムネイル、SNS、ブログ挿絵)と、
印刷・拡大前提(ポスター、商品画像の拡大表示)。前者は中位で十分なことが多く、
後者だけ上位に倒す。全部を一律で上げる必要はありません。

(b) 自分のプロンプト集で実測する。 ベンチマークの平均値ではなく、
自分が実際に投げている10本で比較してください。ティアの効きは題材依存です。
人物のクローズアップと、細い文字が入った図版では、効く段が違います。

(c) 1枚あたりの単価に直してから比較する。 トークン課金のAPIは
「1枚いくら」を公式には出しません(出せません、というほうが正確です)。
解像度・ティア・出力枚数でトークン数が変わるので、自分で割り算して表を作る
必要があります。これをやらないまま「上位ティアは高い」と体感で語ると、
だいたい間違えます。

# 最低限これだけ記録しておけば、あとから単価表が作れる
log = {
    "model": resp.model,          # 実際に走ったモデルID(指定値ではなく応答値)
    "quality": quality,
    "size": size,
    "input_tokens":  resp.usage.input_tokens,
    "output_tokens": resp.usage.output_tokens,
    "elapsed_ms": elapsed,
}

ポイントは resp.model応答から取ること。
リクエストに書いた文字列ではなく、実際に応答したモデルIDを記録します。
エイリアスやルーティングが挟まると、この2つは一致しないことがあります。

4. 実例:GPT Image 2.5 の場合

2026年9月に出た GPT Image 2.5 は、前世代の3つの価格帯を維持したまま、
そのあいだに2段挿し込んで5段にしました。結果として:

  • 段差が最も急なのは mediumhigh
  • 逆に highxhigh は、5段の中で最も安い一段
  • そして前世代から quality: "high" をそのまま持ち越すと、
    新しい high は旧 medium 相当の予算に落ちる。high は今の max

つまり冒頭の「静かに一段下がる」が、実際に起きる構成になっています。
移行時にやるべきことは一つで、ティア名ではなく予算で対応表を作り直すことです。

この5段の内訳と、どの段が払う価値のある段なのかは
xhigh と max の比較ページ
に整理してあります。1枚あたりの実測コストは
ティアごとの実測コストを並べた表
のほうにあります。公式ドキュメントがトークン単位でしか書けない部分を、
こちらで割り算して埋めた、という位置づけの表です。

なお、これらのページを置いている
GPT Image 2.5 Image Generator
OpenAIとは無関係の第三者インターフェースです(OpenAI公式ではありません)。
出力ごとに実際に走ったモデルID・ティア・サイズ・所要時間を表示する、
という点だけがこのサイトの存在理由で、本記事の趣旨もそこから来ています。

まとめ

  • ティア名はモデル内の相対ラベル。世代を跨ぐと同じ文字列の意味が変わる
  • 段差は等間隔ではない。一番高い段が一番お得とは限らない
  • 判断は自分のプロンプト10本の実測で。単価表は自分で作るしかない
  • 記録するのは応答に入っていたモデルID。リクエストの指定値ではない

移行のときに quality を機械的にコピーしていないか、一度だけ確認する価値はあります。
落ちても誰も教えてくれない種類の変更なので。

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?