短い答え
- 「画像を見られる」ことと「画像を作れる」ことは、別の機能です。 ほとんどすべての現代的なチャットモデルは画像を読み取ることができます(これが通常「マルチモーダル」の意味です)が、画像を生成することはできません。これは、画像専用モデルの別のクラスです。
- 1つのエンドポイントからテキストと画像を本当に両方返せるのは、Gemini の画像ファミリーだけです —
gemini-3-pro-image(Nano Banana Pro)、gemini-3.1-flash-image(Nano Banana 2)などは、同じレスポンス内でテキスト部分と画像部分を交互に返します。 - それ以外はすべてオーケストレーションです。チャットモデルと単体の画像エンドポイントを連携させるか、または
gpt-5.5と Responses のネイティブimage_generationツールを使って、モデルに描画するタイミングを判断させます。
まず、入力画像と出力画像を分けて考えます
ほとんどの混乱は「multimodal」という言葉から生じています。API の文脈では、これは 入力側がデフォルト です。 つまり、「モデルに画像を与えられる」という意味であり、「モデルが画像を生成してくれる」という意味ではありません。 この 2 つは、異なるモデルプール、異なるエンドポイント、異なる課金体系を使います:画像を取得するための4つのルート
A. 単体の画像エンドポイント — ほとんどすべてでこれを選んでください
A. 単体の画像エンドポイント — ほとんどすべてでこれを選んでください
data[0].url を返し、GPT-Image ファミリーは data[0].b64_json を返します。
このルートは会話テキストをまったく返しません — チャットエンドポイントではありません。全モデル一覧: 画像生成および動画生成モデル。
モデルごとのエンドポイント、タイムアウト、出力形式の違い:
画像 API の注意点とベストプラクティス。B. Gemini 画像ファミリー — テキストと画像をネイティブに同時返却できる唯一のもの
B. Gemini 画像ファミリー — テキストと画像をネイティブに同時返却できる唯一のもの
gemini-3-pro-image、gemini-3.1-flash-image など)は Gemini のネイティブエンドポイントを使い、
candidates[0].content.parts は異種混在配列です。画像パートだけを含むこともあれば、
テキストパートと画像パートが混在することもあります。これこそが、1回の呼び出しで両方を本当に返せるファミリーです。事前に知っておくべき落とし穴が1つあります。パート数も順序も保証されません。 テストでは次の3パターンが確認されています:parts[0] や parts[1] をハードコーディングすると断続的に失敗します。正しい方法は、フィールドの有無でフィルタし、最後の inlineData を使うことです(複雑な prompt ではモデルが複数の画像を返し、最後のものが最終版です):C. Responses のネイティブ image_generation ツール — 描画するかどうかはエージェントに判断させる
C. Responses のネイティブ image_generation ツール — 描画するかどうかはエージェントに判断させる
POST /v1/responses を gpt-5.5 で呼び出し、ネイティブの画像生成ツールを追加します:image_generation_call アイテムとしてレスポンスの output 配列内に返ってきます。
これは OpenAI 側でいう「描画するチャットモデル」に最も近いものです。詳細: ネイティブツールによる画像生成。D. 画像モデル上のチャットエンドポイント — 会話的に見えても、依然として画像モデル
D. 画像モデル上のチャットエンドポイント — 会話的に見えても、依然として画像モデル
gpt-image-2-all と gpt-image-2-vip は /v1/chat/completions から呼び出せて、画像は choices[0].message.content の中に Markdown リンクとして埋め込まれます。「会話も描画もできる1つのチャットエンドポイント」のように見えますが、描画できるチャットモデルではありません —
内部では、汎用的な会話能力を持たない画像モデルがチャットスキーマでラップされているだけです。
また、image_url を最後の user メッセージ内のベース画像としてのみ読み取ります。assistant 履歴内の画像は無視されます。このルートは現在は非推奨です — 新しい統合ではルート A を使用してください。「チャットと描画」プロダクトを構築する:推奨される構成
ほとんどのエージェントやプロダクトに本当に必要なのは、1つの魔法のような endpoint ではなく、明確なオーケストレーションのチェーンです:チャットモデルに意図を分類させる
gpt-5.5、claude-opus-5、gemini-3-pro など)を使ってユーザー入力を処理し、このターンが会話なのか image request なのかを判断します。必要であれば、構造化されたフラグを返すようにしてください。チャットモデルに画像 prompt を書かせる
画像エンドポイントを呼び出す
/v1/images/generationsを使います。返ってきたurlまたはb64_jsonを取り出し、自前の object storage に保存します。画像を会話に戻す
モデルが画像を受け付けるかどうかを確認する方法
1. モデル詳細ページを確認する
/models/<model-name> を開いて、上部の仕様表にある Input modalities 行を見てください — ここに
「image」とあれば、そのモデルは vision に対応しています。これが最も手早い確認方法です。2. 迷ったら試す
3. エラー文字列を見分ける
Model do not support image input
(文法は上流側のもので、 টাইポではありません)。この行が出たら、そのモデルは画像を受け付けません — 別のモデルに切り替えてください。よくある5つの誤解
1. マルチモーダルモデルは画像を生成できる
1. マルチモーダルモデルは画像を生成できる
gpt-5.5 は送信したデザインモックアップを読み取れますが、単独で画像を生成することはできません。1 枚取得するには、ツール呼び出し(ルート C)か、画像エンドポイントへの別々の呼び出し(ルート A)が必要です。2. 画像モデルはチャットモデルとして使える
2. 画像モデルはチャットモデルとして使える
gpt-image-2 をサポート用チャットボットの背後に置かないでください。chat エンドポイントを受け付ける -all / -vip 版(ルート D)でも、内部はあくまで画像モデルです。3. responseModalities に TEXT を含めればテキスト部分が必ず返る
3. responseModalities に TEXT を含めればテキスト部分が必ず返る
responseModalities: ["TEXT", "IMAGE"] と宣言しても、レスポンスにテキスト部分が含まれることは 保証されません。モデルは画像だけを返すこともあります。とはいえ逆方向は有用です。["IMAGE"] を明示的に宣言すると、余分なテキスト部分を減らせます。4. parts[0] と parts[1] を切り替えれば壊れた画像抽出が直る
4. parts[0] と parts[1] を切り替えれば壊れた画像抽出が直る
[0] か [1] のどちらかに入るため、どちらを選んでも一部のリクエストでは取りこぼします。インデックスを変えても、失敗するリクエストが入れ替わるだけです。フィールドの有無でフィルタリングする方法だけが安定しています。5. 参照画像を /v1/images/generations に渡すと編集になる
5. 参照画像を /v1/images/generations に渡すと編集になる
image / image_url / images を生成エンドポイントに渡すと、200 とともに通常の画像が返りますが、参照画像は何も通知されないまま破棄され、課金は通常どおりです。返ってくるのは、単純な text-to-image の結果です。画像編集は /v1/images/edits を経由しなければなりません(しかも Grok Imagine ではそこでさらに multipart/form-data が必要です。JSON を送ると 400 が返ります)。