全部产品
Search
文档中心

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

更新时间:Dec 16, 2025

Model Qwen-VL menjawab pertanyaan berdasarkan citra atau video yang Anda berikan. Model ini mendukung input citra tunggal maupun ganda, serta cocok untuk berbagai tugas seperti pembuatan keterangan gambar (image captioning), menjawab pertanyaan visual (visual question answering), dan deteksi objek.

Coba secara online: Model vision (Singapura atau China (Beijing))

Mulai

Prasyarat

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

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # base_url berikut digunakan untuk wilayah Singapura. 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/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 citra ini?"},
            ],
        },
    ],
)
print(completion.choices[0].message.content)

Respons

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di atas pasir, dengan laut dan langit di latar belakang. Orang dan anjing 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 Singapura dan China (Beijing) 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,
  // baseURL berikut digunakan untuk wilayah Singapura. 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. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models 
    messages: [
      {
        role: "user",
        content: [{
            type: "image_url",
            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 citra ini?"
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}
main()

Respons

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di atas pasir, dengan laut dan langit di latar belakang. Orang dan anjing 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 =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah Singapura dan China (Beijing) 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 citra ini?"}
    ]
  }]
}'

Respons

{
  "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 di latar belakang. Orang dan anjing 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

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra ini?"}]
}]

response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/model-studio/getting-started/models
    messages=messages
)

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

Respons

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 anjing tersebut. 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 {
    
    // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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/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);
    }
}

Respons

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 =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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 citra ini?"}
                ]
            }
        ]
    }
}'

Respons

{
  "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 di 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-tugas seperti pengenalan dan lokalisasi objek berpresisi tinggi (termasuk lokalisasi 3D), pemanggilan alat agen, penguraian dokumen dan halaman web, pemecahan 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, serta 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: Model ini lebih cepat dan memberikan keseimbangan yang baik antara performa dan biaya.

Untuk informasi lebih lanjut tentang nama model, konteks, harga, dan versi snapshot, lihat Daftar model. Untuk informasi lebih lanjut tentang batas permintaan konkuren, lihat Batas laju.

Perbandingan fitur model

Model

Pemikiran mendalam

Tool calling

Cache konteks

Output terstruktur

Bahasa yang didukung

Seri Qwen3-VL

Didukung

Didukung

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 visual

Jelaskan konten citra 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 citra 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 ini.

Tentu, gambar ini penuh dengan suasana Festival Pertengahan Musim Gugur yang kaya, dengan kombinasi cerdas antara elemen 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 menonton, 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 Festival Pertengahan Musim Gugur!

Gaya hangat dan penuh berkah

Bulan purnama, dan orang-orang berkumpul; malam Pertengahan Musim Gugur adalah yang paling lembut. Menonton kembang api mekar, mengagumi bulan purnama di langit, mengambil sepotong kue bulan, dan berharap damai dan sehat. Semoga semua yang Anda dan saya inginkan dalam hati menjadi kenyataan. Selamat Festival Pertengahan Musim Gugur dan semoga keluarga bahagia!

OCR dan ekstraksi informasi

Kenali teks dan rumus dalam citra 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 dari citra berikut: ['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"

}

Pemecahan masalah multidisiplin

Selesaikan masalah dalam citra, seperti masalah matematika, fisika, dan kimia. Fitur ini cocok untuk pendidikan dasar, menengah, universitas, dan dewasa.

-5jwcstcvmdpqghaj

Harap selesaikan soal matematika dalam citra ini langkah demi langkah.

-答案

Pengkodean visual

Hasilkan kode dari citra atau video. Ini dapat digunakan untuk membuat kode HTML, CSS, dan JS dari rancangan 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

Deteksi objek

Model mendukung lokalisasi 2D dan 3D, yang dapat digunakan untuk menentukan orientasi objek, perubahan perspektif, dan hubungan oklusi. Lokalisasi 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 lokalisasi pada citra asli, lihat FAQ.

Lokalisasi 2D

-530xdcos1lqkcfuy

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

  • Kembalikan koordinat Point (pusat): Lokasikan semua item makanan dalam citra sebagai titik dan keluarkan koordinat titiknya dalam format XML.

Visualisasi hasil lokalisasi 2D

-mu9podu1eyvph1zd

Lokalisasi 3D

3d

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

Visualisasi hasil lokalisasi 3D

3d-结果

Penguraian dokumen

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

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

image

qwenvl markdown.

-结果

Visualisasi hasil

Pemahaman video

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

Harap jelaskan rangkaian tindakan orang dalam video ini. Keluarkan dalam format JSON dengan start_time, end_time, dan event. Gunakan HH:mm:ss untuk stempel waktu.

{

"events": [

{

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

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

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

},

{

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

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

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

},

{

"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."}]

}

Fitur inti

Aktifkan atau nonaktifkan mode pemikiran

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

    • true

    • false (default)

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

Penting
  • Konfigurasi model: Dalam skenario percakapan umum yang tidak melibatkan pemanggilan alat 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. Untuk informasi lebih lanjut, lihat Daftar model.

Kompatibel dengan OpenAI

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

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 dalam 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 != 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 Singapura dan China (Beijing) 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,
  // baseURL berikut digunakan untuk wilayah Singapura. 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"
});

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: Di Node.js SDK, 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 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 =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah Singapura dan China (Beijing) 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

# Jika Anda menggunakan model di wilayah Singapura, hapus komentar pada baris berikut.
# 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 Singapura dan China (Beijing) 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 != 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 DashScope SDK >= 2.21.10
import java.util.*;

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

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

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

public class Main {

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

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

    private static void handleGenerationResult(MultiModalConversationResult message) {
        String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
        String reasoning = Objects.isNull(re)?"":re; // 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 Singapura dan China (Beijing) 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 Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti 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 citra ganda

Model Qwen-VL mendukung meneruskan beberapa citra dalam satu permintaan, yang dapat digunakan untuk tugas seperti perbandingan produk dan pemrosesan dokumen multi-halaman. Untuk melakukan ini, Anda dapat menyertakan beberapa objek citra dalam larik content dari pesan pengguna.

Penting

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

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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/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 citra-citra ini?"},
            ],
        }
    ],
)

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

Respons

Citra 1 menunjukkan adegan seorang wanita dan seekor Labrador retriever yang 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.

Citra 2 menunjukkan adegan seekor harimau yang 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 tanah ditutupi daun-daun yang gugur. Keseluruhan gambar memberikan perasaan alam liar yang alami.

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan China (Beijing) 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,
        // baseURL berikut digunakan untuk wilayah Singapura. 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. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
        messages: [
          {role: "user",content: [
            {type: "image_url",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 citra-citra ini?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

Respons

Pada citra pertama, seseorang dan seekor anjing berinteraksi di pantai. Orang tersebut mengenakan kemeja kotak-kotak, dan anjing tersebut mengenakan kalung. Mereka tampak sedang bersalaman atau tos.

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

curl

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra-citra ini?"
        }
      ]
    }
  ]
}'

Respons

{
  "choices": [
    {
      "message": {
        "content": "Citra 1 menunjukkan adegan seorang wanita dan seekor Labrador retriever yang 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\nCitra 2 menunjukkan adegan seekor harimau yang 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 tanah ditutupi daun-daun yang gugur. Keseluruhan gambar penuh dengan kehidupan dan vitalitas alam liar.",
        "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

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra-citra ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/model-studio/getting-started/models
    messages=messages
)

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

Respons

Citra-citra ini menunjukkan beberapa hewan dan pemandangan alam. Pada citra pertama, seseorang dan seekor anjing berinteraksi di pantai. Citra 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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra-citra ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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/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);
    }
}

Respons

Citra-citra ini menunjukkan beberapa hewan dan pemandangan alam.

1. Citra 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. Citra 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 =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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 citra-citra ini?"}
                ]
            }
        ]
    }
}'

Respons

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

Pemahaman video

Model Qwen-VL mendukung pemahaman konten video. Anda dapat menyediakan file dalam bentuk daftar citra (frame video) atau file video.

Kami merekomendasikan agar Anda menggunakan versi snapshot terbaru atau terkini dari model untuk performa yang lebih baik dalam memahami file video.

File video

Ekstraksi frame video

Model Qwen-VL menganalisis konten dengan mengekstraksi rangkaian frame dari video. Frekuensi ekstraksi frame menentukan tingkat detail dalam analisis model. SDK yang berbeda memiliki frekuensi ekstraksi frame yang berbeda:

  • Menggunakan DashScope SDK:

    Anda dapat mengontrol interval ekstraksi frame (satu frame diekstraksi setiap detik) menggunakan parameter fps. Rentang untuk parameter ini adalah (0.1, 10), dengan nilai default 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.

  • Menggunakan OpenAI kompatibel SDK: Frame diekstraksi pada frekuensi tetap 1 frame per 0,5 detik, dan kustomisasi tidak didukung.

Berikut adalah contoh kode untuk memahami video online yang ditentukan oleh URL. Untuk informasi lebih lanjut, lihat Cara meneruskan file lokal.

Kompatibel dengan OpenAI

Saat Anda langsung memasukkan file video ke model 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 untuk wilayah Singapura dan China (Beijing) 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"),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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
            # Saat menggunakan SDK OpenAI, file video diambil sampelnya pada laju default satu frame setiap 0.5 detik, yang tidak dapat dimodifikasi. Untuk menyesuaikan laju frame, gunakan DashScope SDK.
            "type": "video_url",            
            "video_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"}},
            {"type": "text","text": "Apa isi video ini?"}]
         }]
)
print(completion.choices[0].message.content)

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan China (Beijing) 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,
        // baseURL berikut digunakan untuk wilayah Singapura. 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
            // Saat menggunakan SDK OpenAI, file video diambil sampelnya pada laju default satu frame setiap 0.5 detik, yang tidak dapat dimodifikasi. Untuk menyesuaikan laju frame, gunakan DashScope SDK.
            {type: "video_url", video_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"}},
            {type: "text", text: "Apa isi video ini?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

curl

# ======= Penting =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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"}},
    {"type": "text","text": "Apa isi video ini?"}]}]
}'

DashScope

Python

import dashscope
import os
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 dapat 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 untuk wilayah Singapura dan China (Beijing) 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',
    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 {
            // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 perlu menggunakan kunci API dari wilayah China (Beijing). Dapatkan tautan: https://bailian.console.alibabacloud.com/?tab=model#/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")
                .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 =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "Apa isi video ini?"}]}]}
}'

Daftar citra

Batas jumlah daftar citra

  • Seri qwen3-vl-plus: Minimum 4 citra dan maksimum 2.000 citra.

  • Seri qwen3-vl-flash, model Qwen2.5-VL, dan seri QVQ: Minimum 4 citra dan maksimum 512 citra.

  • Model lainnya: Minimum 4 citra dan maksimum 80 citra.

Ekstraksi frame video

Saat video diteruskan sebagai daftar citra (frame video yang telah diekstraksi sebelumnya), Anda dapat menggunakan parameter fps untuk memberi tahu model tentang interval waktu antar frame video. Ini membantu model memahami urutan, durasi, dan perubahan dinamis peristiwa dengan lebih baik.

  • DashScope SDK:

    SDK ini mendukung menentukan laju frame video asli 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.

  • SDK kompatibel OpenAI:

    SDK ini tidak mendukung parameter fps. Model mengasumsikan bahwa frame video diekstraksi pada frekuensi default satu frame setiap 0,5 detik.

Berikut adalah contoh kode untuk memahami frame video online yang ditentukan oleh URL. Untuk informasi lebih lanjut, lihat Cara meneruskan file lokal.

Kompatibel dengan OpenAI

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

Python

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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"),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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/model-studio/getting-started/models
    messages=[{"role": "user","content": [
        # Saat meneruskan daftar citra, parameter "type" dalam pesan pengguna adalah "video".
        # Saat menggunakan SDK OpenAI, daftar citra diasumsikan diekstraksi dari video pada interval default 0.5 detik, yang tidak dapat dimodifikasi. Untuk menyesuaikan laju frame, gunakan DashScope SDK.
        {"type": "video","video": ["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"]},
        {"type": "text","text": "Jelaskan proses spesifik video ini"},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI({
    // Kunci API untuk wilayah Singapura dan China (Beijing) 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,
    // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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/model-studio/getting-started/models
        messages: [{
            role: "user",
            content: [
                {
                    // Saat meneruskan daftar citra, parameter "type" dalam pesan pengguna adalah "video".
                    // Saat menggunakan SDK OpenAI, daftar citra diasumsikan diekstraksi dari video pada interval default 0.5 detik, yang tidak dapat dimodifikasi. Untuk menyesuaikan laju frame, gunakan DashScope SDK.
                    type: "video",
                    video: [
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
                    ]
                },
                {
                    type: "text",
                    text: "Jelaskan proses spesifik video ini"
                }
            ]
        }]
    });
    console.log(response.choices[0].message.content);
}

main();

curl

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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",
                "video": ["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"]},
                {"type": "text",
                "text": "Jelaskan proses spesifik video ini"}]}]
}'

DashScope

Python

import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  # Jika model termasuk seri Qwen2.5-VL atau Qwen3-VL dan daftar citra diteruskan, Anda dapat mengatur parameter fps untuk menunjukkan bahwa daftar citra diekstraksi dari video asli setiap 1/fps detik.
                 {"video":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                   "fps":2},
                 {"text": "Jelaskan proses spesifik video ini"}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/model-studio/getting-started/models
    messages=messages
)
print(response.output.choices[0].message.content[0]["text"])

Java

// Versi SDK DashScope harus 2.18.3 atau yang 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 {
        // base_url berikut adalah untuk Wilayah Singapura. 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/model-studio/getting-started/models
    public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        //  Jika model termasuk dalam seri Qwen2.5-VL atau Qwen3-VL dan daftar citra diteruskan, Anda dapat mengatur parameter fps untuk menunjukkan bahwa daftar citra diekstrak dari video asli setiap 1/fps detik.
        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", "Describe the specific process of this video")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk Wilayah Singapura dan China (Beijing) 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();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= Penting =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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": [
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
            ],
            "fps":2
                 
          },
          {
            "text": "Jelaskan proses spesifik video ini"
          }
        ]
      }
    ]
  }
}'

Meneruskan file lokal (encoding Base64 atau jalur file)

Qwen-VL menyediakan dua cara untuk mengunggah file lokal: encoding Base64 dan unggahan jalur file langsung. Anda dapat memilih 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 citra.

Unggahan encoding Base64

Anda dapat mengonversi file menjadi string terenkripsi Base64 lalu meneruskannya ke model. Ini berlaku untuk SDK OpenAI dan DashScope serta metode HTTP.

Langkah-langkah untuk meneruskan string terenkripsi Base64 (menggunakan citra sebagai contoh)

  1. Enkripsi file: Konversi citra lokal menjadi enkripsi Base64.

    Kode contoh untuk mengonversi citra ke enkripsi 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 xxxx/eagle.png dengan jalur mutlak citra lokal Anda
    base64_image = encode_image("xxx/eagle.png")
  2. Buat URL Data: Formatnya sebagai berikut: data:[MIME_type];base64,{base64_image}.

    1. Ganti MIME_type dengan jenis media aktual, pastikan sesuai dengan nilai MIME Type dalam tabel Format citra yang didukung (seperti image/jpeg atau image/png).

    2. base64_image adalah string Base64 yang dihasilkan pada langkah sebelumnya.

  3. Panggil model: Teruskan URL Data melalui parameter image atau image_url dan panggil model.

Unggahan jalur file

Anda dapat langsung meneruskan jalur file lokal ke model. Metode ini hanya didukung oleh DashScope Python dan Java SDK, tidak didukung oleh DashScope HTTP atau metode kompatibel OpenAI.

Anda dapat merujuk pada tabel berikut untuk menentukan jalur file berdasarkan bahasa pemrograman dan sistem operasi Anda.

Tentukan jalur file (menggunakan citra sebagai contoh)

Sistem

SDK

Jalur file yang diteruskan

Contoh

Linux atau macOS

Python SDK

file://{jalur mutlak file}

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

Java SDK

Windows

Python SDK

file://{jalur mutlak file}

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

Java SDK

file:///{jalur mutlak file}

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

Citra

Diteruskan melalui jalur file

Python

import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra 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 citra ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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/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 citra lokal Anda
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Diteruskan melalui encoding Base64

Kompatibel dengan 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 citra lokal Anda
base64_image = encode_image("xxx/eagle.png")
client = OpenAI(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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'),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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/model-studio/getting-started/models
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # Teruskan data citra Base64. Perhatikan bahwa format citra (yaitu image/{format}) harus sesuai dengan Jenis Konten dalam daftar citra yang didukung. "f" adalah metode pemformatan string.
                    # Citra PNG:  f"data:image/png;base64,{base64_image}"
                    # Citra JPEG: f"data:image/jpeg;base64,{base64_image}"
                    # Citra 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 citra 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 Singapura dan China (Beijing) 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,
        // baseURL berikut digunakan untuk wilayah Singapura. 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"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
// Ganti xxx/eagle.png dengan jalur mutlak citra 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/model-studio/getting-started/models
        messages: [
            {"role": "user",
            "content": [{"type": "image_url",
                            // Perhatikan bahwa saat meneruskan Base64, format citra (yaitu image/{format}) harus sesuai dengan Jenis Konten dalam daftar citra yang didukung.
                           // Citra PNG:  data:image/png;base64,${base64Image}
                          // Citra JPEG: data:image/jpeg;base64,${base64Image}
                         // Citra WEBP: data:image/webp;base64,${base64Image}
                        "image_url": {"url": `data:image/png;base64,${base64Image}`},},
                        {"type": "text", "text": "Apa yang digambarkan dalam citra 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 tujuan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, Anda harus meneruskan string terenkripsi lengkap.

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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 citra ini?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra lokal Anda
base64_image = encode_image("xxxx/eagle.png")

messages = [
    {
        "role": "user",
        "content": [
            # Perhatikan bahwa saat meneruskan Base64, format citra (yaitu image/{format}) harus sesuai dengan Jenis Konten dalam daftar citra yang didukung. "f" adalah metode pemformatan string.
            # Citra PNG:  f"data:image/png;base64,{base64_image}"
            # Citra JPEG: f"data:image/jpeg;base64,{base64_image}"
            # Citra WEBP: f"data:image/webp;base64,{base64_image}"
            {"image": f"data:image/png;base64,{base64_image}"},
            {"text": "Apa yang digambarkan dalam citra ini?"},
        ],
    },
]

response = dashscope.MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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); // Enkripsi 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 citra ini?"); }}
                )).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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 citra lokal Anda
            callWithLocalFile("xxx/eagle.png");
        } 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 tujuan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, Anda harus meneruskan string terenkripsi lengkap.

# ======= Penting =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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": "data:image/png;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "Apa yang digambarkan dalam citra ini?"}
                ]
            }
        ]
    }
}'

File video

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

Diteruskan melalui jalur file

Python

import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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',  
    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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 video ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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")  
                .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);
    }
}

Diteruskan melalui encoding Base64

Kompatibel dengan 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 Singapura dan China (Beijing) 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'),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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": f"data:video/mp4;base64,{base64_video}"},
                },
                {"type": "text", "text": "Adegan apa yang digambarkan 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 Singapura dan China (Beijing) 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,
        // baseURL berikut digunakan untuk wilayah Singapura. 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"
    }
);

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 meneruskan file video langsung, atur nilai type ke video_url
                "type": "video_url", 
                "video_url": {"url": `data:video/mp4;base64,${base64Video}`}},
                 {"type": "text", "text": "Adegan apa yang digambarkan 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 tujuan tampilan, string terenkripsi Base64 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, Anda harus meneruskan string terenkripsi lengkap.

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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": "video_url", "video_url": {"url": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."}},
      {"type": "text", "text": "Apa yang digambarkan dalam citra ini?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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',
    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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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); // Enkripsi 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 video ini?");}})).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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")
                .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 citra 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 tujuan tampilan, string terenkripsi Base64 "f"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, Anda harus meneruskan string terenkripsi lengkap.

# ======= Penting =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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": "Apa yang digambarkan dalam citra ini?"}
                ]
            }
        ]
    }
}'

Daftar citra

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

Diteruskan melalui jalur file

Python

import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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',
                # Jika model termasuk seri Qwen2.5-VL dan daftar citra diteruskan, Anda dapat mengatur parameter fps untuk menunjukkan bahwa daftar citra diekstraksi dari video asli setiap 1/fps detik. Pengaturan ini tidak efektif untuk model lain.
             'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
                         {'text': 'Adegan apa yang digambarkan video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/model-studio/getting-started/models
    messages=messages)

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

Java

// Versi DashScope SDK harus 2.18.3 atau lebih baru.
import java.util.Arrays;
import java.util.Map;
import java.util.Collections;
importcom.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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti baseURL 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";  // Dalam contoh ini, qwen3-vl-plus digunakan. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    public static void videoImageListSample(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));
        // Untuk model dalam seri Qwen2.5-VL, jika Anda memberikan daftar citra, Anda dapat mengatur parameter fps. Parameter ini menunjukkan bahwa citra diekstraksi dari video asli pada interval 1/fps detik. Pengaturan ini tidak berpengaruh pada model lain.
        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 wilayah Singapura dan Beijing. Untuk mendapatkan kunci API, kunjungi 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(
                    "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);
    }
}

Diteruskan melalui encoding Base64

Kompatibel dengan 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 Singapura dan China (Beijing) 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"),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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/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 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 Singapura dan China (Beijing) 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,
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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/model-studio/getting-started/models
        messages: [
            {"role": "user",
             "content": [{"type": "video",
                            // Perhatikan bahwa saat meneruskan Base64, format citra (yaitu image/{format}) harus sesuai dengan Jenis Konten dalam daftar citra yang didukung.
                           // Citra PNG:  data:image/png;base64,${base64Image}
                          // Citra JPEG: data:image/jpeg;base64,${base64Image}
                         // Citra WEBP: data:image/webp;base64,${base64Image}
                        "video": [
                            `data:image/jpeg;base64,${base64Image1}`,
                            `data:image/jpeg;base64,${base64Image2}`,
                            `data:image/jpeg;base64,${base64Image3}`,
                            `data:image/jpeg;base64,${base64Image4}`]},
                        {"type": "text", "text": "Adegan apa yang digambarkan 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 tujuan tampilan, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, Anda harus meneruskan string terenkripsi lengkap.

# ======= Penting =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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 video ini"}]}]
}'

DashScope

Python

import base64
import os
import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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/png;base64,{base64_image1}",
                          f"data:image/png;base64,{base64_image2}",
                          f"data:image/png;base64,{base64_image3}",
                          f"data:image/png;base64,{base64_image4}"
                         ]
                    },
                    {'text': 'Tolong jelaskan proses spesifik video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API untuk wilayah Singapura dan China (Beijing) 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/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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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); // Enkripsi 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));
        // Jika model termasuk seri Qwen2.5-VL dan daftar citra diteruskan, Anda dapat mengatur parameter fps untuk menunjukkan bahwa daftar citra diekstraksi dari video asli setiap 1/fps detik. Pengaturan ini tidak efektif untuk model lain.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Jelaskan proses spesifik video ini")))
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API untuk wilayah Singapura dan China (Beijing) 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 citra lokal Anda
            videoImageListSample(
                    "xxx/football1.jpg",
                    "xxx/football2.jpg",
                    "xxx/football3.jpg",
                    "xxx/football4.jpg"
            );
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

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

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

# ======= Penting =======
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Kunci API untuk wilayah Singapura dan China (Beijing) 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 video ini"
          }
        ]
      }
    ]
  }
}'

Proses citra resolusi tinggi

API Qwen-VL memiliki batasan jumlah token visual untuk satu citra setelah pengkodean. Dengan konfigurasi default, citra resolusi tinggi dikompresi, yang dapat menyebabkan hilangnya detail dan memengaruhi akurasi pemahaman. Anda dapat mengaktifkan vl_high_resolution_images atau menyesuaikan max_pixels untuk meningkatkan jumlah token visual, yang mempertahankan lebih banyak detail citra dan meningkatkan pemahaman.

Model yang berbeda memiliki piksel per token visual, batas token, dan batas piksel yang berbeda. Parameter spesifiknya adalah sebagai berikut:

Model

Piksel per token

vl_high_resolution_images

max_pixels

Batas token

Batas piksel

Jika batas piksel dilampaui, total piksel citra akan diskalakan turun ke batas ini.

Seri model Qwen3-VL

32*32

true

max_pixels tidak valid

16384 token

16777216 (yaitu 16384*32*32)

false (default)

Dapat disesuaikan, dengan nilai maksimum 16777216

Maksimum antara 2560 token dan hasil dari max_pixels/32/32

2621440 atau max_pixels

qwen-vl-max, qwen-vl-max-latest, qwen-vl-max-0813, qwen-vl-plus, qwen-vl-plus-latest, qwen-vl-plus-0815, dan model

32*32

true

max_pixels tidak valid

16.384 token

16777216 (yaitu 16384*32*32)

false (default)

Dapat disesuaikan, dengan nilai maksimum 16777216

Maksimum antara 1280 token dan hasil dari max_pixels/32/32

1310720 atau max_pixels

Seri QVQ dan model Qwen2.5-VL lainnya

28*28

true

max_pixels tidak valid

16384 token

12845056 (yaitu 16384*28*28)

false (default)

Dapat disesuaikan, dengan nilai maksimum 12845056

Maksimum antara 1280 token dan hasil dari max_pixels/28/28

1003520 atau max_pixels

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

  • Saat vl_high_resolution_images=false, resolusi aktual ditentukan oleh max_pixels dan batas default. Model menggunakan maksimum dari dua hasil perhitungan tersebut.

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

    • Saat beberapa detail penting dan kecepatan pemrosesan yang lebih rendah dapat diterima, Anda dapat meningkatkan nilai max_pixels secara tepat.

Kompatibel dengan OpenAI

vl_high_resolution_images bukan parameter standar OpenAI. Jika Anda menggunakan OpenAI Python SDK, Anda dapat meneruskannya melalui extra_body.

Python

import os
import time
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra input. Tidak valid saat vl_high_resolution_images=True, tetapi dapat disesuaikan saat vl_high_resolution_images=False. Nilai maksimum bervariasi berdasarkan 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 Singapura dan China (Beijing) 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,
        // baseURL berikut digunakan untuk wilayah Singapura. 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"
    }
);

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 citra input. Tidak efektif saat vl_high_resolution_images=True, tetapi dapat disesuaikan saat vl_high_resolution_images=False. Nilai maksimum bervariasi berdasarkan 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

# ======= Penting =======
# Kunci API untuk wilayah Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan https://dashscope-intl.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/20250212/earbrt/vcg_VCG211286867973_RF.jpg"
          }
        },
        {
          "type": "text",
          "text": "Suasana festival apa yang ditunjukkan gambar ini?"
        }
      ]
    }
  ],
  "vl_high_resolution_images":true
}'

DashScope

Python

import os
import time

import dashscope

# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra input. Tidak valid saat vl_high_resolution_images=True, tetapi dapat disesuaikan saat vl_high_resolution_images=False. Nilai maksimum bervariasi berdasarkan 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 Studio Model Anda: api_key="sk-xxx"
        # Kunci API untuk wilayah Singapura dan China (Beijing) 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 {
        // baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra input. Tidak valid saat vl_high_resolution_images=True, tetapi dapat disesuaikan saat vl_high_resolution_images=False. Nilai maksimum bervariasi berdasarkan model.
        // map.put("min_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 Studio Model 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 Singapura dan China (Beijing) berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# baseURL berikut digunakan untuk wilayah Singapura. Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL 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 citra

  • Resolusi citra:

    • Ukuran minimum: Lebar dan tinggi citra harus keduanya lebih besar dari 10 piksel.

    • Rasio aspek: Rasio sisi panjang terhadap sisi pendek citra tidak boleh melebihi 200:1.

    • Batasan piksel:

      • Kami merekomendasikan agar Anda menjaga resolusi citra dalam 8K (7680×4320). Citra yang melebihi resolusi ini dapat menyebabkan timeout panggilan API karena ukuran file yang besar dan waktu transmisi jaringan yang lama.

      • Mekanisme penskalaan otomatis: Model secara otomatis menskalakan citra input sebelum diproses. Oleh karena itu, menyediakan citra resolusi sangat tinggi tidak meningkatkan akurasi pengenalan tetapi meningkatkan risiko kegagalan panggilan. Kami merekomendasikan agar Anda menskalakan citra ke ukuran yang wajar di sisi klien terlebih dahulu.

  • Format citra yang didukung

    • Untuk resolusi di bawah 4K (3840×2160), format citra yang didukung adalah sebagai berikut:

      Format citra

      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 (3840×2160) dan 8K (7680×4320), hanya format JPEG, JPG, dan PNG yang didukung.

  • Ukuran citra:

    • Saat diteruskan sebagai URL publik atau jalur lokal: Ukuran satu citra tidak boleh melebihi 10 MB.

    • Saat diteruskan sebagai encoding Base64: String terenkripsi tidak boleh melebihi 10 MB.

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

    Misalnya, jika Anda menggunakan model qwen3-vl-plus dalam mode pemikiran, input maksimum adalah 258.048 token. Jika teks input dikonversi menjadi 100 token dan citra dikonversi menjadi 2.560 token (untuk informasi lebih lanjut tentang cara menghitung token citra, lihat Penagihan dan pembatasan laju), Anda dapat meneruskan maksimal (258048 - 100) / 2560 = 100 citra.

Batasan video

  • Ukuran video:

    • Saat diteruskan sebagai URL publik:

      • Seri Qwen3-VL, 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 model seri QVQ: Tidak boleh melebihi 1 GB.

      • Model lain tidak boleh melebihi 150 MB.

    • Saat diteruskan sebagai encoding Base64: String terenkripsi harus kurang dari 10 MB.

    • Saat diteruskan sebagai jalur file lokal: Video itu sendiri tidak boleh melebihi 100 MB.

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

    • Seri qwen3-vl-plus: 2 detik hingga 1 jam.

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

    • Seri qwen-vl-plus, model qwen-vl-max lainnya, seri open source Qwen2.5-VL, dan model seri QVQ: 2 detik hingga 10 menit.

    • Model lain: 2 detik hingga 40 detik.

  • Format video: MP4, AVI, MKV, MOV, FLV, WMV, dan lainnya.

  • Dimensi video: Tidak ada batasan spesifik. Model menyesuaikan video menjadi sekitar 600.000 piksel sebelum diproses. File video yang lebih besar tidak menghasilkan pemahaman yang lebih baik.

  • Pemahaman audio: Model tidak mendukung pemahaman audio dari file video.

Metode penerusan file

  • URL publik: Anda dapat menyediakan alamat file yang dapat diakses publik yang mendukung protokol HTTP atau HTTPS. Untuk stabilitas dan performa optimal, Anda dapat mengunggah file ke OSS dan mendapatkan URL publik.

    Penting

    Untuk memastikan bahwa model dapat berhasil mengunduh file, header permintaan dari URL publik yang disediakan harus menyertakan Content-Length (ukuran file) dan Content-Type (jenis media, seperti image/jpeg). Kolom yang hilang atau salah menyebabkan kegagalan pengunduhan file.

  • Diteruskan melalui encoding Base64: Anda dapat mengonversi file menjadi string terenkripsi Base64 lalu meneruskannya.

  • Diteruskan melalui jalur file lokal (hanya DashScope SDK): Anda dapat meneruskan jalur file lokal.

Untuk rekomendasi tentang metode penerusan file, lihat Bagaimana memilih metode unggah file?

Mulai produksi

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

  • Proses file teks: Qwen-VL mendukung pemrosesan file hanya dalam format citra dan tidak dapat langsung memproses file teks. Namun, Anda dapat menggunakan solusi alternatif berikut:

    • Konversi file teks ke format citra. Kami merekomendasikan agar Anda menggunakan pustaka pemrosesan citra, seperti Python's pdf2image, untuk mengonversi file halaman demi halaman menjadi beberapa citra berkualitas tinggi, lalu meneruskannya ke model menggunakan metode input citra ganda.

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

  • Toleransi kesalahan dan stabilitas

    • Penanganan timeout: Dalam panggilan non-streaming, jika model tidak menyelesaikan output dalam 180 detik, biasanya terjadi error timeout. Untuk meningkatkan pengalaman pengguna, konten yang dihasilkan dikembalikan dalam badan respons setelah timeout. Jika header respons berisi x-dashscope-partialresponse: true, ini menunjukkan bahwa respons ini memicu timeout. Anda dapat menggunakan fitur mode sebagian, yang didukung oleh beberapa model, untuk menambahkan konten yang dihasilkan ke larik pesan dan mengirim permintaan lagi. Ini memungkinkan model besar untuk terus menghasilkan konten. Untuk informasi lebih lanjut, lihat Lanjutkan menulis berdasarkan output yang tidak lengkap.

    • Mekanisme pengulangan: Anda dapat merancang logika pengulangan panggilan API yang masuk akal, seperti exponential backoff, untuk menangani fluktuasi jaringan atau ketidaktersediaan layanan sementara.

Penagihan dan pembatasan laju

  • Penagihan: Total biaya dihitung berdasarkan jumlah total token input dan output. Untuk informasi lebih lanjut tentang harga input dan output, lihat Daftar model.

    • Komposisi token: Token input terdiri dari token teks dan token yang dikonversi dari citra atau video. Token output adalah teks yang dihasilkan oleh model. Dalam mode pemikiran, proses pemikiran model juga dihitung sebagai token output. Jika proses pemikiran tidak dioutput dalam mode pemikiran, penagihan berdasarkan harga mode non-pemikiran.

    • Hitung token citra dan video: Anda dapat menggunakan kode berikut untuk menghitung konsumsi token citra atau video. Hasil perkiraan hanya untuk referensi. Penggunaan aktual mengikuti respons API.

      Hitung token citra dan video

      Citra

      Rumus perhitungan: Token Citra = h_bar * w_bar / token_pixels + 2

      • h_bar, w_bar: Panjang dan lebar citra yang diskalakan. Model melakukan pra-pemrosesan citra sebelum diproses dan menskalakannya ke batas piksel tertentu. Batas piksel terkait dengan nilai parameter max_pixels dan vl_high_resolution_images. Untuk informasi lebih lanjut, lihat Proses citra resolusi tinggi.

      • token_pixels: Nilai piksel yang sesuai dengan setiap token visual, yang bervariasi untuk model yang berbeda:

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

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

      Kode berikut menunjukkan logika penskalaan citra perkiraan dalam model, yang dapat digunakan untuk memperkirakan jumlah token citra. Penagihan aktual mengikuti respons API.

      import math
      # Gunakan perintah berikut untuk menginstal pustaka Pillow: pip install Pillow
      from PIL import Image
      
      def token_calculate(image_path, max_pixels, vl_high_resolution_images):
          # Buka file citra PNG yang ditentukan
          image = Image.open(image_path)
      
          # Dapatkan dimensi asli citra
          height = image.height
          width = image.width
      
          # Sesuaikan lebar dan tinggi agar menjadi kelipatan 32 atau 28, tergantung modelnya
          h_bar = round(height / 32) * 32
          w_bar = round(width / 32) * 32
      
          # Batas bawah untuk token citra: 4 token
          min_pixels = 4 * 32 * 32
          # Jika vl_high_resolution_images diatur ke True, batas atas untuk token citra input adalah 16386, dan nilai piksel maksimum yang sesuai adalah 16384 * 32 * 32 atau 16384 * 28 * 28. Jika tidak, adalah nilai yang diatur untuk max_pixels.
          if vl_high_resolution_images:
              max_pixels = 16384 * 32 * 32
          else:
              max_pixels = max_pixels
      
          # Skalakan citra sehingga jumlah total piksel berada dalam rentang [min_pixels, max_pixels]
          if h_bar * w_bar > max_pixels:
              # Hitung faktor penskalaan beta sehingga total piksel citra yang diskalakan tidak melebihi max_pixels
              beta = math.sqrt((height * width) / max_pixels)
              # Hitung ulang lebar dan tinggi yang 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 sehingga total piksel citra yang diskalakan tidak kurang dari min_pixels
              beta = math.sqrt(min_pixels / (height * width))
              # Hitung ulang tinggi yang 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 test.png dengan jalur ke citra lokal Anda
          h_bar, w_bar = token_calculate("xxx/test.jpg", vl_high_resolution_images=False, max_pixels=16384*28*28, )
          print(f"Dimensi citra yang diskalakan adalah: tinggi {h_bar}, lebar {w_bar}")
          # Sistem akan secara otomatis menambahkan penanda visual <vision_bos> dan <vision_eos> (1 token masing-masing)
          token = int((h_bar * w_bar) / (28 * 28))+2
          print(f"Jumlah token untuk citra ini adalah {token}")

      Video

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

      # Instal sebelum digunakan: 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 citra adalah 32
      IMAGE_FACTOR = 32
      
      #  Untuk model lain, faktor penskalaan citra adalah 28
      # IMAGE_FACTOR = 28
      
      # Rasio aspek maksimum untuk frame video
      MAX_RATIO = 200
      # Batas piksel bawah untuk frame video
      VIDEO_MIN_PIXELS = 4 * 32 * 32
      # Batas piksel atas untuk frame video. Untuk model Qwen3-VL-Plus, VIDEO_MAX_PIXELS adalah 640 * 32 * 32. Untuk model lain, adalah 768 * 32 * 32.
      VIDEO_MAX_PIXELS = 640 * 32 * 32
      
      # Jika pengguna tidak meneruskan parameter FPS, nilai default digunakan
      FPS = 2.0
      # Jumlah minimum frame yang diekstraksi
      FPS_MIN_FRAMES = 4
      # Jumlah maksimum frame yang diekstraksi. 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 ke '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' yang 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' yang habis dibagi 'factor'."""
          return math.floor(number / factor) * factor
      
      def smart_nframes(ele,total_frames,video_fps):
          """Menghitung jumlah frame video yang akan diekstraksi.
      
          Args:
              ele (dict): Kamus yang berisi konfigurasi video.
                  - fps: fps digunakan untuk mengontrol jumlah frame input yang diekstraksi oleh model.
              total_frames (int): Jumlah total frame asli dalam video.
              video_fps (int | float): Laju frame asli video.
      
          Raises:
              Kesalahan dilaporkan jika nframes tidak berada dalam interval [FRAME_FACTOR, total_frames].
      
          Returns:
              Jumlah frame video untuk input model.
          """
          assert not ("fps" in ele and "nframes" in ele), "Hanya menerima salah satu `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 dalam interval [{FRAME_FACTOR}, {total_frames}], tetapi mendapatkan {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 lebar dan tinggi video asli
          height, width, total_frames, video_fps = get_video(path)
          # Batas token bawah untuk frame video
          min_pixels = VIDEO_MIN_PIXELS
          total_pixels = VIDEO_TOTAL_PIXELS
          # Jumlah frame video yang diekstraksi
          nframes = smart_nframes(ele, total_frames, video_fps)
          max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR),int(min_pixels * 1.05))
      
          # Rasio aspek video tidak boleh melebihi 200:1 atau 1:200
          if max(height, width) / min(height, width) > MAX_RATIO:
              raise ValueError(
                  f"rasio aspek absolut harus lebih kecil dari {MAX_RATIO}, mendapatkan {max(height, width) / min(height, width)}"
              )
      
          h_bar = max(factor, round_by_factor(height, factor))
          w_bar = max(factor, round_by_factor(width, factor))
          if h_bar * w_bar > max_pixels:
              beta = math.sqrt((height * width) / max_pixels)
              h_bar = floor_by_factor(height / beta, factor)
              w_bar = floor_by_factor(width / beta, factor)
          elif h_bar * w_bar < min_pixels:
              beta = math.sqrt(min_pixels / (height * width))
              h_bar = ceil_by_factor(height * beta, factor)
              w_bar = ceil_by_factor(width * beta, factor)
          return h_bar, w_bar
      
      
      def token_calculate(video_path, fps):
          # Teruskan jalur video dan parameter ekstraksi frame fps
          messages = [{"content": [{"video": video_path, "fps":fps}]}]
          vision_infos = extract_vision_info(messages)[0]
      
          resized_height, resized_width=smart_resize(vision_infos,video_path)
      
          height, width, total_frames,video_fps = get_video(video_path)
          num_frames = smart_nframes(vision_infos,total_frames,video_fps)
          print(f"Dimensi video asli: {height}*{width}, dimensi input model: {resized_height}*{resized_width}, total frame video: {total_frames}, total frame yang diekstraksi saat fps adalah {fps}: {num_frames}",end=",")
          video_token = int(math.ceil(num_frames / 2) * resized_height / 32 * resized_width / 32)
          video_token += 2 # Sistem akan secara otomatis menambahkan penanda visual <|vision_bos|> dan <|vision_eos|> (1 token masing-masing)
          return video_token
      
      def extract_vision_info(conversations):
          vision_infos = []
          if isinstance(conversations[0], dict):
              conversations = [conversations]
          for conversation in conversations:
              for message in conversation:
                  if isinstance(message["content"], list):
                      for ele in message["content"]:
                          if (
                              "image" in ele
                              or "image_url" in ele
                              or "video" in ele
                              or ele.get("type","") in ("image", "image_url", "video")
                          ):
                              vision_infos.append(ele)
          return vision_infos
      
      
      video_token = token_calculate("xxx/test.mp4", 1)
      print("Token video:", video_token)
  • Lihat tagihan: Anda dapat melihat tagihan atau mengisi ulang akun Anda di konsol Biaya dan Pengeluaran.

  • Pembatasan laju: Untuk informasi lebih lanjut tentang kondisi throttling model Qwen-VL, lihat Batas laju.

  • Kuota gratis (hanya wilayah Singapura): Kuota gratis 1 juta token disediakan untuk model Qwen-VL, berlaku selama 90 hari sejak tanggal aktivasi Studio Model atau persetujuan aplikasi model.

Referensi API

Untuk informasi lebih lanjut tentang parameter input dan output model Qwen-VL, lihat Qwen.

FAQ

Bagaimana memilih metode unggah file?

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

Jenis

Spesifikasi

DashScope SDK (Python, Java)

Kompatibel OpenAI / DashScope HTTP

Citra

Lebih besar dari 7 MB dan kurang dari 10 MB

Teruskan jalur lokal

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

Kurang dari 7 MB

Teruskan jalur lokal

Encoding Base64

Video

Lebih besar dari 100 MB

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

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

Lebih besar dari 7 MB dan kurang dari 100 MB

Teruskan jalur lokal

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

Kurang dari 7 MB

Teruskan jalur lokal

Encoding Base64

Encoding Base64 meningkatkan volume data. Ukuran file asli harus kurang dari 7 MB.
Menggunakan Base64 atau jalur lokal dapat membantu menghindari timeout unduhan di sisi server dan meningkatkan stabilitas.

Bagaimana cara mengompresi citra atau video ke ukuran yang diperlukan?

Qwen-VL memiliki batasan ukuran untuk file input. Anda dapat mengompresinya menggunakan metode berikut.

Metode kompresi citra

  • Alat online: Anda dapat menggunakan alat online seperti CompressJPEG atau TinyPng untuk kompresi.

  • Perangkat lunak lokal: Anda dapat menggunakan perangkat lunak seperti Photoshop dan 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)
    
    # Teruskan citra lokal
    compress_image("/xxx/before-large.jpeg","/xxx/after-min.jpeg")

Metode kompresi video

  • Alat online: Anda dapat menggunakan alat online seperti FreeConvert.

  • Perangkat lunak lokal: Anda dapat menggunakan perangkat lunak seperti HandBrake.

  • Implementasi kode: Anda dapat menggunakan alat FFmpeg. Untuk informasi penggunaan lebih lanjut, lihat situs resmi FFmpeg.

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

Setelah model mengeluarkan hasil deteksi objek, bagaimana cara menggambar kotak deteksi pada citra asli?

Setelah model Qwen-VL mengeluarkan hasil deteksi objek, Anda dapat merujuk pada kode berikut untuk menggambar kotak deteksi dan informasi labelnya pada citra asli.

  • Qwen2.5-VL: Koordinat yang dikembalikan adalah nilai absolut relatif terhadap pojok kiri atas citra yang diskalakan, dalam piksel. Anda dapat merujuk pada kode qwen2_5_vl_2d.py untuk menggambar kotak deteksi.

  • Qwen3-VL: Koordinat yang dikembalikan adalah koordinat relatif yang dinormalisasi ke rentang [0, 999]. Anda dapat merujuk pada kode dalam qwen3_vl_2d.py (untuk lokalisasi 2D) atau qwen3_vl_3d.zip (untuk lokalisasi 3D) untuk menggambar kotak deteksi.

Kode error

Jika panggilan gagal, lihat Pesan error untuk pemecahan masalah.