全部产品
Search
文档中心

Alibaba Cloud Model Studio:Pemahaman visual (Qwen-VL)

更新时间:Jan 29, 2026

Qwen-VL 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 berbasis visual (visual question answering), dan deteksi objek.

Wilayah yang didukung: Singapura, Virginia, dan Beijing. Gunakan Kunci API untuk setiap wilayah yang sesuai.

Coba secara online: Vision (Singapura), Vision (Virginia), atau Vision (Beijing)

Mulai

Prasyarat

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

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os

client = OpenAI(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="qwen3-vl-plus",  # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/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": "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 atas pasir, dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak sedang berinteraksi, dengan kaki depan anjing bertumpu pada tangan orang tersebut. Sinar matahari datang dari sisi kanan bingkai, menambah suasana hangat pada adegan ini.

Node.js

import OpenAI from "openai";

const openai = new OpenAI({
  // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
  // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
   // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
  // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

async function main() {
  const response = await openai.chat.completions.create({
    model: "qwen3-vl-plus",   // Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/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: "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 atas pasir, dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak sedang berinteraksi, dengan kaki depan anjing bertumpu pada tangan orang tersebut. Sinar matahari datang dari sisi kanan bingkai, menambah suasana hangat pada adegan ini.

curl

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
  "model": "qwen3-vl-plus",
  "messages": [
    {"role": "user",
     "content": [
        {"type": "image_url", "image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
        {"type": "text", "text": "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 atas pasir, dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak sedang berinteraksi, dengan kaki depan anjing bertumpu pada tangan orang tersebut. Sinar matahari datang dari sisi kanan bingkai, menambah suasana hangat pada adegan ini.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 1270,
    "completion_tokens": 54,
    "total_tokens": 1324
  },
  "created": 1725948561,
  "system_fingerprint": null,
  "model": "qwen3-vl-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
{
    "role": "user",
    "content": [
    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
    {"text": "Apa yang digambarkan dalam gambar ini?"}]
}]

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

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

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, terdapat seorang wanita dan seekor anjing. Wanita tersebut duduk di atas pasir sambil tersenyum dan berinteraksi dengan anjingnya. Anjing tersebut mengenakan kalung dan tampak sedang bersalaman dengan wanita tersebut. Latar belakangnya adalah laut dan langit, serta 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 {
    
    // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
    // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
    static {
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation(); 
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("text", "Apa yang digambarkan dalam gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")  //  Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Tanggapan

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

curl

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah berbeda berbeda. 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://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
                    {"text": "Apa yang digambarkan dalam gambar ini?"}
                ]
            }
        ]
    }
}'

Tanggapan

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

Pemilihan model

  • Untuk tugas seperti pengenalan dan pelokalisasian objek berpresisi tinggi (termasuk pelokalisasian 3D), pemanggilan alat oleh agen, penguraian dokumen dan halaman web, penyelesaian masalah kompleks, serta pemahaman video panjang, Qwen3-VL adalah pilihan utama. Perbandingan model dalam seri ini adalah sebagai berikut:

    • qwen3-vl-plus: Model paling kuat.

    • qwen3-vl-flash: Model ini lebih cepat dan hemat biaya. Ini merupakan opsi bernilai tinggi yang menyeimbangkan performa dan biaya, cocok untuk skenario yang sensitif terhadap kecepatan respons.

  • Untuk tugas sederhana seperti pembuatan keterangan gambar dan ekstraksi ringkasan video pendek, Anda dapat memilih Qwen2.5-VL. Perbandingan model dalam seri ini adalah sebagai berikut:

    • qwen-vl-max: Model dengan performa terbaik dalam seri Qwen2.5-VL.

    • qwen-vl-plus (bagian dari Qwen2.5-VL): Model ini lebih cepat dan memberikan keseimbangan yang baik antara performa dan biaya.

Untuk nama model, konteks, harga, dan versi snapshot, lihat Daftar model. Untuk batasan permintaan konkuren, lihat Pembatasan laju.

Perbandingan fitur model

Model

Pemikiran mendalam

Pemanggilan alat

Cache konteks

Output terstruktur

Bahasa yang dideteksi

Seri Qwen3-VL

Dukungan

Dukungan

Didukung oleh versi stabil qwen3-vl-plus dan qwen3-vl-flash

Didukung dalam mode non-pemikiran

33 bahasa: Tionghoa, Jepang, Korea, Indonesia, Vietnam, Thailand, Inggris, Prancis, Jerman, Rusia, Portugis, Spanyol, Italia, Swedia, Denmark, Ceko, Norwegia, Belanda, Finlandia, Turki, Polandia, Swahili, Rumania, Serbia, Yunani, Kazakh, Uzbek, Cebuano, Arab, Urdu, Persia, Hindi/Devanagari, dan Ibrani.

Seri Qwen2.5-VL

Tidak didukung

Tidak didukung

Didukung oleh versi stabil qwen-vl-max dan qwen-vl-plus

Didukung oleh versi stabil dan terbaru qwen-vl-max dan qwen-vl-plus

11 bahasa: Tionghoa, Inggris, Jepang, Korea, Arab, Vietnam, Prancis, Jerman, Italia, Spanyol, dan Rusia.

Ikhtisar performa

Menjawab pertanyaan berbasis visual

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

p1021359

Jika matahari menyilaukan, barang apa dari gambar ini yang harus saya gunakan?

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

Penulisan kreatif

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

vl-问答

Tolong bantu saya menulis postingan media sosial yang menarik berdasarkan konten gambar tersebut.

Tentu, gambar ini penuh dengan suasana Festival Pertengahan Musim Gugur yang kaya, dengan kombinasi cerdas antara unsur klasik dan modern. Berdasarkan elemen utama dalam gambar, saya telah menyiapkan beberapa postingan media sosial dalam gaya berbeda untuk Anda pilih.

Gaya puitis dan indah

Malam ini bulan bersinar terang dan semua orang menatapnya, bertanya-tanya ke mana pikiran musim gugur akan jatuh. Chang'e terbang ke bulan, dan Kelinci Giok menumbuk obat—romansa para leluhur menyala malam ini. Semoga bulan yang terang ini menerangi jalan pulang Anda dan membawa kerinduan terdalam saya. Selamat Hari Raya Pertengahan Musim Gugur!

Gaya hangat dan penuh berkah

Bulan purnama, dan keluarga berkumpul. Malam Pertengahan Musim Gugur adalah yang paling lembut. Saksikan kembang api mekar, kagumi bulan purnama di langit, ambil sepotong kue bulan, dan berharap untuk kedamaian dan kesehatan. Semoga semua yang Anda dan saya harapkan dalam hati menjadi kenyataan. Selamat Hari Raya Pertengahan Musim Gugur dan semoga keluarga Anda bahagia!

OCR dan ekstraksi informasi

Kenali teks dan rumus dalam gambar atau ekstrak informasi dari kwitansi, sertifikat, dan formulir, dengan dukungan output teks terformat. Model Qwen3-VL telah memperluas dukungan bahasanya hingga 33 bahasa. Untuk daftar bahasa yang didukung, lihat Perbandingan fitur model.

-q2cdz6jy89b6m3kp

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

{

"Kode Faktur": "221021325353",

"Nomor Faktur": "10283819",

"Tujuan": "Zona Pengembangan",

"Biaya Bahan Bakar": "2.0",

"Tarif": "8.00<Full>",

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

"Waktu Keberangkatan": "Serial",

"Nomor Kereta": "040",

"Nomor Kursi": "371"

}

Penyelesaian masalah multidisiplin

Selesaikan masalah dalam gambar, seperti masalah matematika, fisika, dan kimia. Fitur ini cocok untuk pendidikan dasar, menengah, perguruan tinggi, dan dewasa.

-5jwcstcvmdpqghaj

Harap selesaikan soal matematika dalam gambar tersebut langkah demi langkah.

-答案

Pengkodean visual

Hasilkan kode dari gambar atau video. Ini dapat digunakan untuk membuat kode HTML, CSS, dan JS dari sketsa desain, tangkapan layar situs web, dan lainnya.

code

Rancang halaman web menggunakan HTML dan CSS berdasarkan sketsa saya, dengan warna hitam sebagai warna utama.

code-预览

Pratinjau halaman web

Pelokalisasian objek

Model mendukung pelokalisasian 2D dan 3D, yang dapat digunakan untuk menentukan orientasi objek, perubahan perspektif, dan hubungan oklusi. Pelokalisasian 3D adalah fitur baru dari model Qwen3-VL.

Untuk model Qwen2.5-VL, deteksi objek kuat dalam rentang resolusi 480 × 480 hingga 2560 × 2560. Di luar rentang ini, akurasi deteksi dapat menurun, dengan sesekali terjadi deviasi Kotak pembatas.
Untuk informasi lebih lanjut tentang cara menggambar hasil pelokalisasian pada gambar asli, lihat FAQ.

Pelokalisasian 2D

-530xdcos1lqkcfuy

  • Kembalikan koordinat Box (Kotak pembatas): Deteksi semua item makanan dalam gambar dan keluarkan koordinat bbox-nya dalam format JSON.

  • Kembalikan koordinat Point (Pusat): Lokalisasi semua item makanan dalam gambar sebagai titik dan keluarkan koordinat titiknya dalam format XML.

Visualisasi hasil pelokalisasian 2D

-mu9podu1eyvph1zd

Pelokalisasian 3D

3d

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

Visualisasi hasil pelokalisasian 3D

3d-结果

Penguraian dokumen

Uraikan dokumen berbasis gambar, seperti 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 dokumen ke dalam format Markdown.

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

image

qwenvl markdown.

-结果

Visualisasi hasil

Pemahaman video

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

Harap jelaskan rangkaian tindakan orang dalam video tersebut. Keluarkan dalam format JSON dengan start_time, end_time, dan event. Harap gunakan HH:mm:ss untuk timestamp.

{

"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 lalu mengambil pena untuk menulis informasi di buku catatan."}]

}

Kemampuan inti

Aktifkan atau nonaktifkan mode pemikiran

  • Model seri qwen3-vl-plus dan qwen3-vl-flash adalah model pemikiran hibrida. Model ini dapat merespons setelah berpikir atau merespons langsung. Gunakan parameter enable_thinking untuk mengontrol apakah mode pemikiran diaktifkan:

    • true: Mode pemikiran diaktifkan.

    • false (default): Menonaktifkan mode pemikiran.

  • Model dengan akhiran thinking, seperti qwen3-vl-235b-a22b-thinking, adalah model pemikiran saja. Model ini selalu berpikir sebelum merespons, dan Anda tidak dapat menonaktifkan fitur ini.

Penting
  • Konfigurasi model: Dalam skenario percakapan umum yang tidak melibatkan pemanggilan alat oleh agen, kami merekomendasikan agar Anda tidak mengatur System Message untuk mempertahankan performa optimal. Anda dapat meneruskan instruksi seperti pengaturan peran model dan persyaratan format output melalui User Message.

  • Utamakan keluaran streaming: Saat mode pemikiran diaktifkan, keluaran streaming dan non-streaming didukung. Untuk menghindari timeout karena konten respons yang panjang, kami merekomendasikan agar Anda mengutamakan penggunaan keluaran streaming.

  • Batasi panjang pemikiran: Model pemikiran mendalam terkadang menghasilkan proses penalaran yang panjang. Anda dapat menggunakan parameter thinking_budget untuk membatasi panjang proses pemikiran. Jika jumlah token yang dihasilkan selama proses pemikiran model melebihi thinking_budget, konten penalaran dipotong, dan model segera mulai menghasilkan respons akhir. Nilai default thinking_budget adalah panjang maksimum rantai-pikiran model, yang tercantum di Model.

Kompatibel dengan OpenAI

Parameter enable_thinking bukanlah parameter standar OpenAI. Jika Anda menggunakan SDK OpenAI untuk Python, Anda dapat meneruskannya melalui extra_body.

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

reasoning_content = ""  # Definisikan proses pemikiran lengkap
answer_content = ""     # Definisikan respons lengkap
is_answering = False   # Tentukan apakah akan mengakhiri proses pemikiran dan mulai merespons
enable_thinking = True
# Buat permintaan penyelesaian chat
completion = client.chat.completions.create(
    model="qwen3-vl-plus",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
                    },
                },
                {"type": "text", "text": "Bagaimana cara menyelesaikan masalah ini?"},
            ],
        },
    ],
    stream=True,
    # Parameter enable_thinking mengaktifkan proses pemikiran, dan parameter thinking_budget menetapkan jumlah maksimum token untuk proses penalaran.
    # Untuk qwen3-vl-plus dan qwen3-vl-flash, pemikiran dapat diaktifkan atau dinonaktifkan dengan enable_thinking. Untuk model dengan akhiran 'thinking', seperti qwen3-vl-235b-a22b-thinking, enable_thinking hanya dapat diatur ke true. Ini tidak berlaku untuk model Qwen-VL lainnya.
    extra_body={
        'enable_thinking': enable_thinking,
        "thinking_budget": 81920},

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

if enable_thinking:
    print("\n" + "=" * 20 + "Proses Pemikiran" + "=" * 20 + "\n")

for chunk in completion:
    # Jika chunk.choices kosong, cetak penggunaan
    if not chunk.choices:
        print("\nPenggunaan:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        # Cetak proses pemikiran
        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 merespons
            if delta.content != "" and is_answering is False:
                print("\n" + "=" * 20 + "Respons Lengkap" + "=" * 20 + "\n")
                is_answering = True
            # Cetak proses respons
            print(delta.content, end='', flush=True)
            answer_content += delta.content

# print("=" * 20 + "Proses Pemikiran Lengkap" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "Respons Lengkap" + "=" * 20 + "\n")
# print(answer_content)
import OpenAI from "openai";

// Inisialisasi klien OpenAI
const openai = new OpenAI({
  // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
  // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
  // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

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

let messages = [
    {
        role: "user",
        content: [
        { type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
        { type: "text", text: "Selesaikan masalah ini" },
    ]
}]

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

        });

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

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

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

            // Proses proses pemikiran
            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();
# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen3-vl-plus",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
          }
        },
        {
          "type": "text",
          "text": "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

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"

enable_thinking=True

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
            {"text": "Selesaikan masalah ini?"}
        ]
    }
]

response = MultiModalConversation.call(
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    # Kunci API untuk wilayah berbeda berbeda. 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-vl-plus",  
    messages=messages,
    stream=True,
    # Parameter enable_thinking mengaktifkan proses pemikiran.
    # Untuk qwen3-vl-plus dan qwen3-vl-flash, pemikiran dapat diaktifkan atau dinonaktifkan dengan enable_thinking. Untuk model dengan akhiran 'thinking', seperti qwen3-vl-235b-a22b-thinking, enable_thinking hanya dapat diatur ke true. Ini tidak berlaku untuk model Qwen-VL lainnya.
    enable_thinking=enable_thinking,
    # Parameter thinking_budget menetapkan jumlah maksimum token untuk proses penalaran.
    thinking_budget=81920,

)

# Definisikan proses pemikiran lengkap
reasoning_content = ""
# Definisikan respons lengkap
answer_content = ""
# Tentukan apakah akan mengakhiri proses pemikiran dan mulai merespons
is_answering = False

if enable_thinking:
    print("=" * 20 + "Proses Pemikiran" + "=" * 20)

for chunk in response:
    # Jika proses pemikiran dan respons keduanya 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 dalam proses pemikiran
        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 merespons
        elif chunk.output.choices[0].message.content != []:
            if not is_answering:
                print("\n" + "=" * 20 + "Respons Lengkap" + "=" * 20)
                is_answering = True
            print(chunk.output.choices[0].message.content[0]["text"], end="")
            answer_content += chunk.output.choices[0].message.content[0]["text"]

# Untuk mencetak proses pemikiran lengkap dan respons lengkap, hapus komentar dan jalankan kode berikut
# print("=" * 20 + "Proses Pemikiran Lengkap" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Respons Lengkap" + "=" * 20 + "\n")
# print(f"{answer_content}")
// Versi SDK DashScope >= 2.21.10
import java.util.*;

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

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

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

public class Main {
   // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
  // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
    static {Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";}

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

    private static void handleGenerationResult(MultiModalConversationResult message) {
        String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
        String reasoning = Objects.isNull(re)?"":re; // 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 Pemikiran====================");
                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 Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: .apiKey("sk-xxx")
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(Msg))
                .enableThinking(true)
                .thinkingBudget(81920)
                .incrementalOutput(true)
                .build();
    }

    public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
            throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
        MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
        Flowable<MultiModalConversationResult> result = conv.streamCall(param);
        result.blockingForEach(message -> {
            handleGenerationResult(message);
        });
    }
    public static void main(String[] args) {
        try {
            MultiModalConversation conv = new MultiModalConversation();
            MultiModalMessage userMsg = MultiModalMessage.builder()
                    .role(Role.USER.getValue())
                    .content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
                            Collections.singletonMap("text", "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 pengecualian: {}", e.getMessage());
        }
        System.exit(0);
    }
}
# ======= Penting =======
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === Hapus komentar ini sebelum eksekusi ===

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

Input gambar ganda

Qwen-VL mendukung meneruskan beberapa gambar dalam satu permintaan, yang dapat digunakan untuk tugas seperti perbandingan produk dan pemrosesan dokumen multipage. Untuk melakukan ini, Anda dapat menyertakan beberapa objek gambar dalam array user message's content.

Penting

Jumlah gambar dibatasi oleh batas total token model untuk teks dan gambar. Jumlah total token untuk semua gambar dan teks harus kurang dari input maksimum model.

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-vl-plus",  #  Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/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": "Apa yang digambarkan dalam gambar-gambar ini?"},
            ],
        }
    ],
)

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

Tanggapan

Gambar 1 menunjukkan adegan seorang wanita dan seekor Labrador retriever berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di atas pasir, bersalaman dengan anjing tersebut. Latar belakangnya adalah ombak laut dan langit, serta keseluruhan gambar dipenuhi suasana hangat dan menyenangkan.

Gambar 2 menunjukkan adegan seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam, dan ia sedang melangkah maju. Sekelilingnya adalah pepohonan dan vegetasi yang lebat, serta tanahnya ditutupi daun-daun yang gugur. Keseluruhan gambar memberikan perasaan alam liar.

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  // Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/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: "Apa yang digambarkan dalam 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 bersalaman atau tepuk tangan.

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

curl

# ======= Penting =======
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
          }
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"
          }
        },
        {
          "type": "text",
          "text": "Apa yang digambarkan dalam gambar-gambar ini?"
        }
      ]
    }
  ]
}'

Tanggapan

{
  "choices": [
    {
      "message": {
        "content": "Gambar 1 menunjukkan adegan seorang wanita dan seekor Labrador retriever berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di atas pasir, bersalaman dengan anjing tersebut. Latar belakangnya adalah pemandangan laut dan langit senja, serta keseluruhan gambar terlihat sangat hangat dan harmonis.\n\nGambar 2 menunjukkan adegan seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam, dan ia sedang melangkah maju. Sekelilingnya adalah pepohonan dan vegetasi yang lebat, serta tanahnya ditutupi daun-daun yang gugur. Keseluruhan gambar penuh dengan kehidupan liar alami 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-vl-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
            {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
            {"text": "Apa yang digambarkan dalam gambar-gambar ini?"}
        ]
    }
]

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

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

Hasil kembalian

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 {
    // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
   // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"),
                        Collections.singletonMap("text", "Apa yang digambarkan dalam gambar-gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")  //  Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));    }
    public static void main(String[] args) {
        try {
            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 atas pasir, sedangkan anjing tersebut mengenakan kalung dan mengulurkan kakinya untuk bersalaman 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

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
                    {"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
                    {"text": "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

Qwen-VL mendukung pemahaman konten video. Anda dapat menyediakan file dalam bentuk daftar gambar (frame video) atau file video. Berikut adalah contoh kode untuk memahami video online atau daftar gambar yang ditentukan oleh URL. Untuk informasi lebih lanjut tentang batasan video atau jumlah gambar yang dapat diteruskan dalam daftar gambar, lihat bagian Batasan video.

Gunakan versi snapshot terbaru atau terkini dari model untuk performa yang lebih baik dalam memahami file video.

File video

Qwen-VL menganalisis konten dengan mengekstraksi rangkaian frame dari video. Frekuensi ekstraksi frame menentukan tingkat detail dalam analisis model. SDK berbeda memiliki frekuensi ekstraksi frame yang berbeda. Anda dapat mengontrol frekuensi ekstraksi frame menggunakan parameter fps. Parameter ini menentukan bahwa satu frame diekstraksi setiap detik. Rentang nilainya adalah [0.1, 10] dan nilai default-nya adalah 2.0. Kami merekomendasikan agar Anda mengatur fps yang lebih tinggi untuk adegan gerakan cepat dan fps yang lebih rendah untuk video statis atau panjang.

Qwen-VL menganalisis konten dengan mengekstraksi rangkaian frame dari video. Gunakan parameter berikut untuk mengontrol kebijakan ekstraksi frame:

  • fps: Mengontrol frekuensi. Satu frame setiap detik. Rentang nilainya adalah [0.1, 10] dan nilai default-nya adalah 2.0.

    • Adegan gerakan cepat: Nilai lebih tinggi untuk detail lebih banyak.

    • Video statis atau panjang: Nilai lebih rendah untuk efisiensi.

  • max_frames: Batas atas frame yang diekstraksi. Ketika jumlah yang dihitung berdasarkan fps melebihi max_frames, sistem secara otomatis dan merata mengambil sampel frame agar tetap dalam batas. Parameter ini hanya aktif untuk SDK DashScope.

Kompatibel dengan OpenAI

Saat Anda langsung memasukkan file video ke Qwen-VL menggunakan SDK OpenAI atau metode HTTP, Anda harus mengatur parameter "type" dalam pesan pengguna ke "video_url".

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API berbeda untuk setiap 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 Studio Model Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus",
    messages=[
        {
            "role": "user",
            "content": [
                # Saat meneruskan 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 isi video ini?"
                }
            ]
        }
    ]
)

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

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API berbeda untuk setiap 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 Studio Model Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut adalah baseURL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah baseURL menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",
        messages: [
            {
                role: "user",
                content: [
                    // Saat meneruskan 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 isi video ini?"
                    }
                ]
            }
        ]
    });

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

main();

curl

# ======= Penting =======
# Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
  -H "Authorization: Bearer $DASHSCOPE_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen3-vl-plus",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "video_url",
            "video_url": {
              "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
            },
            "fps":2
          },
          {
            "type": "text",
            "text": "Apa isi video ini?"
          }
        ]
      }
    ]
  }'

DashScope

Python

import dashscope
import os

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
    {"role": "user",
        "content": [
            # Parameter fps mengontrol frekuensi ekstraksi frame video, artinya satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat https://www.alibabacloud.com/help/en/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 isi video ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # Kunci API berbeda untuk setiap 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 Studio Model Anda: api_key ="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3-vl-plus',
    messages=messages
)

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

Java

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

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

public class Main {
   static {
            // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
            // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
            Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
        }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Parameter fps mengontrol frekuensi ekstraksi frame video, artinya satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat https://www.alibabacloud.com/help/en/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 isi video ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Jika Anda menggunakan model di wilayah China (Beijing), Anda harus menggunakan Kunci API dari wilayah China (Beijing). Dapatkan Kunci API di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Studio Model Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API berbeda untuk setiap 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://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {"role": "user","content": [{"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "Apa isi video ini?"}]}]}
}'

Daftar gambar

Saat video diteruskan sebagai daftar gambar (frame video yang telah diekstraksi sebelumnya), Anda dapat menggunakan parameter fps untuk memberi tahu model tentang interval waktu antar frame video. Hal ini membantu model lebih memahami urutan, durasi, dan perubahan dinamis peristiwa. Model mendukung menentukan laju frame asli video menggunakan parameter fps, yang menunjukkan bahwa frame video diekstraksi dari video asli setiap detik. Parameter ini didukung oleh model Qwen2.5-VL dan Qwen3-VL.

Kompatibel dengan OpenAI

Saat Anda memasukkan video sebagai daftar gambar ke model Qwen-VL menggunakan SDK OpenAI atau permintaan HTTP, Anda harus mengatur parameter "type" dalam pesan pengguna ke "video".

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ganti base_url dengan https://dashscope-us.aliyuncs.com/compatible-mode/v1.
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-vl-plus", # Contoh ini menggunakan qwen3-vl-plus. Ganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/models
    messages=[{"role": "user","content": [
        # Saat Anda memasukkan daftar gambar, atur parameter "type" dalam pesan pengguna ke "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 yang ditunjukkan dalam video ini"},
    ]}]
)

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

Node.js

// Pastikan bahwa Anda telah menentukan "type": "module" di file package.json.
import OpenAI from "openai";

const openai = new OpenAI({
    // Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: apiKey: "sk-xxx"
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Berikut adalah baseURL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ganti baseURL dengan https://dashscope-us.aliyuncs.com/compatible-mode/v1.
    // Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
    baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  // Contoh ini menggunakan qwen3-vl-plus. Ganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/models
        messages: [{
            role: "user",
            content: [
                {
                    // Saat Anda memasukkan daftar gambar, atur parameter "type" dalam pesan pengguna ke "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 yang ditunjukkan dalam video ini"
                }
            ]
        }]
    });
    console.log(response.choices[0].message.content);
}

main();

curl

# ======= Penting =======
# Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ganti base_url dengan https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions.
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions.
# === Hapus komentar ini sebelum Anda menjalankan perintah ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "messages": [{"role": "user","content": [{"type": "video","video": [
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                  "fps":2},
                {"type": "text","text": "Jelaskan proses yang ditunjukkan dalam video ini"}]}]
}'

DashScope

Python

import os
import dashscope

# Berikut adalah base_http_api_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ganti URL dengan https://dashscope-us.aliyuncs.com/api/v1.
# Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan https://dashscope.aliyuncs.com/api/v1.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  # Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen2.5-VL dan Qwen3-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 yang ditunjukkan dalam video ini"}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3-vl-plus',  # Contoh ini menggunakan qwen3-vl-plus. Ganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages
)
print(response.output.choices[0].message.content[0]["text"])

Java

// Versi SDK DashScope harus 2.21.10 atau lebih baru.
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;

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

public class Main {
    static {
        // Berikut adalah baseHttpApiUrl untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ganti URL dengan https://dashscope-us.aliyuncs.com/api/v1.
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan https://dashscope.aliyuncs.com/api/v1.
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    private static final String MODEL_NAME = "qwen3-vl-plus";  // Contoh ini menggunakan qwen3-vl-plus. Ganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/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 Qwen2.5-VL dan Qwen3-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 yang ditunjukkan dalam video ini")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Studio Model 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);
    }
}

curl

# ======= Penting =======
# Berikut adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ganti URL dengan https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation.
# Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation.
# Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum Anda menjalankan perintah ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
            ],
            "fps":2
                 
          },
          {
            "text": "Jelaskan proses yang ditunjukkan dalam video ini"
          }
        ]
      }
    ]
  }
}'

Kirim file lokal (encoding Base64 atau jalur file)

Qwen-VL menyediakan dua cara untuk mengunggah file lokal: encoding Base64 dan pengunggahan langsung melalui jalur file. Pilih metode unggah berdasarkan ukuran file dan jenis SDK. Untuk rekomendasi spesifik, lihat Cara memilih metode unggah file. Kedua metode harus memenuhi persyaratan file yang dijelaskan dalam Batasan gambar.

Unggah dengan encoding Base64

Ubah file menjadi string terenkripsi Base64, lalu kirimkan ke model. Metode ini didukung oleh SDK OpenAI dan DashScope, serta permintaan HTTP.

Langkah-langkah untuk mengirim string terenkripsi Base64 (contoh gambar)

  1. Pengodean file: Mengonversi gambar lokal ke format Base64.

    Kode contoh untuk mengonversi gambar ke encoding Base64

    # Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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 Data URL. Formatnya sebagai berikut: data:[MIME_type];base64,{base64_image}.

    1. Ganti MIME_type dengan tipe media sebenarnya. Pastikan nilainya sesuai dengan nilai MIME Type pada 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 Data URL melalui parameter image atau image_url, lalu panggil model.

Unggah melalui jalur file

Kirimkan jalur file lokal langsung ke model. Metode ini hanya didukung oleh SDK Python dan Java DashScope, tidak didukung oleh metode HTTP DashScope maupun metode kompatibel OpenAI.

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

Tentukan jalur file (menggunakan gambar sebagai contoh)

Sistem

SDK

Jalur file input

Contoh

Linux atau macOS

Python SDK

file://{jalur mutlak file}

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

Java SDK

Sistem operasi Windows

Python SDK

file://{jalur mutlak file}

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

Java SDK

file:///{jalur mutlak file}

file:///D:/images/test.pn

Gambar

Teruskan melalui jalur file

Python

import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.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': 'Apa yang digambarkan dalam gambar ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus',  # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])

Java

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

public class Main {

    static {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>(){{put("image", filePath);}},
                        new HashMap<String, Object>(){{put("text", "Apa yang digambarkan dalam gambar ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus")  // Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

    public static void main(String[] args) {
        try {
            // 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);
    }
}

Kirim dalam encoding Base64

Kompatibel OpenAI

Python

from openai import OpenAI
import os
import base64


#  Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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 untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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'),
    # Base_url berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus", # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # Kirim data gambar Base64. Perhatikan bahwa format gambar (yaitu image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung. "f" adalah metode 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": "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 untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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,
        // Base_url berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
// 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-vl-plus",  // Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
        messages: [
            {"role": "user",
            "content": [{"type": "image_url",
                            // Perhatikan bahwa saat mengirim Base64, format gambar (yaitu 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": "Apa yang digambarkan dalam gambar ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
} 

main();

curl

  • Untuk informasi lebih lanjut tentang metode mengonversi file menjadi string terenkripsi Base64, lihat Kode contoh.

  • Untuk keperluan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Anda harus mengirimkan string terenkripsi lengkap.

# ======= Penting =======
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

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

DashScope

Python

import base64
import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

#  Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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": [
            # Perhatikan bahwa saat mengirim Base64, format gambar (yaitu image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung. "f" adalah metode 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": "Apa yang digambarkan dalam gambar ini?"},
        ],
    },
]

response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus",  # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages,
)
print(response.output.choices[0].message.content[0]["text"])

Java

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

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

public class Main {

    static {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

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

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

        String base64Image = encodeImageToBase64(localPath); // 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", "Apa yang digambarkan dalam gambar ini?"); }}
                )).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();

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

    public static void main(String[] args) {
        try {
            // 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 contoh cara mengonversi file menjadi string terenkripsi Base64, lihat Kode contoh.

  • Untuk keperluan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Anda harus mengirimkan string terenkripsi lengkap.

# ======= Catatan Penting =======
# Base_url berikut untuk wilayah Singapura. Untuk menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Untuk menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API bersifat spesifik per wilayah. Untuk mendapatkan kunci API, kunjungi: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

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

File video

Contoh ini menggunakan file test.mp4 yang disimpan secara lokal.

Menggunakan jalur file

Python

import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.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, artinya satu frame diekstraksi setiap 1/fps detik.
                'content': [{'video': video_path,"fps":2},
                            {'text': 'Adegan apa yang digambarkan dalam video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus',  
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])

Java

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

public class Main {

    static {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>()
                                       {{
                                           put("video", filePath);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video, artinya satu frame diekstraksi setiap 1/fps detik.
                                           put("fps", 2);
                                       }}, 
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan dalam video ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus")  
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

    public static void main(String[] args) {
        try {
            // 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);
    }
}

Kirim dengan encoding Base64

Kompatibel OpenAI

Python

from openai import OpenAI
import os
import base64


# Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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 untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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'),
    # Base_url berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus",  
    messages=[
        {
            "role": "user",
            "content": [
                {
                    # Saat mengirim file video langsung, atur nilai type menjadi video_url
                    "type": "video_url",
                    "video_url": {"url": f"data:video/mp4;base64,{base64_video}"},
                    "fps":2
                },
                {"type": "text", "text": "Adegan apa yang digambarkan 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 untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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,
        // Base_url berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeVideo = (videoPath) => {
    const videoFile = readFileSync(videoPath);
    return videoFile.toString('base64');
  };
// 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-vl-plus", 
        messages: [
            {"role": "user",
             "content": [{
                 // Saat mengirim file video langsung, atur nilai type menjadi video_url
                "type": "video_url", 
                "video_url": {"url": `data:video/mp4;base64,${base64Video}`},
                "fps":2},
                 {"type": "text", "text": "Adegan apa yang digambarkan dalam video ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi lebih lanjut tentang metode mengonversi file menjadi string terenkripsi Base64, lihat Kode contoh.

  • Untuk keperluan tampilan, string terenkripsi Base64 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, Anda harus mengirimkan string terenkripsi lengkap.

# ======= Penting =======
# Kunci API bersifat spesifik per wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Base_url berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

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

DashScope

Python

import base64
import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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 diekstraksi dari video, artinya satu frame diekstraksi setiap 1/fps detik.
             'content': [{'video': f"data:video/mp4;base64,{base64_video}","fps":2},
                            {'text': 'Adegan apa yang digambarkan dalam video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus',
    messages=messages)

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

Java

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

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

public class Main {

    static {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    private static String encodeVideoToBase64(String videoPath) throws IOException {
        Path path = Paths.get(videoPath);
        byte[] videoBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(videoBytes);
    }

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

        String base64Video = encodeVideoToBase64(localPath); // 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, artinya satu frame diekstraksi setiap 1/fps detik.
                                           put("fps", 2);
                                       }},
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan dalam video ini?");}})).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();

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

    public static void main(String[] args) {
        try {
            // 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 lebih lanjut tentang metode mengonversi file menjadi string terenkripsi Base64, lihat Kode contoh.

  • Untuk keperluan tampilan, string terenkripsi Base64 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Anda harus mengirimkan string terenkripsi lengkap.

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah berbeda berbeda. 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://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"video": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "Adegan apa yang digambarkan dalam video ini? "}
                ]
            }
        ]
    }
}'

Daftar gambar

Contoh ini menggunakan file yang disimpan secara lokal: football1.jpg, football2.jpg, football3.jpg, dan football4.jpg.

Mengirim jalur file

Python

import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

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

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

messages = [{'role':'user',
                # Saat mengirim daftar gambar, parameter fps berlaku untuk model seri Qwen2.5-VL dan Qwen3-VL.
             'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
                         {'text': 'Adegan apa yang digambarkan dalam video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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-vl-plus',  # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages)

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

Java

// Versi SDK DashScope harus 2.21.10 atau lebih baru.
import java.util.Arrays;
import java.util.Map;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    private static final String MODEL_NAME = "qwen3-vl-plus";  // Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    public static void videoImageListSample(String localPath1, String localPath2, String localPath3, String localPath4)
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        String filePath1 = "file://" + localPath1;
        String filePath2 = "file://" + localPath2;
        String filePath3 = "file://" + localPath3;
        String filePath4 = "file://" + localPath4;
        Map<String, Object> params = new HashMap<>();
        params.put("video", Arrays.asList(filePath1,filePath2,filePath3,filePath4));
        // Saat mengirim daftar gambar, parameter fps berlaku untuk model seri Qwen2.5-VL dan Qwen3-VL.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Jelaskan proses spesifik dari video ini")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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);
    }
}

Input terenkripsi Base64

Kompatibel OpenAI

Python

import os
from openai import OpenAI
import base64

# Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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 untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3-vl-plus",  # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=[  
    {"role": "user","content": [
        {"type": "video","video": [
            f"data:image/jpeg;base64,{base64_image1}",
            f"data:image/jpeg;base64,{base64_image2}",
            f"data:image/jpeg;base64,{base64_image3}",
            f"data:image/jpeg;base64,{base64_image4}",]},
        {"type": "text","text": "Jelaskan proses spesifik dari video ini"},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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,
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
  
const base64Image1 = encodeImage("football1.jpg")
const base64Image2 = encodeImage("football2.jpg")
const base64Image3 = encodeImage("football3.jpg")
const base64Image4 = encodeImage("football4.jpg")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3-vl-plus",  // Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/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 dalam video ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi lebih lanjut tentang metode mengonversi file menjadi string terenkripsi Base64, lihat Kode contoh.

  • Untuk keperluan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Anda harus mengirimkan string terenkripsi lengkap.

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah berbeda berbeda. 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://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "messages": [{"role": "user",
                "content": [{"type": "video",
                "video": [
                          "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                          "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                          "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                          "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
                          ]},
                {"type": "text",
                "text": "Jelaskan proses spesifik dari video ini"}]}]
}'

DashScope

Python

import base64
import os
import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

#  Fungsi enkripsi: Mengonversi file lokal menjadi string terenkripsi 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': 'Tolong jelaskan proses spesifik dari video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah berbeda berbeda. 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-vl-plus',  # Contoh ini menggunakan qwen3-vl-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages)

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

Java

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

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

public class Main {

    static {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

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

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

        String base64Image1 = encodeImageToBase64(localPath1); // encoding 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 mengirim daftar gambar, parameter fps berlaku untuk model seri Qwen2.5-VL dan Qwen3-VL.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Jelaskan proses spesifik dari video ini")))
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3-vl-plus")
                .messages(Arrays.asList(userMessage))
                .build();

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

    public static void main(String[] args) {
        try {
            // Ganti xxx/football1.png dan 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 metode mengonversi file menjadi string terenkripsi Base64, lihat Kode contoh.

  • Untuk keperluan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Anda harus mengirimkan string terenkripsi lengkap.

# ======= Penting =======
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah berbeda berbeda. 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://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
                      "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                      "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                      "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                      "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
            ],
            "fps":2     
          },
          {
            "text": "Jelaskan proses spesifik dari video ini"
          }
        ]
      }
    ]
  }
}'

Proses gambar resolusi tinggi

API Qwen-VL memiliki batasan jumlah token visual untuk satu gambar setelah encoding. Dengan konfigurasi default, gambar resolusi 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, sehingga mempertahankan lebih banyak detail gambar dan meningkatkan pemahaman.

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

Jika gambar input memiliki lebih banyak piksel daripada batas piksel model, gambar tersebut akan diskalakan agar sesuai dalam batas tersebut.

Model

Piksel per token

vl_high_resolution_images

max_pixels

Batas token

Batas piksel

Seri model Qwen3-VL

32*32

true

max_pixels tidak valid

16384 token

16777216 (yaitu 16384*32*32)

false (default)

Dapat dikustomisasi. Nilai default adalah 2621440, dan maksimum adalah 16777216.

Ditentukan oleh max_pixels, yaitu max_pixels/32/32.

max_pixels

qwen-vl-max, qwen-vl-max-latest, qwen-vl-max-2025-08-13, qwen-vl-plus, qwen-vl-plus-latest, qwen-vl-plus-2025-08-15, dan model

32*32

true

max_pixels tidak valid

16384 token

16777216 (yaitu 16384*32*32)

false (default)

Dapat dikustomisasi. Nilai default adalah 1310720, dan maksimum adalah 16777216.

Ditentukan oleh max_pixels, yaitu max_pixels/32/32.

max_pixels

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

28*28

true

max_pixels tidak valid

16384 token

12845056 (yaitu 16384*28*28)

false (default)

Dapat dikustomisasi. Nilai default adalah 1003520, dan maksimum adalah 12845056.

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 berguna untuk mengenali teks halus, objek kecil, atau detail kaya dalam gambar.

  • Saat vl_high_resolution_images=false, batas piksel akhir ditentukan oleh nilai parameter max_pixels.

    • Untuk kecepatan pemrosesan tinggi atau skenario sensitif biaya, Anda dapat menggunakan nilai default max_pixels atau mengaturnya ke nilai yang lebih kecil.

    • Untuk fokus pada detail ketika kecepatan pemrosesan yang lebih rendah dapat diterima: Tingkatkan nilai max_pixels secara moderat.

Kompatibel OpenAI

vl_high_resolution_images bukan parameter standar OpenAI. Metode pengirimannya bervariasi antar SDK untuk bahasa berbeda:

  • Python SDK: Kirimkan parameter dalam kamus extra_body.

  • Node.js SDK: Kirimkan parameter langsung sebagai parameter tingkat atas.

Python

import os
import time
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
    # Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-vl-plus",
    messages=[
        {"role": "user","content": [
            {"type": "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, tetapi dapat dikustomisasi saat vl_high_resolution_images=False. Nilai maksimum bervariasi tergantung model.
            # "max_pixels": 16384 * 32 * 32
            },
           {"type": "text", "text": "Suasana festival apa yang ditunjukkan 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}")

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/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,
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const response = await openai.chat.completions.create({
        model: "qwen3-vl-plus",
        messages: [
        {role: "user",content: [
            {type: "image_url",
            image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
            // max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak efektif saat vl_high_resolution_images=True, tetapi dapat dikustomisasi saat vl_high_resolution_images=False. Nilai maksimum bervariasi tergantung model.
            // "max_pixels": 2560 * 32 * 32
            },
            {type: "text", text: "Suasana festival apa yang ditunjukkan 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);

curl

# ======= Catatan Penting =======
# Kunci API bersifat spesifik per wilayah. Untuk mendapatkan kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Base_url berikut untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3-vl-plus",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"
          }
        },
        {
          "type": "text",
          "text": "Suasana liburan apa yang digambarkan gambar ini?"
        }
      ]
    }
  ],
  "vl_high_resolution_images":true
}'

DashScope

Python

import os
import time

import dashscope

# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg",
            # max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True, tetapi dapat dikustomisasi saat vl_high_resolution_images=False. Nilai maksimum bervariasi tergantung model.
            # "max_pixels": 16384 * 32 * 32
            },
            {"text": "Suasana festival apa yang ditunjukkan 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 untuk wilayah berbeda berbeda. 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-vl-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)

Java

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 {
        // Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah AS (Virginia), ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1
        // Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        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, tetapi dapat dikustomisasi saat vl_high_resolution_images=False. Nilai maksimum bervariasi tergantung 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 ditunjukkan 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-vl-plus")
                .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);
    }
}

curl

# ======= Penting =======
# Kunci API untuk wilayah berbeda berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Virginia, ubah base_url menjadi https://dashscope-us.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3-vl-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
               {"text": "Suasana festival apa yang ditunjukkan 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 gambar tidak boleh melebihi 200:1.

    • Batasan piksel:

      • Pertahankan resolusi gambar dalam batas 8K (7680x4320). Gambar yang melebihi resolusi ini dapat menyebabkan timeout pada panggilan API karena ukuran file yang besar dan waktu transmisi jaringan yang lama.

      • Scaling otomatis: Model dapat menyesuaikan ukuran gambar menggunakan parameter max_pixels dan min_pixels. Oleh karena itu, menyediakan gambar dengan resolusi sangat tinggi tidak meningkatkan akurasi pengenalan, tetapi justru meningkatkan risiko kegagalan panggilan. Skalakan gambar ke ukuran yang wajar di sisi client terlebih dahulu.

  • Format gambar yang didukung

    • Untuk resolusi di bawah 4K (3840x2160), format gambar yang didukung adalah sebagai berikut:

      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:

    • Jika dikirimkan sebagai URL publik atau path lokal: Ukuran satu gambar tidak boleh melebihi 10 MB.

    • Jika dikirimkan sebagai string yang di-encode Base64: String yang di-encode tersebut tidak boleh melebihi 10 MB.

    Untuk informasi lebih lanjut tentang cara memampatkan ukuran file, lihat Cara memampatkan gambar atau video ke ukuran yang diperlukan.
  • Jumlah gambar yang didukung: Saat Anda mengirimkan beberapa gambar, jumlah gambar dibatasi oleh input maksimum model. Total jumlah token untuk semua gambar dan teks harus kurang dari input maksimum model.

    Sebagai contoh, jika Anda menggunakan model qwen3-vl-plus dalam mode thinking, input maksimumnya adalah 258048 token. Jika teks input menghabiskan 100 token dan setiap gambar menghabiskan 2560 token (untuk informasi tentang cara menghitung token gambar, lihat Billing dan rate limiting), maka Anda dapat mengirimkan maksimal (258048 - 100) / 2560 ≈ 100 gambar.

Batasan video

  • Saat dikirimkan sebagai daftar gambar, jumlah gambar dalam daftar dibatasi sebagai berikut:

    • Seri qwen3-vl-plus, seri qwen3-vl-flash, qwen3-vl-235b-a22b-thinking, dan qwen3-vl-235b-a22b-instruct: Minimal 4 gambar dan maksimal 2.000 gambar.

    • Model open source seri Qwen3-VL, Qwen2.5-VL (termasuk versi komersial dan open source), serta seri model QVQ: Minimal 4 gambar dan maksimal 512 gambar.

    • Model lainnya: Minimal 4 gambar dan maksimal 80 gambar.

  • Saat dikirimkan sebagai file video:

    • Ukuran video:

      • Jika dikirimkan sebagai URL publik:

        • Seri Qwen3-VL dan qwen-vl-max (termasuk qwen-vl-max-latest, qwen-vl-max-2025-04-08, dan semua versi selanjutnya): Tidak boleh melebihi 2 GB.

        • Seri qwen-vl-plus, model qwen-vl-max lainnya, seri open source Qwen2.5-VL, dan seri model QVQ: Tidak boleh melebihi 1 GB.

        • Model lainnya tidak boleh melebihi 150 MB.

      • Jika dikirimkan sebagai string yang di-encode Base64: String yang di-encode harus kurang dari 10 MB.

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

      Untuk informasi lebih lanjut tentang cara memampatkan ukuran file, lihat Cara memampatkan gambar atau video ke ukuran yang diperlukan.
    • Durasi video:

      • Seri qwen3-vl-plus, seri qwen3-vl-flash, qwen3-vl-235b-a22b-thinking, dan qwen3-vl-235b-a22b-instruct: 2 detik hingga 1 jam.

      • Seri open source Qwen3-VL dan qwen-vl-max (termasuk qwen-vl-max-latest, qwen-vl-max-2025-04-08, dan versi pembaruan selanjutnya): 2 detik hingga 20 menit.

      • Seri qwen-vl-plus, model qwen-vl-max lainnya, seri open source Qwen2.5-VL, dan seri model 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.

    • Pemahaman audio: Model tidak mendukung pemahaman audio dari 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 Object Storage Service (OSS) guna memperoleh URL publik.

    Penting

    Untuk memastikan model dapat mengunduh file dengan sukses, header permintaan dari URL publik harus mencakup Content-Length (ukuran file) dan Content-Type (jenis media, seperti image/jpeg). Jika salah satu bidang tersebut tidak tersedia atau salah, pengunduhan file akan gagal.

  • Kirimkan sebagai string yang di-encode Base64: Konversikan file menjadi string yang di-encode Base64, lalu kirimkan.

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

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

Going live

  • Pra-pemrosesan gambar/video: Qwen-VL memiliki batas ukuran untuk file input. Untuk informasi lebih lanjut tentang cara memampatkan file, lihat Metode kompresi gambar atau video.

  • Proses file teks: Qwen-VL hanya mendukung pemrosesan file dalam format gambar dan tidak dapat memproses file teks secara langsung. Gunakan alternatif berikut:

    • Konversikan file teks ke format gambar. Gunakan pustaka pemrosesan gambar, seperti Python's pdf2image, untuk mengonversi file tersebut per halaman menjadi beberapa gambar berkualitas tinggi. Kemudian kirimkan gambar-gambar tersebut ke model menggunakan metode multiple image input.

    • Qwen-Long mendukung pemrosesan file teks dan dapat mengurai konten file tersebut.

  • Toleransi kesalahan dan stabilitas

    • Penanganan timeout: Pada panggilan non-streaming, jika model tidak menyelesaikan output dalam waktu 180 detik, biasanya akan memicu error timeout. Untuk meningkatkan pengalaman pengguna, badan respons akan mengembalikan konten yang telah dihasilkan hingga saat terjadi timeout. Jika header respons berisi x-dashscope-partialresponse:true, maka respons tersebut dipicu oleh timeout. Gunakan fitur partial mode (didukung oleh beberapa model) untuk menambahkan konten yang telah dihasilkan ke array messages dan kirim ulang permintaan. Hal ini memungkinkan model tingkat tinggi melanjutkan proses pembuatan konten. Untuk informasi lebih lanjut, lihat Lanjutkan penulisan berdasarkan output yang belum lengkap.

    • 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 didasarkan pada jumlah total token input dan output. Untuk harga input dan output, lihat Models.

    • 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 bagian dari token output. Jika proses berpikir tidak ditampilkan sebagai output dalam mode thinking, maka harga untuk mode non-thinking yang berlaku.

    • Menghitung token gambar dan video: Gunakan kode berikut untuk memperkirakan konsumsi token untuk gambar atau video. Perkiraan ini hanya sebagai referensi. Penggunaan aktual didasarkan pada respons API.

      Menghitung token gambar dan video

      Gambar

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

      • h_bar, w_bar: Tinggi dan lebar gambar setelah diskalakan. Sebelum memproses gambar, model melakukan pra-pemrosesan dengan menurunkan skalanya hingga mencapai batas piksel tertentu. Batas piksel tersebut 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 berkorespondensi dengan setiap token visual. Nilai ini bervariasi tergantung model:

        • Qwen3-VL, qwen-vl-max, qwen-vl-max-latest, qwen-vl-max-2025-08-13, qwen-vl-plus, qwen-vl-plus-latest, qwen-vl-plus-2025-08-15: Setiap token berkorespondensi dengan 32×32 piksel.

        • QVQ dan model Qwen2.5-VL lainnya: Setiap token berkorespondensi dengan 28×28 piksel.

      Kode berikut menunjukkan logika perkiraan penskalaan gambar dalam model. Gunakan kode ini untuk memperkirakan jumlah token gambar. Penagihan aktual didasarkan pada respons API.

      import math
      # Gunakan perintah berikut untuk menginstal library Pillow: pip install Pillow
      from PIL import Image
      
      def token_calculate(image_path, max_pixels, vl_high_resolution_images):
          # Buka file gambar yang ditentukan.
          image = Image.open(image_path)
      
          # Dapatkan dimensi asli gambar.
          height = image.height
          width = image.width
      
          # Sesuaikan tinggi dan lebar agar menjadi kelipatan 32 atau 28, tergantung model.
          h_bar = round(height / 32) * 32
          w_bar = round(width / 32) * 32
      
          # Batas bawah token gambar: 4 token.
          min_pixels = 4 * 32 * 32
          # Jika vl_high_resolution_images diatur ke True, batas atas token input gambar adalah 16.386, dan nilai piksel maksimum yang sesuai adalah 16384 * 32 * 32 atau 16384 * 28 * 28. Jika tidak, gunakan nilai yang ditetapkan untuk max_pixels.
          if vl_high_resolution_images:
              max_pixels = 16384 * 32 * 32
          else:
              max_pixels = max_pixels
      
          # Skalakan gambar sehingga jumlah total piksel berada dalam rentang [min_pixels, max_pixels].
          if h_bar * w_bar > max_pixels:
              # Hitung faktor penskalaan beta agar total piksel gambar yang diskalakan tidak melebihi max_pixels.
              beta = math.sqrt((height * width) / max_pixels)
              # Hitung ulang tinggi dan lebar yang telah disesuaikan.
              h_bar = math.floor(height / beta / 32) * 32
              w_bar = math.floor(width / beta / 32) * 32
          elif h_bar * w_bar < min_pixels:
              # Hitung faktor penskalaan beta agar total piksel gambar yang diskalakan tidak kurang dari min_pixels.
              beta = math.sqrt(min_pixels / (height * width))
              # Hitung ulang tinggi yang telah disesuaikan.
              h_bar = math.ceil(height * beta / 32) * 32
              w_bar = math.ceil(width * beta / 32) * 32
          return h_bar, w_bar
      
      if __name__ == "__main__":
          # Ganti xxx/test.jpg dengan path ke gambar lokal Anda.
          h_bar, w_bar =  token_calculate("xxx/test.jpg", max_pixels=16384*32*32, vl_high_resolution_images=False)
          print(f"Dimensi gambar setelah diskalakan: tinggi {h_bar}, lebar {w_bar}")
          # Sistem secara otomatis menambahkan penanda visual <vision_bos> dan <vision_eos> (masing-masing 1 token).
          token = int((h_bar * w_bar) / (32 * 32))+2
          print(f"Jumlah token untuk gambar: {token}")

      Video

      • File video:

        Saat model memproses file video, model terlebih dahulu mengekstrak frame video, lalu menghitung jumlah total token untuk semua frame tersebut. Anda dapat menggunakan kode berikut untuk memperkirakan total token yang dikonsumsi video dengan memberikan path video:

        # Sebelum digunakan, instal: pip install opencv-python
        import math
        import os
        import logging
        import cv2
        
        logger = logging.getLogger(__name__)
        
        FRAME_FACTOR = 2
        
        # Untuk model 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
        # Jumlah piksel minimum untuk frame video
        VIDEO_MIN_PIXELS = 4 * 32 * 32
        # Jumlah piksel maksimum 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 diekstrak
        FPS_MIN_FRAMES = 4
        # Jumlah maksimum frame yang diekstrak. Untuk model Qwen3-VL-Plus, atur FPS_MAX_FRAMES ke 2000. Untuk model Qwen3-VL-Flash dan Qwen2.5-VL, atur ke 512. Untuk model lain, atur ke 80.
        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_MAX_PIXELS', 131072 * 32 * 32)))
        
        def round_by_factor(number: int, factor: int) -> int:
            """Mengembalikan bilangan bulat terdekat dari '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 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 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 akan diekstrak.
        
            Args:
                ele (dict): Dictionary yang berisi konfigurasi video.
                    - fps: Mengontrol jumlah frame yang diekstrak untuk input model.
                total_frames (int): Jumlah total frame asli dalam video.
                video_fps (int | float): Laju frame asli video.
        
            Raises:
                Kesalahan muncul 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 diperoleh {nframes}.")
        
            return nframes
        
        def get_video(video_path):
            # Dapatkan informasi video
            cap = cv2.VideoCapture(video_path)
        
            frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
            # Dapatkan 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):
            # Dapatkan tinggi dan lebar asli video
            height, width, total_frames, video_fps = get_video(path)
            # Jumlah token minimum untuk frame video
            min_pixels = VIDEO_MIN_PIXELS
            total_pixels = VIDEO_TOTAL_PIXELS
            # Jumlah frame video yang diekstrak
            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}, diperoleh {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 fps untuk ekstraksi frame
            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 untuk input model: {resized_height}*{resized_width}, Total frame video: {total_frames}, Total frame yang diekstrak 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:

        Jika Anda memberikan video sebagai daftar gambar, langkah ekstraksi frame sudah selesai. Anda dapat menggunakan kode berikut untuk menghitung jumlah token yang dikonsumsi oleh daftar gambar dengan memberikan path gambar dan jumlah gambar:

        # Instal sebelum digunakan: 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 zoom adalah 32.
        IMAGE_FACTOR = 32
        
        # Untuk model lain, faktor zoom adalah 28.
        # IMAGE_FACTOR = 28
        
        # Konstanta untuk perhitungan token
        TOKEN_DIVISOR = 32  # Pembagi untuk perhitungan token
        VISION_SPECIAL_TOKENS = 2  # token <|vision_bos|> dan <|vision_eos|>
        
        # Rasio aspek maksimum 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_MAX_PIXELS', 131072 * 32 * 32)))
        
        def round_by_factor(number: int, factor: int) -> int:
            """Mengembalikan bilangan bulat terdekat dari "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 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 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 setelah diskalakan.
        
            Args:
                height: Tinggi gambar asli.
                width: Lebar gambar asli.
                nframes: Jumlah frame video.
                factor: Faktor zoom. Default adalah IMAGE_FACTOR.
        
            Returns:
                (resized_height, resized_width): Tinggi dan lebar setelah diskalakan.
        
            Raises:
                ValueError: Rasio aspek melebihi batas.
            """
            # Batas bawah token untuk frame video
            min_pixels = VIDEO_MIN_PIXELS
            total_pixels = VIDEO_TOTAL_PIXELS
            # Hitung jumlah piksel maksimum yang diizinkan per frame.
            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. Rasio saat ini adalah {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:
            """
            Menghitung jumlah token untuk video.
        
            Args:
                image_path: Path ke file frame video.
                nframes: Jumlah frame video.
                factor: Faktor zoom. Default adalah IMAGE_FACTOR.
                verbose: Menentukan apakah informasi detail dicetak.
        
            Returns:
                Jumlah token yang dikonsumsi.
        
            Raises:
                FileNotFoundError: File tidak ada.
                ValueError: Format file tidak valid atau rasio aspek melebihi batas.
            """
            # Dapatkan dimensi gambar asli (baca hanya sekali).
            height, width = get_image_size(image_path)
        
            # Hitung dimensi setelah diskalakan.
            resized_height, resized_width = smart_resize(height, width, nframes, factor)
        
            # Hitung jumlah token.
            # Rumus: ceil(nframes / 2) * (resized_height / TOKEN_DIVISOR) * (resized_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}×{width}, dimensi input ke model: {resized_height}×{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 Konsol Biaya dan Pengeluaran.

  • Pembatasan laju: Lihat Rate limits.

  • Kuota gratis (hanya Singapura): Qwen-VL menyediakan kuota gratis sebesar 1 juta token, berlaku selama 90 hari sejak Anda mengaktifkan Model Studio atau permintaan model Anda disetujui.

Referensi API

Untuk parameter input dan output Qwen-VL, lihat Qwen.

FAQ

Bagaimana cara memilih metode unggah file?

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

Type

Specifications

DashScope SDK (Python, Java)

OpenAI compatible / DashScope HTTP

Image

Lebih dari 7 MB dan kurang dari 10 MB

Gunakan path lokal

Hanya URL publik yang didukung. Kami menyarankan menggunakan Object Storage Service.

Kurang dari 7 MB

Gunakan path lokal

Base64 encoding

Video

Lebih dari 100 MB

Hanya URL publik yang didukung. Kami menyarankan menggunakan Object Storage Service.

Hanya URL publik yang didukung. Kami menyarankan menggunakan Object Storage Service.

Lebih dari 7 MB dan kurang dari 100 MB

Gunakan path lokal

Hanya URL publik yang didukung. Kami menyarankan menggunakan 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.
Menggunakan Base64 atau path lokal menghindari timeout unduhan di sisi server dan meningkatkan stabilitas.

Bagaimana cara memampatkan gambar atau video agar sesuai dengan ukuran yang ditentukan?

Qwen-VL memiliki batasan ukuran untuk file input. Mampatkan file menggunakan metode berikut.

Metode pemampatan gambar

  • Tool online: Gunakan tool online seperti CompressJPEG atau TinyPng.

  • 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")

Metode pemampatan video

  • Tool online: Gunakan tool online seperti FreeConvert.

  • Perangkat lunak lokal: Gunakan perangkat lunak seperti HandBrake.

  • Implementasi kode: Gunakan tool FFmpeg. Untuk informasi lebih lanjut, lihat website resmi FFmpeg.

    # Perintah konversi dasar
    # -i, fungsi: path file input, contoh: input.mp4
    # -vcodec, fungsi: penyandi video. Nilai umum termasuk libx264 (direkomendasikan untuk penggunaan umum) dan libx265 (laju kompresi lebih tinggi).
    # -crf, fungsi: mengontrol kualitas video. Rentang nilai [18-28]. Nilai yang lebih kecil menghasilkan kualitas lebih tinggi dan ukuran file lebih besar.
    # --preset, fungsi: mengontrol keseimbangan antara kecepatan penyandian dan efisiensi kompresi. Nilai umum termasuk slow, fast, dan faster.
    # -y, fungsi: menimpa file yang sudah ada (tidak memerlukan nilai)
    # output.mp4, fungsi: path file output
    
    ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4

Setelah model menghasilkan output hasil lokalisasi objek, bagaimana cara menggambar kotak pembatas pada gambar asli?

Setelah model Qwen-VL menghasilkan output hasil lokalisasi objek, gunakan kode berikut untuk menggambar kotak pembatas beserta labelnya pada gambar asli.

  • Qwen2.5-VL: Mengembalikan koordinat sebagai nilai absolut dalam piksel. Koordinat ini relatif terhadap pojok kiri atas gambar yang telah diskalakan. Untuk menggambar kotak pembatas, lihat kode dalam qwen2_5_vl_2d.py.

  • Qwen3-VL: Mengembalikan koordinat relatif yang dinormalisasi ke rentang [0, 999]. Untuk menggambar kotak pembatas, lihat kode dalam qwen3_vl_2d.py (untuk lokalisasi 2D) atau qwen3_vl_3d.zip (untuk lokalisasi 3D).

Kode error

Jika pemanggilan gagal, lihat Error messages untuk troubleshooting.