All Products
Search
Document Center

Alibaba Cloud Model Studio:Pemahaman gambar dan video

Last Updated:Jul 14, 2026

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

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

Mulai

Prasyarat

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

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os

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

completion = client.chat.completions.create(
    model="qwen3.7-plus",  # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
                    },
                },
                {"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"},
            ],
        },
    ],
)
print(completion.choices[0].message.content)

Respons

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

Node.js

import OpenAI from "openai";

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

async function main() {
  const response = await openai.chat.completions.create({
    model: "qwen3.7-plus",   // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models 
    messages: [
      {
        role: "user",
        content: [{
            type: "image_url",
            image_url: {
              "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
            }
          },
          {
            type: "text",
            text: "Adegan apa yang digambarkan dalam gambar ini?"
          }
        ]
      }
    ]
  });
  console.log(response.choices[0].message.content);
}
main()

Respons

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

curl

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

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

Respons

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

DashScope

Python

import os
import dashscope

# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

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

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

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

Respons

Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan 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 berjabat tangan 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 {
    
    // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
    static {
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation(); 
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("text", "Adegan apa yang digambarkan dalam gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API berbeda tiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
                // Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.7-plus")  //  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Respons

Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seseorang 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

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

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

Respons

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

Kinerja model

Tanya jawab gambar

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

p1021359

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

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

Penulisan kreatif

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

vl-问答

Tulis postingan media sosial yang menarik berdasarkan konten gambar ini.

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

Gaya puitis dan indah

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

Gaya harapan hangat

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

Pengenalan teks dan ekstraksi informasi

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

-q2cdz6jy89b6m3kp

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

{

"Kode Faktur": "221021325353",

"Nomor Faktur": "10283819",

"Tujuan": "Development Zone",

"Biaya Tambahan Bahan Bakar": "2.0",

"Tarif": "8.00<Full>",

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

"Waktu Keberangkatan": "Rolling",

"Nomor Kereta": "040",

"Nomor Kursi": "371"

}

Penyelesaian masalah multidisiplin

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

-5jwcstcvmdpqghaj

Selesaikan soal matematika dalam grafik langkah demi langkah.

-答案

Pemrograman visual

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

code

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

code-预览

Pratinjau halaman web

Pelokalan objek

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

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

Lokalisasi 2D

-530xdcos1lqkcfuy

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

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

Visualisasi hasil pelokalan 2D

-mu9podu1eyvph1zd

Pelokalan 3D

3d

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

Visualisasi hasil pelokalan 3D

3d-结果

Penguraian dokumen

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

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

image

qwenvl markdown.

-结果

Visualisasi hasil

Pemahaman video

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

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

{

"events": [

{

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

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

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

},

{

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

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

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

},

{

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

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

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

}

Fitur inti

Aktifkan atau nonaktifkan mode berpikir

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

    • true: Mengaktifkan mode berpikir. Nilai default untuk model seri qwen3.7, qwen3.6, dan qwen3.5 adalah true.

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

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

Penting
  • Konfigurasi model: Dalam skenario percakapan umum yang tidak melibatkan panggilan tool Agent, jangan atur System Message untuk menjaga kinerja optimal. Anda dapat meneruskan instruksi seperti pengaturan peran model dan persyaratan format output melalui User Message.

  • Utamakan keluaran streaming: Saat mode berpikir diaktifkan, baik keluaran streaming maupun non-streaming didukung. Untuk menghindari timeout akibat respons yang terlalu panjang, utamakan penggunaan keluaran streaming.

  • Batasi panjang proses berpikir: Model berpikir mendalam terkadang menghasilkan proses penalaran yang panjang. Anda dapat menggunakan parameter thinking_budget untuk membatasi panjang proses berpikir. Jika jumlah token yang dihasilkan selama proses berpikir model melebihi thinking_budget, konten inferensi dipotong, dan model segera mulai menghasilkan respons akhir. Nilai default thinking_budget adalah panjang maksimum rantai-pikiran model. Untuk informasi lebih lanjut, lihat daftar model.

Kompatibel dengan OpenAI

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

import os
from openai import OpenAI

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

reasoning_content = ""  # Definisikan proses berpikir lengkap
answer_content = ""     # Definisikan respons lengkap
is_answering = False   # Tentukan apakah proses berpikir berakhir dan mulai merespons
enable_thinking = True
# Buat permintaan penyelesaian chat
completion = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {
                        "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
                    },
                },
                {"type": "text", "text": "Bagaimana cara menyelesaikan masalah ini?"},
            ],
        },
    ],
    stream=True,
    # Parameter enable_thinking mengaktifkan proses berpikir, dan parameter thinking_budget menetapkan jumlah maksimum token untuk proses inferensi.
    # Gunakan parameter enable_thinking untuk mengalihkan mode berpikir.
    extra_body={
        'enable_thinking': enable_thinking,
        "thinking_budget": 81920},

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

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

# print("=" * 20 + "Proses 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({
  // Kunci API berbeda tiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
  // Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
  apiKey: process.env.DASHSCOPE_API_KEY,
  // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
  baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});

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

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

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

        });

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

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

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

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

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

curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
    "model": "qwen3.7-plus",
    "messages": [
    {
      "role": "user",
      "content": [
        {
          "type": "image_url",
          "image_url": {
            "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
          }
        },
        {
          "type": "text",
          "text": "Tolong selesaikan masalah ini"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options":{"include_usage":true},
    "enable_thinking": true,
    "thinking_budget": 81920
}'

DashScope

import os
import dashscope
from dashscope import MultiModalConversation

# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"

enable_thinking=True

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

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

)

# Definisikan proses berpikir lengkap
reasoning_content = ""
# Definisikan respons lengkap
answer_content = ""
# Tentukan apakah proses berpikir berakhir dan mulai merespons
is_answering = False

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

for chunk in response:
    # Jika proses berpikir dan respons keduanya kosong, abaikan.
    message = chunk.output.choices[0].message
    reasoning_content_chunk = message.get("reasoning_content", None)
    if (chunk.output.choices[0].message.content == [] and
        reasoning_content_chunk == ""):
        pass
    else:
        # Jika saat ini dalam proses berpikir
        if reasoning_content_chunk is not None and chunk.output.choices[0].message.content == []:
            print(chunk.output.choices[0].message.reasoning_content, end="")
            reasoning_content += chunk.output.choices[0].message.reasoning_content
        # Jika saat ini 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"]

# Cetak proses berpikir dan respons lengkap.
# print("=" * 20 + "Proses berpikir lengkap" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Respons lengkap" + "=" * 20 + "\n")
# print(f"{answer_content}")
// Versi SDK DashScope harus 2.21.10 atau lebih baru.
import java.util.*;

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

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

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

public class Main {
    // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
    static {Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";}

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

    private static void handleGenerationResult(MultiModalConversationResult message) {
        String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
        String reasoning = Objects.isNull(re)?"":re; // Nilai default

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

        if (Objects.nonNull(content) && !content.isEmpty()) {
            Object text = content.get(0).get("text");
            finalContent.append(content.get(0).get("text"));
            if (!isFirstPrint) {
                System.out.println("\n====================Respons lengkap====================");
                isFirstPrint = true;
            }
            System.out.print(text);
        }
    }
    public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg)  {
        return MultiModalConversationParam.builder()
                // Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                // Kunci API berbeda tiap 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.7-plus")
                .messages(Arrays.asList(Msg))
                .enableThinking(true)
                .thinkingBudget(81920)
                .incrementalOutput(true)
                .build();
    }

    public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
            throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
        MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
        Flowable<MultiModalConversationResult> result = conv.streamCall(param);
        result.blockingForEach(message -> {
            handleGenerationResult(message);
        });
    }
    public static void main(String[] args) {
        try {
            MultiModalConversation conv = new MultiModalConversation();
            MultiModalMessage userMsg = MultiModalMessage.builder()
                    .role(Role.USER.getValue())
                    .content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
                            Collections.singletonMap("text", "Tolong selesaikan masalah ini")))
                    .build();
            streamCallWithMessage(conv, userMsg);
//             Cetak hasil akhir.
//            if (reasoningContent.length() > 0) {
//                System.out.println("\n====================Respons lengkap====================");
//                System.out.println(finalContent.toString());
//            }
        } catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
            logger.error("Terjadi pengecualian: {}", e.getMessage());
        }
        System.exit(0);
    }
}
# ======= Catatan penting =======
# Kunci API berbeda tiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
# === Hapus komentar ini sebelum eksekusi ===

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

Input beberapa gambar

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

Penting

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

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI

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

completion = client.chat.completions.create(
    model="qwen3.7-plus",  #  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=[
        {"role": "user","content": [
            {"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},},
            {"type": "image_url","image_url": {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},},
            {"type": "text", "text": "Konten apa yang digambarkan oleh gambar-gambar ini?"},
            ],
        }
    ],
)

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

Respons

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

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

Node.js

import OpenAI from "openai";

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

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.7-plus",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
        messages: [
          {role: "user",content: [
            {type: "image_url",image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
            {type: "image_url",image_url: {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"}},
            {type: "text", text: "Konten apa yang digambarkan oleh gambar-gambar ini?" },
        ]}]
    });
    console.log(response.choices[0].message.content);
}

main()

Respons

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

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

curl

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

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

Respons

{
  "choices": [
    {
      "message": {
        "content": "Gambar 1 menunjukkan adegan seorang wanita dan seekor Labrador retriever yang berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di atas pasir sambil berjabat tangan dengan anjing tersebut. Latar belakangnya adalah pemandangan laut dan langit senja, membuat keseluruhan adegan terlihat sangat hangat dan harmonis.\n\nGambar 2 menunjukkan adegan seekor harimau yang berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam. Harimau tersebut melangkah maju, dikelilingi pepohonan dan vegetasi yang lebat, serta tanahnya ditutupi daun-daun yang gugur. Keseluruhan gambar dipenuhi kealaman liar dan vitalitas.",
        "role": "assistant"
      },
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null
    }
  ],
  "object": "chat.completion",
  "usage": {
    "prompt_tokens": 2497,
    "completion_tokens": 109,
    "total_tokens": 2606
  },
  "created": 1725948561,
  "system_fingerprint": null,
  "model": "qwen3.7-plus",
  "id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}

DashScope

Python

import os
import dashscope

# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'

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

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

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

Respons

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

Java

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

public class Main {
    static {
    // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
                        Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"),
                        Collections.singletonMap("text", "Konten apa yang digambarkan oleh gambar-gambar ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API berbeda tiap 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.7-plus")  //  Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

Respons

Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam.

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

curl

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

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

Respons

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

Pemahaman video

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

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

File video

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

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

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

    • Untuk adegan statis atau video panjang, atur nilai fps lebih rendah untuk meningkatkan kinerja.

  • max_frames: Jumlah maksimum frame yang diekstraksi dari video. Sistem menghitung total frame berdasarkan fps video. Jika jumlah total frame melebihi batas ini, sistem secara otomatis mengambil sampel frame secara merata untuk memenuhi batas tersebut. Parameter ini hanya tersedia saat menggunakan SDK DashScope.

Kompatibel dengan OpenAI

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

Python

import os
from openai import OpenAI

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

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

Node.js

import OpenAI from "openai";

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

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

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

main();

curl

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

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

# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
    {"role": "user",
        "content": [
            # Parameter fps mengontrol frekuensi ekstraksi frame video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat: https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
            {"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
            {"text": "Apa isi video ini?"}
        ]
    }
]

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

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

Java

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

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

public class Main {
   static {
            // URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL berbeda tiap wilayah.
            Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
        }
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Parameter fps mengontrol frekuensi ekstraksi frame video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat: https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
        Map<String, Object> params = new HashMap<>();
        params.put("video", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4");
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "Apa isi video ini?"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Jika Anda menggunakan model di wilayah China (Beijing), Anda harus menggunakan Kunci API untuk wilayah tersebut. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.7-plus")
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

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

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.7-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 Anda menyediakan video sebagai daftar frame yang telah diekstraksi sebelumnya, gunakan parameter fps untuk menentukan interval waktu antar frame. Hal ini membantu model memahami urutan, durasi, dan perubahan dinamis kejadian dengan lebih baik. Parameter fps menunjukkan bahwa frame diekstraksi dari video asli setiap detik. Parameter ini didukung oleh model Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.

Kompatibel dengan OpenAI

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

Python

import os
from openai import OpenAI

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

completion = client.chat.completions.create(
    model="qwen3.7-plus", # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/zh/model-studio/models
    messages=[{"role": "user","content": [
        # Saat Anda memasukkan daftar gambar, parameter "type" dalam pesan pengguna adalah "video"
         {"type": "video","video": [
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
         "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
         "fps":2},
         {"type": "text","text": "Jelaskan proses spesifik dalam video ini"},
    ]}]
)

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

Node.js

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

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

async function main() {
    const response = await openai.chat.completions.create({
        model: "qwen3.7-plus",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/zh/model-studio/models
        messages: [{
            role: "user",
            content: [
                {
                    // Saat Anda memasukkan daftar gambar, parameter "type" dalam pesan pengguna adalah "video"
                    type: "video",
                    video: [
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                        "fps": 2
                },
                {
                    type: "text",
                    text: "Jelaskan proses spesifik dalam video ini"
                }
            ]
        }]
    });
    console.log(response.choices[0].message.content);
}

main();

curl

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

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

DashScope

Python

import os
import dashscope

# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [{"role": "user",
             "content": [
                  # Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
                 {"video":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                           "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
                   "fps":2},
                 {"text": "Jelaskan proses spesifik dalam video ini"}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API berbeda tiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3.7-plus',  # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages
)
print(response.output.choices[0].message.content[0]["text"])

Java

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

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

public class Main {
    static {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL berbeda tiap wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    private static final String MODEL_NAME = "qwen3.7-plus";  // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
    public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        // Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
        Map<String, Object> params = new HashMap<>();
        params.put("video", Arrays.asList("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
                        "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"));
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(
                        params,
                        Collections.singletonMap("text", "Jelaskan proses spesifik dalam video ini")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API berbeda tiap wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL_NAME)
                .messages(Arrays.asList(userMessage)).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            videoImageListSample();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

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

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

Melewatkan file lokal (pengodean Base64 atau jalur file)

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

Unggah menggunakan encoding Base64

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

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

  1. Enkode file: Konversi gambar lokal menjadi encoding Base64.

    Kode contoh untuk mengonversi gambar ke encoding Base64

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

    1. Ganti MIME_type dengan tipe media aktual. Pastikan nilainya sesuai dengan nilai MIME Type pada tabel Format gambar yang didukung, seperti image/jpeg atau image/png.

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

  3. Panggil model: Kirimkan Data URL menggunakan parameter image atau image_url.

Unggah menggunakan jalur file

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

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

Tentukan jalur file (contoh gambar)

Sistem

SDK

Jalur file yang akan diteruskan

Contoh

Sistem Linux atau macOS

Python SDK

file://{jalur mutlak file}

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

Java SDK

Sistem Windows

Python SDK

file://{jalur mutlak file}

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

Java SDK

file:///{jalur mutlak file}

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

Gambar

Lewatkan menggunakan jalur file

Python

import os
import dashscope

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

# Ganti 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': 'Adegan apa yang digambarkan dalam gambar ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di 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 {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>(){{put("image", filePath);}},
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan dalam gambar ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.7-plus")  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

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

Masukan yang dienkode Base64

Kompatibel dengan OpenAI

Python

from openai import OpenAI
import os
import base64

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

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

Node.js

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

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

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

main();

curl

  • Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.

  • Untuk tujuan demonstrasi, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string lengkap.

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

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

DashScope

Python

import base64
import os
import dashscope

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

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

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

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

response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen3.7-plus",  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages,
)
print(response.output.choices[0].message.content[0]["text"])

Java

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

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

public class Main {

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

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

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

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

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

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.7-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 informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.

  • Untuk tujuan demonstrasi, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string lengkap.

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

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

File video

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

Kirim menggunakan jalur file

Python

import os
import dashscope

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

# Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
local_path = "xxx/test.mp4"
video_path = f"file://{local_path}"
messages = [
                {'role':'user',
                # Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Artinya, satu frame diekstraksi setiap 1/fps detik.
                'content': [{'video': video_path,"fps":2},
                            {'text': 'Adegan apa yang digambarkan dalam video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',  
    messages=messages)
print(response.output.choices[0].message.content[0]["text"])

Java

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

public class Main {

    static {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    public static void callWithLocalFile(String localPath)
            throws ApiException, NoApiKeyException, UploadFileException {
        String filePath = "file://"+localPath;
        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>()
                                       {{
                                           put("video", filePath);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Artinya, satu frame diekstraksi setiap 1/fps detik.
                                           put("fps", 2);
                                       }}, 
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan dalam video ini?");}})).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.7-plus")  
                .messages(Arrays.asList(userMessage))
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}

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

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

Node.js

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

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

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

main();

curl

  • Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.

  • Untuk tujuan demonstrasi, string terenkripsi Base64 "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string lengkap.

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

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

DashScope

Python

import base64
import os
import dashscope

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

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

messages = [{'role':'user',
                # Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Artinya, satu frame diekstraksi setiap 1/fps detik.
             'content': [{'video': f"data:video/mp4;base64,{base64_video}","fps":2},
                            {'text': 'Adegan apa yang digambarkan dalam video ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',
    messages=messages)

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

Java

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

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

public class Main {

    static {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    private static String encodeVideoToBase64(String videoPath) throws IOException {
        Path path = Paths.get(videoPath);
        byte[] videoBytes = Files.readAllBytes(path);
        return Base64.getEncoder().encodeToString(videoBytes);
    }

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

        String base64Video = encodeVideoToBase64(localPath); // Enkode Base64

        MultiModalConversation conv = new MultiModalConversation();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(new HashMap<String, Object>()
                                       {{
                                           put("video", "data:video/mp4;base64," + base64Video);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Artinya, satu frame diekstraksi setiap 1/fps detik.
                                           put("fps", 2);
                                       }},
                        new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan dalam video ini?");}})).build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen3.7-plus")
                .messages(Arrays.asList(userMessage))
                .build();

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

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

curl

  • Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.

  • Untuk tujuan demonstrasi, string terenkripsi Base64 "f"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string lengkap.

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

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

Daftar gambar

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

Mengirimkan jalur file

Python

import os
import dashscope

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

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

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

messages = [{'role':'user',
              #  Saat Anda mengirimkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
             'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
                         {'text': 'Adegan apa yang digambarkan dalam video ini?'}]}]
response = MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen3.7-plus',  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages)

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

Java

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

public class Main {

    static {
        // URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
        Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
    }
    
    private static final String MODEL_NAME = "qwen3.7-plus";  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
    public static void videoImageListSample(String localPath1, String localPath2, String localPath3, String localPath4)
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        String filePath1 = "file://" + localPath1;
        String filePath2 = "file://" + localPath2;
        String filePath3 = "file://" + localPath3;
        String filePath4 = "file://" + localPath4;
        Map<String, Object> params = new HashMap<>();
        params.put("video", Arrays.asList(filePath1,filePath2,filePath3,filePath4));
        //  Saat Anda mengirimkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
        params.put("fps", 2);
        MultiModalMessage userMessage = MultiModalMessage.builder()
                .role(Role.USER.getValue())
                .content(Arrays.asList(params,
                        Collections.singletonMap("text", "Jelaskan proses spesifik dalam video ini")))
                .build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model(MODEL_NAME)
                .messages(Arrays.asList(userMessage)).build();
        MultiModalConversationResult result = conv.call(param);
        System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }
    public static void main(String[] args) {
        try {
            videoImageListSample(
                    "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);
    }
}

Kirim menggunakan encoding Base64

Kompatibel dengan OpenAI

Python

import os
from openai import OpenAI
import base64

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

base64_image1 = encode_image("football1.jpg")
base64_image2 = encode_image("football2.jpg")
base64_image3 = encode_image("football3.jpg")
base64_image4 = encode_image("football4.jpg")
client = OpenAI(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
    base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen3.7-plus",  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=[  
    {"role": "user","content": [
        {"type": "video","video": [
            f"data:image/jpeg;base64,{base64_image1}",
            f"data:image/jpeg;base64,{base64_image2}",
            f"data:image/jpeg;base64,{base64_image3}",
            f"data:image/jpeg;base64,{base64_image4}",]},
        {"type": "text","text": "Jelaskan proses spesifik dalam video ini"},
    ]}]
)
print(completion.choices[0].message.content)

Node.js

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

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

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
  
const base64Image1 = encodeImage("football1.jpg")
const base64Image2 = encodeImage("football2.jpg")
const base64Image3 = encodeImage("football3.jpg")
const base64Image4 = encodeImage("football4.jpg")
async function main() {
    const completion = await openai.chat.completions.create({
        model: "qwen3.7-plus",  // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
        messages: [
            {"role": "user",
             "content": [{"type": "video",
                        "video": [
                            `data:image/jpeg;base64,${base64Image1}`,
                            `data:image/jpeg;base64,${base64Image2}`,
                            `data:image/jpeg;base64,${base64Image3}`,
                            `data:image/jpeg;base64,${base64Image4}`]},
                        {"type": "text", "text": "Adegan apa yang digambarkan dalam video ini?"}]}]
    });
    console.log(completion.choices[0].message.content);
}

main();

curl

  • Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.

  • Untuk tujuan demonstrasi, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string lengkap.

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

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.7-plus",
    "messages": [{"role": "user",
                "content": [{"type": "video",
                "video": [
                          "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                          "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                          "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                          "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
                          ]},
                {"type": "text",
                "text": "Jelaskan proses spesifik dalam video ini"}]}]
}'

DashScope

Python

import base64
import os
import dashscope

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

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

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

messages = [{'role':'user',
            'content': [
                    {'video':
                         [f"data:image/jpeg;base64,{base64_image1}",
                          f"data:image/jpeg;base64,{base64_image2}",
                          f"data:image/jpeg;base64,{base64_image3}",
                          f"data:image/jpeg;base64,{base64_image4}"
                         ]
                    },
                    {'text': 'Tolong jelaskan proses spesifik dari video ini?'}]}]
response = dashscope.MultiModalConversation.call(
    # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model='qwen3.7-plus',  # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Daftar model tersedia di https://www.alibabacloud.com/help/model-studio/getting-started/models
    messages=messages)

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

Java

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

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

public class Main {

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

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

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

        String base64Image1 = encodeImageToBase64(localPath1); // Enkode Base64
        String base64Image2 = encodeImageToBase64(localPath2);
        String base64Image3 = encodeImageToBase64(localPath3);
        String base64Image4 = encodeImageToBase64(localPath4);

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

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

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

    public static void main(String[] args) {
        try {
            // Ganti xxx/football1.png dan file lainnya dengan jalur mutlak gambar lokal Anda
            videoImageListSample(
                    "xxx/football1.jpg",
                    "xxx/football2.jpg",
                    "xxx/football3.jpg",
                    "xxx/football4.jpg"
            );
        } catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

  • Untuk informasi tentang cara mengonversi file menjadi string terenkripsi Base64, lihat kode contoh.

  • Untuk tujuan demonstrasi, string terenkripsi Base64 "data:image/jpg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..." dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string lengkap.

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

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
  "model": "qwen3.7-plus",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "video": [
                      "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
                      "data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
                      "data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
                      "data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
            ],
            "fps":2     
          },
          {
            "text": "Jelaskan proses spesifik dalam video ini"
          }
        ]
      }
    ]
  }
}'

Proses gambar resolusi tinggi

API model pemahaman visual memiliki batasan jumlah token visual untuk satu gambar terenkripsi. Dengan konfigurasi default, gambar resolusi tinggi dikompresi, yang dapat menyebabkan hilangnya detail dan memengaruhi akurasi pemahaman. Aktifkan vl_high_resolution_images atau sesuaikan max_pixels untuk meningkatkan jumlah token visual. 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 akan diperkecil agar sesuai dalam batas tersebut.

Model

Piksel per token

vl_high_resolution_images

max_pixels

Batas token

Batas piksel

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

32×32

true

max_pixels tidak valid

16.384 token

16.777.216 (yaitu, 16.384 × 32 × 32)

false (default)

Dapat dikustomisasi. Nilai default adalah 2.621.440 dan nilai maksimum adalah 16.777.216.

Ditentukan oleh max_pixels, yaitu max_pixels / 32 / 32

max_pixels

qwen-vl-max, qwen-vl-plus

32 x 32

true

max_pixels tidak valid

16.384 token

16.777.216 (yaitu, 16.384 × 32 × 32)

false (default)

Dapat dikustomisasi. Nilai default adalah 1.310.720 dan nilai maksimum adalah 16.777.216.

Ditentukan oleh max_pixels, yaitu max_pixels / 32 / 32

max_pixels

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

28 × 28

true

max_pixels tidak valid

16.384 token

12.845.056 (yaitu, 16.384 × 28 × 28)

false (default)

Dapat dikustomisasi. Nilai default adalah 1.003.520 dan nilai maksimum adalah 12.845.056.

Ditentukan oleh max_pixels, yaitu max_pixels / 28 / 28

max_pixels

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

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

    • Untuk skenario kecepatan pemrosesan tinggi atau sensitif biaya: Gunakan nilai default max_pixels atau atur ke nilai yang lebih kecil.

    • Jika Anda ingin fokus pada detail tertentu dan dapat menerima kecepatan pemrosesan yang lebih rendah, tingkatkan nilai max_pixels sesuai kebutuhan.

Kompatibel dengan OpenAI

vl_high_resolution_images bukan parameter standar OpenAI. Metode pengirimannya berbeda-beda di berbagai SDK bahasa:

  • Python SDK: Harus dikirimkan melalui dictionary extra_body.

  • Node.js SDK: Dapat dikirimkan langsung sebagai parameter tingkat atas.

Python

import os
import time
from openai import OpenAI

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

completion = client.chat.completions.create(
    model="qwen3.7-plus",
    messages=[
        {"role": "user","content": [
            {"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
            # max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, dapat dikustomisasi, dan nilai maksimum bervariasi berdasarkan model.
            # "max_pixels": 16384 * 32 * 32
            },
           {"type": "text", "text": "Suasana festival apa yang disampaikan gambar ini"},
            ],
        }
    ],
    extra_body={"vl_high_resolution_images":True}

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

Node.js

import OpenAI from "openai";

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

const response = await openai.chat.completions.create({
        model: "qwen3.7-plus",
        messages: [
        {role: "user",content: [
            {type: "image_url",
            image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
            // max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak berpengaruh saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, dapat dikustomisasi, dan nilai maksimum bervariasi berdasarkan model.
            // "max_pixels": 2560 * 32 * 32
            },
            {type: "text", text: "Suasana festival apa yang disampaikan gambar ini?" },
        ]}],
        vl_high_resolution_images:true
    })

console.log("Output model:",response.choices[0].message.content);
console.log("Total token input",response.usage.prompt_tokens);

curl

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

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

DashScope

Python

import os
import time

import dashscope

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

messages = [
    {
        "role": "user",
        "content": [
            {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg",
            # max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, dapat dikustomisasi, dan nilai maksimum bervariasi berdasarkan model.
            # "max_pixels": 16384 * 32 * 32
            },
            {"text": "Suasana festival apa yang disampaikan gambar ini?"}
        ]
    }
]

response = dashscope.MultiModalConversation.call(
        # Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
        # Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        model='qwen3.7-plus',
        messages=messages,
        vl_high_resolution_images=True
    )
    
print("Output model",response.output.choices[0].message.content[0]["text"])
print("Total token input:",response.usage.input_tokens)

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

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

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

curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
    "model": "qwen3.7-plus",
    "input":{
        "messages":[
            {
             "role": "user",
             "content": [
               {"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
               {"text": "Suasana festival apa yang disampaikan gambar ini?"}
                ]
            }
        ]
    },
    "parameters": {
        "vl_high_resolution_images": true
    }
}'

Penggunaan lainnya

Batasan

Batasan file input

Batasan gambar

  • Resolusi gambar:

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

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

      Untuk informasi mengenai logika pengubahan ukuran gambar, lihat fungsi smart_resize dalam Menghitung token gambar
    • Piksel maksimum:

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

      • Pengubahan ukuran otomatis: Model dapat menyesuaikan ukuran gambar menggunakan parameter max_pixels dan min_pixels. Memberikan gambar beresolusi tinggi tidak meningkatkan akurasi deteksi. Sebaliknya, hal ini meningkatkan risiko kegagalan panggilan. Ubah ukuran gambar ke ukuran yang wajar di sisi client sebelum mengunggah.

  • Format gambar yang didukung

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

      Format gambar

      Ekstensi umum

      Jenis MIME

      BMP

      .bmp

      image/bmp

      JPEG

      .jpe, .jpeg, .jpg

      image/jpeg

      PNG

      .png

      image/png

      TIFF

      .tif, .tiff

      image/tiff

      WEBP

      .webp

      image/webp

      HEIC

      .heic

      image/heic

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

  • Ukuran gambar:

    • Saat dikirim sebagai URL publik: Satu gambar tidak boleh melebihi 20 MB untuk model seri Qwen3.7, Qwen3.6, dan Qwen3.5. Untuk model lainnya, satu gambar tidak boleh melebihi 10 MB.

    • Saat dikirim sebagai path lokal: Satu gambar tidak boleh melebihi 10 MB.

    • Saat dikirim sebagai string Base64: String yang dienkripsi tidak boleh melebihi 10 MB.

    Untuk memampatkan file, lihat Cara memampatkan gambar atau video ke ukuran yang diperlukan.
  • Batas jumlah gambar: Jumlah maksimum gambar yang didukung untuk input multi-gambar bervariasi berdasarkan metode input:

    • Saat dikirim sebagai URL publik atau path lokal:

      • Seri Qwen3.7: Maksimal 2.048 gambar

      • Model lainnya: Maksimal 256 gambar

    • Saat dikirim sebagai string Base64: Maksimal 250 gambar

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

Batasan video

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

    • Seri qwen3.6 dan seri qwen3.5: Minimal 4 gambar dan maksimal 8.000 gambar

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

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

    • Model lainnya: Minimal 4 gambar dan maksimal 80 gambar

  • Saat dikirim sebagai file video:

    • Ukuran video:

      • Saat dikirim sebagai URL publik:

        • Seri qwen3.6, seri qwen3.5, seri Qwen3-VL, dan qwen-vl-max (termasuk semua versi setelah dan ): Tidak boleh melebihi 2 GB.

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

        • Model lainnya: Tidak boleh melebihi 150 MB.

      • Saat dikirim sebagai string Base64: String yang dienkripsi harus kurang dari 10 MB.

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

      Untuk memampatkan file, lihat Cara memampatkan gambar atau video ke ukuran yang diperlukan.
    • Durasi video:

      • Seri qwen3.6 dan 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 lainnya seperti Qwen3-VL dan qwen-vl-max (termasuk semua versi yang diperbarui setelah dan ): 2 detik hingga 20 menit.

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

      • Model lainnya: 2 detik hingga 40 detik.

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

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

    • Batas jumlah video: Maksimal 64 video dapat dikirim.

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

Metode input file

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

    Penting

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

  • Enkode Base64: Konversi file menjadi string Base64, lalu kirimkan.

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

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

Menggunakan di lingkungan produksi

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

  • Pemrosesan file teks: Model pemahaman visual hanya mendukung file gambar dan tidak dapat memproses file teks secara langsung. Gunakan salah satu solusi berikut:

    • Konversi file teks ke format gambar. Gunakan library pemrosesan gambar, seperti pdf2image untuk Python, untuk mengonversi file per halaman menjadi beberapa gambar berkualitas tinggi. Kemudian, kirimkan gambar-gambar tersebut ke model menggunakan metode multi-image input.

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

  • Toleransi kesalahan dan stabilitas

    • Penanganan timeout: Pada panggilan non-streaming, terjadi error timeout jika model tidak selesai menghasilkan output dalam waktu 300 detik. Saat terjadi timeout, konten yang telah dihasilkan dikembalikan dalam badan respons. Header respons yang berisi x-dashscope-partialresponse: true menunjukkan bahwa respons mengalami timeout. Gunakan fitur partial mode, yang didukung oleh beberapa model. Tambahkan konten yang telah dihasilkan ke dalam array `messages` dan kirim ulang permintaan tersebut. Hal ini memungkinkan Large Language Model (LLM) melanjutkan proses generasi konten. Untuk informasi lebih lanjut, lihat Lanjutkan generasi dari output yang belum lengkap.

    • Mekanisme retry: Rancang logika retry panggilan API yang masuk akal, seperti exponential backoff, untuk menangani fluktuasi jaringan atau ketidaktersediaan layanan temporary.

Billing and rate limiting

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

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

    • Calculate tokens for images and videos: Gunakan kode berikut untuk menghitung konsumsi token untuk gambar atau video. Hasil perkiraan hanya bersifat referensi. Penggunaan aktual didasarkan pada respons API.

      Calculate tokens for images and videos

      Images

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

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

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

        • qwen3.7-series, qwen3.6-series, qwen3.5-series, Qwen3-VL, qwen-vl-max, dan qwen-vl-plus: Setiap token sesuai dengan 32x32 piksel.

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

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

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

      Videos

      • Video files:

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

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

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

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

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

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

Referensi API

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

FAQ

Bagaimana cara memilih metode unggah file?

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

Jenis file

Spesifikasi file

DashScope SDK (Python, Java)

Kompatibel dengan OpenAI / DashScope HTTP

Image

Lebih dari 7 MB dan kurang dari 10 MB

Gunakan path lokal

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

Kurang dari 7 MB

Gunakan path lokal

Base64 encoding

Video

Lebih dari 100 MB

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

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

Lebih dari 7 MB dan kurang dari 100 MB

Gunakan path lokal

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

Kurang dari 7 MB

Gunakan path lokal

Base64 encoding

Base64 encoding meningkatkan ukuran data. Ukuran file asli harus kurang dari 7 MB.
Gunakan Base64 atau path lokal untuk menghindari timeout unduhan di sisi server dan meningkatkan stabilitas.

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

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

Metode pemampatan gambar

  • Tool online: Gunakan tool online seperti CompressJPEG untuk memampatkan gambar.

  • Perangkat lunak lokal: Gunakan perangkat lunak seperti Photoshop untuk menyesuaikan kualitas saat mengekspor.

  • Implementasi kode:

    # pip install pillow
    
    from PIL import Image
    def compress_image(input_path, output_path, quality=85):
        with Image.open(input_path) as img:
            img.save(output_path, "JPEG", optimize=True, quality=quality)
    
    # Gunakan gambar lokal
    compress_image("/xxx/before-large.jpeg","/xxx/after-min.jpeg")

Metode pemampatan video

  • Tool online: Gunakan tool online seperti FreeConvert untuk memampatkan video.

  • Perangkat lunak lokal: Gunakan perangkat lunak seperti HandBrake.

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

    # Perintah transformasi dasar
    # -i, fungsi: path file input, contoh: input.mp4
    # -vcodec, fungsi: penyandi video, nilai umum termasuk libx264 (umumnya direkomendasikan) dan libx265 (rasio kompresi lebih tinggi)
    # -crf, fungsi: mengontrol kualitas video, rentang nilai: [18-28]. Semakin kecil nilainya, semakin tinggi kualitas dan semakin besar ukuran file.
    # --preset, fungsi: mengontrol keseimbangan antara kecepatan encoding dan efisiensi kompresi. Nilai umum termasuk slow, fast, dan faster.
    # -y, fungsi: menimpa file yang sudah ada (tidak perlu nilai)
    # output.mp4, fungsi: path file output
    
    ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4

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

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

  • Qwen2.5-VL: Koordinat yang dikembalikan merupakan nilai absolut dalam piksel, relatif terhadap pojok kiri atas gambar yang telah diskalakan. Untuk menggambar bingkai deteksi, lihat kode dalam qwen2_5_vl_2d.py.

  • Seri Qwen3-VL, Qwen3.5, Qwen3.6, dan Qwen3.7 (seperti qwen3.5-plus, qwen3.6-plus, dan qwen3.7-plus): Koordinat yang dikembalikan bersifat relatif dan dinormalisasi ke rentang [0, 999]. Untuk menggambar bingkai deteksi, lihat kode dalam qwen3_vl_2d.py (posisi 2D) atau qwen3_vl_3d.zip (posisi 3D).

Kode error

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