ドキュメントセンター
 
すべてのプロダクト
Search
  • ドキュメントセンター
  • Alibaba Cloud Model Studio
  • 操作ガイド (モデル)
  • マルチモーダルモデル
  • 視覚的推論

このプロダクト

  • このプロダクト
  • すべてのプロダクト

    Alibaba Cloud Model Studio:視覚的推論

    ドキュメントセンター

    Alibaba Cloud Model Studio:視覚的推論

    最終更新日:Jan 15, 2026

    視覚的推論モデルは、まず思考プロセスを出力してから回答を提供します。これにより、数学の問題を解く、チャートデータを分析する、複雑な動画を理解するなど、複雑な視覚分析タスクに適しています。

    ショーケース

    QVQ Logo
    視覚的推論
    上記のコンポーネントはデモ用であり、実際のリクエストは送信されません。

    利用可能状況

    サポートリージョン

    • シンガポール:このリージョンの API キー を使用します。

    • バージニア:このリージョンの API キー を使用します。

    • 北京:このリージョンの API キー を使用します。

    サポートモデル

    グローバル

    グローバルデプロイメントモードでは、エンドポイントとデータストレージは米国 (バージニア) リージョンに配置され、モデル推論の計算リソースは世界中で動的にスケジューリングされます。

    • ハイブリッド思考モデル: qwen3-vl-plus、qwen3-vl-plus-2025-09-23、qwen3-vl-flash、qwen3-vl-flash-2025-10-15

    • 思考専用モデル: qwen3-vl-235b-a22b-thinking、qwen3-vl-32b-thinking、qwen3-vl-30b-a3b-thinking、qwen3-vl-8b-thinking

    国際

    国際デプロイメントモードでは、エンドポイントとデータストレージはシンガポールリージョンに配置され、モデル推論の計算リソースは中国本土を除き、グローバルに動的にスケジューリングされます。

    • Qwen3-VL

      • ハイブリッド思考モデル: qwen3-vl-plus、qwen3-vl-plus-2025-12-19、qwen3-vl-plus-2025-09-23、qwen3-vl-flash、qwen3-vl-flash-2025-10-15

      • 思考専用モデル: qwen3-vl-235b-a22b-thinking、qwen3-vl-32b-thinking、qwen3-vl-30b-a3b-thinking、qwen3-vl-8b-thinking

    • QVQ

      思考専用モデル: qvq-max シリーズ、qvq-plus シリーズ

    米国

    米国デプロイメントモードでは、エンドポイントとデータストレージは米国 (バージニア) リージョンに配置され、モデル推論の計算リソースは米国内に限定されます。

    ハイブリッド思考モデル: qwen3-vl-flash-us、qwen3-vl-flash-2025-10-15-us

    中国本土

    中国本土の デプロイメントモードでは、エンドポイントとデータストレージは北京リージョンに配置され、モデル推論の計算リソースは中国本土に限定されます。

    • Qwen3-VL

      • ハイブリッド思考モデル: qwen3-vl-plus、qwen3-vl-plus-2025-12-19、qwen3-vl-plus-2025-09-23、qwen3-vl-flash、qwen3-vl-flash-2025-10-15

      • 思考専用モデル: qwen3-vl-235b-a22b-thinking、qwen3-vl-32b-thinking、qwen3-vl-30b-a3b-thinking、qwen3-vl-8b-thinking

    • QVQ

      思考専用モデル: qvq-max シリーズ、qvq-plus シリーズ

    利用ガイド

    • 思考プロセス:Model Studio は、ハイブリッド思考と思考専用の 2 種類の視覚的推論モデルを提供します。

      • ハイブリッド思考モデル: enable_thinking パラメーターを使用して、思考の動作を制御できます。

        • true に設定すると、思考が有効になります。モデルはまず思考プロセスを出力し、次に最終的な応答を出力します。

        • false に設定すると、思考が無効になります。モデルは直接応答を生成します。

      • 思考専用モデル: これらのモデルは、応答を提供する前に常に思考プロセスを生成し、この動作を無効にすることはできません。

    • 出力方法: 視覚的推論モデルには詳細な思考プロセスが含まれるため、長い応答によるタイムアウトを防ぐためにストリーミング出力を使用することを推奨します。

      • Qwen3-VL シリーズは、ストリーミングと非ストリーミングの両方のメソッドをサポートしています。

      • QVQ シリーズは、ストリーミング出力のみをサポートしています。

    • システムプロンプトの推奨事項:

      • 単一ターンまたは単純な会話の場合: 最良の推論結果を得るために、System Message を設定しないでください。モデルのロール設定や出力フォーマット要件などの命令は、User Message を通じて渡します。

      • エージェントの構築やツール呼び出しの実装などの複雑なアプリケーションの場合: System Message を使用して、モデルのロール、機能、および動作のフレームワークを定義し、その安定性と信頼性を確保します。

    はじめに

    前提条件

    • API キーを作成し、API キーを環境変数としてエクスポート済みであること。

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

    次の例では、qvq-max モデルを呼び出して、画像から数学の問題を解く方法を示します。これらの例では、ストリーミング出力を使用して、思考プロセスと最終的な応答を別々に出力します。

    OpenAI 互換

    Python

    from openai import OpenAI
    import os
    
    # OpenAI クライアントを初期化します
    client = OpenAI(
        # API キーはリージョンによって異なります。取得するには、https://bailian.console.alibabacloud.com/?tab=model#/api-key をご参照ください
        # 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください: api_key="sk-xxx"
        api_key = os.getenv("DASHSCOPE_API_KEY"),
        # 以下はシンガポールリージョンのベース 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   # 思考プロセスが終了し、応答が開始されたかどうかを確認します
    
    # チャット補完リクエストを作成します
    completion = client.chat.completions.create(
        model="qvq-max",  # この例では qvq-max を使用します。必要に応じて、他のモデル名に置き換えることができます。
        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
        # }
    )
    
    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)

    Node.js

    import OpenAI from "openai";
    import process from 'process';
    
    // OpenAI クライアントを初期化します
    const openai = new OpenAI({
        apiKey: process.env.DASHSCOPE_API_KEY, // 環境変数から読み取ります。API キーはリージョンによって異なります。取得するには、https://bailian.console.alibabacloud.com/?tab=model#/api-key をご参照ください
        // 以下はシンガポールリージョンのベース 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 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: 'qvq-max',
                messages: messages,
                stream: true
            });
    
            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();

    クリックして思考プロセスと完全な応答を表示

    ====================思考プロセス====================
    
    わかりました、この直方体と立方体の表面積と体積に関する問題を解く必要があります。まず、各部分の要件を確実に理解するために、問題を注意深く確認する必要があります。
    
    問題では、2つの図形の表面積と体積をそれぞれ計算するように求められています。最初の図形は直方体で、2番目の図形は立方体です。単位はすべてセンチメートルで、各問題は6点で、合計12点です。これは、小学校または中学校の幾何学の数学の宿題のように見えます。
    
    まず、直方体と立方体の表面積と体積の公式を思い出す必要があります。直方体の場合、表面積の公式は \( 2(ab + bc + ac) \) で、a、b、cはそれぞれ長さ、幅、高さです。体積は \( abc \) です。立方体の場合、すべての辺の長さが等しいため、表面積は \( 6a^2 \) で、体積は \( a^3 \) です。
    
    では、最初の図形、長さ4 cm、幅3 cm、高さ2 cmの直方体を見てみましょう。まず、その表面積を計算する必要があります。値を公式に代入します:
    
    表面積 = \( 2(4×3 + 3×2 + 4×2) \)
            = \( 2(12 + 6 + 8) \)
            = \( 2×26 \)
            = 52 cm²
    
    次に体積です。再び値を代入します:
    
    体積 = \( 4×3×2 \)
          = 24 cm³
    
    次に、2番目の図形、辺の長さが3 cmの立方体です。表面積は次のように計算されます:
    
    表面積 = \( 6×3^2 \)
            = \( 6×9 \)
            = 54 cm²
    
    そして体積は:
    
    体積 = \( 3^3 \)
          = 27 cm³
    
    ただし、潜在的な間違いがないか確認する必要があります。たとえば、直方体の表面積を計算する際に、いずれかの面の面積を計算し間違えたり、乗算で間違いを犯したりしていないかなどです。
    
    たとえば、直方体の3つの異なる面は4×3、3×2、4×2です。これらの面の面積は12、6、8です。これらを足すと26になり、2を掛けると52になります。これは正しいはずです。体積については、4×3=12、それに2を掛けると24になり、これも正しいです。
    
    立方体については、各面は3×3=9で、6つの面があるので合計は54です。体積は3×3×3=27で、これも正しいです。
    
    したがって、最終的な答えは次のようになります:
    
    1. 直方体の表面積は52平方センチメートル、体積は24立方センチメートルです。
    2. 立方体の表面積は54平方センチメートル、体積は27立方センチメートルです。
    
    ただし、問題の図に他の隠された情報や潜在的なトラップがないか確認する必要があります。たとえば、問題には破線や網掛け部分が含まれることがありますが、この場合、画像内の直方体と立方体は標準的なもので、特別な印はありません。したがって、私の計算は正しいと信じています。
    
    ====================完全な応答====================
    
    ### 解法:
    
    **1. 直方体 (長さ 4 cm、幅 3 cm、高さ 2 cm)**
    - **表面積**:
      \[
      2 \times (4 \times 3 + 3 \times 2 + 4 \times 2) = 2 \times (12 + 6 + 8) = 2 \times 26 = 52 \, \text{cm}^2
      \]
    - **体積**:
      \[
      4 \times 3 \times 2 = 24 \, \text{cm}^3
      \]
    
    **2. 立方体 (辺の長さ 3 cm)**
    - **表面積**:
      \[
      6 \times 3^2 = 6 \times 9 = 54 \, \text{cm}^2
      \]
    - **体積**:
      \[
      3^3 = 27 \, \text{cm}^3
      \]
    
    **回答:**
    1. 直方体の表面積は \(52 \, \text{cm}^2\) で、その体積は \(24 \, \text{cm}^3\) です。
    2. 立方体の表面積は \(54 \, \text{cm}^2\) で、その体積は \(27 \, \text{cm}^3\) です。
    

    HTTP

    # ======= 重要 =======
    # 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください    
    # API キーはリージョンによって異なります。取得するには、https://bailian.console.alibabacloud.com/?tab=model#/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": "qvq-max",
        "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}
    }'

    クリックして思考プロセスと完全な応答を表示

    data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1742983020,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-ab4f3963-2c2a-9291-bda2-65d5b325f435"}
    
    data: {"choices":[{"finish_reason":null,"delta":{"content":null,"reasoning_content":"はい"},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983020,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-ab4f3963-2c2a-9291-bda2-65d5b325f435"}
    
    data: {"choices":[{"delta":{"content":null,"reasoning_content":"、"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983020,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-ab4f3963-2c2a-9291-bda2-65d5b325f435"}
    
    data: {"choices":[{"delta":{"content":null,"reasoning_content":" 今から"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983020,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-ab4f3963-2c2a-9291-bda2-65d5b325f435"}
    
    data: {"choices":[{"delta":{"content":null,"reasoning_content":" この問題を"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983020,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-ab4f3963-2c2a-9291-bda2-65d5b325f435"}
    
    data: {"choices":[{"delta":{"content":null,"reasoning_content":" 解きます"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983020,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-ab4f3963-2c2a-9291-bda2-65d5b325f435"}
    .....
    data: {"choices":[{"delta":{"content":"平方"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983095,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-23d30959-42b4-9f24-b7ab-1bb0f72ce265"}
    
    data: {"choices":[{"delta":{"content":"センチメートル"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983095,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-23d30959-42b4-9f24-b7ab-1bb0f72ce265"}
    
    data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1742983095,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-23d30959-42b4-9f24-b7ab-1bb0f72ce265"}
    
    data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":544,"completion_tokens":590,"total_tokens":1134,"completion_tokens_details":{"text_tokens":590},"prompt_tokens_details":{"text_tokens":24,"image_tokens":520}},"created":1742983095,"system_fingerprint":null,"model":"qvq-max","id":"chatcmpl-23d30959-42b4-9f24-b7ab-1bb0f72ce265"}
    
    data: [DONE]

    DashScope

    説明

    DashScope を使用して QVQ モデルを呼び出す場合:

    • incremental_output パラメーターはデフォルトで true であり、false に設定することはできません。増分ストリーミング出力のみがサポートされています。

    • result_format パラメーターはデフォルトで "message" であり、"text" に設定することはできません。

    Python

    import os
    import dashscope
    from dashscope import MultiModalConversation
    
    # 以下はシンガポールリージョンのベース 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://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
                {"text": "この問題の解き方を教えてください。"}
            ]
        }
    ]
    
    response = MultiModalConversation.call(
        # API キーはリージョンによって異なります。取得するには、https://bailian.console.alibabacloud.com/?tab=model#/api-key をご参照ください
        # 環境変数が設定されていない場合は、次の行を Model Studio の API キーに置き換えてください: api_key="sk-xxx",
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model="qvq-max",  # この例では qvq-max を使用します。必要に応じて、他のモデル名に置き換えることができます。
        messages=messages,
        stream=True,
    )
    
    # 完全な思考プロセスを定義します
    reasoning_content = ""
    # 完全な応答を定義します
    answer_content = ""
    # 思考プロセスが終了し、応答が開始されたかどうかを確認します
    is_answering = False
    
    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}")

    クリックして思考プロセスと完全な応答を表示

    ====================思考プロセス====================
    わかりました、この直方体と立方体の表面積と体積に関する問題を解く必要があります。まず、各部分の要件を確実に理解するために、問題を注意深く確認する必要があります。
    
    問題では、2つの図形の表面積と体積をそれぞれ計算するように求められています。最初の図形は直方体で、2番目の図形は立方体です。単位はすべてセンチメートルで、各問題は6点で、合計12点です。これは、小学校または中学校の幾何学の数学の宿題のように見えます。
    
    まず、直方体と立方体の表面積と体積の公式を思い出す必要があります。直方体の場合、表面積の公式は \( Area = 2(ab + bc + ac) \) で、a、b、cはそれぞれ長さ、幅、高さです。体積は \( Volume = abc \) です。立方体の場合、すべての辺の長さが等しいため、表面積は \( Area = 6a^2 \) で、体積は \( Volume = a^3 \) です。
    
    では、最初の図形、長さ4 cm、幅3 cm、高さ2 cmの直方体を見てみましょう。まず、これらの値が公式の変数に正しく対応していることを確認する必要があります。通常、直方体の3つのディメンションは任意に名前を付けることができますが、便宜上、最も長い辺を長さ、中間の辺を幅、最も短い辺を高さと考えることができます。ただし、この問題では、各辺の長さが明確にラベル付けされているため、直接使用できます。
    
    次に、最初の直方体の表面積を計算します。値を公式に代入します:
    
    \( Area = 2(4×3 + 3×2 + 4×2) \)
    
    まず、括弧内の各項を計算します:
    
    \( 4×3 = 12 \)
    \( 3×2 = 6 \)
    \( 4×2 = 8 \)
    
    次に、これらの結果を足し合わせます:
    
    \( 12 + 6 + 8 = 26 \)
    
    そして2を掛けます:
    
    \( 2 × 26 = 52 \)
    
    したがって、最初の直方体の表面積は52平方センチメートルです。
    
    次に、体積を計算します:
    
    \( Volume = 4 × 3 × 2 = 24 \)
    
    したがって、体積は24立方センチメートルです。
    
    では、2番目の図形、すべての辺の長さが3 cmの立方体を見てみましょう。したがって、表面積の計算は次のようになります:
    
    \( Area = 6 × 3^2 = 6 × 9 = 54 \)
    
    そして体積は:
    
    \( Volume = 3^3 = 27 \)
    
    したがって、立方体の表面積は54平方センチメートル、体積は27立方センチメートルです。
    
    計算中、単位の一貫性に注意する必要があります。問題で与えられた単位はセンチメートルなので、最終結果は平方センチメートルと立方センチメートルでなければなりません。また、直方体の表面積を計算する際など、乗算と加算の順序など、計算ミスがないことを確認する必要があります。項を見落としたり、計算ミスをしたりしやすいです。
    
    さらに、長さ、幅、高さが正しく識別されているかなど、他の誤解の可能性がないか確認します。しかし、この問題では、各辺の長さが明確にラベル付けされているため、これは問題にならないはずです。また、立方体の場合、すべての辺の長さが等しいため、異なる辺の長さによる複雑さはありません。
    
    要約すると、最初の直方体の表面積は52平方センチメートル、体積は24立方センチメートルです。2番目の立方体の表面積は54平方センチメートル、体積は27立方センチメートルです。
    
    ====================完全な応答====================
    ### 解法:
    
    **1. 直方体 (長さ 4 cm、幅 3 cm、高さ 2 cm)**
    
    - **表面積**:
      \[
      Area = 2(ab + bc + ac) = 2(4×3 + 3×2 + 4×2) = 2(12 + 6 + 8) = 2×26 = 52 \, \text{cm}^2
      \]
    
    - **体積**:
      \[
      Volume = abc = 4×3×2 = 24 \, \text{cm}^3
      \]
    
    **2. 立方体 (辺の長さ 3 cm)**
    
    - **表面積**:
      \[
      Area = 6a^2 = 6×3^2 = 6×9 = 54 \, \text{cm}^2
      \]
    
    - **体積**:
      \[
      Volume = a^3 = 3^3 = 27 \, \text{cm}^3
      \]
    
    **回答:**
    1. 直方体の表面積は \(52 \, \text{cm}^2\) で、その体積は \(24 \, \text{cm}^3\) です。
    2. 立方体の表面積は \(54 \, \text{cm}^2\) で、その体積は \(27 \, \text{cm}^3\) です。
    

    Java

    // DashScope SDK バージョン >= 2.19.0
    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 {
           // 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください      
            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()
                    // API キーはリージョンによって異なります。取得するには、https://bailian.console.alibabacloud.com/?tab=model#/api-key をご参照ください
                    // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください: .apiKey("sk-xxx")
                    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                    // この例では qvq-max を使用します。必要に応じて、他のモデル名に置き換えることができます。
                    .model("qvq-max")
                    .messages(Arrays.asList(Msg))
                    .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("An exception occurred: {}", e.getMessage());
            }
            System.exit(0);
        }
    }

    クリックして思考プロセスと完全な応答を表示

    ====================思考プロセス====================
    うーん、この問題を解く必要があります。これは2つの図形の表面積と体積を計算する問題です。まず、問題で提供された画像を注意深く調べる必要があります。最初の図形は直方体で、2番目は立方体です。問題では、それぞれの表面積と体積をセンチメートル単位で計算するように求められています。
    
    最初の図形、直方体を見てみましょう。そのディメンションは、長さ、幅、高さである必要があります。画像のラベルによると、長さは4 cm、幅は3 cm、高さは2 cmです。そうですよね?直方体の表面積の公式は、2×(長さ×幅 + 長さ×高さ + 幅×高さ)だったと思います。そして体積は、長さ×幅×高さです。公式が正しいか再確認してみましょう。はい、表面積は確かに6つの面の面積の合計であり、向かい合う面は面積が等しいので、この公式は正しいです。
    
    では、値を代入すると、表面積は2×(4×3 + 4×2 + 3×2)になるはずです。まず、括弧内の項を計算します:4×3=12、4×2=8、3×2=6。これらを足すと12+8+6=26になります。次に2を掛けると52平方センチメートルになります。体積については、4×3×2=24立方センチメートルです。この部分は正しいはずです。
    
    次は2番目の図形、立方体です。すべての辺の長さは3 cmです。立方体の表面積は、辺の長さの2乗の6倍です。なぜなら、6つの同じ正方形の面があるからです。体積は辺の長さの3乗です。したがって、表面積は6×3²=6×9=54平方センチメートルになるはずです。体積は3³=27立方センチメートルです。ここで単位に注意する必要があります。問題では単位がcmと明記されているので、結果は平方センチメートルと立方センチメートルで書くべきです。
    
    しかし、何か間違いを犯していないか再確認すべきです。たとえば、直方体の辺は正しく識別されていますか?画像では、直方体の長さは幅よりも長く見えるので、長さは4、幅は3、高さは2です。立方体については、3つのディメンションすべてが3なので問題ありません。計算ミスはありますか?たとえば、直方体の表面積の計算で、積は正しいですか、そして加算は正しいですか?たとえば、4×3=12、4×2=8、3×2=6、足して26、2を掛けて52、これは正しいです。体積4×3×2=24も正しいです。立方体については、表面積6×9=54と体積27も正しいです。
    
    注意すべきことの1つは単位です。問題では単位がcmと明確に述べられているので、答えに正しい単位記号を追加すべきです。また、問題では各問題が6点、合計12点と述べられていますが、問題は2つしかないので、それぞれ6点です。これは計算プロセスには影響しませんが、ステップや単位を見落とさないようにという注意喚起です。
    
    要約すると、最初の図形の表面積は52平方センチメートル、体積は24立方センチメートルです。2番目の図形の表面積は54平方センチメートル、体積は27立方センチメートルです。これでいいはずです。
    
    ====================完全な応答====================
    **回答:**
    
    1. **直方体**  
       - **表面積**: \(2 \times (4 \times 3 + 4 \times 2 + 3 \times 2) = 2 \times 26 = 52\) 平方センチメートル  
       - **体積**: \(4 \times 3 \times 2 = 24\) 立方センチメートル  
    
    2. **立方体**  
       - **表面積**: \(6 \times 3^2 = 6 \times 9 = 54\) 平方センチメートル  
       - **体積**: \(3^3 = 27\) 立方センチメートル  
    
    **説明:**  
    - 直方体の表面積は、その6つの面の総面積を計算することで得られ、その体積は長さ、幅、高さの積です。  
    - 立方体の表面積は、その6つの同一の正方形の面の面積の合計であり、その体積は辺の長さの3乗です。  
    - すべての単位は、問題で要求されているようにセンチメートルです。
    

    HTTP

    curl

    # ======= 重要 =======
    # 以下はシンガポールリージョンのベース URL です。北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください       
    # API キーはリージョンによって異なります。取得するには、https://bailian.console.alibabacloud.com/?tab=model#/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' \
    -H 'X-DashScope-SSE: enable' \
    -d '{
        "model": "qvq-max",
        "input":{
            "messages":[
                {
                    "role": "user",
                    "content": [
                        {"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
                        {"text": "この問題を解いてください"}
                    ]
                }
            ]
        }
    }'

    クリックして思考プロセスと完全な応答を表示

    id:1
    event:result
    :HTTP_STATUS/200
    data:{"output":{"choices":[{"message":{"content":[],"reasoning_content":"Okay","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":547,"input_tokens_details":{"image_tokens":520,"text_tokens":24},"output_tokens":3,"input_tokens":544,"output_tokens_details":{"text_tokens":3},"image_tokens":520},"request_id":"f361ae45-fbef-9387-9f35-1269780e0864"}
    
    id:2
    event:result
    :HTTP_STATUS/200
    data:{"output":{"choices":[{"message":{"content":[],"reasoning_content":",","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":548,"input_tokens_details":{"image_tokens":520,"text_tokens":24},"output_tokens":4,"input_tokens":544,"output_tokens_details":{"text_tokens":4},"image_tokens":520},"request_id":"f361ae45-fbef-9387-9f35-1269780e0864"}
    
    id:3
    event:result
    :HTTP_STATUS/200
    data:{"output":{"choices":[{"message":{"content":[],"reasoning_content":" I am now","role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":549,"input_tokens_details":{"image_tokens":520,"text_tokens":24},"output_tokens":5,"input_tokens":544,"output_tokens_details":{"text_tokens":5},"image_tokens":520},"request_id":"f361ae45-fbef-9387-9f35-1269780e0864"}
    .....
    id:566
    event:result
    :HTTP_STATUS/200
    data:{"output":{"choices":[{"message":{"content":[{"text":"square"}],"role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":1132,"input_tokens_details":{"image_tokens":520,"text_tokens":24},"output_tokens":588,"input_tokens":544,"output_tokens_details":{"text_tokens":588},"image_tokens":520},"request_id":"758b0356-653b-98ac-b4d3-f812437ba1ec"}
    
    id:567
    event:result
    :HTTP_STATUS/200
    data:{"output":{"choices":[{"message":{"content":[{"text":"centimeters"}],"role":"assistant"},"finish_reason":"null"}]},"usage":{"total_tokens":1133,"input_tokens_details":{"image_tokens":520,"text_tokens":24},"output_tokens":589,"input_tokens":544,"output_tokens_details":{"text_tokens":589},"image_tokens":520},"request_id":"758b0356-653b-98ac-b4d3-f812437ba1ec"}
    
    id:568
    event:result
    :HTTP_STATUS/200
    data:{"output":{"choices":[{"message":{"content":[],"role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":1134,"input_tokens_details":{"image_tokens":520,"text_tokens":24},"output_tokens":590,"input_tokens":544,"output_tokens_details":{"text_tokens":590},"image_tokens":520},"request_id":"758b0356-653b-98ac-b4d3-f812437ba1ec"}

    コア機能

    思考プロセスの有効化/無効化

    問題解決やレポート分析など、詳細な思考プロセスが必要なシナリオでは、enable_thinking パラメーターを使用して思考モードを有効にできます。次の例では、その方法を示します。

    重要

    enable_thinking パラメーターは、qwen3-vl-plus および qwen3-vl-flash シリーズのモデルでのみサポートされています。

    OpenAI 互換

    enable_thinking および thinking_budget パラメーターは、標準の OpenAI パラメーターではありません。これらのパラメーターを渡す方法は、プログラミング言語によって異なります。

    • Python SDK:extra_body ディクショナリを介して渡す必要があります。

    • Node.js SDK:トップレベルのパラメーターとして直接渡すことができます。

    import os
    from openai import OpenAI
    
    client = OpenAI(
        # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に置き換えてください
        # 北京リージョンのモデルを使用している場合は、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 を使用して思考を有効または無効にできます。「thinking」サフィックスを持つモデル (qwen3-vl-235b-a22b-thinking など) の場合、enable_thinking は true にしか設定できません。このパラメーターは他の Qwen-VL モデルには適用されません。
        extra_body={
            'enable_thinking': enable_thinking
            },
    
        # 次のコメントを解除すると、最後のチャンクでトークン使用量が返されます
        # 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/model-studio/get-api-key をご参照ください
      // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください: apiKey: "sk-xxx"
      apiKey: process.env.DASHSCOPE_API_KEY,
     // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に置き換えてください
     //  北京リージョンのモデルを使用している場合は、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
    
            });
    
            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();
    # ======= 重要 =======
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
    # 北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/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
    }'

    DashScope

    import os
    import dashscope
    from dashscope import MultiModalConversation
    
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください
    # 北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
    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/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 を使用して思考を有効または無効にできます。「thinking」サフィックスを持つモデル (qwen3-vl-235b-a22b-thinking など) の場合、enable_thinking は true にしか設定できません。このパラメーターは他の Qwen-VL モデルには適用されません。
        enable_thinking=enable_thinking
    
    )
    
    # 完全な思考プロセスを定義します
    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 {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください
        // 北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        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/model-studio/get-api-key をご参照ください
                    .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                    .model("qwen3-vl-plus")
                    .messages(Arrays.asList(Msg))
                    .enableThinking(true)
                    .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("An exception occurred: {}", e.getMessage());
            }
            System.exit(0);
        }
    }
    # ======= 重要 =======
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
    # 北京リージョンのモデルを使用している場合は、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 パラメーターを使用して、思考プロセス用に生成される最大トークン数を制限します。思考プロセスがこの制限を超えると、コンテンツは切り捨てられ、モデルはすぐに最終的な回答の生成を開始します。thinking_budget のデフォルト値は、モデルの最大連鎖的思考長です。詳細については、「モデルリスト」をご参照ください。

    重要

    thinking_budget パラメーターは、Qwen3-VL (思考モード) でのみサポートされています。

    OpenAI 互換

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

    import os
    from openai import OpenAI
    
    client = OpenAI(
        # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に置き換えてください
        # 北京リージョンのモデルを使用している場合は、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 を使用して思考を有効または無効にできます。「thinking」サフィックスを持つモデル (qwen3-vl-235b-a22b-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/model-studio/get-api-key をご参照ください
      // 環境変数を設定していない場合は、次の行を Model Studio の API キーに置き換えてください: apiKey: "sk-xxx"
      apiKey: process.env.DASHSCOPE_API_KEY,
      // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1 に置き換えてください
      // 北京リージョンのモデルを使用している場合は、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();
    # ======= 重要 =======
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
    # 北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions に置き換えてください
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/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
    
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください
    # 北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
    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/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 を使用して思考を有効または無効にできます。「thinking」サフィックスを持つモデル (qwen3-vl-235b-a22b-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 {
        // 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1 に置き換えてください
        // 北京リージョンのモデルを使用している場合は、base_url を https://dashscope.aliyuncs.com/api/v1 に置き換えてください
        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/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("An exception occurred: {}", e.getMessage());
            }
            System.exit(0);
        }
    }
    # ======= 重要 =======
    # API キーはリージョンによって異なります。API キーを取得するには、https://www.alibabacloud.com/help/model-studio/get-api-key をご参照ください
    # 以下はシンガポールリージョンのベース URL です。米国 (バージニア) リージョンのモデルを使用している場合は、base_url を https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation に置き換えてください
    # 北京リージョンのモデルを使用している場合は、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
        }
    }'

    その他の例

    視覚的推論モデルは、その推論能力に加えて、視覚理解モデルのすべての特徴を備えています。これらの特徴を組み合わせて、より複雑なシナリオに対応できます。

    • 複数画像の理解

    • 動画理解

    • 高解像度画像の処理

    • ローカルファイルの受け渡し (Base64 エンコーディングまたはファイルパス)

    課金

    総コスト = (入力トークン × トークンあたりの入力価格) + (出力トークン × トークンあたりの出力価格)。

    • 思考プロセス (reasoning_content) は出力コンテンツの一部であり、出力トークンとして課金されます。思考モードのモデルが思考プロセスを出力しない場合、非思考モードの価格で課金されます。

    • 画像または動画のトークン計算方法については、「視覚理解」をご参照ください。

    API リファレンス

    入出力パラメーターについては、「Qwen」をご参照ください。

    エラーコード

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

    ありがとうございます。フィードバックを受け取りました。