All Products
Search
Document Center

Alibaba Cloud Model Studio:Pemahaman gambar dan video

Last Updated:Mar 28, 2026

Model pemahaman visual menjawab pertanyaan mengenai gambar dan video yang Anda berikan. Model ini mendukung input gambar tunggal atau ganda untuk tugas seperti pembuatan keterangan gambar (image captioning), menjawab pertanyaan visual (visual question answering), dan pelokalan objek.

Wilayah yang didukung: Singapura, AS (Virginia), Tiongkok (Beijing), Tiongkok (Hong Kong), dan Jerman (Frankfurt). Gunakan Kunci API dan Titik akhir spesifik untuk setiap wilayah.

Coba secara online: Buka Konsol Alibaba Cloud Model Studio, pilih wilayah di pojok kanan atas, lalu navigasikan ke halaman Vision.

Mulai

Prasyarat

Contoh berikut menunjukkan cara memanggil model untuk mendeskripsikan konten gambar. Untuk informasi selengkapnya, lihat Cara meneruskan file lokal dan Batasan gambar.

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os

client = OpenAI(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

completion = client.chat.completions.create(
    model="qwen3.5-plus",  # Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    },
                },
                {"type": "text", "text": "Apa yang digambarkan dalam gambar ini?"},
            ],
        },
    ],
)
print(completion.choices[0].message.content)

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di atas pasir, dengan laut dan langit di latar belakang. Orang dan anjing tersebut tampak sedang berinteraksi, dengan kaki depan anjing bertumpu pada tangan orang tersebut. Sinar matahari datang dari sisi kanan bingkai, menambah suasana hangat pada adegan ini.

Node.js

import OpenAI from "openai";

const openai = new OpenAI({
  // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
  // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
  baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

async function main() {
  const response = await openai.chat.completions.create({
    model: "qwen3.5-plus",   // Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
    messages: [
      {
        role: "user",
        content: [{
            type: "image_url",
            image_url: {
              "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
            }
          },
          {
            type: "text",
            text: "Apa yang digambarkan dalam gambar ini?"
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}
main()

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di atas pasir, dengan laut dan langit di latar belakang. Orang dan anjing tersebut tampak sedang berinteraksi, dengan kaki depan anjing bertumpu pada tangan orang tersebut. Sinar matahari datang dari sisi kanan bingkai, menambah suasana hangat pada adegan ini.

curl

# ======= Penting =======
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/zh/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.5-plus",
  "messages": [
    {"role": "user",
     "content": [
        {"type": "image_url", "image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
        {"type": "text", "text": "Apa yang digambarkan dalam gambar ini?"}
    ]
  }]
}'

Tanggapan

{
  "choices": [
    {
      "message": {
        "content": "Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di atas pasir, dengan laut dan langit di latar belakang. Orang dan anjing tersebut tampak sedang berinteraksi, dengan kaki depan anjing bertumpu pada tangan orang tersebut. Sinar matahari datang dari sisi kanan bingkai, menambah suasana hangat pada adegan ini.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 1270,
    "completion_tokens": 54,
    "total_tokens": 1324
  },
  "created": 1725948561,
  "system_fingerprint": null,
  "model": "qwen3.5-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

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

response = dashscope.MultiModalConversation.call(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-plus',   # Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
    messages=messages
)

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

Tanggapan

Ini adalah foto yang diambil di pantai. Dalam foto tersebut, terdapat seorang wanita dan seekor anjing. Wanita tersebut duduk di atas pasir sambil tersenyum dan berinteraksi dengan 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 {
    
    // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    static {
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation(); 
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("text", "Apa yang digambarkan dalam gambar ini"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-plus")  //  Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya dengan model lain. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Tanggapan

Ini adalah foto yang diambil di pantai. 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 =======
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, kunjungi: https://www.alibabacloud.com/help/zh/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.5-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
                    {"text": "Apa yang digambarkan dalam gambar ini?"}
                ]
            }
        ]
    }
}'

Tanggapan

{
  "output": {
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "text": "Ini adalah foto yang diambil di pantai. Dalam foto tersebut, terdapat seseorang yang mengenakan kemeja kotak-kotak dan seekor anjing yang mengenakan kalung. Mereka duduk di atas pasir, dengan laut dan langit 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

  • Qwen3.5 yang Direkomendasikan: Generasi terbaru model pemahaman visual. Unggul dalam tugas seperti penalaran multimodal, pemahaman gambar 2D/3D, penguraian dokumen kompleks, pemrograman visual, pemahaman video, dan pembuatan agen multimodal. Tersedia di wilayah Tiongkok daratan dan Singapura.

    • qwen3.5-plus: Model paling canggih dalam seri Qwen3.5, direkomendasikan untuk tugas yang memerlukan akurasi dan performa tertinggi.

    • qwen3.5-flash: Pilihan yang lebih cepat dan hemat biaya yang menyeimbangkan performa dan biaya, ideal untuk skenario yang sensitif terhadap latensi.

    • qwen3.5-397b-a17b, qwen3.5-122b-a10b, qwen3.5-27b, dan qwen3.5-35b-a3b: Model open-source dalam seri Qwen3.5.

  • Seri Qwen3-VL juga cocok untuk tugas yang memerlukan pengenalan dan pelokalan objek presisi tinggi (termasuk 3D), pemanggilan alat oleh agen, penguraian dokumen dan halaman web, pemecahan masalah kompleks, dan pemahaman video panjang.

    • qwen3-vl-plus: Model paling kuat dalam seri Qwen3-VL.

    • qwen3-vl-flash: Pilihan yang lebih cepat dan hemat biaya yang menyeimbangkan performa dan biaya, ideal untuk skenario yang sensitif terhadap latensi.

  • Seri Qwen2.5-VL cocok untuk tugas umum seperti pembuatan keterangan gambar sederhana dan mengekstrak ringkasan dari video pendek.

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

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

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

Perbandingan fitur model

Model

Deep thinking

Pemanggilan alat

Context cache

Structured output

Bahasa

Seri Qwen3.5

Didukung

Didukung

Dukungan untuk versi stabil qwen3.5-plus dan qwen3.5-flash.

Hanya cache eksplisit.

Dukungan mode non-thinking

33 bahasa: Tiongkok, 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.

Qwen3-VL seri

Didukung

Didukung

Dukungan untuk versi stabil qwen3-vl-plus dan qwen3-vl-flash

Dukungan untuk Mode Non-Thinking

33 bahasa: Tiongkok, 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

Versi stabil qwen-vl-max dan qwen-vl-plus mendukung fitur ini.

Versi stabil dan terbaru qwen-vl-max dan qwen-vl-plus didukung.

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

Kemampuan

Menjawab pertanyaan visual (VQA)

Deskripsikan dan klasifikasikan konten gambar, 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 kuat, mengurangi kerusakan UV pada mata Anda, serta membantu melindungi penglihatan sekaligus meningkatkan kenyamanan di bawah sinar matahari terang.

Penulisan kreatif

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

vl-问答

Berdasarkan gambar ini, buatkan postingan media sosial yang menarik untuk saya.

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

Gaya puitis dan estetis

Malam ini, bulan bersinar terang untuk semua orang, saat rindu musim gugur menghampirimu. Penerbangan Chang'e dan ramuan Kelinci Giok—romansa zaman dahulu kembali berkobar malam ini. Semoga cahaya bulan ini menerangi jalan pulangmu dan membawa harapan terdalamku. Selamat Festival Pertengahan Musim Gugur!

Gaya hangat dan tulus

Bulan purnama untuk reuni penuh pada malam Pertengahan Musim Gugur yang lembut ini. Menonton kembang api, memandang bulan, menikmati kue bulan, dan mendoakanmu. Semoga semua harapan dan impian kita menjadi kenyataan. Selamat Festival Pertengahan Musim Gugur dan semoga keluarga Anda berkumpul dengan penuh sukacita!

OCR dan ekstraksi informasi

Kenali teks dan rumus dalam gambar, atau ekstrak informasi dari dokumen seperti kwitansi, sertifikat, dan formulir. Model-model ini mendukung output teks terformat. Baik model Qwen3.5 maupun Qwen3-VL telah memperluas dukungan bahasa mereka hingga 33 bahasa. Untuk daftar bahasa yang didukung, lihat Perbandingan fitur model.

-q2cdz6jy89b6m3kp

Ekstrak bidang berikut dari gambar: ['Kode Faktur', 'Nomor Faktur', 'Tujuan', 'Biaya Bahan Bakar', 'Tarif', 'Tanggal Perjalanan', 'Waktu Keberangkatan', 'Nomor Kereta', 'Nomor Kursi']. Output hasilnya 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 dari berbagai mata pelajaran yang ditemukan dalam gambar, termasuk matematika, fisika, dan kimia. Mendukung aplikasi pendidikan dari TK hingga SMA hingga pembelajaran dewasa.

-5jwcstcvmdpqghaj

Selesaikan soal matematika dalam gambar ini langkah demi langkah.

-答案

Pemrograman visual

Hasilkan kode dari gambar atau video untuk mengonversi mockup desain, tangkapan layar situs web, dan masukan visual lainnya menjadi kode HTML, CSS, dan JS.

code

Buat halaman web menggunakan HTML dan CSS berdasarkan sketsa saya. Tema warna utama harus hitam.

code-预览

Pratinjau halaman web

Pelokalan objek

Mendukung pelokalan 2D dan 3D untuk menentukan orientasi objek, perubahan perspektif, dan hubungan oklusi. Pelokalan 3D merupakan kemampuan baru model Qwen3-VL.

Model Qwen2.5-VL memberikan pelokalan objek yang andal dalam rentang resolusi 480x480 hingga 2560x2560 piksel. Di luar rentang ini, akurasi deteksi dapat menurun, dengan sesekali terjadi deviasi Kotak pembatas.
Untuk menggambar hasil pelokalan pada gambar asli, lihat FAQ.

Posisi 2D

-530xdcos1lqkcfuy

  • Mengembalikan koordinat Kotak pembatas: Deteksi semua item makanan dalam gambar dan output koordinat Kotak pembatas (bbox) dalam format JSON.

  • Mengembalikan koordinat titik pusat: Lokalisasi semua item makanan dalam gambar sebagai titik dan output koordinat titik dalam format XML.

Visualisasi hasil posisi 2D

-mu9podu1eyvph1zd

Posisi 3D

3d

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

Visualisasi hasil posisi 3D

3d-结果

Penguraian dokumen

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

Prompt yang direkomendasikan: 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 untuk melokalisasi event spesifik dan mengambil timestamp-nya, atau menghasilkan ringkasan periode waktu utama.

Jelaskan rangkaian aksi yang dilakukan oleh orang dalam video tersebut. Output hasilnya dalam format JSON dengan bidang start_time, end_time, dan event. Gunakan format HH:mm:ss untuk timestamp.

{

"events": [

{

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

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

"event": "Orang tersebut berjalan ke 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 mengarahkannya ke label pada kotak untuk memindainya."

},

{

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

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

"event": "Orang tersebut meletakkan kembali pemindai ke tempatnya lalu mengambil pena untuk menulis informasi di buku catatan."}]

}

Kemampuan inti

Aktifkan atau nonaktifkan mode berpikir

  • Model seri qwen3.5, qwen3-vl-plus, dan qwen3-vl-flash adalah model berpikir hibrida yang dapat merespons baik setelah melakukan penalaran maupun langsung. Gunakan parameter enable_thinking untuk mengontrol apakah akan mengaktifkan mode berpikir:

    • true: Aktifkan mode berpikir. Nilai default untuk seri qwen3.5 adalah true.

    • false: Nonaktifkan mode berpikir. Nilai default untuk seri qwen3-vl-plus dan qwen3-vl-flash adalah false.

  • Model dengan akhiran thinking, seperti qwen3-vl-235b-a22b-thinking, adalah model penalaran khusus. Model ini selalu melakukan penalaran sebelum merespons, dan fitur ini tidak dapat dinonaktifkan.

Penting
  • Konfigurasi model: Dalam skenario percakapan umum yang tidak melibatkan pemanggilan alat, jangan atur System Message untuk performa optimal. Sebaliknya, sampaikan instruksi seperti pengaturan peran model dan persyaratan format output melalui User Message.

  • Gunakan keluaran streaming: Saat mode berpikir diaktifkan, keluaran streaming dan non-streaming didukung. Untuk menghindari timeout akibat respons yang panjang, gunakan keluaran streaming.

  • Batasi panjang proses berpikir: Model deep thinking terkadang menghasilkan penalaran yang bertele-tele. Anda dapat menggunakan parameter thinking_budget untuk membatasi panjang penalaran. Jika jumlah token yang dihasilkan selama penalaran melebihi thinking_budget, proses penalaran dipotong dan model segera mulai menghasilkan respons akhir. Nilai default thinking_budget adalah panjang maksimum rantai-pikiran model. Lihat Daftar model.

Kompatibel dengan OpenAI

Parameter enable_thinking bukanlah parameter standar OpenAI. Jika Anda menggunakan OpenAI Python SDK, teruskan melalui extra_body.

import os
from openai import OpenAI

client = OpenAI(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)

reasoning_content = ""  # Menyimpan proses penalaran lengkap.
answer_content = ""     # Menyimpan respons lengkap.
is_answering = False   # Melacak apakah model sedang menghasilkan jawaban akhir.
enable_thinking = True
# Buat permintaan penyelesaian chat.
completion = client.chat.completions.create(
    model="qwen3.5-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,
    # `mode berpikir` dapat diaktifkan/nonaktifkan untuk `qwen3.5`/`qwen3-vl-plus`/`qwen3-vl-flash`. Wajib untuk model dengan akhiran 'thinking' dan tidak berlaku untuk model Qwen-VL lainnya.
    # Parameter `thinking_budget` menetapkan jumlah maksimum token untuk proses penalaran.
    extra_body={
        'enable_thinking': enable_thinking,
        "thinking_budget": 81920},

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

if enable_thinking:
    print("\n" + "=" * 20 + "Proses Berpikir" + "=" * 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 penalaran.
        if hasattr(delta, 'reasoning_content') and delta.reasoning_content is not None:
            print(delta.reasoning_content, end='', flush=True)
            reasoning_content += delta.reasoning_content
        else:
            # Mulai mencetak respons.
            if delta.content != "" and is_answering is False:
                print("\n" + "=" * 20 + "Respons Lengkap" + "=" * 20 + "\n")
                is_answering = True
            # Cetak konten respons.
            if delta.content is not None:
                print(delta.content, end='', flush=True)
                answer_content += delta.content

# print("=" * 20 + "Proses Berpikir 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({
  // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
  // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
  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: "Bagaimana cara menyelesaikan masalah ini?" },
    ]
}]

async function main() {
    try {
        const stream = await openai.chat.completions.create({
            model: 'qwen3.5-plus',
            messages: messages,
            stream: true,
          // Catatan: Di Node.js SDK, teruskan parameter non-standar seperti enable_thinking di level teratas, bukan di extra_body.
          enable_thinking: enableThinking,
          thinking_budget: 81920

        });

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

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

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

            // Proses konten penalaran.
            if (delta.reasoning_content) {
                process.stdout.write(delta.reasoning_content);
                reasoningContent += delta.reasoning_content;
            }
            // Proses konten respons.
            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 =======
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/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.5-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,
    "stream_options":{"include_usage":true},
    "enable_thinking": true,
    "thinking_budget": 81920
}'

DashScope

import os
import dashscope
from dashscope import MultiModalConversation

# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
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": "Bagaimana cara menyelesaikan masalah ini?"}
        ]
    }
]

response = MultiModalConversation.call(
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="qwen3.5-plus",  
    messages=messages,
    stream=True,
    # `mode berpikir` dapat diaktifkan/nonaktifkan untuk `qwen3.5`/`qwen3-vl-plus`/`qwen3-vl-flash`. Wajib untuk model dengan akhiran 'thinking' dan tidak berlaku untuk model Qwen-VL lainnya.
    enable_thinking=enable_thinking,
    # Parameter `thinking_budget` menetapkan jumlah maksimum token untuk proses penalaran.
    thinking_budget=81920,

)

# Menyimpan proses penalaran lengkap.
reasoning_content = ""
# Menyimpan respons lengkap.
answer_content = ""
# Melacak apakah model sedang menghasilkan jawaban akhir.
is_answering = False

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

for chunk in response:
    # Abaikan chunk kosong.
    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:
        # Dalam proses penalaran.
        if reasoning_content_chunk is not None and chunk.output.choices[0].message.content == []:
            print(chunk.output.choices[0].message.reasoning_content, end="")
            reasoning_content += chunk.output.choices[0].message.reasoning_content
        # 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 penalaran lengkap dan respons lengkap, hapus komentar dan jalankan kode berikut.
# print("=" * 20 + "Proses Berpikir 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 {
    // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    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; // Default ke string kosong jika konten penalaran null.

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

        if (Objects.nonNull(content) && !content.isEmpty()) {
            Object text = content.get(0).get("text");
            finalContent.append(content.get(0).get("text"));
            if (!isFirstPrint) {
                System.out.println("\n====================Respons Lengkap====================");
                isFirstPrint = true;
            }
            System.out.print(text);
        }
    }
    public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg)  {
        return MultiModalConversationParam.builder()
                // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-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", "Bagaimana cara menyelesaikan 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 =======
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# === 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.5-plus",
    "input":{
        "messages":[
            {
                "role": "user",
                "content": [
                    {"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
                    {"text": "Bagaimana cara menyelesaikan masalah ini?"}
                ]
            }
        ]
    },
    "parameters":{
        "enable_thinking": true,
        "incremental_output": true,
        "thinking_budget": 81920
    }
}'

Input gambar ganda

Model pemahaman visual memungkinkan Anda mengirimkan beberapa gambar dalam satu permintaan untuk tugas seperti perbandingan produk dan pemrosesan dokumen multi-halaman. Untuk melakukannya, sertakan beberapa objek gambar dalam array pesan pengguna konten.

Penting

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

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI

client = OpenAI(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-plus",  #  Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
    messages=[
        {"role": "user","content": [
            {"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},},
            {"type": "image_url","image_url": {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},},
            {"type": "text", "text": "Apa yang digambarkan dalam gambar-gambar ini?"},
            ],
        }
    ],
)

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

Tanggapan

Gambar 1 menunjukkan seorang wanita dan seekor Labrador retriever yang berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di atas pasir, sambil bersalaman dengan anjing tersebut. Latar belakang menampilkan ombak laut dan langit, menciptakan suasana yang hangat dan menyenangkan.

Gambar 2 menunjukkan seekor harimau yang berjalan melalui hutan. Bulunya berwarna oranye dengan garis-garis hitam. Sekelilingnya dipenuhi pepohonan dan vegetasi yang lebat, serta tanah ditutupi daun-daun yang gugur. Adegan ini membangkitkan rasa liar.

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.5-plus",  // Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
        messages: [
          {role: "user",content: [
            {type: "image_url",image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
            {type: "image_url",image_url: {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"}},
            {type: "text", text: "Apa yang digambarkan dalam gambar-gambar ini?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

Tanggapan

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

Pada gambar kedua, seekor harimau berjalan melalui hutan. Bulunya berwarna oranye dengan garis-garis hitam, dan latar belakangnya terdiri dari pepohonan hijau dan vegetasi.

curl

# ======= Penting =======
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# === 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.5-plus",
  "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
          }
        },
        {
          "type": "image_url",
          "image_url": {
            "url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"
          }
        },
        {
          "type": "text",
          "text": "Apa yang digambarkan dalam gambar-gambar ini?"
        }
      ]
    }
  ]
}'

Tanggapan

{
  "choices": [
    {
      "message": {
        "content": "Gambar 1 menunjukkan seorang wanita dan seekor Labrador retriever yang berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di atas pasir, sambil bersalaman dengan anjing tersebut. Latar belakang menampilkan laut dan langit senja, menciptakan suasana yang sangat hangat dan harmonis.\n\nGambar 2 menunjukkan seekor harimau yang berjalan melalui hutan. Bulunya berwarna oranye dengan garis-garis hitam saat berjalan maju. Sekelilingnya dipenuhi pepohonan dan vegetasi yang lebat, dengan daun-daun yang gugur di tanah. Adegan ini menyampaikan rasa liar dan vitalitas.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 2497,
    "completion_tokens": 109,
    "total_tokens": 2606
  },
  "created": 1725948561,
  "system_fingerprint": null,
  "model": "qwen3.5-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

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

response = dashscope.MultiModalConversation.call(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-plus', #  Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/zh/model-studio/getting-started/models untuk model lainnya.
    messages=messages
)

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

Tanggapan

Gambar-gambar ini menunjukkan hewan dalam adegan alami. Gambar 1 menunjukkan seseorang dan seekor anjing yang berinteraksi di pantai. Gambar 2 menunjukkan 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 {
    // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"),
                        Collections.singletonMap("text", "Apa yang digambarkan dalam gambar-gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-plus")  //  Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Tanggapan

Gambar-gambar ini menunjukkan hewan dalam adegan alami.

1. Gambar pertama: Seorang wanita dan seekor anjing berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di atas pasir, sedangkan anjing tersebut mengenakan kalung dan mengulurkan kakinya untuk bersalaman dengannya.
2. Gambar kedua: Seekor harimau berjalan melalui hutan. Bulunya berwarna oranye dengan garis-garis hitam, dan latar belakangnya mencakup pepohonan dan daun-daun.

curl

# ======= Penting =======
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/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.5-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 digambarkan dalam gambar-gambar ini?"}
                ]
            }
        ]
    }
}'

Tanggapan

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

Pemahaman video

Model pemahaman visual menganalisis konten video dari file video atau daftar gambar (frame video). Contoh berikut menunjukkan cara menganalisis video online atau daftar gambar yang ditentukan oleh URL. Untuk batasan video atau jumlah gambar dalam daftar gambar, lihat bagian Batasan video.

Untuk performa optimal, gunakan versi terbaru atau Snapshot terbaru model untuk menganalisis file video.

File video

Model pemahaman visual melakukan analisis konten dengan mengekstraksi urutan frame video. Anda dapat mengontrol kebijakan ekstraksi frame dengan dua parameter berikut:

  • fps: Mengontrol frekuensi ekstraksi frame, mengekstraksi satu frame setiap detik. Nilai yang valid adalah [0.1, 10]. Nilai default adalah 2.0.

    • Untuk adegan gerakan cepat, atur nilai fps lebih tinggi untuk menangkap lebih banyak detail.

    • Untuk video statis atau panjang, pertimbangkan untuk mengatur nilai fps lebih rendah untuk meningkatkan efisiensi pemrosesan.

  • max_frames: Membatasi jumlah maksimum frame yang diekstraksi dari video. Jika jumlah total frame yang dihitung berdasarkan nilai fps melebihi batas ini, sistem akan mengambil sampel frame secara merata agar tetap dalam batas max_frames. Parameter ini hanya tersedia dengan DashScope SDK.

Kompatibel dengan OpenAI

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

Python

import os
from openai import OpenAI

client = OpenAI(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.5-plus",
    messages=[
        {
            "role": "user",
            "content": [
                # Saat Anda memberikan file video langsung, atur tipe ke video_url.
                {
                    "type": "video_url",
                    "video_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
                    },
                    "fps": 2
                },
                {
                    "type": "text",
                    "text": "Apa isi video ini?"
                }
            ]
        }
    ]
)

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

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

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

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

main();

curl

# ======= Penting =======
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# === 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.5-plus",
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "type": "video_url",
            "video_url": {
              "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
            },
            "fps":2
          },
          {
            "type": "text",
            "text": "Apa isi video ini?"
          }
        ]
      }
    ]
  }'

DashScope

Python

import dashscope
import os

# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
    {"role": "user",
        "content": [
            # Parameter fps mengontrol laju frame. Satu frame diekstraksi setiap 1/fps detik. Untuk informasi selengkapnya, lihat: https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
            {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "Apa isi video ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key ="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-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 {
            // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
            Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
        }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Parameter fps mengontrol laju frame. Satu frame diekstraksi setiap 1/fps detik. Untuk informasi selengkapnya, lihat: https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
        Map<String, Object> params = new HashMap<>();
        params.put("video", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4");
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "Apa isi video ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Jika Anda menggunakan model di wilayah Tiongkok (Beijing), Anda harus menggunakan Kunci API dari wilayah tersebut. Dapatkan Kunci API di: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-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

# ======= Catatan penting =======
# Konfigurasi bervariasi berdasarkan wilayah. Ubah konfigurasi sesuai wilayah Anda yang sebenarnya.
# Kunci API berbeda berdasarkan wilayah. Dapatkan Kunci API: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum menjalankan perintah ===

curl -X POST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.5-plus",
    "input":{
        "messages":[
            {"role": "user","content": [{"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "Apa isi video ini?"}]}]}
}'

Daftar gambar

Saat video disediakan sebagai daftar gambar (frame video yang telah diekstraksi sebelumnya), gunakan parameter fps untuk memberi tahu model tentang interval waktu antar frame. Ini membantu model lebih akurat memahami urutan kejadian, durasi, dan perubahan dinamis. Model mendukung penggunaan parameter fps untuk menentukan laju ekstraksi frame video asli, artinya satu frame diekstraksi setiap detik dari video asli. Parameter ini didukung oleh model Qwen3.5, Qwen3-VL, dan Qwen2.5-VL.

Kompatibel dengan OpenAI

Saat Anda memberikan video sebagai daftar gambar menggunakan OpenAI SDK atau permintaan HTTP, atur parameter "type" dalam pesan pengguna ke "video".

Python

import os
from openai import OpenAI

client = OpenAI(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-plus", # Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/zh/model-studio/models untuk model lainnya.
    messages=[{"role": "user","content": [
        # Saat Anda memberikan daftar gambar, parameter 'type' dalam pesan pengguna adalah 'video'.
         {"type": "video","video": [
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
         "fps":2},
         {"type": "text","text": "Jelaskan proses yang ditunjukkan dalam video ini."},
    ]}]
)

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

Node.js

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

const openai = new OpenAI({
    // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    // Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx",
    apiKey: process.env.DASHSCOPE_API_KEY,
    // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.5-plus",  // Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/zh/model-studio/models untuk model lainnya.
        messages: [{
            role: "user",
            content: [
                {
                    // Saat Anda memberikan daftar gambar, parameter 'type' dalam pesan pengguna adalah 'video'.
                    type: "video",
                    video: [
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                        "fps": 2
                },
                {
                    type: "text",
                    text: "Jelaskan proses yang ditunjukkan dalam video ini."
                }
            ]
        }]
    });
    console.log(response.choices[0].message.content);
}

main();

curl

# ======= Penting =======
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# === 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.5-plus",
    "messages": [{"role": "user","content": [{"type": "video","video": [
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                  "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                  "fps":2},
                {"type": "text","text": "Jelaskan proses yang ditunjukkan dalam video ini."}]}]
}'

DashScope

Python

import os
import dashscope

# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  # Saat Anda memberikan daftar gambar, parameter fps berlaku untuk model seri Qwen3.5, Qwen3-VL, dan Qwen2.5-VL.
                 {"video":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                   "fps":2},
                 {"text": "Jelaskan proses yang ditunjukkan dalam video ini."}]}]
response = dashscope.MultiModalConversation.call(
    # Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum menyetel variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3.5-plus',  # Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
    messages=messages
)
print(response.output.choices[0].message.content[0]["text"])

Java

// Diperlukan versi DashScope SDK 2.21.10 atau lebih baru.
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;

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

public class Main {
    static {
        // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    private static final String MODEL_NAME = "qwen3.5-plus";  // Menggunakan model qwen3.5-plus. Lihat https://www.alibabacloud.com/help/model-studio/getting-started/models untuk model lainnya.
    public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Saat Anda memberikan daftar gambar, parameter fps berlaku untuk model seri Qwen3.5, Qwen3-VL, dan Qwen2.5-VL.
        Map<String, Object> params = new HashMap<>();
        params.put("video", Arrays.asList("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"));
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "Jelaskan proses yang ditunjukkan dalam video ini.")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum menyetel 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 =======
# Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
# Setiap wilayah memerlukan Kunci API unik. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://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.5-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
              "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
            ],
            "fps":2
                 
          },
          {
            "text": "Jelaskan proses yang ditunjukkan dalam video ini."
          }
        ]
      }
    ]
  }
}'

Teruskan file lokal (encoding Base64 atau jalur file)

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

Unggahan Encoding Base64

Konversi file ke string encoding Base64 dan teruskan ke model. Metode ini kompatibel dengan SDK OpenAI dan DashScope, serta permintaan HTTP.

Langkah-langkah untuk meneruskan string encoding Base64 (menggunakan gambar sebagai contoh)

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

    Kode contoh untuk mengonversi gambar ke encoding Base64

    # Mengonversi file lokal ke string encoding Base64.
    import base64
    def encode_image(image_path):
        with open(image_path, "rb") as image_file:
            return base64.b64encode(image_file.read()).decode("utf-8")
    
    # Ganti "xxx/eagle.png" dengan jalur mutlak gambar lokal Anda.
    base64_image = encode_image("xxx/eagle.png")
  2. Buat URL Data. Gunakan format berikut: data:[MIME_type];base64,{base64_image}.

    1. Ganti MIME_type dengan tipe media aktual. Nilainya harus sesuai dengan entri di kolom Tipe MIME pada tabel Format gambar yang didukung, seperti image/jpeg atau image/png.

    2. base64_image adalah string encoding Base64 dari langkah sebelumnya.

  3. Panggil model dengan meneruskan URL Data ke parameter image atau image_url.

Unggahan Jalur File

Teruskan jalur file lokal langsung ke model. Metode ini hanya didukung oleh DashScope Python dan Java SDK. Metode ini tidak kompatibel dengan permintaan DashScope HTTP atau OpenAI-compatible.

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

Tentukan jalur file (menggunakan gambar sebagai contoh)

Sistem

SDK

Jalur file

Contoh

Linux atau macOS

Python SDK

file://{jalur mutlak}

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

Java SDK

Windows

Python SDK

file://{jalur mutlak}

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

Java SDK

file:///{jalur mutlak}

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

Gambar

Jalur file

Python

import os
import dashscope

# Titik akhir bervariasi berdasarkan Wilayah. Ubah Titik akhir sesuai Wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda.
local_path = "xxx/eagle.png"
image_path = f"file://{local_path}"
messages = [
                {'role':'user',
                'content': [{'image': image_path},
                            {'text': 'Apa yang digambarkan dalam gambar ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Diperlukan Kunci API untuk setiap Wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, gunakan Kunci API Model Studio Anda untuk mengganti baris berikut dengan: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-plus',  # Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, 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 {
        // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>(){{put("image", filePath);}},
                        new HashMap<String, Object>(){{put("text", "Apa yang digambarkan dalam gambar ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Diperlukan Kunci API untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat meneruskan Kunci API Model Studio Anda secara langsung dengan mengganti baris berikut dengan: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-plus")  // Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

    public static void main(String[] args) {
        try {
            // Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda.
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Encoding Base64

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os
import base64


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

# Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda.
base64_image = encode_image("xxx/eagle.png")
client = OpenAI(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat meneruskan Kunci API Model Studio Anda secara langsung dengan mengganti
    # baris berikut dengan: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    # Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.5-plus", # Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # Catatan: Saat meneruskan data encoding Base64, pastikan format URI data (misalnya, data:image/png;base64)
                    # sesuai dengan format gambar aktual.
                    # Gambar PNG:  f"data:image/png;base64,{base64_image}"
                    # Gambar JPEG: f"data:image/jpeg;base64,{base64_image}"
                    # Gambar WEBP: f"data:image/webp;base64,{base64_image}"
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "Apa yang digambarkan dalam gambar ini?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

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


const openai = new OpenAI(
    {
        // Diperlukan Kunci API untuk setiap wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat meneruskan Kunci API Model Studio Anda secara langsung dengan mengganti baris berikut dengan: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

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

main();

curl

  • Untuk contoh mengonversi file ke string encoding Base64, lihat kode contoh.

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

# ======= Penting =======
# Diperlukan Kunci API untuk setiap Wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Titik akhir bervariasi berdasarkan Wilayah. Ubah Titik akhir sesuai Wilayah Anda.
# === 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.5-plus",
  "messages": [
  {
    "role": "user",
    "content": [
      {"type": "image_url", "image_url": {"url": "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA"}},
      {"type": "text", "text": "Apa yang digambarkan dalam gambar ini?"}
    ]
  }]
}'

DashScope

Python

import base64
import os
import dashscope

# Titik akhir bervariasi berdasarkan Wilayah. Ubah Titik akhir sesuai Wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

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


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

messages = [
    {
        "role": "user",
        "content": [
            # Catatan: Saat meneruskan data encoding Base64, pastikan format URI data (misalnya, data:image/png;base64)
            # sesuai dengan format gambar aktual.
            # Gambar PNG:  f"data:image/png;base64,{base64_image}"
            # Gambar JPEG: f"data:image/jpeg;base64,{base64_image}"
            # Gambar WEBP: f"data:image/webp;base64,{base64_image}"
            {"image": f"data:image/png;base64,{base64_image}"},
            {"text": "Apa yang digambarkan dalam gambar ini?"},
        ],
    },
]

response = dashscope.MultiModalConversation.call(
    # Diperlukan Kunci API untuk setiap Wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, Anda dapat meneruskan Kunci API Anda secara langsung dengan mengganti baris berikut dengan: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3.5-plus",  # Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, 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 {
        // Titik akhir bervariasi berdasarkan wilayah. Ubah Titik akhir sesuai wilayah Anda.
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

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

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

        String base64Image = encodeImageToBase64(localPath); // Encoding Base64

        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        new HashMap<String, Object>() {{ put("image", "data:image/png;base64," + base64Image); }},
                        new HashMap<String, Object>() {{ put("text", "Apa yang digambarkan dalam gambar ini?"); }}
                )).build();

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

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

    public static void main(String[] args) {
        try {
            // Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda.
            callWithLocalFile("xxx/eagle.png");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Untuk contoh mengonversi file ke string encoding Base64, lihat kode contoh.

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

# ======= Penting =======
# Titik akhir bervariasi berdasarkan Wilayah. Ubah Titik akhir sesuai Wilayah Anda.
# Diperlukan Kunci API untuk setiap Wilayah. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===

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

File video

Contoh ini menggunakan file lokal test.mp4.

Jalur file

Python

import os
import dashscope

# Titik akhir bervariasi berdasarkan Wilayah. Ubah titik akhir sesuai dengan Wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Ganti xxx/test.mp4 dengan jalur mutlak file video lokal Anda.
local_path = "xxx/test.mp4"
video_path = f"file://{local_path}"
messages = [
                {'role':'user',
                # Parameter fps menentukan jumlah frame yang diekstraksi per detik.
                'content': [{'video': video_path,"fps":2},
                            {'text': 'Apa yang digambarkan dalam video ini?'}]}]
response = MultiModalConversation.call(
    # Diperlukan Kunci API untuk setiap Wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-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 {
        // Titik akhir bervariasi berdasarkan wilayah. Ubah titik akhir sesuai dengan wilayah Anda.
        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 menentukan jumlah frame yang diekstraksi per detik.
                                           put("fps", 2);
                                       }}, 
                        new HashMap<String, Object>(){{put("text", "Apa yang digambarkan dalam video ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Diperlukan Kunci API untuk setiap wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-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 file video lokal Anda.
            callWithLocalFile("xxx/test.mp4");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Enkode Base64

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os
import base64


# Fungsi enkode: 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 xxx/test.mp4 dengan jalur mutlak file video lokal Anda.
base64_video = encode_video("xxx/test.mp4")
client = OpenAI(
    # Diperlukan Kunci API untuk setiap Wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    # Titik akhir bervariasi berdasarkan Wilayah. Ubah titik akhir sesuai dengan Wilayah Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.5-plus",  
    messages=[
        {
            "role": "user",
            "content": [
                {
                    # Gunakan "video_url" sebagai tipe untuk data video terenkripsi Base64.
                    "type": "video_url",
                    "video_url": {"url": f"data:video/mp4;base64,{base64_video}"},
                    "fps":2
                },
                {"type": "text", "text": "Apa yang digambarkan dalam video ini?"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Diperlukan Kunci API untuk setiap Wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Titik akhir bervariasi berdasarkan Wilayah. Ubah titik akhir sesuai dengan Wilayah Anda.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeVideo = (videoPath) => {
    const videoFile = readFileSync(videoPath);
    return videoFile.toString('base64');
  };
// Ganti xxx/test.mp4 dengan jalur mutlak file video lokal Anda.
const base64Video = encodeVideo("xxx/test.mp4")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3.5-plus", 
        messages: [
            {"role": "user",
             "content": [{
                 // Gunakan "video_url" sebagai tipe untuk data video terenkripsi Base64.
                "type": "video_url", 
                "video_url": {"url": `data:video/mp4;base64,${base64Video}`},
                "fps":2},
                 {"type": "text", "text": "Apa yang digambarkan dalam video ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi lebih lanjut, lihat Kode contoh.

  • String terenkripsi Base64 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode ini dipotong untuk ditampilkan. Anda harus menggunakan string lengkap dalam permintaan aktual Anda.

# ======= Pemberitahuan Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API Anda, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Konfigurasi bervariasi berdasarkan wilayah. Ubah konfigurasi sesuai dengan wilayah Anda yang sebenarnya.
# === Hapus komentar ini sebelum eksekusi ===

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

DashScope

Python

import base64
import os
import dashscope

# Titik akhir bervariasi berdasarkan Wilayah. Ubah titik akhir sesuai dengan Wilayah Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# 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 file video lokal Anda.
base64_video = encode_video("xxxx/test.mp4")

messages = [{'role':'user',
                # Parameter fps menentukan jumlah frame yang diekstraksi per detik.
             'content': [{'video': f"data:video/mp4;base64,{base64_video}","fps":2},
                            {'text': 'Apa yang digambarkan dalam video ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Diperlukan Kunci API untuk setiap Wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-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 {
        // Titik akhir bervariasi berdasarkan wilayah. Ubah titik akhir sesuai dengan wilayah Anda.
        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); // Terenkripsi 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 menentukan jumlah frame yang diekstraksi per detik.
                                           put("fps", 2);
                                       }},
                        new HashMap<String, Object>(){{put("text", "Apa yang digambarkan dalam video ini?");}})).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Diperlukan Kunci API untuk setiap wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-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 file video lokal Anda.
            callWithLocalFile("xxx/test.mp4");
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Kode contoh menunjukkan cara mengonversi file menjadi string terenkripsi Base64.

  • String terenkripsi Base64 "f"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode ini dipotong untuk ditampilkan. Anda harus menggunakan string lengkap dalam permintaan aktual Anda.

# ======= Penting =======
# Diperlukan Kunci API untuk setiap Wilayah. Dapatkan Kunci API Anda di: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Titik akhir bervariasi berdasarkan Wilayah. Ubah titik akhir sesuai dengan Wilayah Anda.
# === Hapus komentar ini sebelum menjalankan kode ===

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.5-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"video": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
               {"text": "Apa yang digambarkan dalam video ini?"}
                ]
            }
        ]
    }
}'

Daftar gambar

Contoh ini menggunakan file lokal berikut: football1.jpg, football2.jpg, football3.jpg, dan football4.jpg.

Jalur file

Python

import os
import dashscope

# Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
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',
              # Parameter fps tersedia untuk model seri Qwen3.5, Qwen3-VL, dan Qwen2.5-VL ketika Anda memberikan daftar gambar.
             'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
                         {'text': 'Describe the process shown in this video.'}]}]
response = MultiModalConversation.call(
    # Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.5-plus',  # Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages)

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

Java

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

public class Main {

    static {
        // Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    private static final String MODEL_NAME = "qwen3.5-plus";  // Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    public static void videoImageListSample(String localPath1, String localPath2, String localPath3, String localPath4)
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        String filePath1 = "file://" + localPath1;
        String filePath2 = "file://" + localPath2;
        String filePath3 = "file://" + localPath3;
        String filePath4 = "file://" + localPath4;
        Map<String, Object> params = new HashMap<>();
        params.put("video", Arrays.asList(filePath1,filePath2,filePath3,filePath4));
        // Parameter fps tersedia untuk model seri Qwen3.5, Qwen3-VL, dan Qwen2.5-VL ketika Anda memberikan daftar gambar.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Describe the process shown in this video.")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL_NAME)
                .messages(Arrays.asList(userMessage)).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            videoImageListSample(
                    "xxx/football1.jpg",
                    "xxx/football2.jpg",
                    "xxx/football3.jpg",
                    "xxx/football4.jpg");
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Encoding Base64

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI
import base64

# Mengonversi file lokal menjadi string yang di-encode 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(
    # Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.5-plus",  # Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=[  
    {"role": "user","content": [
        {"type": "video","video": [
            f"data:image/jpeg;base64,{base64_image1}",
            f"data:image/jpeg;base64,{base64_image2}",
            f"data:image/jpeg;base64,{base64_image3}",
            f"data:image/jpeg;base64,{base64_image4}",]},
        {"type": "text","text": "Describe the process shown in this video."},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

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

const openai = new OpenAI(
    {
        // Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
        // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
        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.5-plus",  // Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
        messages: [
            {"role": "user",
             "content": [{"type": "video",
                        "video": [
                            `data:image/jpeg;base64,${base64Image1}`,
                            `data:image/jpeg;base64,${base64Image2}`,
                            `data:image/jpeg;base64,${base64Image3}`,
                            `data:image/jpeg;base64,${base64Image4}`]},
                        {"type": "text", "text": "Describe the scene shown in this video."}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk contoh konversi file menjadi string yang di-encode Base64, lihat Kode contoh.

  • String yang di-encode Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dipotong untuk tampilan. Anda harus meneruskan string lengkap dalam permintaan Anda.

# ======= Penting =======
# Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
# Diperlukan Kunci API untuk setiap Region. 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.5-plus",
    "messages": [{"role": "user",
                "content": [{"type": "video",
                "video": [
                          "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                          "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                          "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                          "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
                          ]},
                {"type": "text",
                "text": "Describe the process shown in this video."}]}]
}'

DashScope

Python

import base64
import os
import dashscope

# Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Mengonversi file lokal menjadi string yang di-encode Base64.
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")

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


messages = [{'role':'user',
            'content': [
                    {'video':
                         [f"data:image/jpeg;base64,{base64_image1}",
                          f"data:image/jpeg;base64,{base64_image2}",
                          f"data:image/jpeg;base64,{base64_image3}",
                          f"data:image/jpeg;base64,{base64_image4}"
                         ]
                    },
                    {'text': 'Describe the process shown in this video.'}]}]
response = dashscope.MultiModalConversation.call(
    # Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3.5-plus',  # Contoh ini menggunakan model qwen3.5-plus. Anda dapat menggantinya sesuai kebutuhan. Untuk daftar model yang tersedia, lihat: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    messages=messages)

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

Java

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

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

public class Main {

    static {
        // Endpoint bervariasi berdasarkan region. Ubah endpoint sesuai region Anda.
        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); // Di-encode 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));
        // Parameter fps tersedia untuk model seri Qwen3.5, Qwen3-VL, dan Qwen2.5-VL ketika Anda memberikan daftar gambar.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Describe the specific process shown in this video.")))
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Diperlukan Kunci API untuk setiap region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/en/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-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 placeholder seperti "xxx/football1.jpg" dengan jalur mutlak ke file gambar lokal Anda.
            videoImageListSample(
                    "xxx/football1.jpg",
                    "xxx/football2.jpg",
                    "xxx/football3.jpg",
                    "xxx/football4.jpg"
            );
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Untuk contoh konversi file menjadi string yang di-encode Base64, lihat Kode contoh.

  • String yang di-encode Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dipotong untuk tampilan. Anda harus meneruskan string lengkap dalam permintaan Anda.

# ======= Penting =======
# Endpoint bervariasi berdasarkan Region. Ubah endpoint sesuai Region Anda.
# Diperlukan Kunci API untuk setiap Region. 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.5-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
                      "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                      "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                      "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                      "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
            ],
            "fps":2     
          },
          {
            "text": "Describe the process shown in this video."
          }
        ]
      }
    ]
  }
}'

Proses gambar beresolusi tinggi

API model pemahaman visual membatasi jumlah token visual per gambar yang dikodekan. Secara default, gambar beresolusi tinggi dikompresi, yang dapat menyebabkan kehilangan detail dan mengurangi akurasi pemahaman. Aktifkan vl_high_resolution_images atau sesuaikan max_pixels untuk meningkatkan jumlah token visual. Hal ini mempertahankan lebih banyak detail gambar dan meningkatkan pemahaman.

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

Jika jumlah piksel gambar input melebihi batas piksel model, gambar tersebut akan diskalakan agar sesuai dalam batas tersebut.

Model

Pixels per token

vl_high_resolution_images

max_pixels

Token limit

Pixel limit

Qwen3.5 dan model seri Qwen3-VL

32*32

true

max_pixels diabaikan.

16384 tokens

16777216 (yaitu 16384×32×32)

false (default)

Nilainya dapat dikustomisasi, dengan nilai default 2621440 dan maksimum 16777216.

Ditentukan oleh max_pixels, dihitung sebagai max_pixels/32/32.

max_pixels

Model qwen-vl-max, qwen-vl-max-latest, qwen-vl-max-2025-08-13, qwen-vl-plus, qwen-vl-plus-latest, qwen-vl-plus-2025-08-15

32*32

true

max_pixels diabaikan.

16384 tokens

16777216 (yaitu 16384×32×32)

false (default)

Nilainya dapat dikustomisasi, dengan nilai default 1310720 dan maksimum 16777216.

Ditentukan oleh max_pixels, dihitung sebagai max_pixels/32/32.

max_pixels

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

28 × 28

true

max_pixels diabaikan.

16384 tokens

12845056 (yaitu 16384×28×28)

false (default)

Nilainya dapat dikustomisasi, dengan nilai default 1003520 dan maksimum 12845056.

Ditentukan oleh max_pixels, dihitung sebagai max_pixels/28/28.

max_pixels

  • Saat vl_high_resolution_images=true, API menggunakan kebijakan resolusi tetap dan mengabaikan pengaturan max_pixels. Gunakan opsi ini untuk tugas yang memerlukan pengenalan teks halus, objek kecil, atau detail kaya dalam gambar.

  • Saat vl_high_resolution_images=false, parameter max_pixels menentukan batas piksel akhir.

    • Untuk aplikasi yang memerlukan kecepatan pemrosesan tinggi atau sensitif terhadap biaya, gunakan nilai default untuk max_pixels atau atur ke nilai yang lebih kecil.

    • Untuk mempertahankan sebagian detail dan dapat menerima kecepatan pemrosesan yang lebih rendah, tingkatkan nilai max_pixels.

Kompatibel dengan OpenAI

Parameter vl_high_resolution_images bukan merupakan parameter standar OpenAI. Metode untuk meneruskannya bervariasi tergantung SDK:

  • Python SDK: Teruskan parameter dalam dictionary extra_body.

  • Node.js SDK: Teruskan parameter secara langsung sebagai parameter tingkat atas.

Python

import os
import time
from openai import OpenAI

client = OpenAI(
    # Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Sesuaikan titik akhir untuk Region Anda.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3.5-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: Menetapkan jumlah piksel maksimum untuk gambar input. Diabaikan saat vl_high_resolution_images=True. Nilai maksimum bergantung pada model.
            # "max_pixels": 16384 * 32 * 32
            },
           {"type": "text", "text": "What holiday does this image depict?"},
            ],
        }
    ],
    extra_body={"vl_high_resolution_images":True}

)
print(f"Model output: {completion.choices[0].message.content}")
print(f"Total input tokens: {completion.usage.prompt_tokens}")

Node.js

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // Jika tidak menggunakan variabel lingkungan, atur Kunci API Model Studio Anda di sini: apiKey: "sk-xxx"
        // Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Sesuaikan titik akhir untuk Region Anda.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const response = await openai.chat.completions.create({
        model: "qwen3.5-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: Menetapkan jumlah piksel maksimum untuk gambar input. Diabaikan saat vl_high_resolution_images=True. Nilai maksimum bergantung pada model.
            // "max_pixels": 2560 * 32 * 32
            },
            {type: "text", text: "What holiday does this image depict?" },
        ]}],
        vl_high_resolution_images:true
    })


console.log("Model output:",response.choices[0].message.content);
console.log("Total input tokens:",response.usage.prompt_tokens);

curl

# ======= Penting =======
# Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Sesuaikan titik akhir untuk Region Anda.
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3.5-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": "What holiday does this image depict?"
        }
      ]
    }
  ],
  "vl_high_resolution_images":true
}'

DashScope

Python

import os
import time

import dashscope

# Sesuaikan titik akhir untuk Region Anda.
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: Menetapkan jumlah piksel maksimum untuk gambar input. Diabaikan saat vl_high_resolution_images=True. Nilai maksimum bergantung pada model.
            # "max_pixels": 16384 * 32 * 32
            },
            {"text": "What holiday does this image depict?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
        # Jika tidak menggunakan variabel lingkungan, atur Kunci API Model Studio Anda di sini: api_key="sk-xxx"
        # Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model='qwen3.5-plus',
        messages=messages,
        vl_high_resolution_images=True
    )
    
print("Model output:",response.output.choices[0].message.content[0]["text"])
print("Total input tokens:",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 {
        // Sesuaikan titik akhir untuk Region Anda.
        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: Menetapkan jumlah piksel maksimum untuk gambar input. Diabaikan saat vl_high_resolution_images=True. Nilai maksimum bergantung pada model.
        // map.put("max_pixels", 2621440); 
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        Collections.singletonMap("text", "What holiday does this image depict?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Jika tidak menggunakan variabel lingkungan, atur Kunci API Model Studio Anda di sini: .apiKey("sk-xxx")
                // Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.5-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 =======
# Diperlukan Kunci API untuk setiap Region. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Sesuaikan titik akhir untuk Region Anda.
# === 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.5-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": "What holiday does this image depict?"}
                ]
            }
        ]
    },
    "parameters": {
        "vl_high_resolution_images": true
    }
}'

Penggunaan Lainnya

Batasan

Batasan file input

Batasan gambar

  • Resolusi:

    • Dimensi minimum: Lebar dan tinggi gambar harus keduanya lebih besar dari 10 piksel.

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

    • Batasan piksel:

      • Kami menyarankan agar resolusi gambar tetap dalam batas 8K (7680x4320). Gambar yang melebihi resolusi ini dapat menyebabkan timeout panggilan API karena ukuran file yang besar atau transmisi jaringan yang lama.

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

  • Format gambar yang didukung

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

      Format gambar

      Ekstensi umum

      Jenis MIME

      BMP

      .bmp

      image/bmp

      JPEG

      .jpe, .jpeg, .jpg

      image/jpeg

      PNG

      .png

      image/png

      TIFF

      .tif, .tiff

      image/tiff

      WEBP

      .webp

      image/webp

      HEIC

      .heic

      image/heic

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

  • Ukuran:

    • Saat dikirimkan sebagai URL publik: Satu gambar tidak boleh melebihi 20 MB untuk seri Qwen3.5, dan 10 MB untuk model lainnya.

    • Saat dikirimkan sebagai path file lokal (hanya untuk DashScope SDK): Satu gambar tidak boleh melebihi 10 MB.

    • Saat dikirimkan sebagai string Base64-encoded: String yang dienkripsi tidak boleh melebihi 10 MB.

    Untuk mengompresi file, lihat Cara mengompresi gambar atau video sesuai ukuran yang diperlukan.
  • Jumlah: Jumlah maksimum gambar yang diizinkan bergantung pada metode input.

    • Saat dikirimkan sebagai URL publik atau path file lokal: Maksimal 256 gambar.

    • Saat dikirimkan sebagai string Base64-encoded: Maksimal 250 gambar.

      Jumlah token gabungan untuk semua gambar dan teks harus kurang dari batas input maksimum model.

Batasan video

  • Jika gambar dikirimkan sebagai daftar, jumlah gambar tunduk pada batasan berikut:

    • Seri qwen3.5: Minimum 4 gambar dan maksimum 8000 gambar.

    • Seri qwen3-vl-plus, seri qwen3-vl-flash, qwen3-vl-235b-a22b-thinking, dan qwen3-vl-235b-a22b-instruct: Minimum 4 gambar dan maksimum 2000 gambar.

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

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

  • Saat Anda mengirimkan video sebagai satu file:

    • Ukuran:

      • Saat dikirimkan sebagai URL publik:

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

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

        • Model lainnya: Tidak boleh melebihi 150 MB.

      • Jika diteruskan sebagai string terenkripsi Base64, panjang string tersebut harus kurang dari 10 MB.

      • Saat dikirimkan sebagai path file lokal (hanya untuk DashScope SDK): File video itu sendiri tidak boleh melebihi 100 MB.

      Untuk mengompresi file, lihat Cara mengompresi gambar atau video sesuai ukuran yang diperlukan.
    • Durasi:

      • Seri qwen3.5: 2 detik hingga 2 jam.

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

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

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

      • Model lainnya: 2 detik hingga 40 detik.

    • Format: Format yang didukung meliputi MP4, AVI, MKV, MOV, FLV, dan WMV.

    • Dimensi: Tidak ada batasan spesifik. Model secara otomatis menyesuaikan dimensi video menggunakan parameter max_pixels dan min_pixels. Menggunakan dimensi video yang lebih besar tidak meningkatkan pemahaman.

    • Batasan jumlah video: Anda dapat mengirimkan hingga 64 video.

    • Pemahaman audio: Model tidak memproses audio dari file video.

Metode input file

  • URL publik: Berikan URL yang dapat diakses publik menggunakan protokol HTTP atau HTTPS. Untuk stabilitas dan performa optimal, Anda dapat mengunggah file ke OSS guna memperoleh URL publik.

    Penting

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

  • Enkoding Base64: Konversi file menjadi string Base64-encoded, lalu kirimkan string tersebut.

  • Masukkan path file lokal (hanya untuk DashScope SDK): Tentukan path ke file lokal.

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

Penggunaan Produksi

  • Prapemrosesan gambar/video: Model pemahaman visual memiliki batasan ukuran untuk file input. Untuk metode kompresi, lihat Metode kompresi gambar atau video.

  • Pemrosesan file teks: Model pemahaman visual hanya mendukung format gambar dan tidak dapat memproses file teks secara langsung. Anda dapat menggunakan alternatif berikut:

    • Konversi file teks ke format gambar. Kami menyarankan menggunakan library pemrosesan gambar, seperti Python's pdf2image untuk mengonversi file tersebut per halaman menjadi beberapa gambar berkualitas tinggi, lalu gunakan metode input multiple image untuk meneruskan gambar hasil konversi ke model.

    • Qwen-Long mendukung pemrosesan file teks dan penguraian kontennya.

  • Toleransi kesalahan dan stabilitas

    • Penanganan timeout: Untuk panggilan non-streaming, jika model tidak selesai menghasilkan output dalam waktu 180 detik, biasanya terjadi error timeout. Untuk meningkatkan pengalaman pengguna, badan respons mencakup konten apa pun yang telah dihasilkan sebelum timeout. Jika header respons berisi x-dashscope-partialresponse:true, ini menunjukkan bahwa timeout telah terjadi. Anda dapat menggunakan fitur partial mode (tersedia pada beberapa model) untuk menambahkan konten yang telah dihasilkan ke array messages dan mengirim ulang permintaan. Hal ini memungkinkan model melanjutkan pembuatan konten dari titik terakhir. Lihat Lanjutkan penulisan berdasarkan output yang belum lengkap.

    • Mekanisme retry: Terapkan mekanisme retry panggilan API yang wajar, seperti exponential backoff, untuk menangani potensi fluktuasi jaringan atau ketidaktersediaan layanan temporary.

Penagihan dan Pembatasan laju

  • Penagihan: Total biaya didasarkan pada jumlah total token input dan output. Untuk harga input dan output, lihat Daftar model.

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

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

      Menghitung token gambar dan video

      Gambar

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

      • h_bar, w_bar: Tinggi dan lebar gambar setelah diskalakan. Sebelum memproses gambar, model menskalakannya ke batas piksel tertentu. Batas ini bergantung pada parameter max_pixels dan vl_high_resolution_images. Lihat Proses gambar resolusi tinggi.

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

        • Qwen3.5, Qwen3-VL, qwen-vl-max, qwen-vl-max-latest, qwen-vl-max-2025-08-13, qwen-vl-plus, qwen-vl-plus-latest, qwen-vl-plus-2025-08-15: Setiap Token sesuai dengan 32x32 piksel.

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

      Kode berikut menunjukkan logika penskalaan gambar perkiraan model. Gunakan untuk memperkirakan jumlah token gambar. Biaya aktual didasarkan pada respons API.

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

      Video

      • File video:

        Saat memproses file video, model pertama-tama mengekstraksi frame lalu menghitung jumlah total token untuk semua frame tersebut. Perhitungan ini kompleks. Gunakan kode berikut untuk memperkirakan total konsumsi token video dengan memberikan path-nya:

        # Sebelum digunakan, instal: pip install opencv-python
        import math
        import os
        import logging
        import cv2
        
        logger = logging.getLogger(__name__)
        
        FRAME_FACTOR = 2
        
        # Untuk model Qwen3-VL, qwen-vl-max-0813, qwen-vl-plus-0815, dan qwen-vl-plus-0710, faktor penskalaan gambar adalah 32.
        IMAGE_FACTOR = 32
        
        # Untuk model lain, faktor penskalaan gambar adalah 28.
        # IMAGE_FACTOR = 28
        
        # Rasio aspek maksimum untuk frame video.
        MAX_RATIO = 200
        # Jumlah piksel minimum untuk frame video.
        VIDEO_MIN_PIXELS = 4 * 32 * 32
        # Jumlah piksel maksimum untuk frame video. Untuk model Qwen3-VL-Plus, VIDEO_MAX_PIXELS adalah 640 * 32 * 32. Untuk model lain, nilainya 768 * 32 * 32.
        VIDEO_MAX_PIXELS = 640 * 32 * 32
        
        # Jika parameter FPS tidak diberikan, gunakan nilai default.
        FPS = 2.0
        # Jumlah minimum frame yang diekstraksi.
        FPS_MIN_FRAMES = 4
        # Jumlah maksimum frame yang diekstraksi. Atur FPS_MAX_FRAMES ke 2000 untuk model Qwen3-VL-Plus, 512 untuk model Qwen3-VL-Flash dan Qwen2.5-VL, serta 80 untuk model lainnya.
        FPS_MAX_FRAMES = 2000
        
        # Total piksel maksimum untuk input video. Nilai ini adalah 131072 * 32 * 32 untuk model Qwen3-VL-Plus dan 65536 * 32 * 32 untuk model lainnya.
        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 dengan 'number' yang habis dibagi 'factor'."""
            return round(number / factor) * factor
        
        def ceil_by_factor(number: int, factor: int) -> int:
            """Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan 'number' dan habis dibagi 'factor'."""
            return math.ceil(number / factor) * factor
        
        def floor_by_factor(number: int, factor: int) -> int:
            """Mengembalikan bilangan bulat terbesar yang lebih kecil dari atau sama dengan 'number' dan habis dibagi 'factor'."""
            return math.floor(number / factor) * factor
        
        def extract_vision_info(conversations):
            vision_infos = []
            if isinstance(conversations[0], dict):
                conversations = [conversations]
            for conversation in conversations:
                for message in conversation:
                    if isinstance(message["content"], list):
                        for ele in message["content"]:
                            if (
                                "image" in ele
                                or "image_url" in ele
                                or "video" in ele
                                or ele.get("type","") in ("image", "image_url", "video")
                            ):
                                vision_infos.append(ele)
            return vision_infos
        
        def smart_nframes(ele,total_frames,video_fps):
            """Menghitung jumlah frame video yang akan diekstraksi.
        
            Args:
                ele (dict): Kamus yang berisi konfigurasi video.
                    - fps: Mengontrol jumlah frame yang diekstraksi untuk input model.
                total_frames (int): Jumlah total frame asli dalam video.
                video_fps (int | float): Laju frame asli video.
        
            Raises:
                nframes harus berada dalam interval [FRAME_FACTOR, total_frames], jika tidak terjadi kesalahan.
        
            Returns:
                Jumlah frame video yang akan digunakan untuk input model.
            """
            assert not ("fps" in ele and "nframes" in ele), "Hanya menerima salah satu dari `fps` atau `nframes`"
            fps = ele.get("fps", FPS)
            min_frames = ceil_by_factor(ele.get("min_frames", FPS_MIN_FRAMES), FRAME_FACTOR)
            max_frames = floor_by_factor(ele.get("max_frames", min(FPS_MAX_FRAMES, total_frames)), FRAME_FACTOR)
            duration = total_frames / video_fps if video_fps != 0 else 0
            if duration-int(duration)>(1/fps):
                total_frames = math.ceil(duration * video_fps)
            else:
                total_frames = math.ceil(int(duration)*video_fps)
            nframes = total_frames / video_fps * fps
            if nframes > total_frames:
                logger.warning(f"smart_nframes: nframes[{nframes}] > total_frames[{total_frames}]")
            nframes = int(min(min(max(nframes, min_frames), max_frames), total_frames))
            if not (FRAME_FACTOR <= nframes and nframes <= total_frames):
                raise ValueError(f"nframes harus berada dalam interval [{FRAME_FACTOR}, {total_frames}], tetapi mendapatkan {nframes}.")
        
            return nframes
        
        def get_video(video_path):
            # 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 asli video.
            height, width, total_frames, video_fps = get_video(path)
            # Jumlah piksel minimum untuk frame video.
            min_pixels = VIDEO_MIN_PIXELS
            total_pixels = VIDEO_TOTAL_PIXELS
            # Jumlah frame video yang diekstraksi.
            nframes = smart_nframes(ele, total_frames, video_fps)
            max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR),int(min_pixels * 1.05))
        
            # Rasio aspek video tidak boleh melebihi 200:1 atau 1:200.
            if max(height, width) / min(height, width) > MAX_RATIO:
                raise ValueError(
                    f"rasio aspek absolut harus lebih kecil dari {MAX_RATIO}, mendapatkan {max(height, width) / min(height, width)}"
                )
        
            h_bar = max(factor, round_by_factor(height, factor))
            w_bar = max(factor, round_by_factor(width, factor))
            if h_bar * w_bar > max_pixels:
                beta = math.sqrt((height * width) / max_pixels)
                h_bar = floor_by_factor(height / beta, factor)
                w_bar = floor_by_factor(width / beta, factor)
            elif h_bar * w_bar < min_pixels:
                beta = math.sqrt(min_pixels / (height * width))
                h_bar = ceil_by_factor(height * beta, factor)
                w_bar = ceil_by_factor(width * beta, factor)
            return h_bar, w_bar
        
        
        def token_calculate(video_path, fps):
            # Berikan path video dan parameter fps untuk ekstraksi frame.
            messages = [{"content": [{"video": video_path, "fps": fps}]}]
            vision_infos = extract_vision_info(messages)[0]
        
            resized_height, resized_width = smart_resize(vision_infos, video_path)
        
            height, width, total_frames, video_fps = get_video(video_path)
            num_frames = smart_nframes(vision_infos, total_frames, video_fps)
            print(f"Dimensi video asli: {height}*{width}, Dimensi input model: {resized_height}*{resized_width}, Total frame video: {total_frames}, Total frame yang diekstraksi saat fps {fps}: {num_frames}", end=", ")
            video_token = int(math.ceil(num_frames / 2) * resized_height / 32 * resized_width / 32)
            video_token += 2   # Sistem secara otomatis menambahkan penanda visual <|vision_bos|> dan <|vision_eos|> (masing-masing 1 Token).
            return video_token
        
        
        video_token = token_calculate("xxx/test.mp4", 1)
        print("Token Video:", video_token)
      • Daftar gambar:

        Saat Anda menyediakan video sebagai daftar gambar, ekstraksi frame sudah selesai. Gunakan kode berikut untuk menghitung konsumsi token daftar gambar dengan memberikan path ke frame representatif dan jumlah total frame:

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

  • Pembatasan laju: Untuk batas laju model pemahaman visual, lihat Batas laju.

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

Referensi API

Untuk parameter input dan output model pemahaman visual, lihat Qwen.

FAQ

Metode unggah file

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

Type

File specifications

DashScope SDK (Python, Java)

OpenAI compatible / DashScope HTTP

Image

7 MB hingga 10 MB

Berikan path lokal

Hanya URL publik. Kami menyarankan menggunakan Object Storage Service (OSS).

Kurang dari 7 MB

Berikan path lokal

Base64 encoding

Video

Lebih dari 100 MB

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

Hanya URL publik. Kami menyarankan menggunakan Object Storage Service (OSS).

7 MB hingga 100 MB

Berikan path lokal

Hanya URL publik. Kami menyarankan menggunakan Object Storage Service (OSS).

Kurang dari 7 MB

Berikan path lokal

Base64 encoding

Karena Base64 encoding meningkatkan ukuran file, file asli harus lebih kecil dari 7 MB.
Gunakan Base64 encoding atau path lokal untuk mencegah timeout unduhan di sisi server dan meningkatkan stabilitas.

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

File input untuk model pemahaman visual memiliki batasan ukuran. Gunakan metode berikut untuk memampatkannya.

Metode pemampatan gambar

  • Alat online: Gunakan layanan seperti CompressJPEG.

  • Perangkat lunak lokal: Sesuaikan kualitas ekspor menggunakan alat seperti Photoshop.

  • 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)
    
    # Berikan gambar lokal.
    compress_image("/xxx/before-large.jpeg","/xxx/after-min.jpeg")

Metode pemampatan video

  • Alat online: Gunakan layanan seperti FreeConvert.

  • Perangkat lunak lokal: Gunakan alat seperti HandBrake.

  • Implementasi kode: Gunakan tool FFmpeg. Lihat website resmi FFmpeg.

    # Perintah konversi dasar
    # -i: Menentukan path file input. Contoh: input.mp4
    # -vcodec: Menentukan penyandi video. Nilai umum termasuk libx264 (direkomendasikan untuk penggunaan umum) dan libx265 (laju kompresi lebih tinggi).
    # -crf: Mengontrol kualitas video. Nilai valid [18-28]. Nilai lebih rendah berarti kualitas lebih tinggi dan ukuran file lebih besar.
    # --preset: Mengontrol keseimbangan antara kecepatan encoding dan efisiensi kompresi. Nilai umum termasuk slow, fast, dan faster.
    # -y: Menimpa file yang sudah ada (tidak perlu nilai).
    # output.mp4: Menentukan path file output.
    
    ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4

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

Setelah model pemahaman visual menghasilkan hasil lokalisasi objek, Anda dapat menggunakan kode berikut untuk menggambar kotak pembatas dan labelnya pada gambar asli.

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

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

Kode error

Jika pemanggilan model gagal dan mengembalikan pesan error, lihat Pesan error untuk resolusi.