すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:視覚理解 (Qwen-VL)

最終更新日:Nov 13, 2025

Qwen-VL モデルは、提供された画像や動画に関する質問に答えることができます。画像キャプション、視覚的な質問応答、オブジェクト検出などのタスクのために、単一画像および複数画像の入力をサポートしています。

オンラインで試す: Vision モデル (シンガポール または 北京)

はじめに

前提条件

  • API キーを取得し、環境変数として設定します。

  • SDK を使用してモデルを呼び出す場合は、SDK をインストールします。DashScope Python SDK はバージョン 1.24.6 以降、DashScope Java SDK はバージョン 2.21.10 以降である必要があります。

以下の例では、モデルを呼び出してイメージの内容を説明する方法を示します。詳細については、「ローカルファイルのアップロード」および「入力ファイルの制限」をご参照ください。

単一画像の入力

OpenAI 互換

Python

from openai import OpenAI
import os

client = OpenAI(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="qwen3-vl-plus",  # この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    },
                },
                {"type": "text", "text": "画像には何が描かれていますか?"},
            ],
        },
    ],
)
print(completion.choices[0].message.content)

応答

これはビーチで撮影された写真です。写真には、海と空を背景に、砂の上に座っている人と犬が写っています。人と犬は交流しているようで、犬の前足が人の手に乗っています。フレームの右側から太陽光が差し込み、シーンに暖かい雰囲気を加えています。

Node.js

import OpenAI from "openai";

const openai = new OpenAI({
  // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
  // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

async function main() {
  const response = await openai.chat.completions.create({
    model: "qwen3-vl-plus",   // この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください 
    messages: [
      {
        role: "user",
        content: [{
            type: "image_url",
            image_url: {
              "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
            }
          },
          {
            type: "text",
            text: "画像には何が描かれていますか?"
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}
main()

応答

これはビーチで撮影された写真です。写真には、海と空を背景に、砂の上に座っている人と犬が写っています。人と犬は交流しているようで、犬の前足が人の手に乗っています。フレームの右側から太陽光が差し込み、シーンに暖かい雰囲気を加えています。

curl

# ======= 重要 =======
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3-vl-plus",
  "messages": [
    {"role": "user",
     "content": [
        {"type": "image_url", "image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
        {"type": "text", "text": "画像には何が描かれていますか?"}
    ]
  }]
}'

応答

{
  "choices": [
    {
      "message": {
        "content": "これはビーチで撮影された写真です。写真には、海と空を背景に、砂の上に座っている人と犬が写っています。人と犬は交流しているようで、犬の前足が人の手に乗っています。フレームの右側から太陽光が差し込み、シーンに暖かい雰囲気を加えています。",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 1270,
    "completion_tokens": 54,
    "total_tokens": 1324
  },
  "created": 1725948561,
  "system_fingerprint": null,
  "model": "qwen3-vl-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
{
    "role": "user",
    "content": [
    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
    {"text": "画像には何が描かれていますか?"}]
}]

response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',   # この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください
    messages=messages
)

print(response.output.choices[0].message.content[0]["text"])

応答

これはビーチで撮影された写真です。写真には女性と犬が写っています。女性は砂の上に座り、微笑みながら犬と交流しています。犬は首輪をしており、女性と握手しているように見えます。背景は海と空で、彼らに当たる太陽光が暖かい雰囲気を醸し出しています。

Java

import java.util.Arrays;
import java.util.Collections;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {
    
    // 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
    static {
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation(); 
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("text", "画像には何が描かれていますか?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")  //  この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

応答

これはビーチで撮影された写真です。写真には、チェック柄のシャツを着た人と首輪をつけた犬が写っています。人と犬は向かい合って座っており、交流しているように見えます。背景は海と空で、彼らに当たる太陽光が暖かい雰囲気を醸し出しています。

curl

# ======= 重要 =======
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
                    {"text": "画像には何が描かれていますか?"}
                ]
            }
        ]
    }
}'

応答

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "これはビーチで撮影された写真です。写真には、チェック柄のシャツを着た人と首輪をつけた犬が写っています。彼らは砂の上に座っており、背景には海と空が広がっています。フレームの右側から太陽光が差し込み、シーンに暖かい雰囲気を加えています。"
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "output_tokens": 55,
    "input_tokens": 1271,
    "image_tokens": 1247
  },
  "request_id": "ccf845a3-dc33-9cda-b581-20fe7dc23f70"
}

複数画像の入力

Qwen-VL モデルは、1 回のリクエストで複数の画像を渡すことをサポートしています。これは、プロダクト比較や複数ページのドキュメント処理などのタスクに役立ちます。user messagecontent 配列に複数の画像オブジェクトを含めます。

重要

画像の数は、モデルの最大入力トークンによって制限されます。すべての画像とテキストの合計トークン数は、モデルのトークン制限を超えてはなりません。

OpenAI 互換

Python

import os
from openai import OpenAI

client = OpenAI(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-vl-plus",  #  この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください
    messages=[
        {"role": "user","content": [
            {"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},},
            {"type": "image_url","image_url": {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},},
            {"type": "text", "text": "これらの画像には何が描かれていますか?"},
            ],
        }
    ],
)

print(completion.choices[0].message.content)

応答

画像 1 は、ビーチで女性とラブラドールレトリバーが交流しているシーンを示しています。女性はチェック柄のシャツを着て砂の上に座り、犬と握手しています。背景は海の波と空で、写真全体が暖かく心地よい雰囲気に満ちています。

画像 2 は、森の中を歩く虎のシーンを示しています。虎の毛皮はオレンジ色で黒い縞模様があります。虎は前に進んでおり、周りは密集した木々や植物に囲まれています。地面は落ち葉で覆われており、写真全体が野生の自然を感じさせます。

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
        // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  // この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://help.aliyun.com/en/model-studio/models をご参照ください
        messages: [
          {role: "user",content: [
            {type: "image_url",image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
            {type: "image_url",image_url: {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"}},
            {type: "text", text: "これらの画像には何が描かれていますか?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

応答

最初の画像では、人と犬がビーチで交流しています。人はチェック柄のシャツを着ており、犬は首輪をしています。彼らは握手をしているか、ハイタッチをしているようです。

2番目の画像では、虎が森の中を歩いています。虎の毛皮はオレンジ色で黒い縞模様があり、背景は緑の木々と植物です。

curl

# ======= 重要 =======
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
          }
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"
          }
        },
        {
          "type": "text",
          "text": "これらの画像には何が描かれていますか?"
        }
      ]
    }
  ]
}'

応答

{
  "choices": [
    {
      "message": {
        "content": "画像 1 は、ビーチで女性とラブラドールレトリバーが交流しているシーンを示しています。女性はチェック柄のシャツを着て砂の上に座り、犬と握手しています。背景は海の景色と夕焼けの空で、シーン全体がとても暖かく調和しているように見えます。\n\n画像 2 は、森の中を歩く虎のシーンを示しています。虎の毛皮はオレンジ色で黒い縞模様があります。虎は前に進んでおり、周りは密集した木々や植物に囲まれています。地面は落ち葉で覆われており、写真全体が自然の野生と活力に満ちています。",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 2497,
    "completion_tokens": 109,
    "total_tokens": 2606
  },
  "created": 1725948561,
  "system_fingerprint": null,
  "model": "qwen3-vl-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
            {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
            {"text": "これらの画像には何が描かれていますか?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus', #  この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください
    messages=messages
)

print(response.output.choices[0].message.content[0]["text"])

応答

これらの画像には、いくつかの動物と自然の風景が写っています。最初の画像では、人と犬がビーチで交流しています。2番目の画像は、森の中を歩く虎です。

Java

import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {
    static {
        // 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"),
                        Collections.singletonMap("text", "これらの画像には何が描かれていますか?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")  //  この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/model-studio/getting-started/models をご参照ください
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

応答

これらの画像には、いくつかの動物と自然の風景が写っています。

1. 最初の画像: 女性と犬がビーチで交流しています。女性はチェック柄のシャツを着て砂の上に座っており、犬は首輪をして女性と握手するために前足を伸ばしています。
2. 2番目の画像: 虎が森の中を歩いています。虎の毛皮はオレンジ色で黒い縞模様があり、背景は木々と葉です。

curl

# ======= 重要 =======
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
                    {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
                    {"text": "これらの画像には何が写っていますか?"}
                ]
            }
        ]
    }
}'

応答

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "これらの画像には、いくつかの動物と自然の風景が写っています。最初の画像では、人と犬がビーチで交流しています。2番目の画像は、森の中を歩く虎です。"
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "output_tokens": 81,
    "input_tokens": 1277,
    "image_tokens": 2497
  },
  "request_id": "ccf845a3-dc33-9cda-b581-20fe7dc23f70"
}

モデルの選択

  • 高精度のオブジェクト検出とローカライズ (3D ローカライズを含む)、エージェントツールの呼び出し、ドキュメントと Web ページの解析、複雑な問題解決、長時間の動画理解などのタスクには、Qwen3-VL の使用を推奨します。このシリーズのモデルの比較は次のとおりです:

    • qwen3-vl-plus: 最も強力なモデル。

    • qwen3-vl-flash: より高速で費用対効果の高いオプション。パフォーマンスとコストのバランスが取れており、応答速度が重要なシナリオに適しています。

  • 単純な画像キャプションや短い動画の要約抽出などの一般的なタスクには、Qwen2.5-VL を選択できます。このシリーズのモデルの比較は次のとおりです:

    • qwen-vl-max: Qwen2.5-VL シリーズで最もパフォーマンスの高いバージョン。

    • qwen-vl-plus: より高速で、パフォーマンスとコストのバランスが取れています。

モデル名、コンテキスト、価格、スナップショットバージョンの詳細については、「モデルリスト」をご参照ください。同時リクエスト制限に関する情報については、「スロットリング」をご参照ください。

モデル機能の比較

モデル

ディープシンキング

ツール呼び出し

コンテキストキャッシュ

構造化出力

認識言語

Qwen3-VL シリーズ

サポート済み

サポート済み

qwen3-vl-plusqwen3-vl-flash の安定版でサポート済み

非思考モードでサポート済み

33 言語: 中国語、日本語、韓国語、インドネシア語、ベトナム語、タイ語、英語、フランス語、ドイツ語、ロシア語、ポルトガル語、スペイン語、イタリア語、スウェーデン語、デンマーク語、チェコ語、ノルウェー語、オランダ語、フィンランド語、トルコ語、ポーランド語、スワヒリ語、ルーマニア語、セルビア語、ギリシャ語、カザフ語、ウズベク語、セブアノ語、アラビア語、ウルドゥー語、ペルシャ語、ヒンディー語/デーヴァナーガリー、ヘブライ語。

Qwen2.5-VL シリーズ

サポートされていません

サポートされていません

qwen-vl-maxqwen-vl-plus の安定版でサポート済み

qwen-vl-maxqwen-vl-plus の安定版と最新版でサポート済み

11 言語: 中国語、英語、日本語、韓国語、アラビア語、ベトナム語、フランス語、ドイツ語、イタリア語、スペイン語、ロシア語。

機能概要

画像 Q&A

人物、場所、動物、植物の識別など、画像の内容を説明、分類、またはタグ付けします。

p1021359

日差しが強すぎる場合、この画像のどのアイテムを使えばよいですか?

太陽が明るすぎる場合は、画像のピンクのサングラスを使用する必要があります。サングラスは強い光を効果的に遮断し、目への紫外線によるダメージを軽減し、明るい日光の下での視力を保護し、視覚的な快適さを向上させるのに役立ちます。

クリエイティブライティング

画像や動画のコンテンツから鮮やかなテキスト説明を生成します。この機能は、ストーリー作成、コピーライティング、ショートビデオスクリプトなどのクリエイティブなシナリオに適しています。

vl-问答

画像の内容に基づいて、面白いソーシャルメディアの投稿を作成するのを手伝ってください。

もちろんです。この画像は中秋節の豊かな雰囲気に満ちており、古典的な要素と現代的な要素が巧みに組み合わされています。画像の主要な要素に基づいて、さまざまなスタイルのソーシャルメディア投稿をいくつか用意しました。お好きなものをお選びください。

詩的で美しいスタイル

今夜、月は誰の目にも明るく輝いていますが、秋の思いはどこに落ちるのでしょうか?嫦娥は月に飛び、玉兎は薬をつきます。古人のロマンスが今夜、灯されます。この明るい月があなたの帰り道を照らし、私の深い思いを運びますように。中秋節おめでとうございます!

暖かく祝福するスタイル

月は満ち、人々は再会します。中秋の夜は最も穏やかです。花火が咲くのを見て、空の満月を眺め、月餅を一切れ食べ、健康を願います。あなたと私が願うすべてが叶いますように。皆さん、中秋節おめでとうございます。ご家族が幸せでありますように!

テキスト認識と情報抽出

画像内のテキストや数式を認識したり、領収書、証明書、フォームから情報を抽出したりします。この機能は、フォーマットされたテキスト出力をサポートしています。Qwen3-VL モデルは、サポートされる言語数を 33 に増やしました。サポートされている言語のリストについては、「モデル機能の比較」をご参照ください。

-q2cdz6jy89b6m3kp

画像から次の情報を抽出してください: ['請求書コード', '請求書番号', '目的地', '燃料サーチャージ', '運賃', '旅行日', '出発時刻', '列車番号', '座席番号']。JSON 形式で出力してください。

{

"Invoice Code": "221021325353",

"Invoice Number": "10283819",

"Destination": "開発区",

"Fuel Surcharge": "2.0",

"Fare": "8.00<Full>",

"Travel Date": "2013-06-29",

"出発時刻": "Serial",

"Train Number": "040",

"Seat Number": "371"

}

多分野にわたる問題解決

画像で提示された数学、物理、化学などの科目の問題を解決します。この機能は、小学校から大学、成人教育まで、さまざまな教育レベルに適しています。

-5jwcstcvmdpqghaj

画像内の数学の問題をステップバイステップで解いてください。

-答案

ビジュアルコーディング

画像や動画からコードを生成します。たとえば、デザインドラフトや Web サイトのスクリーンショットから HTML、CSS、JS コードを生成できます。

code

私のスケッチに基づいて、HTML と CSS を使用して Web ページを作成してください。メインカラーは黒にしてください。

code-预览

Web ページプレビュー

オブジェクト検出

2D および 3D 検出をサポートしています。この機能を使用して、オブジェクトの向き、視点の変化、オクルージョン関係を判断できます。3D 検出は Qwen3-VL モデルの新機能です。

Qwen2.5-VL モデルのオブジェクト検出性能は、480 × 480 から 2560 × 2560 ピクセルの解像度範囲内で安定しています。この範囲外では、検出精度が低下し、バウンディングボックスのずれが発生する可能性があります。検出結果を元の画像に描画する方法の詳細については、「よくある質問」をご参照ください。

2D 検出

-530xdcos1lqkcfuy

  • ボックス (バウンディングボックス) 座標を返す: イメージ内のすべての食品を検出し、その bbox 座標を JSON フォーマットで出力します。

  • ポイント (重心) 座標を返す: イメージ内のすべての食品をポイントとして特定し、そのポイント座標を XML フォーマットで出力します。

2D 検出結果の可視化

-mu9podu1eyvph1zd

3D ポジショニング

3d

画像内の車を検出し、その 3D 位置を予測します。 JSON を出力: [{"bbox_3d": [x_center, y_center, z_center, x_size, y_size, z_size, roll, pitch, yaw], "label": "category"}]

3D 検出結果の可視化

3d-结果

ドキュメント解析

スキャンされたコピーや画像 PDF などの画像ベースのドキュメントを、QwenVL HTML または QwenVL Markdown 形式に解析します。この形式は、テキストを正確に認識し、画像や表などの要素の位置情報を保持します。Qwen3-VL モデルでは、Markdown 形式への解析がサポートされました。

推奨されるプロンプトは qwenvl html (HTML 形式に解析) と qwenvl markdown (Markdown 形式に解析) です。

image

qwenvl マークダウン。

-结果

結果の可視化

動画理解

特定のイベントの特定やタイムスタンプの取得、主要な時間帯の要約生成など、動画コンテンツを分析します。

ビデオの中の人物の一連の行動を記述してください。開始時刻 (start_time)、終了時刻 (end_time)、およびイベント (event) を JSON フォーマットで出力してください。タイムスタンプには HH:mm:ss を使用してください。

{

"events": [

{

"start_time": "00:00:00",

"end_time": "00:00:05",

"event": "段ボール箱を持ってテーブルに向かって歩き、テーブルの上に置く人物。"

},

{

"start_time": "00:00:05",

"end_time": "00:00:15",

"event": "スキャナーを手に取り、段ボール箱のラベルをスキャンする人物。"

},

{

"start_time": "00:00:15",

"end_time": "00:00:21",

"event": "スキャナーを元の場所に戻し、ペンを手に取ってノートに情報を書き込む人物。"}]

}

コア機能

思考モードの有効化/無効化

  • qwen3-vl-plus および qwen3-vl-flash シリーズのモデルは、直接応答するか、思考プロセスを経て応答するハイブリッド思考モデルです。enable_thinking パラメーターを使用して、この動作を制御できます。

    • true: 思考モードを有効にします。

    • false (デフォルト): 思考モードを無効にします。

  • qwen3-vl-235b-a22b-thinking のような `thinking` サフィックスを持つモデルは、思考専用モデルです。これらのモデルは、応答する前に常に思考し、この機能を無効にすることはできません。

重要
  • モデル構成: エージェントツールの呼び出しを伴わない一般的な会話シナリオでは、最適なパフォーマンスを維持するために System Message を設定しないことを推奨します。モデルのロール設定や出力形式の要件などの指示は、User Message を通じて渡すことができます。

  • ストリーミング出力の優先: 思考モードが有効な場合、ストリーミング出力と非ストリーミング出力の両方がサポートされます。長い応答によるタイムアウトを避けるために、ストリーミング出力を使用することを推奨します。

  • 思考の長さの制限: 思考モデルは、長い推論プロセスを出力することがあります。thinking_budget パラメーターを使用して、思考プロセスの長さを制限できます。モデルの思考プロセス中に生成されたトークン数が thinking_budget を超えると、推論内容は切り捨てられ、モデルはすぐに最終応答の生成を開始します。thinking_budget のデフォルト値は、モデルの最大思考連鎖長です。詳細については、「モデルリスト」をご参照ください。

OpenAI 互換

enable_thinking は標準の OpenAI パラメーターではありません。OpenAI Python SDK を使用する場合は、extra_body を介して渡します。

import os
from openai import OpenAI

client = OpenAI(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

reasoning_content = ""  # 完全な思考プロセスを定義
answer_content = ""     # 完全な応答を定義
is_answering = False   # 思考プロセスが終了し、応答が開始されたかどうかを判断
enable_thinking = True
# チャット補完リクエストを作成
completion = client.chat.completions.create(
    model="qwen3-vl-plus",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
                    },
                },
                {"type": "text", "text": "この問題をどう解けばいいですか?"},
            ],
        },
    ],
    stream=True,
    # enable_thinking パラメーターは思考プロセスを有効にします。thinking_budget パラメーターは推論プロセスの最大トークン数を設定します。
    # qwen3-vl-plus および qwen3-vl-flash の場合、enable_thinking で思考を有効または無効にできます。qwen3-vl-235b-a22b-thinking のような `thinking` サフィックスを持つモデルの場合、enable_thinking は true にしか設定できません。これは他の Qwen-VL モデルには適用されません。
    extra_body={
        'enable_thinking': enable_thinking,
        "thinking_budget": 81920},

    # 最後のチャンクでトークン使用量を返すには、次のコメントを解除します
    # stream_options={
    #     "include_usage": True
    # }
)

if enable_thinking:
    print("\n" + "=" * 20 + "思考プロセス" + "=" * 20 + "\n")

for chunk in completion:
    # chunk.choices が空の場合、使用量を表示
    if not chunk.choices:
        print("\n使用量:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        # 思考プロセスを表示
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
            print(delta.reasoning_content, end='', flush=True)
            reasoning_content += delta.reasoning_content
        else:
            # 応答を開始
            if delta.content != "" and is_answering is False:
                print("\n" + "=" * 20 + "完全な応答" + "=" * 20 + "\n")
                is_answering = True
            # 応答プロセスを表示
            print(delta.content, end='', flush=True)
            answer_content += delta.content

# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(answer_content)
import OpenAI from "openai";

// OpenAI クライアントを初期化
const openai = new OpenAI({
  // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
  // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let enableThinking = true;

let messages = [
    {
        role: "user",
        content: [
        { type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
        { type: "text", text: "この問題を解いてください" },
    ]
}]

async function main() {
    try {
        const stream = await openai.chat.completions.create({
            model: 'qwen3-vl-plus',
            messages: messages,
            stream: true,
          // 注: Node.js SDK では、enableThinking のような非標準パラメーターはトップレベルのプロパティとして渡され、extra_body に配置する必要はありません。
          enable_thinking: enableThinking,
          thinking_budget: 81920

        });

        if (enableThinking){console.log('\n' + '='.repeat(20) + '思考プロセス' + '='.repeat(20) + '\n');}

        for await (const chunk of stream) {
            if (!chunk.choices?.length) {
                console.log('\n使用量:');
                console.log(chunk.usage);
                continue;
            }

            const delta = chunk.choices[0].delta;

            // 思考プロセスを処理
            if (delta.reasoning_content) {
                process.stdout.write(delta.reasoning_content);
                reasoningContent += delta.reasoning_content;
            }
            // 正式な応答を処理
            else if (delta.content) {
                if (!isAnswering) {
                    console.log('\n' + '='.repeat(20) + '完全な応答' + '='.repeat(20) + '\n');
                    isAnswering = true;
                }
                process.stdout.write(delta.content);
                answerContent += delta.content;
            }
        }
    } catch (error) {
        console.error('エラー:', error);
    }
}

main();
# ======= 重要 =======
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen3-vl-plus",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
          }
        },
        {
          "type": "text",
          "text": "この問題を解いてください"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options":{"include_usage":true},
    "enable_thinking": true,
    "thinking_budget": 81920
}'

DashScope

import os
import dashscope
from dashscope import MultiModalConversation

# シンガポールリージョンのモデルを使用する場合は、次の行のコメントを解除してください。
# dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
enable_thinking=True
messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
            {"text": "この問題を解いてください。"}
        ]
    }
]

response = MultiModalConversation.call(
    # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: api_key="sk-xxx",
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen3-vl-plus",  
    messages=messages,
    stream=True,
    # enable_thinking パラメーターは思考プロセスを有効にします。
    # qwen3-vl-plus および qwen3-vl-flash の場合、enable_thinking で思考を有効または無効にできます。qwen3-vl-235b-a22b-thinking のような `thinking` サフィックスを持つモデルの場合、enable_thinking は true にしか設定できません。これは他の Qwen-VL モデルには適用されません。
    enable_thinking=enable_thinking,
    # thinking_budget パラメーターは推論プロセスの最大トークン数を設定します。
    thinking_budget=81920,

)

# 完全な思考プロセスを定義
reasoning_content = ""
# 完全な応答を定義
answer_content = ""
# 思考プロセスが終了し、応答が開始されたかどうかを判断
is_answering = False

if enable_thinking:
    print("=" * 20 + "思考プロセス" + "=" * 20)

for chunk in response:
    # 思考プロセスと応答の両方が空の場合は無視
    message = chunk.output.choices[0].message
    reasoning_content_chunk = message.get("reasoning_content", None)
    if (chunk.output.choices[0].message.content == [] and
        reasoning_content_chunk == ""):
        pass
    else:
        # 現在思考プロセス中の場合
        if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
            print(chunk.output.choices[0].message.reasoning_content, end="")
            reasoning_content += chunk.output.choices[0].message.reasoning_content
        # 現在応答中の場合
        elif chunk.output.choices[0].message.content != []:
            if not is_answering:
                print("\n" + "=" * 20 + "完全な応答" + "=" * 20)
                is_answering = True
            print(chunk.output.choices[0].message.content[0]["text"], end="")
            answer_content += chunk.output.choices[0].message.content[0]["text"]

# 完全な思考プロセスと完全な応答を出力するには、次のコードのコメントを解除して実行してください。
# print("=" * 20 + "完全な思考プロセス" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "完全な応答" + "=" * 20 + "\n")
# print(f"{answer_content}")
// DashScope SDK バージョン >= 2.21.10
import java.util.*;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";}

    private static final Logger logger = LoggerFactory.getLogger(Main.class);
    private static StringBuilder reasoningContent = new StringBuilder();
    private static StringBuilder finalContent = new StringBuilder();
    private static boolean isFirstPrint = true;

    private static void handleGenerationResult(MultiModalConversationResult message) {
        String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
        String reasoning = Objects.isNull(re)?"":re; // デフォルト値

        List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
        if (!reasoning.isEmpty()) {
            reasoningContent.append(reasoning);
            if (isFirstPrint) {
                System.out.println("====================思考プロセス====================");
                isFirstPrint = false;
            }
            System.out.print(reasoning);
        }

        if (Objects.nonNull(content) && !content.isEmpty()) {
            Object text = content.get(0).get("text");
            finalContent.append(content.get(0).get("text"));
            if (!isFirstPrint) {
                System.out.println("\n====================完全な応答====================");
                isFirstPrint = true;
            }
            System.out.print(text);
        }
    }
    public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg)  {
        return MultiModalConversationParam.builder()
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: .apiKey("sk-xxx")
                // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(Msg))
                .enableThinking(true)
                .thinkingBudget(81920)
                .incrementalOutput(true)
                .build();
    }

    public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
            throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
        MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
        Flowable<MultiModalConversationResult> result = conv.streamCall(param);
        result.blockingForEach(message -> {
            handleGenerationResult(message);
        });
    }
    public static void main(String[] args) {
        try {
            MultiModalConversation conv = new MultiModalConversation();
            MultiModalMessage userMsg = MultiModalMessage.builder()
                    .role(Role.USER.getValue())
                    .content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
                            Collections.singletonMap("text", "この問題を解いてください")))
                    .build();
            streamCallWithMessage(conv, userMsg);
//             最終結果を出力
//            if (reasoningContent.length() > 0) {
//                System.out.println("\n====================完全な応答====================");
//                System.out.println(finalContent.toString());
//            }
        } catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
            logger.error("例外が発生しました: {}", e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要 =======
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'X-DashScope-SSE: enable' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
                    {"text": "この問題を解いてください"}
                ]
            }
        ]
    },
    "parameters":{
        "enable_thinking": true,
        "incremental_output": true,
        "thinking_budget": 81920
    }
}'

高解像度モードの有効化

大量の詳細情報を含む画像の場合、vl_high_resolution_images パラメーターを True に設定して高解像度モードを有効にできます。このモードを有効にすると、画像あたりのデフォルトのトークン制限が 1280 または 2560 から 16384 に増加します。

モード

画像あたりのトークン制限

シナリオ

コストとレイテンシー

有効 (vl_high_resolution_images = True)

16384

詳細に注意を払う必要がある豊富なコンテンツのシナリオ

高い

無効 (vl_high_resolution_images = False (デフォルト))

Qwen3-VL、qwen-vl-max-0813 以降、qwen-vl-plus-0815 以降に更新されたモデル: 2560

その他の Qwen-VL モデル: 1280

詳細が少なく、高速な要件がある、またはコストに敏感なシナリオ。

低い

OpenAI 互換

vl_high_resolution_images は標準の OpenAI パラメーターではありません。OpenAI Python SDK を使用する場合は、extra_body を介して渡します。

Python

import os
import time
from openai import OpenAI

client = OpenAI(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

def test_resolution(high_resolution=False):
    completion = client.chat.completions.create(
        model="qwen3-vl-plus",
        messages=[
           {"role": "user","content": [
               {"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},},
               {"type": "text", "text": "これらの画像には何が描かれていますか?"},
                ],
            }
        ],
        extra_body={'enable_thinking': False,
                    "vl_high_resolution_images":high_resolution}

    )
    usage_info= completion.usage.prompt_tokens
    return {
        'usage_info': usage_info
    }

# 比較結果を出力
print("\n==================== トークン使用量の比較 ====================")
# 低解像度をテスト
result_low = test_resolution(high_resolution=False)
# API 制限を避けるために少し待機
time.sleep(2)
# 高解像度をテスト
result_high = test_resolution(high_resolution=True)


if result_low['usage_info'] and result_high['usage_info']:
    low_tokens = result_low['usage_info']
    high_tokens = result_high['usage_info']
    print(f"高解像度モード - 合計入力トークン: {high_tokens}")
    print(f"低解像度モード - 合計入力トークン: {low_tokens}")
    print(f"差分: {high_tokens - low_tokens} トークン")

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
        // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えてください: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function test_resolution(high_resolution) {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",
        messages: [
        {role: "user",content: [
            {type: "image_url",image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"}},
            {type: "text", text: "これらの画像には何が描かれていますか?" },
        ]}],
        enable_thinking: false,
        vl_high_resolution_images:high_resolution
    });
    return response.usage.prompt_tokens;
}


// 低解像度と高解像度をテスト
(async function main() {
    console.log("\n==================== トークン使用量の比較 ====================")
    const result_low = await test_resolution(false);
    const result_high = await test_resolution(true);

    console.log("高解像度 - 合計入力トークン:",result_high);
    console.log("低解像度 - 合計入力トークン:", result_low);
    console.log("差分:", result_high-result_low);

})();

curl

# ======= 重要 =======
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください
# 次の base_url はシンガポールリージョン用です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"
          }
        },
        {
          "type": "text",
          "text": "これらの画像には何が描かれていますか?"
        }
      ]
    }
  ],
  "enable_thinking": false,
  "vl_high_resolution_images":true
}'

トークンの使用量の比較

==================== トークン使用量の比較 ====================
合計入力トークン (高解像度): 4073
合計入力トークン (低解像度): 2518
差分: 1555

DashScope

Python

import os
import time

import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンでモデルを使用するには、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えます
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
            {"text": "この画像には何が写っていますか?"}
        ]
    }
]

def test_resolution(high_resolution=False):
    """さまざまな解像度設定の結果をテストします。"""

    response = dashscope.MultiModalConversation.call(
        # 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
        # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください。
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model='qwen3-vl-plus',
        messages=messages,
        enable_thinking=False,
        vl_high_resolution_images=high_resolution
    )
    return {
        'usage_info': response.usage
    }

# 比較結果を出力します。
print("\n==================== Token Usage Comparison ====================")
# 低解像度をテストします。
result_low = test_resolution(high_resolution=False)
# API レート制限を回避するために少し待機します。
time.sleep(2)
# 高解像度をテストします。
result_high = test_resolution(high_resolution=True)

if result_low['usage_info'] and result_high['usage_info']:
    low_tokens = result_low['usage_info'].input_tokens_details['image_tokens']
    high_tokens = result_high['usage_info'].input_tokens_details['image_tokens']
    print(f"High-resolution mode - Image tokens: {high_tokens}")
    print(f"Low-resolution mode - Image tokens: {low_tokens}")
    print(f"Difference: {high_tokens - low_tokens} tokens ")

Java

// DashScope SDK バージョン >= 2.21.10
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

        static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンでモデルを使用するには、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えます
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

    public static Integer simpleMultiModalConversationCall(boolean highResolution)
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"),
                        Collections.singletonMap("text", "この画像には何が写っていますか?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 環境変数を設定していない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください。
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .enableThinking(false)
                .messages(Arrays.asList(userMessage))
                .vlHighResolutionImages(highResolution)
                .build();
        MultiModalConversationResult result = conv.call(param);
        return result.getUsage().getImageTokens();
    }

    public static void main(String[] args) {
        try {
            // 高解像度パターンを呼び出します。
            Integer highResToken = simpleMultiModalConversationCall(true);
            // 低解像度パターンを呼び出します。
            Integer lowResToken = simpleMultiModalConversationCall(false);

            // 比較結果を出力します。
            System.out.println("=== Token Usage Comparison ===");
            System.out.println("High-resolution pattern token count: " + highResToken);
            System.out.println("Low-resolution pattern token count: " + lowResToken);
            System.out.println("Difference: " + (highResToken - lowResToken));
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご参照ください。
# 以下はシンガポールリージョンの base_url です。北京リージョンでモデルを使用するには、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えます
# === 実行前にこのコメントを削除してください。 ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
               {"text": "この画像には何が写っていますか?"}
                ]
            }
        ]
    },
    "parameters": {
        "vl_high_resolution_images": true,
        "enable_thinking": false
    }
}'

トークン使用量の比較

==================== トークン使用量の比較 ====================
高解像度モード - イメージトークン: 4058
低解像度モード - イメージトークン: 2503
差分: 1555 トークン 

動画理解

Qwen-VL モデルは、画像のリスト (動画フレーム) または動画ファイルから動画コンテンツを理解できます。

動画ファイルを理解する際に最適なパフォーマンスを得るには、モデルの最新バージョンまたは最近のスナップショットバージョンを使用してください。

動画ファイル

動画フレームの抽出

Qwen-VL モデルは、フレームを抽出することで動画コンテンツを理解します。フレーム抽出の周波数は、分析の詳細レベルを決定します。この周波数を制御する方法は、ソフトウェア開発キット (SDK) によって異なります。

  • DashScope SDK を使用する:

    fps パラメーターはフレームレートを制御します。これは、 秒ごとに 1 フレームが抽出されることを指定します。デフォルト値は 2.0 で、有効範囲は (0.1, 10) です。動きの速いシナリオではより高い fps 値を使用し、静的なシーンや長い動画ではより低い fps 値を使用します。

  • OpenAI 互換 SDK: フレーム抽出周波数は 0.5 秒ごとに 1 フレームに固定されており、カスタマイズできません。

以下のコードサンプルは、URL で指定されたオンライン動画を理解する方法を示しています。詳細については、「ローカルファイルをアップロードする方法」をご参照ください。

OpenAI 互換

OpenAI SDK または HTTP を使用して Qwen-VL モデルに動画ファイルを直接入力する場合、ユーザーメッセージの "type" パラメーターを "video_url" に設定します。

Python

import os
from openai import OpenAI

client = OpenAI(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えます
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus",
    messages=[
        {"role": "user","content": [{
            # 動画ファイルを直接渡す場合、type の値を video_url に設定します。
            # OpenAI SDK を使用する場合、デフォルトでは 0.5 秒ごとに動画から 1 フレームが抽出されます。この周波数は変更できません。フレームレートをカスタマイズするには、DashScope SDK を使用してください。
            "type": "video_url",            
            "video_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"}},
            {"type": "text","text": "この動画の内容は何ですか?"}]
         }]
)
print(completion.choices[0].message.content)

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
        // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えます
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",
        messages: [
        {role: "user",content: [
            // 動画ファイルを直接渡す場合、type の値を video_url に設定します。
            // OpenAI SDK を使用する場合、デフォルトでは 0.5 秒ごとに動画から 1 フレームが抽出されます。この周波数は変更できません。フレームレートをカスタマイズするには、DashScope SDK を使用してください。
            {type: "video_url", video_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"}},
            {type: "text", text: "この動画の内容は何ですか?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

curl

# ======= 重要事項 =======
# この base_url はシンガポールリージョン用です。北京リージョンのモデルを使用するには、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "messages": [
    {"role": "user","content": [{"type": "video_url","video_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"}},
    {"type": "text","text": "この動画の内容は何ですか?"}]}]
}'

DashScope

Python

import dashscope
import os
# 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えます
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
    {"role": "user",
        "content": [
            # fps パラメーターは動画フレームの抽出周波数を制御します。これは 1/fps 秒ごとに 1 フレームが抽出されることを指定します。完全な使用法については、https://www.alibabacloud.com/help/ja/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum をご参照ください。
            {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "この動画の内容は何ですか?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key ="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',
    messages=messages
)

print(response.output.choices[0].message.content[0]["text"])

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {
   static {
            // 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えます
            Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
        }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // fps パラメーターは動画フレームの抽出周波数を制御します。これは 1/fps 秒ごとに 1 フレームが抽出されることを指定します。完全な使用法については、https://www.alibabacloud.com/help/ja/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum をご参照ください。
        Map<String, Object> params = new HashMap<>();
        params.put("video", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4");
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "この動画の内容は何ですか?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 中国 (北京) リージョンのモデルを使用する場合は、中国 (北京) リージョン用の API キーを使用する必要があります。API キーの取得: https://bailian.console.alibabacloud.com/?tab=model#/api-key
                // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= 重要 =======
# 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えます
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {"role": "user","content": [{"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "この動画の内容は何ですか?"}]}]}
}'

画像リスト

画像リストの制限

  • Qwen3-VL、Qwen2.5-VL、および QVQ シリーズモデル: 最小 4 枚、最大 512 枚の画像。

  • その他のモデル: 最小 4 枚、最大 80 枚の画像。

動画フレームの抽出

動画を画像のリスト (事前に抽出された動画フレーム) として提供する場合、fps パラメーターを使用して、フレーム間の時間間隔をモデルに通知できます。これにより、モデルはイベントのシーケンス、期間、およびダイナミクスをよりよく理解できます。

  • DashScope SDK を使用する:

    fps パラメーターを使用して、元の動画のフレームレートを指定できます。この設定では、 秒ごとに元の動画からフレームが抽出されます。このパラメーターは、Qwen2.5-VL および Qwen3-VL モデルでサポートされています。

  • OpenAI 互換 SDK を使用する:

    fps パラメーターはサポートされていません。モデルは、0.5 秒ごとに 1 フレームの動画フレーム抽出周波数を想定します。

以下のコードサンプルは、URL で指定されたオンライン動画フレームを理解する方法を示しています。詳細については、「ローカルファイルをアップロードする方法」をご参照ください。

OpenAI 互換

OpenAI SDK または HTTP を使用して Qwen-VL モデルに動画を画像のリストとして入力する場合、ユーザーメッセージの "type" パラメーターを "video" に設定します。

Python

import os
from openai import OpenAI

client = OpenAI(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えます
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus", # この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/ja/model-studio/models-and-pricing をご参照ください。
    messages=[{"role": "user","content": [
        # 画像のリストを渡す場合、ユーザーメッセージの "type" パラメーターは "video" です。
        # OpenAI SDK を使用する場合、画像リストは 0.5 秒ごとに 1 フレームのレートで動画から抽出されたものと見なされます。これは変更できません。フレームレートをカスタマイズするには、DashScope SDK を使用してください。
        {"type": "video","video": ["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"]},
        {"type": "text","text": "この動画の具体的なプロセスを説明してください"},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

// package.json ファイルで "type": "module" を指定していることを確認してください。
import OpenAI from "openai";

const openai = new OpenAI({
    // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
    // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: apiKey: "sk-xxx",
    apiKey: process.env.DASHSCOPE_API_KEY,
    // 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えます
    baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus", // この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/ja/model-studio/models-and-pricing をご参照ください。
        messages: [{
            role: "user",
            content: [
                {
                    // 画像のリストを渡す場合、ユーザーメッセージの "type" パラメーターは "video" です。
                    // OpenAI SDK を使用する場合、画像リストは 0.5 秒ごとに 1 フレームのレートで動画から抽出されたものと見なされます。これは変更できません。フレームレートをカスタマイズするには、DashScope SDK を使用してください。
                    type: "video",
                    video: [
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
                    ]
                },
                {
                    type: "text",
                    text: "この動画の具体的なプロセスを説明してください"
                }
            ]
        }]
    });
    console.log(response.choices[0].message.content);
}

main();

curl

# ======= 重要 =======
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
# 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えます
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "messages": [{"role": "user",
                "content": [{"type": "video",
                "video": ["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"]},
                {"type": "text",
                "text": "この動画の具体的なプロセスを説明してください"}]}]
}'

DashScope

Python

import os
import dashscope

# 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えます
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  # モデルが Qwen2.5-VL または Qwen3-VL シリーズで、画像のリストを渡す場合は、fps パラメーターを設定できます。これは、画像リストが 1/fps 秒ごとに 1 フレームのレートで元の動画から抽出されたことを示します。
                 {"video":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                   "fps":2},
                 {"text": "この動画の具体的なプロセスを説明してください"}]}]
response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3-vl-plus',  # この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/ja/model-studio/models-and-pricing をご参照ください。
    messages=messages
)
print(response.output.choices[0].message.content[0]["text"])

Java

// DashScope SDK バージョン 2.18.3 以降が必要です。
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {
    static {
        // 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えます
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    private static final String MODEL_NAME = "qwen3-vl-plus";  // この例では qwen3-vl-plus を使用しています。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/ja/model-studio/models-and-pricing をご参照ください。
    public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // モデルが Qwen2.5-VL または Qwen3-VL シリーズで、画像のリストを渡す場合は、fps パラメーターを設定できます。これは、画像リストが 1/fps 秒ごとに 1 フレームのレートで元の動画から抽出されたことを示します。
        Map<String, Object> params = Map.of(
                "video", Arrays.asList("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"),
                "fps",2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "この動画の具体的なプロセスを説明してください")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
                // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL_NAME)
                .messages(Arrays.asList(userMessage)).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            videoImageListSample();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= 重要 =======
# 以下はシンガポールリージョンの base_url です。中国 (北京) リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えます
# シンガポールリージョンと中国 (北京) リージョンの API キーは異なります。API キーの取得: https://www.alibabacloud.com/help/ja/model-studio/get-an-api-key
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
            ],
            "fps":2
                 
          },
          {
            "text": "この動画の具体的なプロセスを説明してください"
          }
        ]
      }
    ]
  }
}'

ローカルファイルのアップロード (Base64 エンコーディングまたはファイルパス)

Qwen-VL は、ローカルファイルをアップロードするために 2 つのメソッドを提供します:

  • Base64 エンコーディングを使用したアップロード

  • ファイルパスを使用した直接アップロード (より安定しており、推奨されます)

アップロードメソッド

Base64 エンコーディングを使用したアップロード

ファイルを Base64 エンコードされた文字列に変換し、モデルに渡します。このメソッドは、OpenAI 互換モード、DashScope ソフトウェア開発キット (SDK)、および HTTP リクエストと互換性があります。

Base64 エンコードされた文字列を渡すステップ (イメージの例)

  1. ファイルのエンコード: ローカルイメージを Base64 エンコーディングに変換します。

    イメージを Base64 エンコーディングに変換するコード例

    # エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します
    import base64
    def encode_image(image_path):
        with open(image_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode("utf-8")
    
    # xxx/eagle.png をローカルイメージの絶対パスに置き換えます
    base64_image = encode_image("xxx/eagle.png")
  2. Data URL の構築: data:[MIME_type];base64,{base64_image} の形式で Data URL を構築します。

    1. MIME_type を実際のメディアタイプに置き換えます。メディアタイプは、image/jpegimage/png など、「サポートされているイメージフォーマット」テーブルの MIME Type の値と一致する必要があります。

    2. base64_image は、前のステップで生成された Base64 文字列です。

  3. モデルの呼び出し: Data URLimage または image_url パラメーターを使用して渡し、モデルを呼び出します。

ファイルパスを使用したアップロード

ローカルファイルのパスをモデルに直接渡します。このメソッドは、DashScope Python および Java SDK でのみサポートされています。DashScope HTTP リクエストまたは OpenAI 互換モードではサポートされていません。

プログラミング言語とオペレーティングシステムに基づいてファイルパスを指定するには、次の表をご参照ください。

ファイルパスの指定 (イメージの例)

システム

SDK

渡すファイルパス

Linux または macOS システム

Python SDK

file://{ファイルの絶対パス}

file:///home/images/test.png

Java SDK

Windows システム

Python SDK

file://{ファイルの絶対パス}

file://D:/images/test.png

Java SDK

file:///{ファイルの絶対パス}

file:///D:/images/test.png

制限:

  • 安定性を高めるために、ファイルパスを使用してファイルをアップロードすることをお勧めします。 1 MB 未満のファイルの場合は、Base64 エンコーディングを使用できます。

  • ファイルパスを直接渡す場合、単一のイメージまたはビデオフレーム (イメージリストから) は 10 MB 未満、単一のビデオは 100 MB 未満である必要があります。

  • Base64 エンコーディングを使用すると、エンコードされたデータサイズが増加します。単一のエンコードされたイメージまたはビデオが 10 MB 未満であることを確認してください。

ファイルを圧縮するには、「イメージまたはビデオを圧縮してサイズ要件を満たすにはどうすればよいですか?

イメージ

ファイルパスを使用したアップロード

ファイルパスの受け渡しは、DashScope Python および Java SDK を使用してモデルを呼び出す場合にのみサポートされます。このメソッドは、DashScope HTTP リクエストまたは OpenAI 互換モードではサポートされていません。

Python

import os
import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# xxx/eagle.png をローカルイメージの絶対パスに置き換えます
local_path = "xxx/eagle.png"
image_path = f"file://{local_path}"
messages = [
                {'role':'user',
                'content': [{'image': image_path},
                            {'text': 'What is depicted in the image?'}]}]
response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',  # この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>(){{put("image", filePath);}},
                        new HashMap<String, Object>(){{put("text", "What is depicted in the image?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
                // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")  // この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

    public static void main(String[] args) {
        try {
            // xxx/eagle.png をローカルイメージの絶対パスに置き換えます
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Base64 エンコーディングを使用したアップロード

OpenAI 互換

Python

from openai import OpenAI
import os
import base64


# エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します。
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

# xxx/eagle.png をローカルイメージの絶対パスに置き換えます
base64_image = encode_image("xxx/eagle.png")
client = OpenAI(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    # 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus", # この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # Base64 イメージデータを渡す場合、イメージフォーマット (image/{format}) は、サポートされているイメージのリストの Content Type と一致する必要があることに注意してください。「f」は文字列フォーマットメソッドです。
                    # PNG イメージ:  f"data:image/png;base64,{base64_image}"
                    # JPEG イメージ: f"data:image/jpeg;base64,{base64_image}"
                    # WEBP イメージ: f"data:image/webp;base64,{base64_image}"
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "What is depicted in the image?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

import OpenAI from "openai";
import { readFileSync } from 'fs';


const openai = new OpenAI(
    {
        // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
        // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
// xxx/eagle.png をローカルイメージの絶対パスに置き換えます
const base64Image = encodeImage("xxx/eagle.png")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  // この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
        messages: [
            {"role": "user",
            "content": [{"type": "image_url",
                            // 注: Base64 データを渡す場合、イメージフォーマット (image/{format}) は、サポートされているイメージのリストの Content Type と一致する必要があります。
                           // PNG イメージ:  data:image/png;base64,${base64Image}
                          // JPEG イメージ: data:image/jpeg;base64,${base64Image}
                         // WEBP イメージ: data:image/webp;base64,${base64Image}
                        "image_url": {"url": `data:image/png;base64,${base64Image}`},},
                        {"type": "text", "text": "What is depicted in the image?"}]}]
    });
    console.log(completion.choices[0].message.content);
} 

main();

curl

  • ファイルを Base64 エンコードされた文字列に変換するメソッドについては、「コード例」をご参照ください。

  • デモンストレーションのため、コード内の Base64 文字列 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際の使用では、必ず完全なエンコード文字列を渡してください。

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3-vl-plus",
  "messages": [
  {
    "role": "user",
    "content": [
      {"type": "image_url", "image_url": {"url": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA"}},
      {"type": "text", "text": "What is depicted in the image?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します。
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


# xxxx/eagle.png をローカルイメージの絶対パスに置き換えます
base64_image = encode_image("xxxx/eagle.png")

messages = [
    {
        "role": "user",
        "content": [
            # 注: Base64 データを渡す場合、イメージフォーマット (image/{format}) は、サポートされているイメージのリストの Content Type と一致する必要があります。「f」は文字列フォーマットメソッドです。
            # PNG イメージ:  f"data:image/png;base64,{base64_image}"
            # JPEG イメージ: f"data:image/jpeg;base64,{base64_image}"
            # WEBP イメージ: f"data:image/webp;base64,{base64_image}"
            {"image": f"data:image/png;base64,{base64_image}"},
            {"text": "What is depicted in the image?"},
        ],
    },
]

response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3-vl-plus",  # この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    messages=messages,
)
print(response.output.choices[0].message.content[0]["text"])

Java

import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Base64;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

    private static String encodeImageToBase64(String imagePath) throws IOException {
        Path path = Paths.get(imagePath);
        byte[] imageBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(imageBytes);
    }

    public static void callWithLocalFile(String localPath) throws ApiException, NoApiKeyException, UploadFileException, IOException {

        String base64Image = encodeImageToBase64(localPath); // Base64 エンコーディング

        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        new HashMap<String, Object>() {{ put("image", "data:image/png;base64," + base64Image); }},
                        new HashMap<String, Object>() {{ put("text", "What is depicted in the image?"); }}
                )).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();

        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            // xxx/eagle.png をローカルイメージの絶対パスに置き換えます
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • ファイルを Base64 エンコードされた文字列に変換するメソッドについては、「コード例」をご参照ください。

  • デモンストレーションのため、コード内の Base64 文字列 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際の使用では、必ず完全なエンコード文字列を渡してください。

# ======= 重要 =======
# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"image": "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "What is depicted in the image?"}
                ]
            }
        ]
    }
}'

ビデオファイル

このセクションでは、ローカルに保存された test.mp4 ファイルを例として使用します。

ファイルパスを使用したアップロード

ファイルパスの受け渡しは、DashScope Python および Java SDK を使用してモデルを呼び出す場合にのみサポートされます。このメソッドは、DashScope HTTP リクエストまたは OpenAI 互換モードではサポートされていません。

Python

import os
import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# xxx/test.mp4 をローカルビデオの絶対パスに置き換えます
local_path = "xxx/test.mp4"
video_path = f"file://{local_path}"
messages = [
                {'role':'user',
                # fps パラメーターは、ビデオから抽出されるフレームの数を制御します。これは、1/fps 秒ごとに 1 フレームが抽出されることを意味します。
                'content': [{'video': video_path,"fps":2},
                            {'text': 'What does this video depict?'}]}]
response = MultiModalConversation.call(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',  
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])

Java

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>()
                                       {{
                                           put("video", filePath);// fps パラメーターは、ビデオから抽出されるフレームの数を制御します。これは、1/fps 秒ごとに 1 フレームが抽出されることを意味します。
                                           put("fps", 2);
                                       }}, 
                        new HashMap<String, Object>(){{put("text", "What does this video depict?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
                // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")  
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

    public static void main(String[] args) {
        try {
            // xxx/test.mp4 をローカルビデオの絶対パスに置き換えます
            callWithLocalFile("xxx/test.mp4");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Base64 エンコーディングを使用したアップロード

OpenAI 互換

Python

from openai import OpenAI
import os
import base64


# エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します。
def encode_video(video_path):
    with open(video_path, "rb") as video_file:
        return base64.b64encode(video_file.read()).decode("utf-8")

# xxx/test.mp4 をローカルビデオの絶対パスに置き換えます
base64_video = encode_video("xxx/test.mp4")
client = OpenAI(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    # 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus",  
    messages=[
        {
            "role": "user",
            "content": [
                {
                    # ビデオファイルを直接渡す場合は、type の値を video_url に設定します。
                    "type": "video_url",
                    "video_url": {"url": f"data:video/mp4;base64,{base64_video}"},
                },
                {"type": "text", "text": "What does this video depict?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

import OpenAI from "openai";
import { readFileSync } from 'fs';

const openai = new OpenAI(
    {
        // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
        // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeVideo = (videoPath) => {
    const videoFile = readFileSync(videoPath);
    return videoFile.toString('base64');
  };
// xxx/test.mp4 をローカルビデオの絶対パスに置き換えます
const base64Video = encodeVideo("xxx/test.mp4")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  
        messages: [
            {"role": "user",
             "content": [{
                 // ビデオファイルを直接渡す場合は、type の値を video_url に設定します。
                "type": "video_url", 
                "video_url": {"url": `data:video/mp4;base64,${base64Video}`}},
                 {"type": "text", "text": "What does this video depict?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • ファイルを Base64 エンコードされた文字列に変換するメソッドについては、「コード例」をご参照ください。

  • デモンストレーションのため、コード内の Base64 文字列 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際の使用では、必ず完全なエンコード文字列を渡してください。

# ======= 重要 =======
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
# === 実行前にこのコメントを削除してください ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3-vl-plus",
  "messages": [
  {
    "role": "user",
    "content": [
      {"type": "video_url", "video_url": {"url": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."}},
      {"type": "text", "text": "What is depicted in the image?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します。
def encode_video(video_path):
    with open(video_path, "rb") as video_file:
        return base64.b64encode(video_file.read()).decode("utf-8")

# xxxx/test.mp4 をローカルビデオの絶対パスに置き換えます
base64_video = encode_video("xxxx/test.mp4")

messages = [{'role':'user',
                # fps パラメーターは、ビデオから抽出されるフレームの数を制御します。これは、1/fps 秒ごとに 1 フレームが抽出されることを意味します。
             'content': [{'video': f"data:video/mp4;base64,{base64_video}","fps":2},
                            {'text': 'What does this video depict?'}]}]
response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',
    messages=messages)

print(response.output.choices[0].message.content[0]["text"])

Java

import java.io.IOException;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    private static String encodeVideoToBase64(String videoPath) throws IOException {
        Path path = Paths.get(videoPath);
        byte[] videoBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(videoBytes);
    }

    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException, IOException {

        String base64Video = encodeVideoToBase64(localPath); // Base64 エンコーディング

        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>()
                                       {{
                                           put("video", "data:video/mp4;base64," + base64Video);// fps パラメーターは、ビデオから抽出されるフレームの数を制御します。これは、1/fps 秒ごとに 1 フレームが抽出されることを意味します。
                                           put("fps", 2);
                                       }},
                        new HashMap<String, Object>(){{put("text", "What does this video depict?");}})).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
                // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();

        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            // xxx/test.mp4 をローカルイメージの絶対パスに置き換えます
            callWithLocalFile("xxx/test.mp4");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • ファイルを Base64 エンコードされた文字列に変換するメソッドについては、「コード例」をご参照ください。

  • デモンストレーションのため、コード内の Base64 文字列 "f"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際の使用では、必ず完全なエンコード文字列を渡してください。

# ======= 重要 =======
# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"video": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "What is depicted in the image?"}
                ]
            }
        ]
    }
}'

イメージリスト

このセクションでは、ローカルに保存されたファイル football1.jpgfootball2.jpgfootball3.jpg、および football4.jpg を例として使用します。

ファイルパスを使用したアップロード

ファイルパスの受け渡しは、DashScope Python および Java SDK を使用してモデルを呼び出す場合にのみサポートされます。このメソッドは、DashScope HTTP リクエストまたは OpenAI 互換モードではサポートされていません。

Python

import os
import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

local_path1 = "football1.jpg"
local_path2 = "football2.jpg"
local_path3 = "football3.jpg"
local_path4 = "football4.jpg"

image_path1 = f"file://{local_path1}"
image_path2 = f"file://{local_path2}"
image_path3 = f"file://{local_path3}"
image_path4 = f"file://{local_path4}"

messages = [{'role':'user',
                # モデルが Qwen2.5-VL シリーズのもので、イメージリストを渡す場合、fps パラメーターを設定できます。これは、イメージリストが元のビデオから 1/fps 秒ごとに抽出されることを示します。この設定は他のモデルには影響しません。
             'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
                         {'text': 'What does this video depict?'}]}]
response = MultiModalConversation.call(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',  # この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    messages=messages)

print(response.output.choices[0].message.content[0]["text"])

Java

// DashScope SDK バージョン 2.18.3 以降が必要です。
import java.util.Arrays;
import java.util.Map;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    private static final String MODEL_NAME = "qwen3-vl-plus";  // この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    public static void videoImageListSample(String localPath1, String localPath2, String localPath3, String localPath4)
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        String filePath1 = "file://" + localPath1;
        String filePath2 = "file://" + localPath2;
        String filePath3 = "file://" + localPath3;
        String filePath4 = "file://" + localPath4;
        Map<String, Object> params = Map.of(
                "video", Arrays.asList(filePath1,filePath2,filePath3,filePath4),
                // モデルが Qwen2.5-VL シリーズのもので、イメージリストを渡す場合、fps パラメーターを設定できます。これは、イメージリストが元のビデオから 1/fps 秒ごとに抽出されることを示します。この設定は他のモデルには影響しません。
                "fps",2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Describe the process shown in this video")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
                // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL_NAME)
                .messages(Arrays.asList(userMessage)).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            videoImageListSample(
                    "xxx/football1.jpg",
                    "xxx/football2.jpg",
                    "xxx/football3.jpg",
                    "xxx/football4.jpg");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Base64 エンコーディングを使用したアップロード

OpenAI 互換

Python

import os
from openai import OpenAI
import base64

# エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します。
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

base64_image1 = encode_image("football1.jpg")
base64_image2 = encode_image("football2.jpg")
base64_image3 = encode_image("football3.jpg")
base64_image4 = encode_image("football4.jpg")
client = OpenAI(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    # 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus",  # この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    messages=[  
    {"role": "user","content": [
        {"type": "video","video": [
            f"data:image/jpeg;base64,{base64_image1}",
            f"data:image/jpeg;base64,{base64_image2}",
            f"data:image/jpeg;base64,{base64_image3}",
            f"data:image/jpeg;base64,{base64_image4}",]},
        {"type": "text","text": "Describe the process shown in this video"},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

import OpenAI from "openai";
import { readFileSync } from 'fs';

const openai = new OpenAI(
    {
        // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
        // 環境変数が設定されていない場合は、次の行を Model Studio API キーに置き換えます: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1 に置き換えてください
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
  
const base64Image1 = encodeImage("football1.jpg")
const base64Image2 = encodeImage("football2.jpg")
const base64Image3 = encodeImage("football3.jpg")
const base64Image4 = encodeImage("football4.jpg")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  // この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
        messages: [
            {"role": "user",
             "content": [{"type": "video",
                            // 注: Base64 データを渡す場合、イメージフォーマット (image/{format}) は、サポートされているイメージのリストの Content Type と一致する必要があります。
                           // PNG イメージ:  data:image/png;base64,${base64Image}
                          // JPEG イメージ: data:image/jpeg;base64,${base64Image}
                         // WEBP イメージ: data:image/webp;base64,${base64Image}
                        "video": [
                            `data:image/jpeg;base64,${base64Image1}`,
                            `data:image/jpeg;base64,${base64Image2}`,
                            `data:image/jpeg;base64,${base64Image3}`,
                            `data:image/jpeg;base64,${base64Image4}`]},
                        {"type": "text", "text": "What does this video depict?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • ファイルを Base64 エンコードされた文字列に変換するメソッドについては、「コード例」をご参照ください。

  • デモンストレーションのため、コード内の Base64 文字列 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際の使用では、必ず完全なエンコード文字列を渡してください。

# ======= 重要 =======
# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "messages": [{"role": "user",
                "content": [{"type": "video",
                "video": [
                          "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                          "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                          "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                          "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
                          ]},
                {"type": "text",
                "text": "Describe the process shown in this video"}]}]
}'

DashScope

Python

import base64
import os
import dashscope

# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# エンコーディング関数: ローカルファイルを Base64 エンコードされた文字列に変換します。
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

base64_image1 = encode_image("football1.jpg")
base64_image2 = encode_image("football2.jpg")
base64_image3 = encode_image("football3.jpg")
base64_image4 = encode_image("football4.jpg")


messages = [{'role':'user',
            'content': [
                    {'video':
                         [f"data:image/png;base64,{base64_image1}",
                          f"data:image/png;base64,{base64_image2}",
                          f"data:image/png;base64,{base64_image3}",
                          f"data:image/png;base64,{base64_image4}"
                         ]
                    },
                    {'text': 'Please describe the process shown in this video.'}]}]
response = dashscope.MultiModalConversation.call(
    # シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3-vl-plus',  # この例では qwen3-vl-plus を使用します。必要に応じて別のモデル名に置き換えることができます。モデルのリストについては、https://www.alibabacloud.com/help/en/model-studio/getting-started/models をご覧ください
    messages=messages)

print(response.output.choices[0].message.content[0]["text"])

Java

import java.io.IOException;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

    private static String encodeImageToBase64(String imagePath) throws IOException {
        Path path = Paths.get(imagePath);
        byte[] imageBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(imageBytes);
    }

    public static void videoImageListSample(String localPath1,String localPath2,String localPath3,String localPath4)
            throws ApiException, NoApiKeyException, UploadFileException, IOException {

        String base64Image1 = encodeImageToBase64(localPath1); // Base64 エンコーディング
        String base64Image2 = encodeImageToBase64(localPath2);
        String base64Image3 = encodeImageToBase64(localPath3);
        String base64Image4 = encodeImageToBase64(localPath4);

        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> params = Map.of(
                "video", Arrays.asList(
                        "data:image/jpeg;base64," + base64Image1,
                        "data:image/jpeg;base64," + base64Image2,
                        "data:image/jpeg;base64," + base64Image3,
                        "data:image/jpeg;base64," + base64Image4),
                // モデルが Qwen2.5-VL シリーズのもので、イメージリストを渡す場合、fps パラメーターを設定できます。これは、イメージリストが元のビデオから 1/fps 秒ごとに抽出されることを示します。この設定は他のモデルには影響しません。
                    "fps",2
        );
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Describe the process shown in this video")))
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();

        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            // xxx/football1.png およびその他のパスをローカルイメージの絶対パスに置き換えます
            videoImageListSample(
                    "xxx/football1.jpg",
                    "xxx/football2.jpg",
                    "xxx/football3.jpg",
                    "xxx/football4.jpg"
            );
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • ファイルを Base64 エンコードされた文字列に変換するメソッドについては、「コード例」をご参照ください。

  • デモンストレーションのため、コード内の Base64 文字列 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." は切り捨てられています。実際の使用では、必ず完全なエンコード文字列を渡してください。

# ======= 重要 =======
# 以下はシンガポールリージョンの base_url です。北京リージョンのモデルを使用する場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
# シンガポールリージョンと北京リージョンの API キーは異なります。API キーを取得するには、https://www.alibabacloud.com/help/en/model-studio/get-api-key をご覧ください
# === 実行前にこのコメントを削除してください ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
                      "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                      "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                      "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                      "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
            ],
            "fps":2     
          },
          {
            "text": "Describe the process shown in this video"
          }
        ]
      }
    ]
  }
}'

その他の特徴

制限

入力ファイルの制限

イメージファイルの制限

  • サポートされているイメージフォーマット

    イメージフォーマット

    一般的な拡張子

    MIME タイプ

    BMP

    .bmp

    image/bmp

    JPEG

    .jpe、.jpeg、.jpg

    image/jpeg

    PNG

    .png

    image/png

    TIFF

    .tif、.tiff

    image/tiff

    WEBP

    .webp

    image/webp

    HEIC

    .heic

    image/heic

  • イメージサイズ: 単一のイメージのサイズは 10 MB を超えることはできません。 Base64 でエンコードされたイメージを渡す場合、エンコードされた文字列が 10 MB 未満であることを確認してください。 詳細については、「ローカルファイルのアップロード」をご参照ください。 ファイルサイズを圧縮する方法については、「イメージまたはビデオの圧縮メソッド」をご参照ください。

  • ディメンションと縦横比: イメージの幅と高さは、それぞれ 10 ピクセルより大きい必要があります。 イメージの縦横比 (長辺と短辺の比率) は 200 を超えることはできません。

  • 総ピクセル数: モデルはイメージを自動的にスケーリングするため、総ピクセル数に厳密な制限はありません。

ビデオファイルの制限

  • ビデオサイズ

    • インターネット URL:

      • Qwen3-VL および qwen-vl-max (qwen-vl-max-latest および qwen-vl-max-2025-04-08 以降のすべてのバージョンを含む): 2 GB を超えることはできません。

      • その他の Qwen2.5-VL シリーズおよび QVQ シリーズモデル: 1 GB を超えることはできません。

      • その他のモデル: 150 MB を超えることはできません。

    • Base64 エンコーディング: Base64 でエンコードされたビデオは 10 MB 未満である必要があります。

    • ローカルファイルパス: ビデオファイルは 100 MB 未満である必要があります。

  • ビデオの長さ

    • Qwen3-VL、qwen-vl-max、qwen-vl-max-latest、qwen-vl-max-2025-08-13、および qwen-vl-max-2025-04-08: 2 秒から 20 分。

    • その他の Qwen2.5-VL シリーズおよび QVQ モデル: 2 秒から 10 分。

    • その他のモデル: 2 秒から 40 秒。

  • ビデオフォーマット: MP4、AVI、MKV、MOV、FLV、および WMV。

  • ビデオディメンション: 特定の制限はありません。 処理の前に、モデルはビデオのサイズを約 600,000 ピクセルに変更します。 ビデオファイルが大きくても、理解度が向上するわけではありません。

  • 音声理解: ビデオファイルの音声理解はサポートされていません。

ファイル入力メソッド

  • インターネット URL: ファイルへのパブリックにアクセス可能な URL を指定します。 HTTP および HTTPS プロトコルがサポートされています。

  • Base64 エンコーディング: ファイルを Base64 でエンコードされた文字列に変換します。

  • ローカルファイルパス: ローカルファイルへのパスを直接指定します。

本番環境での使用

  • 画像と動画の前処理: Qwen-VL には入力ファイルのサイズ制限があります。ファイルの圧縮方法については、画像または動画の圧縮方法をご参照ください。

  • テキストファイルの処理: Qwen-VL は画像ファイルのみをサポートしており、テキストファイルを直接処理することはできません。以下の代替案を検討してください。

    • テキストファイルを画像フォーマットに変換します。Python の pdf2image などの画像処理ライブラリを使用して、ファイルをページごとに複数の高品質な画像に変換できます。その後、マルチ画像入力を使用してモデルに画像を渡すことができます。

    • Qwen-Long はテキストファイルを処理し、その内容を解析できます。

    テキストファイルを画像フォーマットに変換するには、画像編集ライブラリ (Python の pdf2image など) を使用して、ファイルの各ページを高品質の画像に変換し、その後 マルチ画像入力 を使用してモデルに提供します。

  • フォールトトレランスと安定性

    • タイムアウト処理: 非ストリーミング呼び出しでは、モデルが 180 秒以内に出力を完了できない場合にタイムアウトエラーが発生します。タイムアウトが発生すると、部分的に生成されたコンテンツが応答本文で返されます。x-dashscope-partialresponse: true を含む応答ヘッダーはタイムアウトを示します。一部の Qwen-VL モデルでサポートされている 部分モード 機能を使用して、生成されたコンテンツをメッセージ配列に追加し、リクエストを再送信できます。これにより、モデルはコンテンツの生成を続行できます。詳細については、「不完全な出力からの生成の続行」をご参照ください。

    • リトライメカニズム: API 呼び出しには、指数バックオフなどの適切なリトライロジックを設計できます。このロジックは、ネットワークの変動や一時的なサービスの利用不可に対応できます。

課金とスロットリング

  • スロットリング: Qwen-VL モデルのスロットリング条件については、「スロットリング」をご参照ください。

  • 無料クォータ (シンガポールリージョンのみ): Qwen-VL モデルは 100 万トークンの無料クォータを提供します。90 日間の有効期間は、Alibaba Cloud Model Studio をアクティベートしたとき、またはモデルリクエストが承認されたときに開始されます。

  • 課金

    • 総コスト = (入力トークン数 × 入力トークン単価) + (出力トークン数 × 出力トークン単価)。入力と出力の価格については、「モデルリスト」をご参照ください。

    • 思考モードでは、推論プロセス (reasoning_content) が出力の一部となります。これは 出力トークン としてカウントされ、それに応じて課金されます。思考モードで推論プロセスが出力に含まれない場合、課金は非思考モードの価格に基づきます。

    イメージとビデオをトークンに変換するルール

    イメージ

    • Qwen3-VLqwen-vl-max-0813qwen-vl-plus-0815、およびそれ以降のバージョン:各 32 × 32 ピクセルブロックが 1 トークンに対応します。イメージには最低 4 トークンが必要です。

    • その他のモデル:各 28 × 28 ピクセルブロックが 1 トークンに対応します。イメージには最低 4 トークンが必要です。

    次のコードを使用して、イメージのトークン数を見積もります:

    import math
    # Pillow ライブラリをインストールするには、次のコマンドを実行します: pip install Pillow
    from PIL import Image
    
    def token_calculate(image_path):
        # 指定された PNG イメージファイルを開きます
        image = Image.open(image_path)
    
        # イメージの元のディメンションを取得します
        height = image.height
        width = image.width
        
        # Qwen3-VL、qwen-vl-max-0813、および qwen-vl-plus-0815 以降に更新されたモデルの場合: 高さ と幅の両方を 32 の倍数に調整します
        # その他のモデルの場合: 高さ と幅の両方を 28 の倍数に調整します
        h_bar = round(height / 32) * 32 
        w_bar = round(width / 32) * 32
        
        # イメージトークンの下限: 4 トークン
        min_pixels = 32 * 32 * 4
        # イメージトークンの上限: 1280 トークン
        max_pixels = 1280 * 32 * 32
            
        # イメージをスケーリングして、総ピクセル数が [min_pixels, max_pixels] の範囲内になるように調整します
        if h_bar * w_bar > max_pixels:
            # スケーリングされたイメージの総ピクセル数が max_pixels を超えないように、ズーム係数 beta を計算します
            beta = math.sqrt((height * width) / max_pixels)
            # 調整後の高さと幅を再計算します。Qwen3-VL、qwen-vl-max-0813、および qwen-vl-plus-0815 以降に更新されたモデルの場合、それらが 32 の倍数であることを確認します。その他のモデルの場合、それらが 28 の倍数であることを確認します。
            h_bar = math.floor(height / beta / 32) * 32
            w_bar = math.floor(width / beta / 32) * 32
        elif h_bar * w_bar < min_pixels:
            # スケーリングされたイメージの総ピクセル数が min_pixels 未満にならないように、ズーム係数 beta を計算します
            beta = math.sqrt(min_pixels / (height * width))
            # 調整後の高さを再計算します。Qwen3-VL、qwen-vl-max-0813、および qwen-vl-plus-0815 以降に更新されたモデルの場合、それが 32 の倍数であることを確認します。その他のモデルの場合、それが 28 の倍数であることを確認します。
            h_bar = math.ceil(height * beta / 32) * 32
            w_bar = math.ceil(width * beta / 32) * 32
        return h_bar, w_bar
    
    # test.png をローカルイメージへのパスに置き換えます
    h_bar, w_bar = token_calculate("path/to/your/test.png")
    print(f"Scaled image dimensions: height={h_bar}, width={w_bar}")
    
    # イメージトークン数を計算します。Qwen3-VL、qwen-vl-max-0813、および qwen-vl-plus-0815 以降に更新されたモデルの場合、トークン数 = 総ピクセル数 / (32 * 32) です。その他のモデルの場合、トークン数 = 総ピクセル数 / (28 * 28) です。
    token = int((h_bar * w_bar) / (32 * 32))
    
    # システムは自動的に <vision_bos> と <vision_eos> の視覚マークを追加し、それぞれ 1 トークンとしてカウントされます。
    print(f"Number of image tokens: {token + 2}")

    ビデオ

    次のコードを使用して、ビデオのトークン数を見積もります:

    # 使用前に、ライブラリをインストールします: pip install opencv-python
    import math
    import os
    import logging
    import cv2
    
    logger = logging.getLogger(__name__)
    
    FRAME_FACTOR = 2
    # Qwen3-VL、qwen-vl-max-0813、および qwen-vl-plus-0815 以降に更新されたモデルの場合、IMAGE_FACTOR を 32 に設定します
    # その他のモデルの場合、IMAGE_FACTOR を 28 に設定します
    IMAGE_FACTOR = 28
    # ビデオフレームの縦横比
    MAX_RATIO = 200
    
    # ビデオフレームトークンの下限
    VIDEO_MIN_PIXELS = 128 * 32 * 32
    # ビデオフレームトークンの上限
    VIDEO_MAX_PIXELS = 768 * 32 * 32
    
    # ユーザーが FPS パラメーターを渡さない場合、デフォルト値が使用されます
    FPS = 2.0
    # 抽出されるフレームの最小数
    FPS_MIN_FRAMES = 4
    # 抽出されるフレームの最大数。Qwen3-VL および Qwen2.5-vl モデルを使用する場合、FPS_MAX_FRAMES を 512 に設定します。その他のモデルの場合、80 に設定します。
    FPS_MAX_FRAMES = 512
    
    # ビデオ入力の最大画素値。
    # Qwen3-VL および Qwen2.5-vl モデルを使用する場合、VIDEO_TOTAL_PIXELS を 65536 * 32 * 32 および 65536 * 28 * 28 に設定します。その他のモデルの場合、24576 * 28 * 28 に設定します。
    VIDEO_TOTAL_PIXELS = int(float(os.environ.get('VIDEO_MAX_PIXELS', 65536 * 28 * 28)))
    
    def round_by_factor(number: int, factor: int) -> int:
        """'number' に最も近い 'factor' で割り切れる整数を返します。"""
        return round(number / factor) * factor
    
    def ceil_by_factor(number: int, factor: int) -> int:
        """'number' 以上の 'factor' で割り切れる最小の整数を返します。"""
        return math.ceil(number / factor) * factor
    
    def floor_by_factor(number: int, factor: int) -> int:
        """'number' 以下の 'factor' で割り切れる最大の整数を返します。"""
        return math.floor(number / factor) * factor
    
    def smart_nframes(ele,total_frames,video_fps):
        """抽出するビデオフレームの数を計算します。
    
        Args:
            ele (dict): ビデオ構成を含む辞書。
                - fps: モデル入力用に抽出されるフレームの数を制御します。
            total_frames (int): ビデオの元の総フレーム数。
            video_fps (int | float): ビデオの元のフレームレート。
    
        Raises:
            nframes が [FRAME_FACTOR, total_frames] の間隔内にない場合にエラーを発生させます。
    
        Returns:
            モデル入力用のビデオフレーム数。
        """
        assert not ("fps" in ele and "nframes" in ele), "Only accept either `fps` or `nframes`"
        fps = ele.get("fps", FPS)
        min_frames = ceil_by_factor(ele.get("min_frames", FPS_MIN_FRAMES), FRAME_FACTOR)
        max_frames = floor_by_factor(ele.get("max_frames", min(FPS_MAX_FRAMES, total_frames)), FRAME_FACTOR)
        duration = total_frames / video_fps if video_fps != 0 else 0
        if duration-int(duration)>(1/fps):
            total_frames = math.ceil(duration * video_fps)
        else:
            total_frames = math.ceil(int(duration)*video_fps)
        nframes = total_frames / video_fps * fps
        if nframes > total_frames:
            logger.warning(f"smart_nframes: nframes[{nframes}] > total_frames[{total_frames}]")
        nframes = int(min(min(max(nframes, min_frames), max_frames), total_frames))
        if not (FRAME_FACTOR <= nframes and nframes <= total_frames):
            raise ValueError(f"nframes should in interval [{FRAME_FACTOR}, {total_frames}], but got {nframes}.")
    
        return nframes
    
    def get_video(video_path):
        # ビデオ情報を取得
        cap = cv2.VideoCapture(video_path)
    
        frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        # ビデオの高さを取得
        frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
        total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    
        video_fps = cap.get(cv2.CAP_PROP_FPS)
        return frame_height,frame_width,total_frames,video_fps
    
    def smart_resize(ele,path,factor = IMAGE_FACTOR):
        # ビデオの元の幅と高さを取得
        height, width, total_frames, video_fps = get_video(path)
        # ビデオフレームトークンの下限
        min_pixels = VIDEO_MIN_PIXELS
        total_pixels = VIDEO_TOTAL_PIXELS
        # 抽出されたフレーム数
        nframes = smart_nframes(ele, total_frames, video_fps)
        max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR),int(min_pixels * 1.05))
    
        # ビデオの縦横比は 200:1 または 1:200 を超えてはなりません
        if max(height, width) / min(height, width) > MAX_RATIO:
            raise ValueError(
                f"absolute aspect ratio must be smaller than {MAX_RATIO}, got {max(height, width) / min(height, width)}"
            )
    
        h_bar = max(factor, round_by_factor(height, factor))
        w_bar = max(factor, round_by_factor(width, factor))
        if h_bar * w_bar > max_pixels:
            beta = math.sqrt((height * width) / max_pixels)
            h_bar = floor_by_factor(height / beta, factor)
            w_bar = floor_by_factor(width / beta, factor)
        elif h_bar * w_bar < min_pixels:
            beta = math.sqrt(min_pixels / (height * width))
            h_bar = ceil_by_factor(height * beta, factor)
            w_bar = ceil_by_factor(width * beta, factor)
        return h_bar, w_bar
    
    
    def token_calculate(video_path, fps):
        # ビデオパスと fps フレーム抽出パラメーターを渡します
        messages = [{"content": [{"video": video_path, "fps":fps}]}]
        vision_infos = extract_vision_info(messages)[0]
    
        resized_height, resized_width=smart_resize(vision_infos,video_path)
    
        height, width, total_frames,video_fps = get_video(video_path)
        num_frames = smart_nframes(vision_infos,total_frames,video_fps)
        print(f"Original video dimensions: {height}×{width}, Model input dimensions: {resized_height}×{resized_width}, Total video frames: {total_frames}, Total frames extracted when fps is {fps}: {num_frames}",end=", ")
        video_token = int(math.ceil(num_frames / 2) * resized_height / 28 * resized_width / 28)
        video_token += 2 # システムは自動的に <|vision_bos|> と <|vision_eos|> の視覚マークを追加し、それぞれ 1 トークンとしてカウントされます。
        return video_token
    
    def extract_vision_info(conversations):
        vision_infos = []
        if isinstance(conversations[0], dict):
            conversations = [conversations]
        for conversation in conversations:
            for message in conversation:
                if isinstance(message["content"], list):
                    for ele in message["content"]:
                        if (
                            "image" in ele
                            or "image_url" in ele
                            or "video" in ele
                            or ele.get("type","") in ("image", "image_url", "video")
                        ):
                            vision_infos.append(ele)
        return vision_infos
    
    
    video_token = token_calculate("path/to/your/test.mp4", 1)
    print("Video tokens:", video_token)
  • 請求書の表示: Alibaba Cloud 管理コンソールの [費用とコスト] ページで請求書を表示したり、アカウントにチャージしたりできます。

API リファレンス

Qwen-VL モデルの入力および出力パラメーターの詳細については、「Qwen」をご参照ください。

よくある質問

イメージまたはビデオを必要なサイズに圧縮するにはどうすればよいですか?

Qwen-VL には入力ファイルのサイズ制限があります。次のメソッドを使用してファイルを圧縮できます。

イメージの圧縮メソッド

  • オンラインツール: CompressJPEGTinyPNG などのオンラインツールを使用してイメージを圧縮します。

  • ローカルソフトウェア: Photoshop などのソフトウェアを使用して、エクスポート時に品質を調整します。

  • コード実装:

    # pip install pillow
    
    from PIL import Image
    def compress_image(input_path, output_path, quality=85):
        with Image.open(input_path) as img:
            img.save(output_path, "JPEG", optimize=True, quality=quality)
    
    # ローカルイメージを渡します。
    compress_image("/xxx/before-large.jpeg","/xxx/after-min.jpeg")

ビデオの圧縮メソッド

  • オンラインツール: FreeConvert などのオンラインツールを使用してビデオを圧縮します。

  • ローカルソフトウェア: HandBrake などのソフトウェアを使用します。

  • コード実装: FFmpeg ツールを使用します。詳細については、「FFmpeg 公式 Web サイト」をご参照ください。

    # 基本的な変換コマンド。
    # -i: 入力ファイルのパスを指定します。例: input.mp4。
    # -vcodec: ビデオエンコーダーを指定します。一般的な値には、libx264 (一般的な使用に推奨) および libx265 (より高い圧縮率) があります。
    # -crf: ビデオの品質を制御します。値の範囲は 18 から 28 です。値が小さいほど品質が高くなり、ファイルサイズが大きくなります。
    # --preset: エンコーディング速度と圧縮効率のバランスを制御します。一般的な値には、slow、fast、faster があります。
    # -y: 既存のファイルを上書きします。このパラメーターには値は必要ありません。
    # output.mp4: 出力ファイルのパスを指定します。
    
    ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4

モデルがオブジェクトのローカライズ結果を出力した後、元のイメージに検出ボックスを描画するにはどうすればよいですか?

Qwen-VL モデルがオブジェクトのローカライズ結果を出力した後、次のコードを参照して、元のイメージに検出ボックスとそのラベルを描画できます。

  • Qwen2.5-VL: 返される座標は、スケーリングされたイメージの左上隅を基準としたピクセル単位の絶対値です。検出ボックスを描画するには、qwen2_5_vl_2d.py のコードをご参照ください。

  • Qwen3-VL: モデルは相対座標を返します。座標値は [0, 999] の範囲に正規化されます。検出ボックスを描画するには、qwen3_vl_2d.py (2D ローカライズ用) または qwen3_vl_3d.zip (3D ローカライズ用) のコードをご参照ください。

エラーコード

呼び出しが失敗した場合は、トラブルシューティングについては「エラーメッセージ」をご参照ください。