All Products
Search
Document Center

Alibaba Cloud Model Studio:Pemahaman gambar dan video

Last Updated:Sep 02, 2026

Model pemahaman visual dapat menjawab pertanyaan berdasarkan gambar atau video yang Anda berikan. Model ini mendukung input gambar tunggal maupun ganda, serta cocok untuk berbagai tugas seperti pembuatan keterangan gambar (image captioning), menjawab pertanyaan visual, dan pelokalan objek.

Coba secara online: Buka Konsol Alibaba Cloud Model Studio. Di pojok kanan atas halaman, pilih Wilayah tujuan. Lalu, buka halaman Vision Models untuk mencoba model-model tersebut.

Mulai

Prasyarat
  • Dapatkan Kunci API dan konfigurasikan sebagai Variabel lingkungan.
  • Untuk melakukan panggilan menggunakan SDK, instal SDK. SDK DashScope Python harus versi 1.24.6 atau lebih baru, dan SDK DashScope Java harus versi 2.21.10 atau lebih baru.

Contoh berikut menunjukkan cara memanggil model untuk menggambarkan konten gambar. Untuk informasi lebih lanjut tentang file lokal dan batasan gambar, lihat Mengirim file lokal dan Batasan gambar.

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os

client = OpenAI(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="qwen3.8-max",  # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat 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": "Adegan apa yang digambarkan dalam gambar ini?"},
            ],
        },
    ],
)
print(completion.choices[0].message.content)

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.

Node.js

import OpenAI from "openai";

const openai = new OpenAI({
  // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
  // Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});

async function main() {
  const response = await openai.chat.completions.create({
    model: "qwen3.8-max",   // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat 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: "Adegan apa yang digambarkan dalam gambar ini?"
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}
main()

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.

Java

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;

import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Buat klien menggunakan Kunci API dari Variabel lingkungan
        OpenAIClient client = OpenAIOkHttpClient.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengatur Variabel lingkungan, ganti baris berikut dengan Kunci API Bailian Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
                .baseUrl("https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1")
                .build();

        // Bangun konten pesan multimodal: gambar + teks
        ChatCompletionContentPart imagePart = ChatCompletionContentPart.ofImageUrl(
                ChatCompletionContentPartImage.builder()
                        .imageUrl(ChatCompletionContentPartImage.ImageUrl.builder()
                                .url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg")
                                .build())
                        .build());
        ChatCompletionContentPart textPart = ChatCompletionContentPart.ofText(
                ChatCompletionContentPartText.builder()
                        .text("Adegan apa yang digambarkan dalam gambar ini?")
                        .build());

        // Buat permintaan chat
        ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
                // Contoh ini menggunakan qwen3.8-max. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
                .model("qwen3.8-max")
                .addUserMessageOfArrayOfContentParts(List.of(imagePart, textPart))
                .build();

        StringBuilder fullResponse = new StringBuilder();

        // Semua contoh kode menggunakan keluaran streaming untuk menunjukkan proses output model secara jelas. Untuk contoh non-streaming, lihat https://www.alibabacloud.com/help/zh/model-studio/text-generation
        try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
            streamResponse.stream().forEach(chunk -> {
                System.out.println(chunk);
                String content = chunk.choices().get(0).delta().content().orElse("");
                if (!content.isEmpty()) {
                    fullResponse.append(content);
                }
            });
            System.out.println(fullResponse);
        } catch (Exception e) {
            System.err.println("Pesan error: " + e.getMessage());
            System.err.println("Lihat: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code");
        }
    }
}

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.

curl

# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3.8-max",
  "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": "Adegan apa yang digambarkan dalam gambar ini?"}
    ]
  }]
}'

Tanggapan

{
  "choices": [
    {
      "message": {
        "content": "Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.",
        "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.8-max",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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": "Adegan apa yang digambarkan dalam gambar ini?"}]
}]

response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',   # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages
)

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

Tanggapan

Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seorang wanita dan seekor anjing. Wanita tersebut duduk di pasir sambil tersenyum dan berinteraksi dengan anjing tersebut. Anjing tersebut mengenakan kalung dan tampak sedang berjabat tangan dengan wanita tersebut. Latar belakangnya adalah laut dan langit, dan sinar matahari yang menyinari mereka menciptakan suasana hangat.

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 {

    // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    static {
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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", "Adegan apa yang digambarkan dalam gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")  //  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat 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);
    }
}

Tanggapan

Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seseorang mengenakan kemeja kotak-kotak dan seekor anjing yang mengenakan kalung. Orang dan anjing tersebut duduk saling berhadapan, tampaknya sedang berinteraksi. Latar belakangnya adalah laut dan langit, dan sinar matahari yang menyinari mereka menciptakan suasana hangat.

curl

# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "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": "Adegan apa yang digambarkan dalam gambar ini?"}
                ]
            }
        ]
    }
}'

Tanggapan

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seseorang mengenakan kemeja kotak-kotak dan seekor anjing yang mengenakan kalung. Mereka duduk di pasir dengan laut dan langit sebagai latar belakang. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut."
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "output_tokens": 55,
    "input_tokens": 1271,
    "image_tokens": 1247
  },
  "request_id": "ccf845a3-dc33-9cda-b581-20fe7dc23f70"
}

Kinerja model

Tanya Jawab Gambar

Jelaskan konten gambar atau klasifikasikan dan beri label, seperti mengidentifikasi orang, tempat, hewan, dan tumbuhan.

p1021359

Item apa dalam gambar ini yang harus saya gunakan jika matahari terlalu terang?

Jika matahari terlalu terang, Anda harus menggunakan kacamata hitam merah muda dalam gambar tersebut. Kacamata hitam dapat secara efektif menghalangi cahaya kuat, mengurangi kerusakan UV pada mata Anda, dan membantu melindungi penglihatan serta meningkatkan kenyamanan visual dalam sinar matahari yang terang.

Penulisan kreatif

Hasilkan deskripsi teks yang hidup berdasarkan konten gambar atau video, cocok untuk skenario kreatif seperti penulisan cerita, copywriting, dan skrip video pendek.

vl-Q&A

Tulis posting media sosial yang menarik berdasarkan konten gambar tersebut.

Tentu. Gambar ini dipenuhi suasana Festival Pertengahan Musim Gugur yang kaya, menggabungkan elemen klasik dan modern secara cerdas. Berdasarkan elemen utama dalam gambar, saya telah menyiapkan beberapa posting media sosial dalam gaya berbeda untuk Anda pilih.

Gaya puitis dan indah

Malam ini, bulan bersinar terang untuk semua orang, tetapi siapa yang tahu ke mana pikiran musim gugur akan jatuh? Chang'e terbang ke bulan, dan Kelinci Giok menumbuk obat. Romantisme para leluhur dinyalakan malam ini. Semoga bulan yang terang ini menerangi jalan pulang Anda dan membawa pikiran terdalam saya. Selamat Hari Raya Pertengahan Musim Gugur!

Gaya harapan hangat

Bulan penuh, dan orang-orang berkumpul kembali. Malam Pertengahan Musim Gugur adalah yang paling lembut. Saksikan kembang api mekar, kagumi bulan penuh di langit, ambil sepotong kue bulan, dan berharap untuk kesehatan yang baik. Semoga semua yang Anda dan saya inginkan menjadi kenyataan. Selamat Hari Raya Pertengahan Musim Gugur untuk semua orang, dan semoga keluarga Anda bahagia!

Pengenalan teks dan ekstraksi informasi

Kenali teks dan rumus dalam gambar, atau ekstrak informasi dari kwitansi, sertifikat, dan formulir. Mendukung output teks terformat.

-q2cdz6jy89b6m3kp

Ekstrak hal berikut dari gambar: ['Kode Faktur', 'Nomor Faktur', 'Tujuan', 'Biaya Bahan Bakar', 'Tarif', 'Tanggal', 'Waktu Keberangkatan', 'Nomor Kereta', 'Nomor Kursi']. Harap output dalam format JSON.

{

"Kode Faktur": "221021325353",

"Nomor Faktur": "10283819",

"Tujuan": "Zona Pengembangan",

"Biaya Bahan Bakar": "2,0",

"Tarif": "8,00<Full>",

"Tanggal": "2013-06-29",

"Waktu Keberangkatan": "Rolling",

"Nomor Kereta": "040",

"Nomor Kursi": "371"

}

Pemecahan masalah multidisiplin

Selesaikan masalah matematika, fisika, kimia, dan lainnya dalam gambar. Cocok untuk pendidikan SD-SMA, perguruan tinggi, dan dewasa.

-5jwcstcvmdpqghaj

Selesaikan soal matematika dalam grafik langkah demi langkah.

-answer

Pemrograman visual

Hasilkan kode dari gambar atau video. Anda dapat menggunakan fitur ini untuk menghasilkan kode HTML, CSS, dan JS dari rancangan desain, tangkapan layar situs web, dan lainnya.

code

Buat halaman web menggunakan HTML dan CSS berdasarkan sketsa saya. Warna utamanya harus hitam.

code-preview

Pratinjau halaman web

Pelokalan objek

Mendukung pelokalan 2D dan 3D. Anda dapat menggunakan fitur ini untuk menentukan orientasi objek, perubahan perspektif, dan hubungan oklusi. Pelokalan 3D adalah kemampuan baru yang ditambahkan ke model Qwen3-VL.

Kinerja pelokalan objek model Qwen2.5-VL kuat dalam rentang resolusi 480 × 480 hingga 2560 × 2560. Di luar rentang ini, akurasi deteksi dapat menurun, dengan kadang-kadang terjadi deviasi bingkai deteksi.

Untuk informasi tentang cara menggambar hasil pelokalan pada gambar asli, lihat FAQ.

Pelokalan 2D-530xdcos1lqkcfuy
  • Kembalikan koordinat Kotak pembatas (bounding box): Deteksi semua item makanan dalam gambar dan output koordinat bbox-nya dalam format JSON.
  • Kembalikan koordinat Titik (centroid): Lokalisasi semua item makanan dalam gambar sebagai titik dan output koordinat titiknya dalam format XML.
Visualisasi hasil pelokalan 2D-mu9podu1eyvph1zd

Pelokalan 3D

3d

Deteksi mobil dalam gambar dan prediksi posisi 3D-nya. Output JSON: [{"bbox_3d": [x_center, y_center, z_center, x_size, y_size, z_size, roll, pitch, yaw], "label": "kategori"}].

Visualisasi hasil pelokalan 3D

3d-result

Penguraian dokumen

Uraikan dokumen berbasis gambar (seperti salinan hasil pindaian atau PDF gambar) ke dalam format HTML QwenVL atau Markdown QwenVL. Format ini tidak hanya mengenali teks secara akurat tetapi juga mendapatkan informasi posisi elemen seperti gambar dan tabel. Model Qwen3-VL menambahkan kemampuan untuk menguraikan ke dalam format Markdown.

Prompt yang direkomendasikan adalah sebagai berikut: qwenvl html (untuk menguraikan ke format HTML) atau qwenvl markdown (untuk menguraikan ke format Markdown).

image

qwenvl markdown.

-result

Visualisasi hasil

Pemahaman video

Analisis konten video, seperti melokalisasi kejadian spesifik dan mendapatkan stempel waktu, atau menghasilkan ringkasan periode waktu kunci.

Harap jelaskan rangkaian tindakan orang dalam video tersebut. Output Waktu mulai (start_time), Waktu selesai (end_time), dan event (event) dalam format JSON. Gunakan HH:mm:ss untuk stempel waktu.

{

"events": [

{

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

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

"event": "Orang tersebut berjalan menuju meja sambil memegang kotak kardus dan meletakkannya di atas meja."

},

{

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

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

"event": "Orang tersebut mengambil pemindai dan memindai label pada kotak kardus tersebut."

},

{

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

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

"event": "Orang tersebut meletakkan kembali pemindai ke tempatnya dan kemudian mengambil pena untuk mencatat informasi dalam buku catatan."}]

}

Fitur inti

Aktifkan atau nonaktifkan mode berpikir

  • Model seri qwen3.8, qwen3.7, qwen3.6, qwen3.5, qwen3-vl-plus, dan qwen3-vl-flash adalah model berpikir hibrid. Model ini dapat berpikir sebelum merespons atau merespons langsung. Gunakan parameter enable_thinking untuk mengontrol apakah akan mengaktifkan mode berpikir:

    • true: Mengaktifkan mode berpikir. Nilai default untuk model seri qwen3.8, qwen3.7, qwen3.6, dan qwen3.5 adalah true.
    • false: Menonaktifkan mode berpikir. Nilai default untuk model seri qwen3-vl-plus dan qwen3-vl-flash adalah false.
  • Model dengan akhiran thinking, seperti qwen3-vl-235b-a22b-thinking, adalah model berpikir saja. Model ini selalu berpikir sebelum merespons, dan fitur ini tidak dapat dinonaktifkan.

Penting

  • Konfigurasi model: Dalam skenario percakapan umum yang tidak melibatkan panggilan alat Agent, jangan atur System Message untuk menjaga kinerja optimal. Anda dapat memberikan instruksi seperti pengaturan peran model dan persyaratan format output melalui User Message.
  • Utamakan keluaran streaming: Saat mode berpikir diaktifkan, keluaran streaming dan non-streaming didukung. Untuk menghindari timeout yang disebabkan oleh respons yang terlalu panjang, utamakan penggunaan keluaran streaming.
  • Batasi panjang proses berpikir: Model berpikir mendalam terkadang menghasilkan proses penalaran yang panjang. Anda dapat menggunakan parameter thinking_budget untuk membatasi panjang proses berpikir. Jika jumlah token yang dihasilkan selama proses berpikir model melebihi thinking_budget, konten inferensi dipotong, dan model segera mulai menghasilkan respons akhir. Nilai default thinking_budget adalah panjang maksimum rantai-pikiran model. Untuk informasi lebih lanjut, lihat daftar model.

Kompatibel dengan OpenAI

Parameter enable_thinking bukan parameter standar OpenAI. Jika Anda menggunakan SDK Python OpenAI, lewatkan melalui extra_body.

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut adalah untuk wilayah Singapura. Saat Anda melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi menurut wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)

reasoning_content = ""  # Definisikan proses berpikir yang lengkap
answer_content = ""     # Definisikan tanggapan yang lengkap
is_answering = False   # Tentukan apakah akan mengakhiri proses berpikir dan mulai memberikan tanggapan
enable_thinking = True
# Buat permintaan penyelesaian obrolan
completion = client.chat.completions.create(
    model="qwen3.8-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": "How do I solve this problem?"},
            ],
        },
    ],
    stream=True,
    # Parameter enable_thinking mengaktifkan proses berpikir, dan parameter thinking_budget menetapkan jumlah token maksimum untuk proses inferensi.
    # Gunakan parameter enable_thinking untuk beralih mode berpikir.
    extra_body={
        'enable_thinking': enable_thinking,
        "thinking_budget": 81920},

    # Hapus tanda komentar pada baris berikut untuk mengembalikan penggunaan token di chunk terakhir.
    # stream_options={
    #     "include_usage": True
    # }
)

if enable_thinking:
    print("\n" + "=" * 20 + "Thinking process" + "=" * 20 + "\n")

for chunk in completion:
    # Jika chunk.choices kosong, cetak penggunaannya.
    if not chunk.choices:
        print("\nUsage:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        # Cetak proses berpikir.
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content is not None:
            print(delta.reasoning_content, end='', flush=True)
            reasoning_content += delta.reasoning_content
        else:
            # Mulai memberikan tanggapan.
            if delta.content != "" and is_answering is False:
                print("\n" + "=" * 20 + "Complete response" + "=" * 20 + "\n")
                is_answering = True
            # Cetak proses tanggapan.
            print(delta.content, end='', flush=True)
            answer_content += delta.content

# print("=" * 20 + "Complete thinking process" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "Complete response" + "=" * 20 + "\n")
# print(answer_content)
import OpenAI from "openai";

// Inisialisasi klien OpenAI
const openai = new OpenAI({
  // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
  // Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.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: "Selesaikan masalah ini" },
    ]
}]

async function main() {
    try {
        const stream = await openai.chat.completions.create({
            model: 'qwen3.7-plus',
            messages: messages,
            stream: true,
          // Catatan: Pada SDK Node.js, parameter non-standar seperti enableThinking dilewatkan sebagai properti tingkat atas dan tidak perlu ditempatkan di extra_body.
          enable_thinking: enableThinking,
          thinking_budget: 81920

        });

        if (enableThinking){console.log('\n' + '='.repeat(20) + 'Proses berpikir' + '='.repeat(20) + '\n');}

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

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

            // Proses proses berpikir.
            if (delta.reasoning_content) {
                process.stdout.write(delta.reasoning_content);
                reasoningContent += delta.reasoning_content;
            }
            // Proses respons formal.
            else if (delta.content) {
                if (!isAnswering) {
                    console.log('\n' + '='.repeat(20) + 'Respons lengkap' + '='.repeat(20) + '\n');
                    isAnswering = true;
                }
                process.stdout.write(delta.content);
                answerContent += delta.content;
            }
        }
    } catch (error) {
        console.error('Error:', error);
    }
}

main();
# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen3.8-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": "Tolong selesaikan masalah ini"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options":{"include_usage":true},
    "enable_thinking": true,
    "thinking_budget": 81920
}'

DashScope

import os
import dashscope
from dashscope import MultiModalConversation

# URL berikut adalah untuk wilayah Singapura. Saat Anda melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi menurut wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.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": "Solve this problem?"}
        ]
    }
]

response = MultiModalConversation.call(
    # Jika variabel lingkungan tidak dikonfigurasi, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx",
    # Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen3.8-max",
    messages=messages,
    stream=True,
    # Parameter enable_thinking mengaktifkan proses berpikir.
    # Gunakan parameter enable_thinking untuk beralih mode berpikir.
    enable_thinking=enable_thinking,
    # Parameter thinking_budget menetapkan jumlah token maksimum untuk proses inferensi.
    thinking_budget=81920,

)

# Tentukan proses berpikir lengkap
reasoning_content = ""
# Tentukan tanggapan lengkap
answer_content = ""
# Tentukan apakah akan mengakhiri proses berpikir dan mulai merespons
is_answering = False

if enable_thinking:
    print("=" * 20 + "Thinking process" + "=" * 20)

for chunk in response:
    # Jika proses berpikir dan tanggapan kosong, abaikan.
    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:
        # Jika saat ini sedang dalam proses berpikir
        if reasoning_content_chunk is not 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
        # Jika saat ini sedang merespons
        elif chunk.output.choices[0].message.content != []:
            if not is_answering:
                print("\n" + "=" * 20 + "Complete response" + "=" * 20)
                is_answering = True
            print(chunk.output.choices[0].message.content[0]["text"], end="")
            answer_content += chunk.output.choices[0].message.content[0]["text"]

# Cetak proses berpikir dan tanggapan lengkap.
# print("=" * 20 + "Complete thinking process" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Complete response" + "=" * 20 + "\n")
# print(f"{answer_content}")
// Versi SDK DashScope harus 2.21.10 atau lebih baru.
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 berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    static {Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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; // Nilai default

        List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
        if (!reasoning.isEmpty()) {
            reasoningContent.append(reasoning);
            if (isFirstPrint) {
                System.out.println("====================Proses berpikir====================");
                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====================Respons lengkap====================");
                isFirstPrint = true;
            }
            System.out.print(text);
        }
    }
    public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg)  {
        return MultiModalConversationParam.builder()
                // Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .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", "Tolong selesaikan masalah ini")))
                    .build();
            streamCallWithMessage(conv, userMsg);
//             Cetak hasil akhir.
//            if (reasoningContent.length() > 0) {
//                System.out.println("\n====================Respons lengkap====================");
//                System.out.println(finalContent.toString());
//            }
        } catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
            logger.error("Terjadi exception: {}", e.getMessage());
        }
        System.exit(0);
    }
}
# ======= Catatan penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.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.8-max",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
                    {"text": "Tolong selesaikan masalah ini"}
                ]
            }
        ]
    },
    "parameters":{
        "enable_thinking": true,
        "incremental_output": true,
        "thinking_budget": 81920
    }
}'

Input beberapa gambar

Model pemahaman visual mendukung pengiriman beberapa gambar dalam satu permintaan, yang dapat digunakan untuk tugas-tugas seperti perbandingan Produk dan pemrosesan dokumen multi-halaman. Untuk melakukannya, cukup sertakan beberapa objek gambar di dalam array content dari user message.

PentingJumlah gambar dibatasi oleh batas token total model untuk gambar dan teks. Jumlah token total untuk semua gambar dan teks tidak boleh melebihi input maksimum model.

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI

client = OpenAI(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.8-max",  //  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat 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": "Konten apa yang digambarkan oleh gambar-gambar ini?"},
            ],
        }
    ],
)

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

Tanggapan

Gambar 1 menunjukkan adegan seorang wanita dan seekor anjing Labrador retriever berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di pasir, berjabat tangan dengan anjing tersebut. Latar belakangnya adalah ombak laut dan langit, dan seluruh gambar dipenuhi kehangatan dan kegembiraan.

Gambar 2 menunjukkan adegan seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam. Harimau tersebut melangkah maju, dikelilingi pepohonan dan vegetasi yang lebat, dan tanahnya ditutupi daun-daun yang jatuh. Seluruh gambar memberikan perasaan alam liar.

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        // Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.8-max",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat 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: "Konten apa yang digambarkan oleh gambar-gambar ini?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

Tanggapan

Pada gambar pertama, seseorang dan seekor anjing berinteraksi di pantai. Orang tersebut mengenakan kemeja kotak-kotak, dan anjing tersebut mengenakan kalung. Mereka tampak sedang berjabat tangan atau memberi high-five.

Pada gambar kedua, seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam, dan latar belakangnya adalah pepohonan hijau dan vegetasi.

curl

# ======= Catatan penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3.8-max",
  "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": "Konten apa yang digambarkan oleh gambar-gambar ini?"
        }
      ]
    }
  ]
}'

Tanggapan

{
  "choices": [
    {
      "message": {
        "content": "Gambar 1 menunjukkan adegan seorang wanita dan seekor anjing Labrador retriever berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di pasir, berjabat tangan dengan anjing tersebut. Latar belakangnya adalah pemandangan laut dan langit senja, membuat seluruh adegan terlihat sangat hangat dan harmonis.\n\nGambar 2 menunjukkan adegan seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam. Harimau tersebut melangkah maju, dikelilingi pepohonan dan vegetasi yang lebat, dan tanahnya ditutupi daun-daun yang jatuh. Seluruh gambar dipenuhi kealaman liar dan vitalitas.",
        "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.8-max",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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": "Konten apa yang digambarkan oleh gambar-gambar ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    // Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus', //  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages
)

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

Tanggapan

Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam. Pada gambar pertama, seseorang dan seekor anjing berinteraksi di pantai. Gambar kedua adalah seekor harimau yang berjalan di hutan.

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 {
    // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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", "Konten apa yang digambarkan oleh gambar-gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")  //  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat 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);
    }
}

Tanggapan

Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam.

1. Gambar pertama: Seorang wanita dan seekor anjing berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di pasir, dan anjing tersebut mengenakan kalung serta mengulurkan cakarnya untuk berjabat tangan dengan wanita tersebut.
2. Gambar kedua: Seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam, dan latar belakangnya adalah pepohonan dan daun-daun.

curl

# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen3.8-max",
    "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": "Konten apa yang ditunjukkan oleh gambar-gambar ini?"}
                ]
            }
        ]
    }
}'

Tanggapan

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam. Pada gambar pertama, seseorang dan seekor anjing berinteraksi di pantai. Gambar kedua adalah seekor harimau yang berjalan di hutan."
            }
          ]
        }
      }
    ]
  },
  "usage": {
    "output_tokens": 81,
    "input_tokens": 1277,
    "image_tokens": 2497
  },
  "request_id": "ccf845a3-dc33-9cda-b581-20fe7dc23f70"
}

Pemahaman video

Model pemahaman visual dapat memahami konten video yang disediakan sebagai daftar gambar (frame video) atau file video. Contoh berikut menunjukkan cara memahami video online atau daftar gambar yang ditentukan oleh URL. Untuk informasi lebih lanjut tentang batasan video atau jumlah gambar yang dapat dikirim dalam daftar gambar, lihat Batasan video.

Untuk kinerja yang lebih baik saat memahami file video, gunakan versi snapshot terbaru atau terkini dari model.

File video

Model pemahaman visual menganalisis konten video dengan mengekstraksi urutan frame dari video tersebut. Anda dapat mengontrol strategi ekstraksi frame dengan dua parameter berikut:

  • fps: Mengontrol frekuensi ekstraksi frame. Satu frame diekstraksi setiap f p s 1 ​ detik. Rentang nilai adalah [0,1, 10], dan nilai default adalah 2,0.

    • Untuk adegan dengan gerakan cepat, atur nilai fps lebih tinggi untuk menangkap lebih banyak detail.
    • Untuk adegan statis atau video panjang, atur nilai fps lebih rendah untuk meningkatkan kinerja.
  • max_frames: Jumlah maksimum frame yang diekstraksi dari video. Sistem menghitung total frame berdasarkan fps video. Jika jumlah total frame melebihi batas ini, sistem secara otomatis mengambil sampel frame secara merata untuk memenuhi batas tersebut. Parameter ini hanya tersedia saat menggunakan SDK DashScope.

Kompatibel dengan OpenAI

Saat Anda mengirim file video langsung ke model pemahaman visual menggunakan SDK OpenAI atau HTTP, atur parameter "type" dalam pesan pengguna ke "video_url".

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut adalah untuk wilayah Singapura. Saat Anda melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi menurut wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.8-max",
    messages=[
        {
            "role": "user",
            "content": [
                # Saat Anda meneruskan file video secara langsung, atur nilai tipe ke video_url.
                {
                    "type": "video_url",
                    "video_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
                    },
                    "fps": 2
                },
                {
                    "type": "text",
                    "text": "What is the content of this video?"
                }
            ]
        }
    ]
)

print(completion.choices[0].message.content)
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.8-max",
        messages: [
            {
                role: "user",
                content: [
                    // Saat Anda mengirim file video langsung, atur nilai type ke video_url.
                    {
                        type: "video_url",
                        video_url: {
                            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
                        },
                        "fps": 2
                    },
                    {
                        type: "text",
                        text: "Apa konten video ini?"
                    }
                ]
            }
        ]
    });

    console.log(response.choices[0].message.content);
}

main();
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi. ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen3.8-max",
    "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"
            },
            "fps":2
          },
          {
            "type": "text",
            "text": "Apa konten video ini?"
          }
        ]
      }
    ]
  }'

DashScope

import dashscope
import os

// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
    {"role": "user",
        "content": [
            // Parameter fps mengontrol frekuensi ekstraksi frame video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat: https://www.alibabacloud.com/help/zh/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": "Apa konten video ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key ="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',
    messages=messages
)

print(response.output.choices[0].message.content[0]["text"])
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 {
            // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
            Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Parameter fps mengontrol frekuensi ekstraksi frame video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat: https://www.alibabacloud.com/help/zh/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", "Apa konten video ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Jika Anda menggunakan model di wilayah Tiongkok (Beijing), Anda harus menggunakan Kunci API untuk wilayah tersebut. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .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);
    }
}
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi. ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "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": "Apa konten video ini?"}]}]}
}'

Daftar gambar

Saat Anda menyediakan video sebagai daftar frame yang telah diekstraksi sebelumnya, gunakan parameter fps untuk menentukan interval waktu antar frame. Hal ini membantu model memahami urutan, durasi, dan perubahan dinamis kejadian dengan lebih baik. Parameter fps menunjukkan bahwa frame diekstraksi dari video asli setiap f p s 1 ​ detik. Parameter ini didukung oleh model Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.

Kompatibel dengan OpenAI

Saat Anda menggunakan SDK OpenAI atau HTTP untuk memasukkan video sebagai daftar gambar ke model pemahaman visual, atur parameter "type" dalam pesan pengguna ke "video".

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut adalah untuk wilayah Singapura. Saat Anda memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL berbeda untuk setiap wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.8-max", # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/zh/model-studio/models
    messages=[{"role": "user","content": [
        # Saat Anda memasukkan daftar gambar, parameter "type" dalam pesan pengguna adalah "video"
         {"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"],
         "fps":2},
         {"type": "text","text": "Describe the specific process in this video"},
    ]}]
)

print(completion.choices[0].message.content)
// Pastikan Anda telah menentukan "type": "module" dalam file package.json Anda.
import OpenAI from "openai";

const openai = new OpenAI({
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx",
    apiKey: process.env.DASHSCOPE_API_KEY,
    // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.8-max",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/zh/model-studio/models
        messages: [{
            role: "user",
            content: [
                {
                    // Saat Anda memasukkan daftar gambar, parameter "type" dalam pesan pengguna adalah "video"
                    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"],
                        "fps": 2
                },
                {
                    type: "text",
                    text: "Jelaskan proses spesifik dalam video ini"
                }
            ]
        }]
    });
    console.log(response.choices[0].message.content);
}

main();
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "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"],
                  "fps":2},
                {"type": "text","text": "Jelaskan proses spesifik dalam video ini"}]}]
}'

DashScope

import os
import dashscope

// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  // Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
                 {"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": "Jelaskan proses spesifik dalam video ini"}]}]
response = dashscope.MultiModalConversation.call(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3.7-plus',  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages
)
print(response.output.choices[0].message.content[0]["text"])
// Versi SDK DashScope harus 2.21.10 atau lebih baru.
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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    private static final String MODEL_NAME = "qwen3.8-max";  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
        Map<String, Object> params = new HashMap<>();
        params.put("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"));
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "Jelaskan proses spesifik dalam video ini")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .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);
    }
}
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3.8-max",
  "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": "Jelaskan proses spesifik dalam video ini"
          }
        ]
      }
    ]
  }
}'

Kirim file lokal (encoding Base64 atau jalur file)

Model pemahaman visual mendukung dua metode untuk mengunggah file lokal: encoding Base64 dan pengunggahan jalur file langsung. Anda dapat memilih metode unggah berdasarkan ukuran file dan jenis SDK. Untuk rekomendasi, lihat Cara memilih metode unggah file. Kedua metode harus memenuhi persyaratan file yang dijelaskan dalam Batasan gambar.

Unggah menggunakan encoding Base64

Konversi file ke string yang diencode Base64, lalu kirimkan ke model. Metode ini berlaku untuk SDK OpenAI dan DashScope, serta permintaan HTTP.

Langkah-langkah untuk mengirim string yang diencode Base64 (contoh gambar)

  1. Encode file: Konversi gambar lokal ke encoding Base64.

    Kode contoh untuk mengonversi gambar ke encoding Base64

    # Fungsi encoding: Mengonversi file lokal ke string yang diencode 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")
    
    # Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
    base64_image = encode_image("xxx/eagle.png")
    
  2. Buat URL Data dalam format berikut: data:[MIME_type];base64,{base64_image}.

    1. Ganti MIME_type dengan jenis media aktual. Pastikan sesuai dengan nilai MIME Type dalam tabel Format gambar yang didukung, seperti image/jpeg atau image/png.
    2. base64_image adalah string Base64 yang dihasilkan pada langkah sebelumnya.
  3. Panggil model: Kirimkan URL Data menggunakan parameter image atau image_url.

Unggah menggunakan jalur file

Kirimkan langsung jalur file lokal ke model. Metode ini hanya didukung oleh SDK Python dan Java DashScope. Tidak didukung untuk permintaan HTTP DashScope atau mode kompatibel OpenAI.

Lihat tabel berikut untuk menentukan jalur file berdasarkan bahasa pemrograman dan sistem operasi Anda.

Tentukan jalur file (contoh gambar)

Sistem

SDK

Jalur file untuk diteruskan

Contoh

Sistem Linux atau macOS

Python SDK

file://{jalur mutlak file}

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

Java SDK

Sistem Windows

Python SDK

file://{jalur mutlak file}

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

Java SDK

file:///{jalur mutlak file}

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

Gambar

Melewatkan melalui jalur file

import os
import dashscope

# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi menurut wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
local_path = "xxx/eagle.png"
image_path = f"file://{local_path}"
messages = [
                {'role':'user',
                'content': [{'image': image_path},
                            {'text': 'What scene is depicted in the image?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])
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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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", "Adegan apa yang digambarkan dalam gambar ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat 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 {
            // Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Input yang diencode Base64

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os
import base64

// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

// Ganti xxxx/eagle.png dengan jalur mutlak gambar lokal Anda
base64_image = encode_image("xxx/eagle.png")
client = OpenAI(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    // Saat mengirim data gambar Base64, perhatikan bahwa format gambar (image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung. "f" adalah metode untuk pemformatan string.
                    // Gambar PNG:  f"data:image/png;base64,{base64_image}"
                    // Gambar JPEG: f"data:image/jpeg;base64,{base64_image}"
                    // Gambar WEBP: f"data:image/webp;base64,{base64_image}"
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
// Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
const base64Image = encodeImage("xxx/eagle.png")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3.8-max",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
        messages: [
            {"role": "user",
            "content": [{"type": "image_url",
                            // Catatan: Saat mengirim data Base64, format gambar (image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung.
                           // Gambar PNG:  data:image/png;base64,${base64Image}
                          // Gambar JPEG: data:image/jpeg;base64,${base64Image}
                         // Gambar WEBP: data:image/webp;base64,${base64Image}
                        "image_url": {"url": `data:image/png;base64,${base64Image}`},},
                        {"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
  • Untuk tujuan demonstrasi, string yang diencode Base64 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3.8-max",
  "messages": [
  {
    "role": "user",
    "content": [
      {"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA"}},
      {"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

// Ganti xxxx/eagle.png dengan jalur mutlak gambar lokal Anda
base64_image = encode_image("xxxx/eagle.png")

messages = [
    {
        "role": "user",
        "content": [
            // Catatan: Saat mengirim data Base64, format gambar (image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung. "f" adalah metode untuk pemformatan string.
            // Gambar PNG:  f"data:image/png;base64,{base64_image}"
            // Gambar JPEG: f"data:image/jpeg;base64,{base64_image}"
            // Gambar WEBP: f"data:image/webp;base64,{base64_image}"
            {"image": f"data:image/png;base64,{base64_image}"},
            {"text": "Adegan apa yang digambarkan dalam gambar ini?"},
        ],
    },
]

response = dashscope.MultiModalConversation.call(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3.8-max",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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); // encoding 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", "Adegan apa yang digambarkan dalam gambar ini?"); }}
                )).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .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 {
            // Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
  • Untuk tujuan demonstrasi, string yang diencode Base64 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "Adegan apa yang digambarkan dalam gambar ini?"}
                ]
            }
        ]
    }
}'

File video

Bagian ini menggunakan file test.mp4 yang disimpan secara lokal sebagai contoh.

Melewatkan melalui jalur file

import os
import dashscope

// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
local_path = "xxx/test.mp4"
video_path = f"file://{local_path}"
messages = [
                {'role':'user',
                // Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik.
                'content': [{'video': video_path,"fps":2},
                            {'text': 'Adegan apa yang digambarkan oleh video ini?'}]}]
response = MultiModalConversation.call(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])
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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik.
                                           put("fps", 2);
                                       }},
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan oleh video ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .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 {
            // Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
            callWithLocalFile("xxx/test.mp4");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Input yang diencode Base64

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os
import base64

// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_video(video_path):
    with open(video_path, "rb") as video_file:
        return base64.b64encode(video_file.read()).decode("utf-8")

// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
base64_video = encode_video("xxx/test.mp4")
client = OpenAI(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.8-max",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    // Saat mengirim file video langsung, atur nilai type ke video_url
                    "type": "video_url",
                    "video_url": {"url": f"data:video/mp4;base64,{base64_video}"},
                    "fps":2
                },
                {"type": "text", "text": "Adegan apa yang digambarkan oleh video ini?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeVideo = (videoPath) => {
    const videoFile = readFileSync(videoPath);
    return videoFile.toString('base64');
  };
// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
const base64Video = encodeVideo("xxx/test.mp4")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3.8-max",
        messages: [
            {"role": "user",
             "content": [{
                 // Saat mengirim file video langsung, atur nilai type ke video_url
                "type": "video_url",
                "video_url": {"url": `data:video/mp4;base64,${base64Video}`},
                "fps":2},
                 {"type": "text", "text": "Adegan apa yang digambarkan oleh video ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
  • Untuk tujuan demonstrasi, string yang diencode Base64 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3.8-max",
  "messages": [
  {
    "role": "user",
    "content": [
      {"type": "video_url", "video_url": {"url": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},"fps":2},
      {"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

# URL berikut adalah untuk Wilayah Singapura. Saat Anda memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi berdasarkan Wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Fungsi pengodean: Mengonversi file lokal menjadi string yang dikodekan Base64
def encode_video(video_path):
    with open(video_path, "rb") as video_file:
        return base64.b64encode(video_file.read()).decode("utf-8")

# Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
base64_video = encode_video("xxxx/test.mp4")

messages = [{'role':'user',
                # Parameter fps mengontrol jumlah frame yang diekstrak dari video. Ini menunjukkan bahwa satu frame diekstrak setiap 1/fps detik.
             'content': [{'video': f"data:video/mp4;base64,{base64_video}","fps":2},
                            {'text': 'What scene does this video depict?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan Wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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); // encoding 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);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik.
                                           put("fps", 2);
                                       }},
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan oleh video ini?");}})).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .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 {
            // Ganti xxx/test.mp4 dengan jalur mutlak video lokal Anda
            callWithLocalFile("xxx/test.mp4");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
  • Untuk tujuan demonstrasi, string yang diencode Base64 "f"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"video": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "Adegan apa yang digambarkan oleh video ini? "}
                ]
            }
        ]
    }
}'

Daftar gambar

Bagian ini menggunakan file football1.jpg, football2.jpg, football3.jpg, dan football4.jpg yang disimpan secara lokal sebagai contoh.

Mengirim jalur file

import os
import dashscope

// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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',
              //  Saat Anda mengirim daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
             'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
                         {'text': 'Adegan apa yang digambarkan oleh video ini?'}]}]
response = MultiModalConversation.call(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages)

print(response.output.choices[0].message.content[0]["text"])
// Versi SDK DashScope harus 2.21.10 atau yang lebih baru.
import java.util.Arrays;
import java.util.Map;
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 {
        // URL berikut adalah untuk Wilayah Singapura. Saat Anda memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi menurut Wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    private static final String MODEL_NAME = "qwen3.8-max";  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/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 = new HashMap<>();
        params.put("video", Arrays.asList(filePath1,filePath2,filePath3,filePath4));
        //  Saat Anda meneruskan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Describe the specific process in this video")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi menurut Wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .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);
    }
}

Teruskan menggunakan pengodean Base64

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI
import base64

// Fungsi encoding: Mengonversi file lokal ke string yang diencode 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(
    // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.8-max",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/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": "Jelaskan proses spesifik dalam video ini"},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.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.8-max",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
        messages: [
            {"role": "user",
             "content": [{"type": "video",
                        "video": [
                            `data:image/jpeg;base64,${base64Image1}`,
                            `data:image/jpeg;base64,${base64Image2}`,
                            `data:image/jpeg;base64,${base64Image3}`,
                            `data:image/jpeg;base64,${base64Image4}`]},
                        {"type": "text", "text": "Adegan apa yang digambarkan oleh video ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
  • Untuk tujuan demonstrasi, string yang diencode Base64 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "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": "Jelaskan proses spesifik dalam video ini"}]}]
}'

DashScope

Python

import base64
import os
import dashscope

# URL berikut ini untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi tergantung wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

# Fungsi encoding: Mengonversi file lokal menjadi string yang dienkode 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/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}"
                         ]
                    },
                    {'text': 'Please describe the specific process of this video?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi tergantung wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3.7-plus',  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/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 {
        // URL berikut ini untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi tergantung wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.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); // Pengodean Base64
        String base64Image2 = encodeImageToBase64(localPath2);
        String base64Image3 = encodeImageToBase64(localPath3);
        String base64Image4 = encodeImageToBase64(localPath4);

        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> params = new HashMap<>();
        params.put("video", Arrays.asList(
                        "data:image/jpeg;base64," + base64Image1,
                        "data:image/jpeg;base64," + base64Image2,
                        "data:image/jpeg;base64," + base64Image3,
                        "data:image/jpeg;base64," + base64Image4));
        // Saat Anda mengirimkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Describe the specific process in this video")))
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi tergantung wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .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 {
            // Ganti xxx/football1.png dan file lainnya dengan jalur mutlak gambar lokal Anda
            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

  • Untuk informasi tentang cara mengonversi file menjadi string yang dienkode Base64, lihat contoh kode.
  • Untuk keperluan demonstrasi, string yang dienkode Base64 "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string terenkripsi yang lengkap.
# ======= Penting =======
# URL berikut ini untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi tergantung wilayah.
# Kunci API bervariasi tergantung wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3.8-max",
  "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 specific process in this video"
          }
        ]
      }
    ]
  }
}'

Proses gambar beresolusi tinggi

API model pemahaman visual memiliki batas jumlah token visual untuk satu gambar yang dikodekan. Dengan konfigurasi default, gambar beresolusi tinggi dikompresi, yang dapat menyebabkan hilangnya detail dan memengaruhi akurasi pemahaman. Aktifkan vl_high_resolution_images atau sesuaikan max_pixels untuk meningkatkan jumlah token visual. Hal ini mempertahankan lebih banyak detail gambar dan meningkatkan pemahaman.

Lihat jumlah piksel per token visual, batas token, dan batas piksel untuk setiap model

Jika jumlah piksel gambar input melebihi batas piksel model, gambar tersebut akan di-downscale agar sesuai dalam batas tersebut.

Model

Piksel per token

vl_high_resolution_images

max_pixels

Batas token

Batas piksel

Qwen3.8, Qwen3.7, Qwen3.6, Qwen3.5, dan model seri Qwen3-VL

32×32

true

max_pixels tidak valid

16.384 token

16.777.216 (yaitu, 16.384 × 32 × 32)

false (default)

Dapat dikustomisasi. Nilai default-nya adalah 2.621.440 dan nilai maksimumnya adalah 16.777.216.

Ditentukan oleh max_pixels, yaitu max_pixels / 32 / 32

max_pixels

qwen-vl-max, qwen-vl-plus

32 x 32

true

max_pixels tidak valid

16.384 token

16.777.216 (yaitu, 16.384 × 32 × 32)

false (default)

Dapat dikustomisasi. Nilai default-nya adalah 1.310.720 dan nilai maksimumnya adalah 16.777.216.

Ditentukan oleh max_pixels, yaitu max_pixels / 32 / 32

max_pixels

Model lain dari qwen-vl-max, model lain dari qwen-vl-plus, model seri open source Qwen2.5-VL, dan model seri QVQ

28 × 28

true

max_pixels tidak valid

16.384 token

12.845.056 (yaitu, 16.384 × 28 × 28)

false (default)

Dapat dikustomisasi. Nilai default-nya adalah 1.003.520 dan nilai maksimumnya adalah 12.845.056.

Ditentukan oleh max_pixels, yaitu max_pixels / 28 / 28

max_pixels

  • Saat vl_high_resolution_images=true, API menggunakan kebijakan resolusi tetap dan mengabaikan pengaturan max_pixels. Ini cocok untuk mengenali teks halus, objek kecil, atau detail kaya dalam gambar.

  • Saat vl_high_resolution_images=false, batas piksel akhir bergantung pada nilai parameter max_pixels.

    • Untuk skenario yang sensitif terhadap biaya dan Anda ingin mengurangi konsumsi token visual: Gunakan nilai default max_pixels atau atur ke nilai yang lebih kecil. max_pixels terutama memengaruhi jumlah token visual dan biaya pemanggilan. Dalam pengujian kami, menurunkannya tidak berdampak signifikan terhadap waktu respons end-to-end. Untuk mengurangi latensi, lihat Kecepatan respons dan pemilihan model.
    • Jika Anda ingin fokus pada detail tertentu dan dapat menerima kecepatan pemrosesan yang lebih rendah, tingkatkan nilai max_pixels sesuai kebutuhan.

Kecepatan respons dan pemilihan model

Dalam skenario yang sensitif terhadap latensi, waktu respons terutama ditentukan oleh model yang Anda pilih, bukan oleh max_pixels. Tabel berikut membandingkan waktu respons qwen-vl-max dan qwen-vl-plus dalam kondisi input yang sama:

Model

Rata-rata waktu respons

Karakteristik

qwen-vl-max

Sekitar 12 detik

Pengenalan akurasi tinggi. Cocok untuk gambar dengan detail kaya dan toleransi kesalahan rendah.

qwen-vl-plus

Sekitar 8 detik

Kecepatan dan akurasi seimbang. Sekitar 39% lebih cepat daripada qwen-vl-max.

Waktu respons di atas merupakan nilai referensi hasil pengukuran untuk satu gambar berukuran 2480x3508 piksel (qwen-vl-max: 12,75 detik dan 11,84 detik, rata-rata 12,29 detik; qwen-vl-plus: 8,29 detik dan 6,75 detik, rata-rata 7,52 detik). Latensi aktual bervariasi tergantung ukuran gambar, panjang output, dan kondisi jaringan. Nilai-nilai ini hanya sebagai referensi dan bukan komitmen kinerja.

  • Mengaktifkan keluaran streaming (stream=True) secara signifikan mengurangi waktu hingga token pertama: untuk permintaan yang sama, token pertama dikembalikan dalam waktu sekitar 0,95 detik, sedangkan waktu total respons lengkap tetap tidak berubah. Ini cocok untuk skenario interaktif yang perlu menampilkan umpan balik sedini mungkin.
  • Untuk skenario pengenalan gambar yang sensitif terhadap latensi seperti alur kerja: Gunakan qwen-vl-plus dengan stream=True untuk mendapatkan token pertama dalam waktu sekitar 1 detik. Beralihlah ke qwen-vl-max hanya jika akurasi pengenalan qwen-vl-plus tidak memenuhi kebutuhan Anda. Menyesuaikan max_pixels bukan cara untuk meningkatkan kecepatan.

Kompatibel dengan OpenAI

vl_high_resolution_images bukan parameter standar OpenAI. Cara meneruskannya berbeda-beda di berbagai SDK bahasa:

  • Python SDK: Harus diteruskan melalui kamus extra_body.
  • Node.js SDK: Dapat diteruskan langsung sebagai parameter tingkat atas.
import os
import time
from openai import OpenAI

client = OpenAI(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.8-max",
    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"},
            # max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
            # "max_pixels": 16384 * 32 * 32
            },
           {"type": "text", "text": "Suasana festival apa yang disampaikan oleh gambar ini"},
            ],
        }
    ],
    extra_body={"vl_high_resolution_images":True}

)
print(f"Output model: {completion.choices[0].message.content}")
print(f"Total token input: {completion.usage.prompt_tokens}")
import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
    }
);

const response = await openai.chat.completions.create({
        model: "qwen3.8-max",
        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"},
            // max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak berpengaruh saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
            // "max_pixels": 2560 * 32 * 32
            },
            {type: "text", text: "Suasana festival apa yang disampaikan oleh gambar ini?" },
        ]}],
        vl_high_resolution_images:true
    })

console.log("Output model:",response.choices[0].message.content);
console.log("Total token input",response.usage.prompt_tokens);
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3.8-max",
  "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": "Suasana festival apa yang disampaikan oleh gambar ini?"
        }
      ]
    }
  ],
  "vl_high_resolution_images":true
}'

DashScope

import os
import time

import dashscope

# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.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",
            # max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
            # "max_pixels": 16384 * 32 * 32
            },
            {"text": "Suasana festival apa yang disampaikan oleh gambar ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
        # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx"
        # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model='qwen3.7-plus',
        messages=messages,
        vl_high_resolution_images=True
    )

print("Output model",response.output.choices[0].message.content[0]["text"])
print("Total token input:",response.usage.input_tokens)
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg");
        // max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
        // map.put("max_pixels", 2621440);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        Collections.singletonMap("text", "Suasana festival apa yang disampaikan oleh gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.8-max")
                .message(userMessage)
                .vlHighResolutionImages(true)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
        System.out.println(result.getUsage().getInputTokens());
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.8-max",
    "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": "Suasana festival apa yang disampaikan oleh gambar ini?"}
                ]
            }
        ]
    },
    "parameters": {
        "vl_high_resolution_images": true
    }
}'

Penggunaan lainnya

Batasan

Batasan file input

Batasan gambar

  • Resolusi gambar:
    • Ukuran minimum: Lebar dan tinggi gambar harus masing-masing lebih besar dari 10 piksel.

    • Rasio aspek: Rasio sisi panjang terhadap sisi pendek, baik untuk gambar asli maupun gambar yang telah diubah ukurannya, tidak boleh melebihi 200:1.

      Untuk informasi mengenai logika pengubahan ukuran gambar, lihat fungsi smart_resize dalam Menghitung token gambar

    • Piksel maksimum:

      • Pertahankan resolusi gambar dalam batas 8K (7680x4320). Gambar dengan resolusi lebih tinggi dapat menyebabkan timeout panggilan API karena ukuran file yang besar dan waktu transmisi jaringan yang lama.
      • Pengubahan ukuran otomatis: Model dapat menyesuaikan ukuran gambar menggunakan parameter max_pixels dan min_pixels. Memberikan gambar beresolusi tinggi tidak meningkatkan akurasi deteksi. Sebaliknya, hal ini meningkatkan risiko kegagalan panggilan. Ubah ukuran gambar ke ukuran yang wajar di sisi client sebelum mengunggah.
  • Format gambar yang didukung
    • Untuk resolusi di bawah 4K (3840x2160), format gambar berikut didukung:

      Format gambar

      Ekstensi umum

      Jenis 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

    • Untuk resolusi antara 4K (3840x2160) dan 8K (7680x4320), hanya format JPEG, JPG, dan PNG yang didukung.

  • Ukuran gambar:

    Batasan berikut berlaku untuk setiap gambar individual. Untuk input multi-gambar, setiap gambar dievaluasi secara independen dan ukurannya tidak diakumulasi.

    • Jika dikirim sebagai URL publik: Satu gambar tidak boleh melebihi 20 MB untuk model seri Qwen3.8, Qwen3.7, Qwen3.6, Qwen3.5, dan Qwen3-VL. Untuk model lainnya, satu gambar tidak boleh melebihi 10 MB.
    • Jika dikirim sebagai path lokal: Satu gambar tidak boleh melebihi 10 MB.
    • Jika dikirim sebagai encoding Base64 (API kompatibel OpenAI): Untuk model seri Qwen3.8, Qwen3.7, Qwen3.6, Qwen3.5, dan Qwen3-VL, file gambar asli sebelum encoding tidak boleh melebihi 20 MB. Untuk model lainnya, tidak boleh melebihi 10 MB. Dalam kedua kasus tersebut, string Data URI hasil encoding tidak boleh melebihi 20 MB.
    • Jika dikirim sebagai encoding Base64 (API kompatibel Anthropic): Total badan permintaan tidak boleh melebihi6 MB. Jika mengirimkan beberapa gambar, kuota ini dibagi bersama.

    Batasan ini bergantung pada model yang Anda gunakan. Batasan tersebut tidak dapat ditingkatkan dengan membeli paket tier lebih tinggi atau melakukan upgrade versi model.

    Untuk mengompresi file, lihat Cara mengompresi gambar atau video ke ukuran yang diperlukan.

  • Batasan jumlah gambar: Jumlah maksimum gambar yang didukung untuk input multi-gambar bervariasi berdasarkan metode input:

    • Jika dikirim sebagai URL publik atau path lokal:

      • Seri Qwen3.8-Max, Qwen3.8-Flash, Qwen3.7-Plus: Hingga 2.048 gambar
      • Seri Qwen3.7-Flash, Qwen3.6-Plus, Qwen3.6-Flash, Qwen3.5-Plus, Qwen3.5-Flash, Qwen3-VL, Qwen-VL, seri QVQ: Hingga 256 gambar
      • Untuk seri Qwen-Omni, lihat Omni-modal.
    • Jika dikirim sebagai string terenkripsi Base64: Hingga 250 gambar

Jumlah total token untuk semua gambar juga dibatasi oleh batas maksimum token input model. Total jumlah token untuk semua gambar dan teks tidak boleh melebihi batas maksimum input model.

Batasan video

  • Jika dikirim sebagai daftar gambar, jumlah gambar dalam daftar dibatasi sebagai berikut:
    • Seri qwen3.8, qwen3.7, qwen3.6, dan qwen3.5: Minimum 4 gambar dan maksimum 8.000 gambar
    • Seri qwen3-vl-plus, qwen3-vl-flash, qwen3-vl-235b-a22b-thinking, dan qwen3-vl-235b-a22b-instruct: Minimum 4 gambar dan maksimum 2.000 gambar
    • Model open source lainnya seperti seri Qwen3-VL, Qwen2.5-VL (termasuk versi komersial dan open source), dan seri QVQ: Minimum 4 gambar dan maksimum 512 gambar
    • Model lainnya: Minimum 4 gambar dan maksimum 80 gambar
  • Jika dikirim sebagai file video:
    • Ukuran video:
      • Jika dikirim sebagai URL publik:

        • Seri qwen3.8, qwen3.7, qwen3.6, qwen3.5, seri Qwen3-VL, dan qwen-vl-max: Tidak boleh melebihi 2 GB.
        • Seri qwen-vl-plus, model qwen-vl-max lainnya, seri open source Qwen2.5-VL, dan model seri QVQ: Tidak boleh melebihi 1 GB.
        • Model lainnya: Tidak boleh melebihi 150 MB.
      • Jika dikirim sebagai string terenkripsi Base64: String terenkripsi harus kurang dari 10 MB.

      • Jika dikirim sebagai path file lokal: File video tidak boleh melebihi 100 MB.

      Untuk mengompresi file, lihat Cara mengompresi gambar atau video ke ukuran yang diperlukan.

    • Durasi video:
      • Seri qwen3.8, qwen3.7, qwen3.6, dan qwen3.5: 2 detik hingga 2 jam.
      • Seri qwen3-vl-plus, qwen3-vl-flash, qwen3-vl-235b-a22b-thinking, dan qwen3-vl-235b-a22b-instruct: 2 detik hingga 1 jam.
      • Seri open source lainnya seperti Qwen3-VL dan qwen-vl-max: 2 detik hingga 20 menit.
      • Seri qwen-vl-plus, model qwen-vl-max lainnya, seri open source Qwen2.5-VL, dan model seri QVQ: 2 detik hingga 10 menit.
      • Model lainnya: 2 detik hingga 40 detik.
    • Format video: MP4, AVI, MKV, MOV, FLV, WMV, dan lainnya.

    • Dimensi video: Tidak ada batasan khusus. Model dapat secara otomatis menyesuaikan dimensi video menggunakan parameter max_pixels dan min_pixels. File video yang lebih besar tidak menghasilkan pemahaman yang lebih baik.

    • Batasan jumlah video: Hingga 64 video dapat dikirim.

    • Pemahaman audio: Model tidak mendukung pemahaman track audio dalam file video.

Metode input file

  • URL publik: Berikan alamat file yang dapat diakses publik dan mendukung protokol HTTP atau HTTPS. Untuk stabilitas dan performa optimal, unggah file ke OSS guna memperoleh URL publik. Model Studio tidak dapat mengakses titik akhir internal OSS, yang alamatnya mengandung -internal, seperti https://<bucket>.oss-cn-hangzhou-internal.aliyuncs.com/image.jpg. Jika Anda memberikan alamat internal, unduhan file akan gagal dan kode error InvalidParameter akan dikembalikan dengan pesan Failed to download multimodal content. Gunakan titik akhir publik OSS, seperti https://<bucket>.oss-cn-hangzhou.aliyuncs.com/image.jpg, atau URL OSS yang telah ditandatangani (presigned).

    PentingUntuk memastikan model dapat mengunduh file dengan sukses, header respons dari URL publik harus mencantumkan Content-Length (ukuran file) dan Content-Type (jenis media, seperti image/jpeg). Jika salah satu bidang tersebut tidak ada atau salah, unduhan file akan gagal.

  • Encoding Base64: Konversi file menjadi string terenkripsi Base64, lalu kirimkan.

  • Path file lokal (hanya untuk SDK DashScope): Kirimkan path file lokal.

Untuk rekomendasi cara memilih metode input file, lihat Bagaimana cara memilih metode unggah file?

Menggunakan di lingkungan produksi

  • Pra-pemrosesan gambar dan video: Model pemahaman visual memiliki batas ukuran untuk file input. Untuk mengompresi file, lihat Metode kompresi gambar atau video.

  • Pemrosesan file teks: Model pemahaman visual hanya mendukung file gambar dan video. Model ini tidak mendukung pemrosesan file berbasis teks seperti TXT, Word (.doc/.docx), PDF, atau format lainnya. Gunakan salah satu solusi berikut:

    • Konversi file teks ke format gambar. Gunakan pustaka pemrosesan gambar, seperti pdf2image untuk Python, untuk mengonversi file tersebut per halaman menjadi beberapa gambar berkualitas tinggi. Kemudian, kirimkan gambar-gambar tersebut ke model menggunakan metode input multi-gambar.
    • Gunakan Qwen-Long, yang mendukung pengunggahan dokumen dan melakukan percakapan dengan meneruskan informasi melalui file-id.
  • Toleransi kesalahan dan stabilitas
    • Penanganan timeout: Pada panggilan non-streaming, terjadi error timeout jika model tidak selesai menghasilkan output dalam waktu 300 detik. Saat timeout terjadi, konten yang telah dihasilkan dikembalikan dalam badan respons. Header respons yang berisi x-dashscope-partialresponse: true menunjukkan bahwa respons mengalami timeout. Gunakan fitur mode sebagian, yang didukung oleh beberapa model. Tambahkan konten yang telah dihasilkan ke dalam array messages dan kirim ulang permintaan tersebut. Hal ini memungkinkan Large Language Model (LLM) melanjutkan proses generasi konten. Untuk informasi lebih lanjut, lihat Lanjutkan generasi dari output yang belum lengkap.
    • Konfigurasi timeout sisi client: Timeout yang disebutkan sebelumnya adalah timeout sisi server yang terjadi ketika model tidak selesai menghasilkan output dalam waktu 300 detik. Ini berbeda dari timeout sisi client bawaan SDK. Saat Anda memproses gambar berukuran besar, seperti gambar beresolusi 4000 x 4000 piksel, permintaan mungkin memerlukan waktu lebih lama daripada timeout sisi client bawaan SDK dan terputus dengan error APITimeoutError, meskipun batas 300 detik sisi server belum tercapai. Untuk menghindarinya, gunakan with_options pada OpenAI Python SDK untuk memperpanjang timeout sisi client:
client = client.with_options(timeout=1800.0)
response = client.chat.completions.create(
    model="qwen-vl-plus",
    messages=[...]
)
  • Output streaming: Atur stream=True agar model mengembalikan konten secara bertahap, bukan menunggu respons lengkap sekaligus. Hal ini mencegah terjadinya timeout sisi client akibat panggilan non-streaming berdurasi panjang saat memproses gambar besar:
stream = client.chat.completions.create(
    model="qwen-vl-plus",
    messages=[...],
    stream=True
)
for chunk in stream:
    print(chunk.choices[0].delta.content)
  • Mekanisme retry: Rancang logika retry panggilan API yang masuk akal, seperti exponential backoff, untuk menangani fluktuasi jaringan atau ketidaktersediaan layanan sementara.

Penagihan dan pembatasan laju

  • Penagihan:Total biaya dihitung berdasarkan jumlah total token input dan output. Harga token input dan output tersedia di Konsol Model Studio.

    • Komposisi token:Token input terdiri dari token teks dan token yang dikonversi dari gambar atau video. Token output adalah teks yang dihasilkan oleh model. Dalam mode thinking, proses berpikir model juga dihitung sebagai token output. Jika proses berpikir tidak ditampilkan dalam mode thinking, penagihan mengikuti harga untuk mode non-thinking.

    • Hitung token untuk gambar dan video:Gunakan kode berikut untuk menghitung konsumsi token gambar atau video. Hasil perkiraan hanya untuk referensi. Penggunaan aktual didasarkan pada respons API.

      Hitung token untuk gambar dan video

      Gambar

      Rumus: Image Tokens = h_bar * w_bar / token_pixels + 2

      • h_bar, w_bar: Tinggi dan lebar gambar yang telah diskalakan. Sebelum memproses gambar, model melakukan pra-pemrosesan untuk mengecilkan ukurannya hingga batas piksel tertentu. Batas ini bergantung pada nilai parameter max_pixels dan vl_high_resolution_images. Untuk informasi lebih lanjut, lihat Process high-resolution images.

      • token_pixels: Nilai piksel yang sesuai dengan setiap token visual. Nilai ini bervariasi tergantung model:

        • qwen3.8-series,qwen3.7-series, qwen3.6-series, qwen3.5-series, Qwen3-VL, qwen-vl-max, dan qwen-vl-plus:Setiap token sesuai dengan 32x32 piksel.
        • QVQ dan model Qwen2.5-VL lainnya:Setiap token sesuai dengan 28x28 piksel.

      Kode berikut menunjukkan logika penskalaan gambar perkiraan yang digunakan oleh model. Gunakan kode ini untuk memperkirakan token gambar. Untuk penagihan aktual, rujuk respons API.

      import math
      from PIL import Image  # pip install Pillow
      
      def smart_resize(image_path, max_pixels, vl_high_resolution_images):
          """Menghitung dimensi gambar yang diskalakan berdasarkan parameter model untuk memperkirakan token gambar."""
          image = Image.open(image_path)
          height, width = image.height, image.width
      
          # Faktor penskalaan adalah 32 untuk model seperti Qwen3.6, Qwen3.5, dan Qwen3-VL. Untuk model lain, nilainya 28.
          factor = 32
          h_bar = round(height / factor) * factor
          w_bar = round(width / factor) * factor
      
          # Batas bawah token: 4 token
          min_pixels = 4 * factor * factor
      
          # Jika vl_high_resolution_images=True, batas atas token tetap pada 16384, dan max_pixels diabaikan.
          if vl_high_resolution_images:
              max_pixels = 16384 * factor * factor
      
          # Membatasi jumlah total piksel ke rentang [min_pixels, max_pixels].
          if h_bar * w_bar > max_pixels:
              beta = math.sqrt((height * width) / max_pixels)
              h_bar = math.floor(height / beta / factor) * factor
              w_bar = math.floor(width / beta / factor) * factor
          elif h_bar * w_bar < min_pixels:
              beta = math.sqrt(min_pixels / (height * width))
              h_bar = math.ceil(height * beta / factor) * factor
              w_bar = math.ceil(width * beta / factor) * factor
      
          return h_bar, w_bar
      
      if __name__ == "__main__":
          # Catatan: Nilai max_pixels dan vl_high_resolution_images harus sesuai dengan parameter yang diberikan saat memanggil model.
          h_bar, w_bar = smart_resize("xxx/test.jpg", max_pixels=2560 * 32 * 32, vl_high_resolution_images=False)
          print(f"Dimensi gambar yang diskalakan: Tinggi {h_bar}, Lebar {w_bar}")
      
          # Setiap gambar mencakup satu token <vision_bos> dan satu token <vision_eos>.
          token = int(h_bar * w_bar / (32 * 32)) + 2
          print(f"Jumlah token gambar: {token}")
      

      Video

      • File video:

        Saat memproses file video, model pertama-tama mengekstraksi frame lalu menghitung jumlah total token untuk semua frame video. Karena perhitungan ini kompleks, Anda dapat menggunakan kode berikut untuk memperkirakan total konsumsi token video dengan memberikan path-nya:

      # Sebelum digunakan, instal: pip install opencv-python
      import math
      import os
      import logging
      import cv2
      
      logger = logging.getLogger(__name__)
      
      FRAME_FACTOR = 2
      
      # Untuk model seperti Qwen3.6, Qwen3.5, Qwen3-VL, qwen-vl-max-0813, qwen-vl-plus-0815, dan qwen-vl-plus-0710, faktor penskalaan gambar adalah 32.
      IMAGE_FACTOR = 32
      
      # Untuk model lain, faktor penskalaan gambar adalah 28.
      # IMAGE_FACTOR = 28
      
      # Rasio aspek maksimum untuk frame video
      MAX_RATIO = 200
      # Batas bawah piksel untuk frame video
      VIDEO_MIN_PIXELS = 4 * 32 * 32
      # Batas atas piksel untuk frame video. Untuk model Qwen3-VL-Plus, VIDEO_MAX_PIXELS adalah 640 * 32 * 32. Untuk model lain, nilainya 768 * 32 * 32.
      VIDEO_MAX_PIXELS = 640 * 32 * 32
      
      # Jika pengguna tidak memberikan parameter FPS, nilai default digunakan untuk fps.
      FPS = 2.0
      # Jumlah minimum frame yang diekstraksi
      FPS_MIN_FRAMES = 4
      # Jumlah maksimum frame yang diekstraksi (ditetapkan berdasarkan model yang dipilih)
      FPS_MAX_FRAMES = 2000
      
      # Nilai piksel maksimum untuk input video. Untuk model Qwen3-VL-Plus, atur VIDEO_TOTAL_PIXELS ke 131072 * 32 * 32. Untuk model lain, atur ke 65536 * 32 * 32.
      VIDEO_TOTAL_PIXELS = int(float(os.environ.get('VIDEO_TOTAL_PIXELS', 131072 * 32 * 32)))
      
      def round_by_factor(number: int, factor: int) -> int:
          """Mengembalikan bilangan bulat terdekat dengan 'number' yang habis dibagi 'factor'."""
          return round(number / factor) * factor
      
      def ceil_by_factor(number: int, factor: int) -> int:
          """Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan 'number' dan habis dibagi 'factor'."""
          return math.ceil(number / factor) * factor
      
      def floor_by_factor(number: int, factor: int) -> int:
          """Mengembalikan bilangan bulat terbesar yang lebih kecil dari atau sama dengan 'number' dan habis dibagi 'factor'."""
          return math.floor(number / factor) * factor
      
      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
      
      def smart_nframes(ele,total_frames,video_fps):
          """Menghitung jumlah frame video yang diekstraksi.
      
          Args:
              ele (dict): Kamus yang berisi konfigurasi video.
                  - fps: Mengontrol jumlah frame input yang diekstraksi untuk model.
              total_frames (int): Jumlah total frame asli dalam video.
              video_fps (int | float): Laju frame asli video.
      
          Raises:
              Kesalahan dilaporkan jika nframes tidak berada dalam interval [FRAME_FACTOR, total_frames].
      
          Returns:
              Jumlah frame video untuk input model.
          """
          assert not ("fps" in ele and "nframes" in ele), "Hanya menerima salah satu dari `fps` atau `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 harus berada dalam interval [{FRAME_FACTOR}, {total_frames}], tetapi mendapatkan {nframes}.")
      
          return nframes
      
      def get_video(video_path):
          # Mendapatkan informasi video
          cap = cv2.VideoCapture(video_path)
      
          frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
          # Mendapatkan tinggi video
          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):
          # Mendapatkan lebar dan tinggi asli video
          height, width, total_frames, video_fps = get_video(path)
          # Batas bawah token untuk frame video
          min_pixels = VIDEO_MIN_PIXELS
          total_pixels = VIDEO_TOTAL_PIXELS
          # Jumlah frame video yang diekstraksi
          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))
      
          # Rasio aspek video tidak boleh melebihi 200:1 atau 1:200.
          if max(height, width) / min(height, width) > MAX_RATIO:
              raise ValueError(
                  f"rasio aspek absolut harus lebih kecil dari {MAX_RATIO}, mendapatkan {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):
          # Berikan path video dan parameter ekstraksi frame 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"Dimensi video asli: {height}*{width}, Dimensi input model: {resized_height}*{resized_width}, Total frame video: {total_frames}, Total frame yang diekstraksi saat fps {fps}: {num_frames}", end=", ")
          video_token = int(math.ceil(num_frames / 2) * resized_height / 32 * resized_width / 32)
          video_token += 2   # Sistem secara otomatis menambahkan penanda visual <|vision_bos|> dan <|vision_eos|> (masing-masing 1 token).
          return video_token
      
      video_token = token_calculate("xxx/test.mp4", 1)
      print("Token video:", video_token)
      
      • Daftar gambar:

        Saat video diberikan sebagai daftar gambar, artinya ekstraksi frame telah dilakukan. Gunakan kode berikut untuk menghitung konsumsi token dengan memberikan path dan jumlah gambar:

      # Sebelum digunakan, instal: pip install Pillow
      import math
      import os
      import logging
      from typing import Tuple
      from PIL import Image
      
      logger = logging.getLogger(__name__)
      
      # ==================== Definisi Konstanta ====================
      FRAME_FACTOR = 2
      # Untuk model seperti Qwen3-VL, qwen-vl-max-0813, qwen-vl-plus-0815, dan qwen-vl-plus-0710, faktor penskalaan adalah 32.
      IMAGE_FACTOR = 32
      
      # Untuk model lain, faktor penskalaan adalah 28.
      # IMAGE_FACTOR = 28
      
      # Konstanta untuk perhitungan token
      TOKEN_DIVISOR = 32  # Pembagi untuk perhitungan token
      VISION_SPECIAL_TOKENS = 2  # Penanda <|vision_bos|> dan <|vision_eos|>
      
      # Rasio aspek maksimum untuk frame video
      MAX_RATIO = 200
      # Batas bawah piksel untuk frame video
      VIDEO_MIN_PIXELS = 4 * 32 * 32
      # Batas atas piksel untuk frame video. Untuk model Qwen3-VL-Plus, VIDEO_MAX_PIXELS adalah 640 * 32 * 32. Untuk model lain, nilainya 768 * 32 * 32.
      VIDEO_MAX_PIXELS = 640 * 32 * 32
      
      # Nilai piksel maksimum untuk input video. Untuk model Qwen3-VL-Plus, atur VIDEO_TOTAL_PIXELS ke 131072 * 32 * 32. Untuk model lain, atur ke 65536 * 32 * 32.
      VIDEO_TOTAL_PIXELS = int(float(os.environ.get('VIDEO_TOTAL_PIXELS', 131072 * 32 * 32)))
      
      def round_by_factor(number: int, factor: int) -> int:
          """Mengembalikan bilangan bulat terdekat dengan 'number' yang habis dibagi 'factor'."""
          return round(number / factor) * factor
      
      def ceil_by_factor(number: int, factor: int) -> int:
          """Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan 'number' dan habis dibagi 'factor'."""
          return math.ceil(number / factor) * factor
      
      def floor_by_factor(number: int, factor: int) -> int:
          """Mengembalikan bilangan bulat terbesar yang lebih kecil dari atau sama dengan 'number' dan habis dibagi 'factor'."""
          return math.floor(number / factor) * factor
      
      def get_image_size(image_path: str) -> Tuple[int, int]:
          if not os.path.exists(image_path):
              raise FileNotFoundError(f"File gambar tidak ditemukan: {image_path}")
      
          try:
              image = Image.open(image_path)
              height = image.height
              width = image.width
              image.close()  # Tutup file segera
              return height, width
          except Exception as e:
              raise ValueError(f"Tidak dapat membaca file gambar {image_path}: {str(e)}")
      
      def smart_resize(height: int, width: int, nframes: int, factor: int = IMAGE_FACTOR) -> Tuple[int, int]:
          """
          Menghitung dimensi gambar yang diskalakan
      
          Args:
              height: Tinggi gambar asli
              width: Lebar gambar asli
              nframes: Jumlah frame video
              factor: Faktor penskalaan, default ke IMAGE_FACTOR
      
          Returns:
              (resized_height, resized_width) Tinggi dan lebar yang diskalakan
      
          Raises:
              ValueError: Rasio aspek melebihi batas
          """
          # Batas bawah token untuk frame video
          min_pixels = VIDEO_MIN_PIXELS
          total_pixels = VIDEO_TOTAL_PIXELS
          # Jumlah frame video yang diekstraksi
          max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR), int(min_pixels * 1.05))
      
          # Rasio aspek video tidak boleh melebihi 200:1 atau 1:200.
          aspect_ratio = max(height, width) / min(height, width)
          if aspect_ratio > MAX_RATIO:
              raise ValueError(
                  f"Rasio aspek gambar harus kurang dari {MAX_RATIO}:1, tetapi saat ini {aspect_ratio:.2f}:1"
              )
      
          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 calculate_video_tokens(image_path: str, nframes: int = 1, factor: int = IMAGE_FACTOR, verbose: bool = True) -> int:
          """
      
          Args:
              image_path: Path ke file frame video
              nframes: Jumlah frame video,
              factor: Faktor penskalaan, default ke IMAGE_FACTOR
              verbose: Apakah akan mencetak informasi detail
      
          Returns:
              Jumlah token yang dikonsumsi
      
          Raises:
              FileNotFoundError: File tidak ada
              ValueError: Format file tidak valid atau rasio aspek melebihi batas
          """
          # Mendapatkan dimensi gambar asli (baca hanya sekali)
          height, width = get_image_size(image_path)
      
          # Menghitung dimensi yang diskalakan
          resized_height, resized_width = smart_resize(height, width, nframes, factor)
      
          # Menghitung jumlah token
          # Rumus: ceil(nframes/2) * (height/TOKEN_DIVISOR) * (width/TOKEN_DIVISOR) + VISION_SPECIAL_TOKENS
          video_token = int(
              math.ceil(nframes / 2) *
              (resized_height / TOKEN_DIVISOR) *
              (resized_width / TOKEN_DIVISOR)
          )
          # Tambahkan token penanda visual (<|vision_bos|> dan <|vision_eos|>)
          video_token += VISION_SPECIAL_TOKENS
      
          if verbose:
              print(f"Dimensi frame video asli: {height}x{width}, Dimensi input model: {resized_height}x{resized_width}, ", end="")
      
          return video_token
      
      if __name__ == "__main__":
          try:
              video_token = calculate_video_tokens("xxx/test.jpg", nframes=30)
              print(f"Token video: {video_token}\n")
          except Exception as e:
              print(f"Kesalahan: {str(e)}\n")
      
  • Lihat tagihan:Lihat tagihan atau isi ulang akun Anda di halaman Biaya dan Pengeluaran di Konsol Manajemen Alibaba Cloud.

  • Pembatasan laju:Untuk informasi lebih lanjut tentang kondisi pembatasan laju untuk model pemahaman visual, lihat Pembatasan laju.

  • Kuota gratis(Hanya wilayah Singapura): Kuota gratis sebesar 1 juta token disediakan untuk model pemahaman visual. Periode validitas 90 hari dimulai sejak tanggal Anda mengaktifkan Model Studio atau permintaan model Anda disetujui.

Referensi API

Untuk informasi lebih lanjut mengenai parameter input dan output model pemahaman visual, lihat generasi teks.

FAQ

Bagaimana cara memilih metode unggah file?

Pilih metode unggah yang paling sesuai berdasarkan jenis SDK, ukuran file, dan stabilitas jaringan.

Jenis file

Spesifikasi file

DashScope SDK (Python, Java)

Kompatibel dengan OpenAI / DashScope HTTP

Image

Lebih dari 7 MB dan kurang dari 10 MB

Gunakan path lokal

Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service

Kurang dari 7 MB

Gunakan path lokal

Base64 encoding

Video

Lebih dari 100 MB

Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service

Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service

Lebih dari 7 MB dan kurang dari 100 MB

Gunakan path lokal

Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service

Kurang dari 7 MB

Gunakan path lokal

Base64 encoding

Base64 encoding meningkatkan ukuran data. Ukuran file asli harus kurang dari 7 MB.

Gunakan Base64 atau path lokal untuk menghindari timeout unduhan di sisi server dan meningkatkan stabilitas.

Bagaimana cara memampatkan gambar atau video agar sesuai ukuran yang diminta?

Model pemahaman visual memiliki batas ukuran untuk file input. Gunakan metode berikut untuk memampatkan file Anda.

Metode kompresi gambar

  • Alat online: Gunakan alat online seperti CompressJPEG untuk memampatkan gambar.
  • Perangkat lunak lokal: Gunakan perangkat lunak seperti Photoshop untuk menyesuaikan kualitas saat mengekspor.
  • Implementasi kode:
# 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)

# Gunakan gambar lokal
compress_image("/xxx/before-large.jpeg","/xxx/after-min.jpeg")

# Kompresi batch gambar dalam direktori
import glob
import os

def batch_compress(input_dir, output_dir, quality=85):
    files = (
        glob.glob(os.path.join(input_dir, "*.jpg"))
        + glob.glob(os.path.join(input_dir, "*.jpeg"))
        + glob.glob(os.path.join(input_dir, "*.png"))
    )
    for i, f in enumerate(files, 1):
        try:
            compress_image(f, os.path.join(output_dir, os.path.basename(f)), quality)
            print(f"[{i}/{len(files)}] {os.path.basename(f)} selesai")
        except Exception as e:
            print(f"[{i}/{len(files)}] {os.path.basename(f)} error: {e}")

batch_compress("/xxx/input_dir", "/xxx/output_dir")

Metode kompresi video

  • Alat online: Gunakan alat online seperti FreeConvert untuk memampatkan video.
  • Perangkat lunak lokal: Gunakan perangkat lunak seperti HandBrake.
  • Implementasi kode: Gunakan tool FFmpeg. Untuk informasi lebih lanjut, lihat website resmi FFmpeg.
# Perintah transformasi dasar
# -i, fungsi: path file input, contoh: input.mp4
# -vcodec, fungsi: penyandi video, nilai umum termasuk libx264 (umumnya direkomendasikan) dan libx265 (rasio kompresi lebih tinggi)
# -crf, fungsi: mengontrol kualitas video, rentang nilai: [18-28]. Semakin kecil nilainya, semakin tinggi kualitas dan semakin besar ukuran file.
# --preset, fungsi: mengontrol keseimbangan antara kecepatan encoding dan efisiensi kompresi. Nilai umum termasuk slow, fast, dan faster.
# -y, fungsi: menimpa file yang sudah ada (tidak perlu nilai)
# output.mp4, fungsi: path file output

ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4

Setelah model menghasilkan hasil lokasi objek, bagaimana cara menggambar bingkai deteksi pada gambar asli?

Setelah model pemahaman visual mengembalikan hasil lokasi objek, Anda dapat menggunakan kode berikut untuk menggambar bingkai deteksi beserta informasi label-nya pada gambar asli.

  • Qwen2.5-VL: Koordinat yang dikembalikan adalah nilai absolut dalam piksel, relatif terhadap pojok kiri atas gambar yang telah diskalakan. Untuk menggambar bingkai deteksi, lihat kode dalam qwen2_5_vl_2d.py.
  • Seri Qwen3-VL, Qwen3.5, Qwen3.6, dan Qwen3.7 (seperti qwen3.5-plus, qwen3.6-plus, dan qwen3.7-plus): Koordinat yang dikembalikan bersifat relatif dan dinormalisasi ke rentang [0, 999]. Untuk menggambar bingkai deteksi, lihat kode dalam qwen3_vl_2d.py (posisi 2D) atau qwen3_vl_3d.zip (posisi 3D).

Kode error

Jika pemanggilan model gagal, pesan error akan dikembalikan. Untuk informasi tentang cara mengatasi error tersebut, lihat Kode error.