ビジョン対応チャット モデルは、OpenAI によって開発された大規模なマルチモーダル モデル (LMM) であり、画像を分析し、それらに関する質問に対してテキストでの応答を提供できます。 これには、自然言語処理と視覚的理解の両方が組み込まれています。 現在のビジョン対応モデルは、 o シリーズ推論モデル、GPT-5 シリーズ、GPT-4.1 シリーズ、GPT-4.5、GPT-4o シリーズです。
ビジョン対応モデルは、ユーザーがアップロードした画像に写っているものについての一般的な質問に回答できます。
ヒント
ビジョン対応モデルを使うには、デプロイされているサポート対象のモデルで Chat Completion API を呼び出します。 Chat Completion API に慣れていない場合は、ビジョン対応チャットの攻略ガイドを参照してください。
Chat Completion API を呼び出す
次に示すコマンドは、ビジョン対応チャット モデルをコードで使用する最も基本的な方法です。 これらのモデルをプログラムで初めて使用する場合は、画像を含むチャットのクイックスタートから始めることをお勧めします。
POST 要求を https://{RESOURCE_NAME}.openai.azure.com/openai/v1/chat/completions に送信します。ここで
- RESOURCE_NAME は Azure OpenAI リソースの名前です
必須のヘッダー:
-
Content-Type: application/json -
api-key: {API_KEY}
本文: 要求本文のサンプルを次に示します。 GPT-4o のチャット補完 API の形式は同じですが、メッセージの内容はテキストと画像を含む配列にすることができます(画像には、有効でパブリックにアクセス可能な HTTP または HTTPS URL、または base-64 でエンコードされた画像が使用できます)。
Von Bedeutung
必ず "max_tokens"を設定するか、 max_completion_tokens 値を設定すると、戻り値の出力が途切れます。
Von Bedeutung
画像をアップロードするときは、チャット要求ごとに 10 個の画像という制限があります。
{
"model": "MODEL-DEPLOYMENT-NAME",
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this picture:"
},
{
"type": "image_url",
"image_url": {
"url": "<image URL>"
}
}
]
}
],
"max_tokens": 100,
"stream": false
}
ヒント
ローカル画像を使用する
ローカル画像を使用する場合は、次の Python コードを使用して base64 に変換し、API に渡すことができます。 代替のファイル変換ツールはオンラインで入手できます。
import base64
from mimetypes import guess_type
# Function to encode a local image into data URL
def local_image_to_data_url(image_path):
# Guess the MIME type of the image based on the file extension
mime_type, _ = guess_type(image_path)
if mime_type is None:
mime_type = 'application/octet-stream' # Default MIME type if none is found
# Read and encode the image file
with open(image_path, "rb") as image_file:
base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')
# Construct the data URL
return f"data:{mime_type};base64,{base64_encoded_data}"
# Example usage
image_path = '<path_to_image>'
data_url = local_image_to_data_url(image_path)
print("Data URL:", data_url)
base64 画像データの準備ができたら、次のように要求本文で API に渡すことができます。
...
"type": "image_url",
"image_url": {
"url": "data:image/jpeg;base64,<your_image_data>"
}
...
詳細パラメーターの設定
必要に応じて、"detail" フィールドに"image_url"パラメーターを定義できます。 モデルが画像を解釈して処理する方法を調整するには、 low、 high、または autoの 3 つの値のいずれかを選択します。
-
autosetting: 既定の設定。 モデルは、画像入力のサイズに基づいて、低または高を決定します。 -
low設定: モデルは "高解像度" モードをアクティブにせず、代わりに低解像度の 512x512 バージョンを処理します。その結果、微細さが重要ではないシナリオでは応答が速くなり、トークンの消費量が少なくなります。 -
high設定: モデルは "高解像度" モードをアクティブにします。 この場合、モデルは最初に低解像度画像を表示し、次に入力画像から詳細な 512x512 セグメントを生成します。 各セグメントではトークンの予算が 2 倍使用されるため、画像をより詳細に解釈できます。
この値は、次の例に示す形式を使用して設定します。
{
"type": "image_url",
"image_url": {
"url": "<image URL>",
"detail": "high"
}
}
使われるトークンと価格に画像パラメーターが与える影響について詳しくは、Azure OpenAI の概要に関するページの画像トークンに関するセクションをご覧ください
アウトプット
API の応答は次のようになります。
{
"id": "chatcmpl-8VAVx58veW9RCm5K1ttmxU6Cm4XDX",
"object": "chat.completion",
"created": 1702439277,
"model": "gpt-4o",
"prompt_filter_results": [
{
"prompt_index": 0,
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"choices": [
{
"finish_reason":"stop",
"index": 0,
"message": {
"role": "assistant",
"content": "The picture shows an individual dressed in formal attire, which includes a black tuxedo with a black bow tie. There is an American flag on the left lapel of the individual's jacket. The background is predominantly blue with white text that reads \"THE KENNEDY PROFILE IN COURAGE AWARD\" and there are also visible elements of the flag of the United States placed behind the individual."
},
"content_filter_results": {
"hate": {
"filtered": false,
"severity": "safe"
},
"self_harm": {
"filtered": false,
"severity": "safe"
},
"sexual": {
"filtered": false,
"severity": "safe"
},
"violence": {
"filtered": false,
"severity": "safe"
}
}
}
],
"usage": {
"prompt_tokens": 1156,
"completion_tokens": 80,
"total_tokens": 1236
}
}
すべての応答には "finish_reason" フィールドが含まれます。 値は次のいずれかです。
-
stop: API は完全なモデル出力を返しました。 -
length:max_tokens入力パラメーターまたはモデルのトークン制限により、モデルの出力は不完全です。 -
content_filter: コンテンツ フィルターからのフラグによりコンテンツが省略されました。
アウトプット
ユーザーがモデルから受け取るチャット応答には、オブジェクト ラベルと境界ボックスや、OCR の結果など、画像に関するより詳細な情報が含まれるようになるはずです。 API の応答は次のようになります。
{
"id": "chatcmpl-8UyuhLfzwTj34zpevT3tWlVIgCpPg",
"object": "chat.completion",
"created": 1702394683,
"model": "gpt-4o",
"choices":
[
{
"finish_reason": {
"type": "stop",
"stop": "<|fim_suffix|>"
},
"index": 0,
"message":
{
"role": "assistant",
"content": "The image shows a close-up of an individual with dark hair and what appears to be a short haircut. The person has visible ears and a bit of their neckline. The background is a neutral light color, providing a contrast to the dark hair."
}
}
],
"usage":
{
"prompt_tokens": 816,
"completion_tokens": 49,
"total_tokens": 865
}
}
すべての応答には "finish_reason" フィールドが含まれます。 値は次のいずれかです。
-
stop: API は完全なモデル出力を返しました。 -
length:max_tokens入力パラメーターまたはモデルのトークン制限により、モデルの出力は不完全です。 -
content_filter: コンテンツ フィルターからのフラグによりコンテンツが省略されました。