短い回答
gemini-3-pro-image(Nano Banana Pro)、gemini-3.1-flash-image(Nano Banana 2)などは、同じレスポンス内でテキストパートと画像パートを交互に返します。
3. それ以外はすべてオーケストレーションです:チャットモデルと、単独の画像エンドポイント(画像 API)が連携して動作します。OpenAI Responses のネイティブな image_generation ツールは、APIYI では推奨されません。固定の呼び出しごとの料金でしか課金できず、妥当な料金モデルとはいえないうえ、安定性も保証できないためです。まず、入力画像と出力画像を分けて考えます
ほとんどの混乱は「multimodal」という言葉から生じています。API の文脈では、これは 入力側がデフォルト です。 つまり、「モデルに画像を与えられる」という意味であり、「モデルが画像を生成してくれる」という意味ではありません。 この 2 つは、異なるモデルプール、異なるエンドポイント、異なる課金体系を使います:画像を取得する4つのルート
A. スタンドアロン画像エンドポイント — ほとんどの場合はこれを選択してください
A. スタンドアロン画像エンドポイント — ほとんどの場合はこれを選択してください
data[0].url を返し、GPT-Image ファミリーは data[0].b64_json を返します。
このルートは会話テキストを一切返しません — chat エンドポイントではありません。すべてのモデルの一覧:画像・動画生成モデル。
モデルごとのエンドポイント、タイムアウト、出力形式の違い:
画像 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 ツール — APIYI では非推奨
C. Responses ネイティブ image_generation ツール — APIYI では非推奨
POST /v1/responses を gpt-5.5 とともに呼び出し、ネイティブ画像ツールを追加します。output 配列内の image_generation_call アイテムに base64 として返されます。
形としては OpenAI 側の「描画する chat モデル」に最も近いものですが、APIYI では推奨していません。D. 画像モデルの Chat エンドポイント — 会話形式に見えても、実体は画像モデル
D. 画像モデルの Chat エンドポイント — 会話形式に見えても、実体は画像モデル
gpt-image-2-all と gpt-image-2-vip は /v1/chat/completions 経由で呼び出すことができ、画像は
choices[0].message.content 内の Markdown リンクとして埋め込まれます。「会話と描画の両方を行う1つの chat エンドポイント」のように見えますが、描画可能な chat モデルではありません —
内部では、一般的な会話能力を持たない画像モデルを chat スキーマでラップしています。
また、ベース画像として 最後の user メッセージ内の image_url だけを読み取り、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 は送信されたデザインモックアップを読み取れますが、単独で画像を出力することはできません。画像を取得するには、画像エンドポイントへの別の呼び出し(ルートA)が必要です。Responses のネイティブ画像ツール(ルートC)は APIYI では推奨されません。2. 画像モデルはチャットモデルとして使用できる
2. 画像モデルはチャットモデルとして使用できる
gpt-image-2 をサポートチャットボットの背後で使用しないでください。-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 で返されますが、参照画像は暗黙に破棄され、通常どおり課金されます。返されるのは通常のテキストから画像への生成結果です。画像編集は /v1/images/edits 経由で行う必要があります(さらに Grok Imagine では、そこで multipart/form-data も必要です。JSON を送信するとハード 400 が返されます)。