Model pemahaman visual dapat menjawab pertanyaan berdasarkan gambar atau video yang Anda berikan. Model ini mendukung input gambar tunggal maupun ganda, serta cocok untuk berbagai tugas seperti pembuatan keterangan gambar (image captioning), menjawab pertanyaan visual, dan pelokalan objek.
Coba secara online: Buka Konsol Alibaba Cloud Model Studio. Di pojok kanan atas halaman, pilih Wilayah tujuan. Lalu, buka halaman Vision Models untuk mencoba model-model tersebut.
Mulai
Prasyarat- Dapatkan Kunci API dan konfigurasikan sebagai Variabel lingkungan.
- Untuk melakukan panggilan menggunakan SDK, instal SDK. SDK DashScope Python harus versi 1.24.6 atau lebih baru, dan SDK DashScope Java harus versi 2.21.10 atau lebih baru.
Contoh berikut menunjukkan cara memanggil model untuk menggambarkan konten gambar. Untuk informasi lebih lanjut tentang file lokal dan batasan gambar, lihat Mengirim file lokal dan Batasan gambar.
Kompatibel dengan OpenAI
Python
from openai import OpenAI
import os
client = OpenAI(
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)
completion = client.chat.completions.create(
model="qwen3.8-max", # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
},
},
{"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"},
],
},
],
)
print(completion.choices[0].message.content)
Tanggapan
Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.
Node.js
import OpenAI from "openai";
const openai = new OpenAI({
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.chat.completions.create({
model: "qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages: [
{
role: "user",
content: [{
type: "image_url",
image_url: {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
}
},
{
type: "text",
text: "Adegan apa yang digambarkan dalam gambar ini?"
}
]
}
]
});
console.log(response.choices[0].message.content);
}
main()
Tanggapan
Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.
Java
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;
import java.util.List;
public class Main {
public static void main(String[] args) {
// Buat klien menggunakan Kunci API dari Variabel lingkungan
OpenAIClient client = OpenAIOkHttpClient.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Anda belum mengatur Variabel lingkungan, ganti baris berikut dengan Kunci API Bailian Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
.baseUrl("https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1")
.build();
// Bangun konten pesan multimodal: gambar + teks
ChatCompletionContentPart imagePart = ChatCompletionContentPart.ofImageUrl(
ChatCompletionContentPartImage.builder()
.imageUrl(ChatCompletionContentPartImage.ImageUrl.builder()
.url("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg")
.build())
.build());
ChatCompletionContentPart textPart = ChatCompletionContentPart.ofText(
ChatCompletionContentPartText.builder()
.text("Adegan apa yang digambarkan dalam gambar ini?")
.build());
// Buat permintaan chat
ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
// Contoh ini menggunakan qwen3.8-max. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
.model("qwen3.8-max")
.addUserMessageOfArrayOfContentParts(List.of(imagePart, textPart))
.build();
StringBuilder fullResponse = new StringBuilder();
// Semua contoh kode menggunakan keluaran streaming untuk menunjukkan proses output model secara jelas. Untuk contoh non-streaming, lihat https://www.alibabacloud.com/help/zh/model-studio/text-generation
try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
streamResponse.stream().forEach(chunk -> {
System.out.println(chunk);
String content = chunk.choices().get(0).delta().content().orElse("");
if (!content.isEmpty()) {
fullResponse.append(content);
}
});
System.out.println(fullResponse);
} catch (Exception e) {
System.err.println("Pesan error: " + e.getMessage());
System.err.println("Lihat: https://www.alibabacloud.com/help/zh/model-studio/developer-reference/error-code");
}
}
}
Tanggapan
Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.
curl
# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.8-max",
"messages": [
{"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
{"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}
]
}]
}'
Tanggapan
{
"choices": [
{
"message": {
"content": "Ini adalah foto yang diambil di pantai. Dalam foto tersebut, seseorang dan seekor anjing duduk di pasir dengan laut dan langit sebagai latar belakang. Orang dan anjing tersebut tampak berinteraksi, dengan cakar depan anjing berada di tangan orang tersebut. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut.",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 1270,
"completion_tokens": 54,
"total_tokens": 1324
},
"created": 1725948561,
"system_fingerprint": null,
"model": "qwen3.8-max",
"id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}
DashScope
Python
import os
import dashscope
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
{"text": "Adegan apa yang digambarkan dalam gambar ini?"}]
}]
response = dashscope.MultiModalConversation.call(
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus', # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages
)
print(response.output.choices[0].message.content[0]["text"])
Tanggapan
Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seorang wanita dan seekor anjing. Wanita tersebut duduk di pasir sambil tersenyum dan berinteraksi dengan anjing tersebut. Anjing tersebut mengenakan kalung dan tampak sedang berjabat tangan dengan wanita tersebut. Latar belakangnya adalah laut dan langit, dan sinar matahari yang menyinari mereka menciptakan suasana hangat.
Java
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
static {
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
Collections.singletonMap("text", "Adegan apa yang digambarkan dalam gambar ini?"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max") // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Tanggapan
Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seseorang mengenakan kemeja kotak-kotak dan seekor anjing yang mengenakan kalung. Orang dan anjing tersebut duduk saling berhadapan, tampaknya sedang berinteraksi. Latar belakangnya adalah laut dan langit, dan sinar matahari yang menyinari mereka menciptakan suasana hangat.
curl
# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
{"text": "Adegan apa yang digambarkan dalam gambar ini?"}
]
}
]
}
}'
Tanggapan
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"text": "Ini adalah foto yang diambil di pantai. Foto tersebut menunjukkan seseorang mengenakan kemeja kotak-kotak dan seekor anjing yang mengenakan kalung. Mereka duduk di pasir dengan laut dan langit sebagai latar belakang. Sinar matahari bersinar dari sisi kanan bingkai, menambah suasana hangat pada adegan tersebut."
}
]
}
}
]
},
"usage": {
"output_tokens": 55,
"input_tokens": 1271,
"image_tokens": 1247
},
"request_id": "ccf845a3-dc33-9cda-b581-20fe7dc23f70"
}
Kinerja model
Tanya Jawab Gambar
Jelaskan konten gambar atau klasifikasikan dan beri label, seperti mengidentifikasi orang, tempat, hewan, dan tumbuhan.
Item apa dalam gambar ini yang harus saya gunakan jika matahari terlalu terang? | Jika matahari terlalu terang, Anda harus menggunakan kacamata hitam merah muda dalam gambar tersebut. Kacamata hitam dapat secara efektif menghalangi cahaya kuat, mengurangi kerusakan UV pada mata Anda, dan membantu melindungi penglihatan serta meningkatkan kenyamanan visual dalam sinar matahari yang terang. |
|---|
Penulisan kreatif
Hasilkan deskripsi teks yang hidup berdasarkan konten gambar atau video, cocok untuk skenario kreatif seperti penulisan cerita, copywriting, dan skrip video pendek.
Tulis posting media sosial yang menarik berdasarkan konten gambar tersebut. | Tentu. Gambar ini dipenuhi suasana Festival Pertengahan Musim Gugur yang kaya, menggabungkan elemen klasik dan modern secara cerdas. Berdasarkan elemen utama dalam gambar, saya telah menyiapkan beberapa posting media sosial dalam gaya berbeda untuk Anda pilih. Gaya puitis dan indah Malam ini, bulan bersinar terang untuk semua orang, tetapi siapa yang tahu ke mana pikiran musim gugur akan jatuh? Chang'e terbang ke bulan, dan Kelinci Giok menumbuk obat. Romantisme para leluhur dinyalakan malam ini. Semoga bulan yang terang ini menerangi jalan pulang Anda dan membawa pikiran terdalam saya. Selamat Hari Raya Pertengahan Musim Gugur! Gaya harapan hangat Bulan penuh, dan orang-orang berkumpul kembali. Malam Pertengahan Musim Gugur adalah yang paling lembut. Saksikan kembang api mekar, kagumi bulan penuh di langit, ambil sepotong kue bulan, dan berharap untuk kesehatan yang baik. Semoga semua yang Anda dan saya inginkan menjadi kenyataan. Selamat Hari Raya Pertengahan Musim Gugur untuk semua orang, dan semoga keluarga Anda bahagia! |
Pengenalan teks dan ekstraksi informasi
Kenali teks dan rumus dalam gambar, atau ekstrak informasi dari kwitansi, sertifikat, dan formulir. Mendukung output teks terformat.
Ekstrak hal berikut dari gambar: ['Kode Faktur', 'Nomor Faktur', 'Tujuan', 'Biaya Bahan Bakar', 'Tarif', 'Tanggal', 'Waktu Keberangkatan', 'Nomor Kereta', 'Nomor Kursi']. Harap output dalam format JSON. | { "Kode Faktur": "221021325353", "Nomor Faktur": "10283819", "Tujuan": "Zona Pengembangan", "Biaya Bahan Bakar": "2,0", "Tarif": "8,00<Full>", "Tanggal": "2013-06-29", "Waktu Keberangkatan": "Rolling", "Nomor Kereta": "040", "Nomor Kursi": "371" } |
Pemecahan masalah multidisiplin
Selesaikan masalah matematika, fisika, kimia, dan lainnya dalam gambar. Cocok untuk pendidikan SD-SMA, perguruan tinggi, dan dewasa.
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 rancangan desain, tangkapan layar situs web, dan lainnya.
Buat halaman web menggunakan HTML dan CSS berdasarkan sketsa saya. Warna utamanya harus hitam. |
Pratinjau halaman web |
|---|
Pelokalan objek
Mendukung pelokalan 2D dan 3D. Anda dapat menggunakan fitur ini untuk menentukan orientasi objek, perubahan perspektif, dan hubungan oklusi. Pelokalan 3D adalah kemampuan baru yang ditambahkan ke model Qwen3-VL.
Kinerja pelokalan objek model Qwen2.5-VL kuat dalam rentang resolusi 480 × 480 hingga 2560 × 2560. Di luar rentang ini, akurasi deteksi dapat menurun, dengan kadang-kadang terjadi deviasi bingkai deteksi.
Untuk informasi tentang cara menggambar hasil pelokalan pada gambar asli, lihat FAQ.
Pelokalan 2D![]()
| Visualisasi hasil pelokalan 2D![]() |
Pelokalan 3D ![]() Deteksi mobil dalam gambar dan prediksi posisi 3D-nya. Output JSON: | Visualisasi hasil pelokalan 3D ![]() |
Penguraian dokumen
Uraikan dokumen berbasis gambar (seperti salinan hasil pindaian atau PDF gambar) ke dalam format HTML QwenVL atau Markdown QwenVL. Format ini tidak hanya mengenali teks secara akurat tetapi juga mendapatkan informasi posisi elemen seperti gambar dan tabel. Model Qwen3-VL menambahkan kemampuan untuk menguraikan ke dalam format Markdown.
Prompt yang direkomendasikan adalah sebagai berikut:
qwenvl html(untuk menguraikan ke format HTML) atauqwenvl markdown(untuk menguraikan ke format Markdown).
qwenvl markdown. |
Visualisasi hasil |
|---|
Pemahaman video
Analisis konten video, seperti melokalisasi kejadian spesifik dan mendapatkan stempel waktu, atau menghasilkan ringkasan periode waktu kunci.
Harap jelaskan rangkaian tindakan orang dalam video tersebut. Output Waktu mulai (start_time), Waktu selesai (end_time), dan event (event) dalam format JSON. Gunakan HH:mm:ss untuk stempel waktu. | { "events": [ { "start_time": "00:00:00", "end_time": "00:00:05", "event": "Orang tersebut berjalan menuju meja sambil memegang kotak kardus dan meletakkannya di atas meja." }, { "start_time": "00:00:05", "end_time": "00:00:15", "event": "Orang tersebut mengambil pemindai dan memindai label pada kotak kardus tersebut." }, { "start_time": "00:00:15", "end_time": "00:00:21", "event": "Orang tersebut meletakkan kembali pemindai ke tempatnya dan kemudian mengambil pena untuk mencatat informasi dalam buku catatan."}] } |
Fitur inti
Aktifkan atau nonaktifkan mode berpikir
-
Model seri
qwen3.8,qwen3.7,qwen3.6,qwen3.5,qwen3-vl-plus, danqwen3-vl-flashadalah model berpikir hibrid. Model ini dapat berpikir sebelum merespons atau merespons langsung. Gunakan parameterenable_thinkinguntuk mengontrol apakah akan mengaktifkan mode berpikir:true: Mengaktifkan mode berpikir. Nilai default untuk model seriqwen3.8,qwen3.7,qwen3.6, danqwen3.5adalahtrue.false: Menonaktifkan mode berpikir. Nilai default untuk model seriqwen3-vl-plusdanqwen3-vl-flashadalahfalse.
-
Model dengan akhiran
thinking, sepertiqwen3-vl-235b-a22b-thinking, adalah model berpikir saja. Model ini selalu berpikir sebelum merespons, dan fitur ini tidak dapat dinonaktifkan.
Penting
- Konfigurasi model: Dalam skenario percakapan umum yang tidak melibatkan panggilan alat Agent, jangan atur
System Messageuntuk menjaga kinerja optimal. Anda dapat memberikan instruksi seperti pengaturan peran model dan persyaratan format output melaluiUser Message. - Utamakan keluaran streaming: Saat mode berpikir diaktifkan, keluaran streaming dan non-streaming didukung. Untuk menghindari timeout yang disebabkan oleh respons yang terlalu panjang, utamakan penggunaan keluaran streaming.
- Batasi panjang proses berpikir: Model berpikir mendalam terkadang menghasilkan proses penalaran yang panjang. Anda dapat menggunakan parameter
thinking_budgetuntuk membatasi panjang proses berpikir. Jika jumlah token yang dihasilkan selama proses berpikir model melebihithinking_budget, konten inferensi dipotong, dan model segera mulai menghasilkan respons akhir. Nilai defaultthinking_budgetadalah panjang maksimum rantai-pikiran model. Untuk informasi lebih lanjut, lihat daftar model.
Kompatibel dengan OpenAI
Parameter enable_thinking bukan parameter standar OpenAI. Jika Anda menggunakan SDK Python OpenAI, lewatkan melalui extra_body.
import os
from openai import OpenAI
client = OpenAI(
# Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut adalah untuk wilayah Singapura. Saat Anda melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi menurut wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # Definisikan proses berpikir yang lengkap
answer_content = "" # Definisikan tanggapan yang lengkap
is_answering = False # Tentukan apakah akan mengakhiri proses berpikir dan mulai memberikan tanggapan
enable_thinking = True
# Buat permintaan penyelesaian obrolan
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "How do I solve this problem?"},
],
},
],
stream=True,
# Parameter enable_thinking mengaktifkan proses berpikir, dan parameter thinking_budget menetapkan jumlah token maksimum untuk proses inferensi.
# Gunakan parameter enable_thinking untuk beralih mode berpikir.
extra_body={
'enable_thinking': enable_thinking,
"thinking_budget": 81920},
# Hapus tanda komentar pada baris berikut untuk mengembalikan penggunaan token di chunk terakhir.
# stream_options={
# "include_usage": True
# }
)
if enable_thinking:
print("\n" + "=" * 20 + "Thinking process" + "=" * 20 + "\n")
for chunk in completion:
# Jika chunk.choices kosong, cetak penggunaannya.
if not chunk.choices:
print("\nUsage:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# Cetak proses berpikir.
if hasattr(delta, 'reasoning_content') and delta.reasoning_content is not None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# Mulai memberikan tanggapan.
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "Complete response" + "=" * 20 + "\n")
is_answering = True
# Cetak proses tanggapan.
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "Complete thinking process" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "Complete response" + "=" * 20 + "\n")
# print(answer_content)
import OpenAI from "openai";
// Inisialisasi klien OpenAI
const openai = new OpenAI({
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let enableThinking = true;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "Selesaikan masalah ini" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qwen3.7-plus',
messages: messages,
stream: true,
// Catatan: Pada SDK Node.js, parameter non-standar seperti enableThinking dilewatkan sebagai properti tingkat atas dan tidak perlu ditempatkan di extra_body.
enable_thinking: enableThinking,
thinking_budget: 81920
});
if (enableThinking){console.log('\n' + '='.repeat(20) + 'Proses berpikir' + '='.repeat(20) + '\n');}
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\nUsage:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// Proses proses berpikir.
if (delta.reasoning_content) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// Proses respons formal.
else if (delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + 'Respons lengkap' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('Error:', error);
}
}
main();
# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "Tolong selesaikan masalah ini"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true},
"enable_thinking": true,
"thinking_budget": 81920
}'
DashScope
import os
import dashscope
from dashscope import MultiModalConversation
# URL berikut adalah untuk wilayah Singapura. Saat Anda melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi menurut wilayah.
dashscope.base_http_api_url = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1"
enable_thinking=True
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Solve this problem?"}
]
}
]
response = MultiModalConversation.call(
# Jika variabel lingkungan tidak dikonfigurasi, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx",
# Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3.8-max",
messages=messages,
stream=True,
# Parameter enable_thinking mengaktifkan proses berpikir.
# Gunakan parameter enable_thinking untuk beralih mode berpikir.
enable_thinking=enable_thinking,
# Parameter thinking_budget menetapkan jumlah token maksimum untuk proses inferensi.
thinking_budget=81920,
)
# Tentukan proses berpikir lengkap
reasoning_content = ""
# Tentukan tanggapan lengkap
answer_content = ""
# Tentukan apakah akan mengakhiri proses berpikir dan mulai merespons
is_answering = False
if enable_thinking:
print("=" * 20 + "Thinking process" + "=" * 20)
for chunk in response:
# Jika proses berpikir dan tanggapan kosong, abaikan.
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# Jika saat ini sedang dalam proses berpikir
if reasoning_content_chunk is not None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# Jika saat ini sedang merespons
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "Complete response" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# Cetak proses berpikir dan tanggapan lengkap.
# print("=" * 20 + "Complete thinking process" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Complete response" + "=" * 20 + "\n")
# print(f"{answer_content}")
// Versi SDK DashScope harus 2.21.10 atau lebih baru.
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
static {Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // Nilai default
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================Proses berpikir====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================Respons lengkap====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return MultiModalConversationParam.builder()
// Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.messages(Arrays.asList(Msg))
.enableThinking(true)
.thinkingBudget(81920)
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(message);
});
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "Tolong selesaikan masalah ini")))
.build();
streamCallWithMessage(conv, userMsg);
// Cetak hasil akhir.
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================Respons lengkap====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("Terjadi exception: {}", e.getMessage());
}
System.exit(0);
}
}
# ======= Catatan penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'X-DashScope-SSE: enable' \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Tolong selesaikan masalah ini"}
]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true,
"thinking_budget": 81920
}
}'
Input beberapa gambar
Model pemahaman visual mendukung pengiriman beberapa gambar dalam satu permintaan, yang dapat digunakan untuk tugas-tugas seperti perbandingan Produk dan pemrosesan dokumen multi-halaman. Untuk melakukannya, cukup sertakan beberapa objek gambar di dalam array content dari user message.
PentingJumlah gambar dibatasi oleh batas token total model untuk gambar dan teks. Jumlah token total untuk semua gambar dan teks tidak boleh melebihi input maksimum model.
Kompatibel dengan OpenAI
Python
import os
from openai import OpenAI
client = OpenAI(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=[
{"role": "user","content": [
{"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},},
{"type": "image_url","image_url": {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},},
{"type": "text", "text": "Konten apa yang digambarkan oleh gambar-gambar ini?"},
],
}
],
)
print(completion.choices[0].message.content)
Tanggapan
Gambar 1 menunjukkan adegan seorang wanita dan seekor anjing Labrador retriever berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di pasir, berjabat tangan dengan anjing tersebut. Latar belakangnya adalah ombak laut dan langit, dan seluruh gambar dipenuhi kehangatan dan kegembiraan.
Gambar 2 menunjukkan adegan seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam. Harimau tersebut melangkah maju, dikelilingi pepohonan dan vegetasi yang lebat, dan tanahnya ditutupi daun-daun yang jatuh. Seluruh gambar memberikan perasaan alam liar.
Node.js
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
async function main() {
const response = await openai.chat.completions.create({
model: "qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages: [
{role: "user",content: [
{type: "image_url",image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"}},
{type: "image_url",image_url: {"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"}},
{type: "text", text: "Konten apa yang digambarkan oleh gambar-gambar ini?" },
]}]
});
console.log(response.choices[0].message.content);
}
main()
Tanggapan
Pada gambar pertama, seseorang dan seekor anjing berinteraksi di pantai. Orang tersebut mengenakan kemeja kotak-kotak, dan anjing tersebut mengenakan kalung. Mereka tampak sedang berjabat tangan atau memberi high-five.
Pada gambar kedua, seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam, dan latar belakangnya adalah pepohonan hijau dan vegetasi.
curl
# ======= Catatan penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
}
},
{
"type": "image_url",
"image_url": {
"url": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"
}
},
{
"type": "text",
"text": "Konten apa yang digambarkan oleh gambar-gambar ini?"
}
]
}
]
}'
Tanggapan
{
"choices": [
{
"message": {
"content": "Gambar 1 menunjukkan adegan seorang wanita dan seekor anjing Labrador retriever berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di pasir, berjabat tangan dengan anjing tersebut. Latar belakangnya adalah pemandangan laut dan langit senja, membuat seluruh adegan terlihat sangat hangat dan harmonis.\n\nGambar 2 menunjukkan adegan seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam. Harimau tersebut melangkah maju, dikelilingi pepohonan dan vegetasi yang lebat, dan tanahnya ditutupi daun-daun yang jatuh. Seluruh gambar dipenuhi kealaman liar dan vitalitas.",
"role": "assistant"
},
"finish_reason": "stop",
"index": 0,
"logprobs": null
}
],
"object": "chat.completion",
"usage": {
"prompt_tokens": 2497,
"completion_tokens": 109,
"total_tokens": 2606
},
"created": 1725948561,
"system_fingerprint": null,
"model": "qwen3.8-max",
"id": "chatcmpl-0fd66f46-b09e-9164-a84f-3ebbbedbac15"
}
DashScope
Python
import os
import dashscope
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
{"text": "Konten apa yang digambarkan oleh gambar-gambar ini?"}
]
}
]
response = dashscope.MultiModalConversation.call(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus', // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages
)
print(response.output.choices[0].message.content[0]["text"])
Tanggapan
Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam. Pada gambar pertama, seseorang dan seekor anjing berinteraksi di pantai. Gambar kedua adalah seekor harimau yang berjalan di hutan.
Java
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
Collections.singletonMap("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"),
Collections.singletonMap("image", "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"),
Collections.singletonMap("text", "Konten apa yang digambarkan oleh gambar-gambar ini?"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max") // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text")); }
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Tanggapan
Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam.
1. Gambar pertama: Seorang wanita dan seekor anjing berinteraksi di pantai. Wanita tersebut mengenakan kemeja kotak-kotak dan duduk di pasir, dan anjing tersebut mengenakan kalung serta mengulurkan cakarnya untuk berjabat tangan dengan wanita tersebut.
2. Gambar kedua: Seekor harimau berjalan di hutan. Bulu harimau tersebut berwarna oranye dengan garis-garis hitam, dan latar belakangnya adalah pepohonan dan daun-daun.
curl
# ======= Catatan penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"},
{"image": "https://dashscope.oss-cn-beijing.aliyuncs.com/images/tiger.png"},
{"text": "Konten apa yang ditunjukkan oleh gambar-gambar ini?"}
]
}
]
}
}'
Tanggapan
{
"output": {
"choices": [
{
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": [
{
"text": "Gambar-gambar ini menunjukkan beberapa hewan dan pemandangan alam. Pada gambar pertama, seseorang dan seekor anjing berinteraksi di pantai. Gambar kedua adalah seekor harimau yang berjalan di hutan."
}
]
}
}
]
},
"usage": {
"output_tokens": 81,
"input_tokens": 1277,
"image_tokens": 2497
},
"request_id": "ccf845a3-dc33-9cda-b581-20fe7dc23f70"
}
Pemahaman video
Model pemahaman visual dapat memahami konten video yang disediakan sebagai daftar gambar (frame video) atau file video. Contoh berikut menunjukkan cara memahami video online atau daftar gambar yang ditentukan oleh URL. Untuk informasi lebih lanjut tentang batasan video atau jumlah gambar yang dapat dikirim dalam daftar gambar, lihat Batasan video.
Untuk kinerja yang lebih baik saat memahami file video, gunakan versi snapshot terbaru atau terkini dari model.
File video
Model pemahaman visual menganalisis konten video dengan mengekstraksi urutan frame dari video tersebut. Anda dapat mengontrol strategi ekstraksi frame dengan dua parameter berikut:
-
fps: Mengontrol frekuensi ekstraksi frame. Satu frame diekstraksi setiap f p s 1 detik. Rentang nilai adalah [0,1, 10], dan nilai default adalah 2,0.
- Untuk adegan dengan gerakan cepat, atur nilai fps lebih tinggi untuk menangkap lebih banyak detail.
- Untuk adegan statis atau video panjang, atur nilai fps lebih rendah untuk meningkatkan kinerja.
-
max_frames: Jumlah maksimum frame yang diekstraksi dari video. Sistem menghitung total frame berdasarkan fps video. Jika jumlah total frame melebihi batas ini, sistem secara otomatis mengambil sampel frame secara merata untuk memenuhi batas tersebut. Parameter ini hanya tersedia saat menggunakan SDK DashScope.
Kompatibel dengan OpenAI
Saat Anda mengirim file video langsung ke model pemahaman visual menggunakan SDK OpenAI atau HTTP, atur parameter
"type"dalam pesan pengguna ke"video_url".
import os
from openai import OpenAI
client = OpenAI(
# Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut adalah untuk wilayah Singapura. Saat Anda melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi menurut wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=[
{
"role": "user",
"content": [
# Saat Anda meneruskan file video secara langsung, atur nilai tipe ke video_url.
{
"type": "video_url",
"video_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
},
"fps": 2
},
{
"type": "text",
"text": "What is the content of this video?"
}
]
}
]
)
print(completion.choices[0].message.content)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
async function main() {
const response = await openai.chat.completions.create({
model: "qwen3.8-max",
messages: [
{
role: "user",
content: [
// Saat Anda mengirim file video langsung, atur nilai type ke video_url.
{
type: "video_url",
video_url: {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
},
"fps": 2
},
{
type: "text",
text: "Apa konten video ini?"
}
]
}
]
});
console.log(response.choices[0].message.content);
}
main();
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi. ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
},
"fps":2
},
{
"type": "text",
"text": "Apa konten video ini?"
}
]
}
]
}'
DashScope
import dashscope
import os
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
{"role": "user",
"content": [
// Parameter fps mengontrol frekuensi ekstraksi frame video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat: https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
{"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
{"text": "Apa konten video ini?"}
]
}
]
response = dashscope.MultiModalConversation.call(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key ="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus',
messages=messages
)
print(response.output.choices[0].message.content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
// Parameter fps mengontrol frekuensi ekstraksi frame video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik. Untuk penggunaan lengkap, lihat: https://www.alibabacloud.com/help/zh/model-studio/use-qwen-by-calling-api?#2ed5ee7377fum
Map<String, Object> params = new HashMap<>();
params.put("video", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4");
params.put("fps", 2);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
params,
Collections.singletonMap("text", "Apa konten video ini?"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Jika Anda menggunakan model di wilayah Tiongkok (Beijing), Anda harus menggunakan Kunci API untuk wilayah tersebut. Untuk mendapatkan Kunci API, lihat: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat melakukan panggilan, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi. ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{"role": "user","content": [{"video": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4","fps":2},
{"text": "Apa konten video ini?"}]}]}
}'
Daftar gambar
Saat Anda menyediakan video sebagai daftar frame yang telah diekstraksi sebelumnya, gunakan parameter fps untuk menentukan interval waktu antar frame. Hal ini membantu model memahami urutan, durasi, dan perubahan dinamis kejadian dengan lebih baik. Parameter fps menunjukkan bahwa frame diekstraksi dari video asli setiap f p s 1 detik. Parameter ini didukung oleh model Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
Kompatibel dengan OpenAI
Saat Anda menggunakan SDK OpenAI atau HTTP untuk memasukkan video sebagai daftar gambar ke model pemahaman visual, atur parameter
"type"dalam pesan pengguna ke"video".
import os
from openai import OpenAI
client = OpenAI(
# Kunci API berbeda untuk setiap wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut adalah untuk wilayah Singapura. Saat Anda memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL berbeda untuk setiap wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max", # Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/zh/model-studio/models
messages=[{"role": "user","content": [
# Saat Anda memasukkan daftar gambar, parameter "type" dalam pesan pengguna adalah "video"
{"type": "video","video": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
"fps":2},
{"type": "text","text": "Describe the specific process in this video"},
]}]
)
print(completion.choices[0].message.content)
// Pastikan Anda telah menentukan "type": "module" dalam file package.json Anda.
import OpenAI from "openai";
const openai = new OpenAI({
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx",
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
async function main() {
const response = await openai.chat.completions.create({
model: "qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/zh/model-studio/models
messages: [{
role: "user",
content: [
{
// Saat Anda memasukkan daftar gambar, parameter "type" dalam pesan pengguna adalah "video"
type: "video",
video: [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
"fps": 2
},
{
type: "text",
text: "Jelaskan proses spesifik dalam video ini"
}
]
}]
});
console.log(response.choices[0].message.content);
}
main();
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"messages": [{"role": "user","content": [{"type": "video","video": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
"fps":2},
{"type": "text","text": "Jelaskan proses spesifik dalam video ini"}]}]
}'
DashScope
import os
import dashscope
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [{"role": "user",
"content": [
// Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
{"video":["https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"],
"fps":2},
{"text": "Jelaskan proses spesifik dalam video ini"}]}]
response = dashscope.MultiModalConversation.call(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
model='qwen3.7-plus', // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages
)
print(response.output.choices[0].message.content[0]["text"])
// Versi SDK DashScope harus 2.21.10 atau lebih baru.
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static final String MODEL_NAME = "qwen3.8-max"; // Contoh ini menggunakan qwen3.7-plus. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
public static void videoImageListSample() throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
// Saat Anda memasukkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
Map<String, Object> params = new HashMap<>();
params.put("video", Arrays.asList("https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"));
params.put("fps", 2);
MultiModalMessage userMessage = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(
params,
Collections.singletonMap("text", "Jelaskan proses spesifik dalam video ini")))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model(MODEL_NAME)
.messages(Arrays.asList(userMessage)).build();
MultiModalConversationResult result = conv.call(param);
System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
videoImageListSample();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"video": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
],
"fps":2
},
{
"text": "Jelaskan proses spesifik dalam video ini"
}
]
}
]
}
}'
Kirim file lokal (encoding Base64 atau jalur file)
Model pemahaman visual mendukung dua metode untuk mengunggah file lokal: encoding Base64 dan pengunggahan jalur file langsung. Anda dapat memilih metode unggah berdasarkan ukuran file dan jenis SDK. Untuk rekomendasi, lihat Cara memilih metode unggah file. Kedua metode harus memenuhi persyaratan file yang dijelaskan dalam Batasan gambar.
Unggah menggunakan encoding Base64
Konversi file ke string yang diencode Base64, lalu kirimkan ke model. Metode ini berlaku untuk SDK OpenAI dan DashScope, serta permintaan HTTP.
Langkah-langkah untuk mengirim string yang diencode Base64 (contoh gambar)
-
Encode file: Konversi gambar lokal ke encoding Base64.
Kode contoh untuk mengonversi gambar ke encoding Base64
# Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64 import base64 def encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode("utf-8") # Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda base64_image = encode_image("xxx/eagle.png") -
Buat URL Data dalam format berikut:
data:[MIME_type];base64,{base64_image}.- Ganti
MIME_typedengan jenis media aktual. Pastikan sesuai dengan nilaiMIME Typedalam tabel Format gambar yang didukung, sepertiimage/jpegatauimage/png. base64_imageadalah string Base64 yang dihasilkan pada langkah sebelumnya.
- Ganti
-
Panggil model: Kirimkan
URL Datamenggunakan parameterimageatauimage_url.
Unggah menggunakan jalur file
Kirimkan langsung jalur file lokal ke model. Metode ini hanya didukung oleh SDK Python dan Java DashScope. Tidak didukung untuk permintaan HTTP DashScope atau mode kompatibel OpenAI.
Lihat tabel berikut untuk menentukan jalur file berdasarkan bahasa pemrograman dan sistem operasi Anda.
Tentukan jalur file (contoh gambar)
Sistem | SDK | Jalur file untuk diteruskan | Contoh |
|---|---|---|---|
Sistem Linux atau macOS | Python SDK | file://{jalur mutlak file} | file:///home/images/test.png |
Java SDK | |||
Sistem Windows | Python SDK | file://{jalur mutlak file} | file://D:/images/test.png |
Java SDK | file:///{jalur mutlak file} | file:///D:/images/test.png |
Gambar
Melewatkan melalui jalur file
import os
import dashscope
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda. URL bervariasi menurut wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
local_path = "xxx/eagle.png"
image_path = f"file://{local_path}"
messages = [
{'role':'user',
'content': [{'image': image_path},
{'text': 'What scene is depicted in the image?'}]}]
response = dashscope.MultiModalConversation.call(
# Kunci API bervariasi menurut wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus', # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages)
print(response.output.choices[0].message.content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void callWithLocalFile(String localPath)
throws ApiException, NoApiKeyException, UploadFileException {
String filePath = "file://"+localPath;
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(new HashMap<String, Object>(){{put("image", filePath);}},
new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan dalam gambar ini?");}})).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max") // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}
public static void main(String[] args) {
try {
// Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
callWithLocalFile("xxx/eagle.png");
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Input yang diencode Base64
Kompatibel dengan OpenAI
Python
from openai import OpenAI
import os
import base64
// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
// Ganti xxxx/eagle.png dengan jalur mutlak gambar lokal Anda
base64_image = encode_image("xxx/eagle.png")
client = OpenAI(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
// Saat mengirim data gambar Base64, perhatikan bahwa format gambar (image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung. "f" adalah metode untuk pemformatan string.
// Gambar PNG: f"data:image/png;base64,{base64_image}"
// Gambar JPEG: f"data:image/jpeg;base64,{base64_image}"
// Gambar WEBP: f"data:image/webp;base64,{base64_image}"
"image_url": {"url": f"data:image/png;base64,{base64_image}"},
},
{"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"},
],
}
],
)
print(completion.choices[0].message.content)
Node.js
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const encodeImage = (imagePath) => {
const imageFile = readFileSync(imagePath);
return imageFile.toString('base64');
};
// Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
const base64Image = encodeImage("xxx/eagle.png")
async function main() {
const completion = await openai.chat.completions.create({
model: "qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages: [
{"role": "user",
"content": [{"type": "image_url",
// Catatan: Saat mengirim data Base64, format gambar (image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung.
// Gambar PNG: data:image/png;base64,${base64Image}
// Gambar JPEG: data:image/jpeg;base64,${base64Image}
// Gambar WEBP: data:image/webp;base64,${base64Image}
"image_url": {"url": `data:image/png;base64,${base64Image}`},},
{"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}]}]
});
console.log(completion.choices[0].message.content);
}
main();
curl
- Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
- Untuk tujuan demonstrasi, string yang diencode Base64
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA"}},
{"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}
]
}]
}'
DashScope
Python
import base64
import os
import dashscope
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
// Ganti xxxx/eagle.png dengan jalur mutlak gambar lokal Anda
base64_image = encode_image("xxxx/eagle.png")
messages = [
{
"role": "user",
"content": [
// Catatan: Saat mengirim data Base64, format gambar (image/{format}) harus sesuai dengan Content Type dalam daftar gambar yang didukung. "f" adalah metode untuk pemformatan string.
// Gambar PNG: f"data:image/png;base64,{base64_image}"
// Gambar JPEG: f"data:image/jpeg;base64,{base64_image}"
// Gambar WEBP: f"data:image/webp;base64,{base64_image}"
{"image": f"data:image/png;base64,{base64_image}"},
{"text": "Adegan apa yang digambarkan dalam gambar ini?"},
],
},
]
response = dashscope.MultiModalConversation.call(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv("DASHSCOPE_API_KEY"),
model="qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages,
)
print(response.output.choices[0].message.content[0]["text"])
Java
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Base64;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static String encodeImageToBase64(String imagePath) throws IOException {
Path path = Paths.get(imagePath);
byte[] imageBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(imageBytes);
}
public static void callWithLocalFile(String localPath) throws ApiException, NoApiKeyException, UploadFileException, IOException {
String base64Image = encodeImageToBase64(localPath); // encoding Base64
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
new HashMap<String, Object>() {{ put("image", "data:image/png;base64," + base64Image); }},
new HashMap<String, Object>() {{ put("text", "Adegan apa yang digambarkan dalam gambar ini?"); }}
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
// Ganti xxx/eagle.png dengan jalur mutlak gambar lokal Anda
callWithLocalFile("xxx/eagle.png");
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
- Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
- Untuk tujuan demonstrasi, string yang diencode Base64
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
{"text": "Adegan apa yang digambarkan dalam gambar ini?"}
]
}
]
}
}'
File video
Bagian ini menggunakan file test.mp4 yang disimpan secara lokal sebagai contoh.
Melewatkan melalui jalur file
import os
import dashscope
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
local_path = "xxx/test.mp4"
video_path = f"file://{local_path}"
messages = [
{'role':'user',
// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik.
'content': [{'video': video_path,"fps":2},
{'text': 'Adegan apa yang digambarkan oleh video ini?'}]}]
response = MultiModalConversation.call(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus',
messages=messages)
print(response.output.choices[0].message.content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void callWithLocalFile(String localPath)
throws ApiException, NoApiKeyException, UploadFileException {
String filePath = "file://"+localPath;
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(new HashMap<String, Object>()
{{
put("video", filePath);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik.
put("fps", 2);
}},
new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan oleh video ini?");}})).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));}
public static void main(String[] args) {
try {
// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
callWithLocalFile("xxx/test.mp4");
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Input yang diencode Base64
Kompatibel dengan OpenAI
Python
from openai import OpenAI
import os
import base64
// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_video(video_path):
with open(video_path, "rb") as video_file:
return base64.b64encode(video_file.read()).decode("utf-8")
// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
base64_video = encode_video("xxx/test.mp4")
client = OpenAI(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=[
{
"role": "user",
"content": [
{
// Saat mengirim file video langsung, atur nilai type ke video_url
"type": "video_url",
"video_url": {"url": f"data:video/mp4;base64,{base64_video}"},
"fps":2
},
{"type": "text", "text": "Adegan apa yang digambarkan oleh video ini?"},
],
}
],
)
print(completion.choices[0].message.content)
Node.js
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const encodeVideo = (videoPath) => {
const videoFile = readFileSync(videoPath);
return videoFile.toString('base64');
};
// Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
const base64Video = encodeVideo("xxx/test.mp4")
async function main() {
const completion = await openai.chat.completions.create({
model: "qwen3.8-max",
messages: [
{"role": "user",
"content": [{
// Saat mengirim file video langsung, atur nilai type ke video_url
"type": "video_url",
"video_url": {"url": `data:video/mp4;base64,${base64Video}`},
"fps":2},
{"type": "text", "text": "Adegan apa yang digambarkan oleh video ini?"}]}]
});
console.log(completion.choices[0].message.content);
}
main();
curl
- Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
- Untuk tujuan demonstrasi, string yang diencode Base64
"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": [
{"type": "video_url", "video_url": {"url": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},"fps":2},
{"type": "text", "text": "Adegan apa yang digambarkan dalam gambar ini?"}
]
}]
}'
DashScope
Python
import base64
import os
import dashscope
# URL berikut adalah untuk Wilayah Singapura. Saat Anda memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi berdasarkan Wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# Fungsi pengodean: Mengonversi file lokal menjadi string yang dikodekan Base64
def encode_video(video_path):
with open(video_path, "rb") as video_file:
return base64.b64encode(video_file.read()).decode("utf-8")
# Ganti xxxx/test.mp4 dengan jalur mutlak video lokal Anda
base64_video = encode_video("xxxx/test.mp4")
messages = [{'role':'user',
# Parameter fps mengontrol jumlah frame yang diekstrak dari video. Ini menunjukkan bahwa satu frame diekstrak setiap 1/fps detik.
'content': [{'video': f"data:video/mp4;base64,{base64_video}","fps":2},
{'text': 'What scene does this video depict?'}]}]
response = dashscope.MultiModalConversation.call(
# Kunci API bervariasi berdasarkan Wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus',
messages=messages)
print(response.output.choices[0].message.content[0]["text"])
Java
import java.io.IOException;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static String encodeVideoToBase64(String videoPath) throws IOException {
Path path = Paths.get(videoPath);
byte[] videoBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(videoBytes);
}
public static void callWithLocalFile(String localPath)
throws ApiException, NoApiKeyException, UploadFileException, IOException {
String base64Video = encodeVideoToBase64(localPath); // encoding Base64
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(new HashMap<String, Object>()
{{
put("video", "data:video/mp4;base64," + base64Video);// Parameter fps mengontrol jumlah frame yang diekstraksi dari video. Ini menunjukkan bahwa satu frame diekstraksi setiap 1/fps detik.
put("fps", 2);
}},
new HashMap<String, Object>(){{put("text", "Adegan apa yang digambarkan oleh video ini?");}})).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
// Ganti xxx/test.mp4 dengan jalur mutlak video lokal Anda
callWithLocalFile("xxx/test.mp4");
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
- Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
- Untuk tujuan demonstrasi, string yang diencode Base64
"f"data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"video": "data:video/mp4;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."},
{"text": "Adegan apa yang digambarkan oleh video ini? "}
]
}
]
}
}'
Daftar gambar
Bagian ini menggunakan file football1.jpg, football2.jpg, football3.jpg, dan football4.jpg yang disimpan secara lokal sebagai contoh.
Mengirim jalur file
import os
import dashscope
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
local_path1 = "football1.jpg"
local_path2 = "football2.jpg"
local_path3 = "football3.jpg"
local_path4 = "football4.jpg"
image_path1 = f"file://{local_path1}"
image_path2 = f"file://{local_path2}"
image_path3 = f"file://{local_path3}"
image_path4 = f"file://{local_path4}"
messages = [{'role':'user',
// Saat Anda mengirim daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
'content': [{'video': [image_path1,image_path2,image_path3,image_path4],"fps":2},
{'text': 'Adegan apa yang digambarkan oleh video ini?'}]}]
response = MultiModalConversation.call(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus', // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages)
print(response.output.choices[0].message.content[0]["text"])
// Versi SDK DashScope harus 2.21.10 atau yang lebih baru.
import java.util.Arrays;
import java.util.Map;
import java.util.Collections;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut adalah untuk Wilayah Singapura. Saat Anda memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi menurut Wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static final String MODEL_NAME = "qwen3.8-max"; // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
public static void videoImageListSample(String localPath1, String localPath2, String localPath3, String localPath4)
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
String filePath1 = "file://" + localPath1;
String filePath2 = "file://" + localPath2;
String filePath3 = "file://" + localPath3;
String filePath4 = "file://" + localPath4;
Map<String, Object> params = new HashMap<>();
params.put("video", Arrays.asList(filePath1,filePath2,filePath3,filePath4));
// Saat Anda meneruskan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
params.put("fps", 2);
MultiModalMessage userMessage = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(params,
Collections.singletonMap("text", "Describe the specific process in this video")))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi menurut Wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model(MODEL_NAME)
.messages(Arrays.asList(userMessage)).build();
MultiModalConversationResult result = conv.call(param);
System.out.print(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
videoImageListSample(
"xxx/football1.jpg",
"xxx/football2.jpg",
"xxx/football3.jpg",
"xxx/football4.jpg");
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
Teruskan menggunakan pengodean Base64
Kompatibel dengan OpenAI
Python
import os
from openai import OpenAI
import base64
// Fungsi encoding: Mengonversi file lokal ke string yang diencode Base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image1 = encode_image("football1.jpg")
base64_image2 = encode_image("football2.jpg")
base64_image3 = encode_image("football3.jpg")
base64_image4 = encode_image("football4.jpg")
client = OpenAI(
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY"),
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=[
{"role": "user","content": [
{"type": "video","video": [
f"data:image/jpeg;base64,{base64_image1}",
f"data:image/jpeg;base64,{base64_image2}",
f"data:image/jpeg;base64,{base64_image3}",
f"data:image/jpeg;base64,{base64_image4}",]},
{"type": "text","text": "Jelaskan proses spesifik dalam video ini"},
]}]
)
print(completion.choices[0].message.content)
Node.js
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi Variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const encodeImage = (imagePath) => {
const imageFile = readFileSync(imagePath);
return imageFile.toString('base64');
};
const base64Image1 = encodeImage("football1.jpg")
const base64Image2 = encodeImage("football2.jpg")
const base64Image3 = encodeImage("football3.jpg")
const base64Image4 = encodeImage("football4.jpg")
async function main() {
const completion = await openai.chat.completions.create({
model: "qwen3.8-max", // Contoh ini menggunakan qwen3.7-plus. Anda dapat mengubah nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages: [
{"role": "user",
"content": [{"type": "video",
"video": [
`data:image/jpeg;base64,${base64Image1}`,
`data:image/jpeg;base64,${base64Image2}`,
`data:image/jpeg;base64,${base64Image3}`,
`data:image/jpeg;base64,${base64Image4}`]},
{"type": "text", "text": "Adegan apa yang digambarkan oleh video ini?"}]}]
});
console.log(completion.choices[0].message.content);
}
main();
curl
- Untuk informasi tentang cara mengonversi file ke string yang diencode Base64, lihat kode contoh.
- Untuk tujuan demonstrasi, string yang diencode Base64
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string yang diencode lengkap.
# ======= Penting =======
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"messages": [{"role": "user",
"content": [{"type": "video",
"video": [
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
"data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
"data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
"data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
]},
{"type": "text",
"text": "Jelaskan proses spesifik dalam video ini"}]}]
}'
DashScope
Python
import base64
import os
import dashscope
# URL berikut ini untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi tergantung wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# Fungsi encoding: Mengonversi file lokal menjadi string yang dienkode Base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image1 = encode_image("football1.jpg")
base64_image2 = encode_image("football2.jpg")
base64_image3 = encode_image("football3.jpg")
base64_image4 = encode_image("football4.jpg")
messages = [{'role':'user',
'content': [
{'video':
[f"data:image/jpeg;base64,{base64_image1}",
f"data:image/jpeg;base64,{base64_image2}",
f"data:image/jpeg;base64,{base64_image3}",
f"data:image/jpeg;base64,{base64_image4}"
]
},
{'text': 'Please describe the specific process of this video?'}]}]
response = dashscope.MultiModalConversation.call(
# Kunci API bervariasi tergantung wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
model='qwen3.7-plus', # Contoh ini menggunakan qwen3.7-plus. Anda dapat mengganti nama model sesuai kebutuhan. Untuk daftar model, lihat https://www.alibabacloud.com/help/model-studio/getting-started/models
messages=messages)
print(response.output.choices[0].message.content[0]["text"])
Java
import java.io.IOException;
import java.util.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import com.alibaba.dashscope.aigc.multimodalconversation.*;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut ini untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi tergantung wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
private static String encodeImageToBase64(String imagePath) throws IOException {
Path path = Paths.get(imagePath);
byte[] imageBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(imageBytes);
}
public static void videoImageListSample(String localPath1,String localPath2,String localPath3,String localPath4)
throws ApiException, NoApiKeyException, UploadFileException, IOException {
String base64Image1 = encodeImageToBase64(localPath1); // Pengodean Base64
String base64Image2 = encodeImageToBase64(localPath2);
String base64Image3 = encodeImageToBase64(localPath3);
String base64Image4 = encodeImageToBase64(localPath4);
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> params = new HashMap<>();
params.put("video", Arrays.asList(
"data:image/jpeg;base64," + base64Image1,
"data:image/jpeg;base64," + base64Image2,
"data:image/jpeg;base64," + base64Image3,
"data:image/jpeg;base64," + base64Image4));
// Saat Anda mengirimkan daftar gambar, parameter fps berlaku untuk model seri Qwen3.6, Qwen3-VL, dan Qwen2.5-VL.
params.put("fps", 2);
MultiModalMessage userMessage = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(params,
Collections.singletonMap("text", "Describe the specific process in this video")))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API bervariasi tergantung wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.messages(Arrays.asList(userMessage))
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
// Ganti xxx/football1.png dan file lainnya dengan jalur mutlak gambar lokal Anda
videoImageListSample(
"xxx/football1.jpg",
"xxx/football2.jpg",
"xxx/football3.jpg",
"xxx/football4.jpg"
);
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
curl
- Untuk informasi tentang cara mengonversi file menjadi string yang dienkode Base64, lihat contoh kode.
- Untuk keperluan demonstrasi, string yang dienkode Base64
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA..."dalam kode dipotong. Dalam penggunaan aktual, pastikan untuk mengirimkan string terenkripsi yang lengkap.
# ======= Penting =======
# URL berikut ini untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja Anda yang sebenarnya. URL bervariasi tergantung wilayah.
# Kunci API bervariasi tergantung wilayah. Untuk mendapatkan Kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"video": [
"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAA...",
"data:image/jpeg;base64,nEpp6jpnP57MoWSyOWwrkXMJhHRCWYeFYb...",
"data:image/jpeg;base64,JHWQnJPc40GwQ7zERAtRMK6iIhnWw4080s...",
"data:image/jpeg;base64,adB6QOU5HP7dAYBBOg/Fb7KIptlbyEOu58..."
],
"fps":2
},
{
"text": "Describe the specific process in this video"
}
]
}
]
}
}'
Proses gambar beresolusi tinggi
API model pemahaman visual memiliki batas jumlah token visual untuk satu gambar yang dikodekan. Dengan konfigurasi default, gambar beresolusi tinggi dikompresi, yang dapat menyebabkan hilangnya detail dan memengaruhi akurasi pemahaman. Aktifkan vl_high_resolution_images atau sesuaikan max_pixels untuk meningkatkan jumlah token visual. Hal ini mempertahankan lebih banyak detail gambar dan meningkatkan pemahaman.
Lihat jumlah piksel per token visual, batas token, dan batas piksel untuk setiap model
Jika jumlah piksel gambar input melebihi batas piksel model, gambar tersebut akan di-downscale agar sesuai dalam batas tersebut.
Model | Piksel per token | vl_high_resolution_images | max_pixels | Batas token | Batas piksel |
|
|
|
|
|
|
| Dapat dikustomisasi. Nilai default-nya adalah | Ditentukan oleh |
| ||
|
|
|
|
|
|
| Dapat dikustomisasi. Nilai default-nya adalah | Ditentukan oleh |
| ||
Model lain dari |
|
|
|
|
|
| Dapat dikustomisasi. Nilai default-nya adalah | Ditentukan oleh |
|
-
Saat
vl_high_resolution_images=true, API menggunakan kebijakan resolusi tetap dan mengabaikan pengaturanmax_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 parametermax_pixels.- Untuk skenario yang sensitif terhadap biaya dan Anda ingin mengurangi konsumsi token visual: Gunakan nilai default
max_pixelsatau atur ke nilai yang lebih kecil.max_pixelsterutama memengaruhi jumlah token visual dan biaya pemanggilan. Dalam pengujian kami, menurunkannya tidak berdampak signifikan terhadap waktu respons end-to-end. Untuk mengurangi latensi, lihat Kecepatan respons dan pemilihan model. - Jika Anda ingin fokus pada detail tertentu dan dapat menerima kecepatan pemrosesan yang lebih rendah, tingkatkan nilai
max_pixelssesuai kebutuhan.
- Untuk skenario yang sensitif terhadap biaya dan Anda ingin mengurangi konsumsi token visual: Gunakan nilai default
Kecepatan respons dan pemilihan model
Dalam skenario yang sensitif terhadap latensi, waktu respons terutama ditentukan oleh model yang Anda pilih, bukan oleh max_pixels. Tabel berikut membandingkan waktu respons qwen-vl-max dan qwen-vl-plus dalam kondisi input yang sama:
Model | Rata-rata waktu respons | Karakteristik |
|---|---|---|
| Sekitar 12 detik | Pengenalan akurasi tinggi. Cocok untuk gambar dengan detail kaya dan toleransi kesalahan rendah. |
| Sekitar 8 detik | Kecepatan dan akurasi seimbang. Sekitar 39% lebih cepat daripada |
Waktu respons di atas merupakan nilai referensi hasil pengukuran untuk satu gambar berukuran 2480x3508 piksel (qwen-vl-max: 12,75 detik dan 11,84 detik, rata-rata 12,29 detik; qwen-vl-plus: 8,29 detik dan 6,75 detik, rata-rata 7,52 detik). Latensi aktual bervariasi tergantung ukuran gambar, panjang output, dan kondisi jaringan. Nilai-nilai ini hanya sebagai referensi dan bukan komitmen kinerja.
- Mengaktifkan keluaran streaming (
stream=True) secara signifikan mengurangi waktu hingga token pertama: untuk permintaan yang sama, token pertama dikembalikan dalam waktu sekitar 0,95 detik, sedangkan waktu total respons lengkap tetap tidak berubah. Ini cocok untuk skenario interaktif yang perlu menampilkan umpan balik sedini mungkin. - Untuk skenario pengenalan gambar yang sensitif terhadap latensi seperti alur kerja: Gunakan
qwen-vl-plusdenganstream=Trueuntuk mendapatkan token pertama dalam waktu sekitar 1 detik. Beralihlah keqwen-vl-maxhanya jika akurasi pengenalanqwen-vl-plustidak memenuhi kebutuhan Anda. Menyesuaikanmax_pixelsbukan cara untuk meningkatkan kecepatan.
Kompatibel dengan OpenAI
vl_high_resolution_images bukan parameter standar OpenAI. Cara meneruskannya berbeda-beda di berbagai SDK bahasa:
- Python SDK: Harus diteruskan melalui kamus
extra_body. - Node.js SDK: Dapat diteruskan langsung sebagai parameter tingkat atas.
import os
import time
from openai import OpenAI
client = OpenAI(
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.8-max",
messages=[
{"role": "user","content": [
{"type": "image_url","image_url": {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
# max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
# "max_pixels": 16384 * 32 * 32
},
{"type": "text", "text": "Suasana festival apa yang disampaikan oleh gambar ini"},
],
}
],
extra_body={"vl_high_resolution_images":True}
)
print(f"Output model: {completion.choices[0].message.content}")
print(f"Total token input: {completion.usage.prompt_tokens}")
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
const response = await openai.chat.completions.create({
model: "qwen3.8-max",
messages: [
{role: "user",content: [
{type: "image_url",
image_url: {"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
// max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak berpengaruh saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
// "max_pixels": 2560 * 32 * 32
},
{type: "text", text: "Suasana festival apa yang disampaikan oleh gambar ini?" },
]}],
vl_high_resolution_images:true
})
console.log("Output model:",response.choices[0].message.content);
console.log("Total token input",response.usage.prompt_tokens);
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"
}
},
{
"type": "text",
"text": "Suasana festival apa yang disampaikan oleh gambar ini?"
}
]
}
],
"vl_high_resolution_images":true
}'
DashScope
import os
import time
import dashscope
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
messages = [
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg",
# max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
# "max_pixels": 16384 * 32 * 32
},
{"text": "Suasana festival apa yang disampaikan oleh gambar ini?"}
]
}
]
response = dashscope.MultiModalConversation.call(
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: api_key="sk-xxx"
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
api_key=os.getenv('DASHSCOPE_API_KEY'),
model='qwen3.7-plus',
messages=messages,
vl_high_resolution_images=True
)
print("Output model",response.output.choices[0].message.content[0]["text"])
print("Total token input:",response.usage.input_tokens)
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
Constants.baseHttpApiUrl="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
Map<String, Object> map = new HashMap<>();
map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg");
// max_pixels merepresentasikan ambang batas piksel maksimum untuk gambar input. Tidak valid saat vl_high_resolution_images=True. Saat vl_high_resolution_images=False, nilainya dapat dikustomisasi, dan nilai maksimumnya bervariasi berdasarkan model.
// map.put("max_pixels", 2621440);
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
map,
Collections.singletonMap("text", "Suasana festival apa yang disampaikan oleh gambar ini?"))).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3.8-max")
.message(userMessage)
.vlHighResolutionImages(true)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
System.out.println(result.getUsage().getInputTokens());
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}
# ======= Penting =======
# Kunci API bervariasi berdasarkan wilayah. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil API, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3.8-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250212/earbrt/vcg_VCG211286867973_RF.jpg"},
{"text": "Suasana festival apa yang disampaikan oleh gambar ini?"}
]
}
]
},
"parameters": {
"vl_high_resolution_images": true
}
}'
Penggunaan lainnya
Batasan
Batasan file input
Batasan gambar
-
Resolusi gambar:
-
Ukuran minimum: Lebar dan tinggi gambar harus masing-masing lebih besar dari
10piksel. -
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_resizedalam 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_pixelsdanmin_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.
- Pertahankan resolusi gambar dalam batas
-
-
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)dan8K (7680x4320), hanya format JPEG, JPG, dan PNG yang didukung.
-
-
Ukuran gambar:
Batasan berikut berlaku untuk setiap gambar individual. Untuk input multi-gambar, setiap gambar dievaluasi secara independen dan ukurannya tidak diakumulasi.
- Jika dikirim sebagai URL publik: Satu gambar tidak boleh melebihi
20 MBuntuk model seri Qwen3.8, Qwen3.7, Qwen3.6, Qwen3.5, dan Qwen3-VL. Untuk model lainnya, satu gambar tidak boleh melebihi10 MB. - Jika dikirim sebagai path lokal: Satu gambar tidak boleh melebihi
10 MB. - Jika dikirim sebagai encoding Base64 (API kompatibel OpenAI): Untuk model seri Qwen3.8, Qwen3.7, Qwen3.6, Qwen3.5, dan Qwen3-VL, file gambar asli sebelum encoding tidak boleh melebihi
20 MB. Untuk model lainnya, tidak boleh melebihi10 MB. Dalam kedua kasus tersebut, string Data URI hasil encoding tidak boleh melebihi20 MB. - Jika dikirim sebagai encoding Base64 (API kompatibel Anthropic): Total badan permintaan tidak boleh melebihi
6 MB. Jika mengirimkan beberapa gambar, kuota ini dibagi bersama.
Batasan ini bergantung pada model yang Anda gunakan. Batasan tersebut tidak dapat ditingkatkan dengan membeli paket tier lebih tinggi atau melakukan upgrade versi model.
Untuk mengompresi file, lihat Cara mengompresi gambar atau video ke ukuran yang diperlukan.
- Jika dikirim sebagai URL publik: Satu gambar tidak boleh melebihi
-
Batasan jumlah gambar: Jumlah maksimum gambar yang didukung untuk input multi-gambar bervariasi berdasarkan metode input:
-
Jika dikirim sebagai URL publik atau path lokal:
- Seri Qwen3.8-Max, Qwen3.8-Flash, Qwen3.7-Plus: Hingga 2.048 gambar
- Seri Qwen3.7-Flash, Qwen3.6-Plus, Qwen3.6-Flash, Qwen3.5-Plus, Qwen3.5-Flash, Qwen3-VL, Qwen-VL, seri QVQ: Hingga 256 gambar
- Untuk seri Qwen-Omni, lihat Omni-modal.
-
Jika dikirim sebagai string terenkripsi Base64: Hingga 250 gambar
-
Jumlah total token untuk semua gambar juga dibatasi oleh batas maksimum token input model. Total jumlah token untuk semua gambar dan teks tidak boleh melebihi batas maksimum input model.
Batasan video
-
Jika dikirim sebagai daftar gambar, jumlah gambar dalam daftar dibatasi sebagai berikut:
- Seri
qwen3.8,qwen3.7,qwen3.6, danqwen3.5: Minimum 4 gambar dan maksimum 8.000 gambar - Seri
qwen3-vl-plus,qwen3-vl-flash,qwen3-vl-235b-a22b-thinking, danqwen3-vl-235b-a22b-instruct: Minimum 4 gambar dan maksimum 2.000 gambar - Model open source lainnya seperti seri
Qwen3-VL,Qwen2.5-VL(termasuk versi komersial dan open source), dan seriQVQ: Minimum 4 gambar dan maksimum 512 gambar - Model lainnya: Minimum 4 gambar dan maksimum 80 gambar
- Seri
-
Jika dikirim sebagai file video:
-
Ukuran video:
-
Jika dikirim sebagai URL publik:
- Seri
qwen3.8,qwen3.7,qwen3.6,qwen3.5, seriQwen3-VL, danqwen-vl-max: Tidak boleh melebihi 2 GB. - Seri
qwen-vl-plus, modelqwen-vl-maxlainnya, seri open sourceQwen2.5-VL, dan model seriQVQ: Tidak boleh melebihi 1 GB. - Model lainnya: Tidak boleh melebihi 150 MB.
- Seri
-
Jika dikirim sebagai string terenkripsi Base64: String terenkripsi harus kurang dari 10 MB.
-
Jika dikirim sebagai path file lokal: File video tidak boleh melebihi 100 MB.
Untuk mengompresi file, lihat Cara mengompresi gambar atau video ke ukuran yang diperlukan.
-
-
Durasi video:
- Seri
qwen3.8,qwen3.7,qwen3.6, danqwen3.5: 2 detik hingga 2 jam. - Seri
qwen3-vl-plus,qwen3-vl-flash,qwen3-vl-235b-a22b-thinking, danqwen3-vl-235b-a22b-instruct: 2 detik hingga 1 jam. - Seri open source lainnya seperti
Qwen3-VLdanqwen-vl-max: 2 detik hingga 20 menit. - Seri
qwen-vl-plus, modelqwen-vl-maxlainnya, seri open sourceQwen2.5-VL, dan model seriQVQ: 2 detik hingga 10 menit. - Model lainnya: 2 detik hingga 40 detik.
- Seri
-
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_pixelsdanmin_pixels. File video yang lebih besar tidak menghasilkan pemahaman yang lebih baik. -
Batasan jumlah video: Hingga 64 video dapat dikirim.
-
Pemahaman audio: Model tidak mendukung pemahaman track audio dalam file video.
-
Ukuran video:
Metode input file
-
URL publik: Berikan alamat file yang dapat diakses publik dan mendukung protokol HTTP atau HTTPS. Untuk stabilitas dan performa optimal, unggah file ke OSS guna memperoleh URL publik. Model Studio tidak dapat mengakses titik akhir internal OSS, yang alamatnya mengandung
-internal, sepertihttps://<bucket>.oss-cn-hangzhou-internal.aliyuncs.com/image.jpg. Jika Anda memberikan alamat internal, unduhan file akan gagal dan kode errorInvalidParameterakan dikembalikan dengan pesanFailed to download multimodal content. Gunakan titik akhir publik OSS, sepertihttps://<bucket>.oss-cn-hangzhou.aliyuncs.com/image.jpg, atau URL OSS yang telah ditandatangani (presigned).PentingUntuk memastikan model dapat mengunduh file dengan sukses, header respons dari URL publik harus mencantumkan Content-Length (ukuran file) dan Content-Type (jenis media, seperti image/jpeg). Jika salah satu bidang tersebut tidak ada atau salah, unduhan file akan gagal.
-
Encoding Base64: Konversi file menjadi string terenkripsi Base64, lalu kirimkan.
-
Path file lokal (hanya untuk SDK DashScope): Kirimkan path file lokal.
Untuk rekomendasi cara memilih metode input file, lihat Bagaimana cara memilih metode unggah file?
Menggunakan di lingkungan produksi
-
Pra-pemrosesan gambar dan video: Model pemahaman visual memiliki batas ukuran untuk file input. Untuk mengompresi file, lihat Metode kompresi gambar atau video.
-
Pemrosesan file teks: Model pemahaman visual hanya mendukung file gambar dan video. Model ini tidak mendukung pemrosesan file berbasis teks seperti TXT, Word (.doc/.docx), PDF, atau format lainnya. Gunakan salah satu solusi berikut:
- Konversi file teks ke format gambar. Gunakan pustaka pemrosesan gambar, seperti pdf2image untuk Python, untuk mengonversi file tersebut per halaman menjadi beberapa gambar berkualitas tinggi. Kemudian, kirimkan gambar-gambar tersebut ke model menggunakan metode input multi-gambar.
- Gunakan Qwen-Long, yang mendukung pengunggahan dokumen dan melakukan percakapan dengan meneruskan informasi melalui
file-id.
-
Toleransi kesalahan dan stabilitas
- Penanganan timeout: Pada panggilan non-streaming, terjadi error timeout jika model tidak selesai menghasilkan output dalam waktu 300 detik. Saat timeout terjadi, konten yang telah dihasilkan dikembalikan dalam badan respons. Header respons yang berisi
x-dashscope-partialresponse: truemenunjukkan bahwa respons mengalami timeout. Gunakan fitur mode sebagian, yang didukung oleh beberapa model. Tambahkan konten yang telah dihasilkan ke dalam arraymessagesdan kirim ulang permintaan tersebut. Hal ini memungkinkan Large Language Model (LLM) melanjutkan proses generasi konten. Untuk informasi lebih lanjut, lihat Lanjutkan generasi dari output yang belum lengkap. - Konfigurasi timeout sisi client: Timeout yang disebutkan sebelumnya adalah timeout sisi server yang terjadi ketika model tidak selesai menghasilkan output dalam waktu 300 detik. Ini berbeda dari timeout sisi client bawaan SDK. Saat Anda memproses gambar berukuran besar, seperti gambar beresolusi 4000 x 4000 piksel, permintaan mungkin memerlukan waktu lebih lama daripada timeout sisi client bawaan SDK dan terputus dengan error
APITimeoutError, meskipun batas 300 detik sisi server belum tercapai. Untuk menghindarinya, gunakanwith_optionspada OpenAI Python SDK untuk memperpanjang timeout sisi client:
- Penanganan timeout: Pada panggilan non-streaming, terjadi error timeout jika model tidak selesai menghasilkan output dalam waktu 300 detik. Saat timeout terjadi, konten yang telah dihasilkan dikembalikan dalam badan respons. Header respons yang berisi
client = client.with_options(timeout=1800.0)
response = client.chat.completions.create(
model="qwen-vl-plus",
messages=[...]
)
- Output streaming: Atur
stream=Trueagar model mengembalikan konten secara bertahap, bukan menunggu respons lengkap sekaligus. Hal ini mencegah terjadinya timeout sisi client akibat panggilan non-streaming berdurasi panjang saat memproses gambar besar:
stream = client.chat.completions.create(
model="qwen-vl-plus",
messages=[...],
stream=True
)
for chunk in stream:
print(chunk.choices[0].delta.content)
- Mekanisme retry: Rancang logika retry panggilan API yang masuk akal, seperti exponential backoff, untuk menangani fluktuasi jaringan atau ketidaktersediaan layanan sementara.
Penagihan dan pembatasan laju
-
Penagihan:Total biaya dihitung berdasarkan jumlah total token input dan output. Harga token input dan output tersedia di Konsol Model Studio.
-
Komposisi token:Token input terdiri dari token teks dan token yang dikonversi dari gambar atau video. Token output adalah teks yang dihasilkan oleh model. Dalam mode thinking, proses berpikir model juga dihitung sebagai token output. Jika proses berpikir tidak ditampilkan dalam mode thinking, penagihan mengikuti harga untuk mode non-thinking.
-
Hitung token untuk gambar dan video:Gunakan kode berikut untuk menghitung konsumsi token gambar atau video. Hasil perkiraan hanya untuk referensi. Penggunaan aktual didasarkan pada respons API.
Hitung token untuk gambar dan video
Gambar
Rumus:
Image Tokens = h_bar * w_bar / token_pixels + 2-
h_bar, w_bar: Tinggi dan lebar gambar yang telah diskalakan. Sebelum memproses gambar, model melakukan pra-pemrosesan untuk mengecilkan ukurannya hingga batas piksel tertentu. Batas ini bergantung pada nilai parametermax_pixelsdanvl_high_resolution_images. Untuk informasi lebih lanjut, lihat Process high-resolution images. -
token_pixels: Nilai piksel yang sesuai dengan setiaptokenvisual. Nilai ini bervariasi tergantung model:qwen3.8-series,qwen3.7-series,qwen3.6-series,qwen3.5-series,Qwen3-VL,qwen-vl-max, danqwen-vl-plus:Setiaptokensesuai dengan32x32piksel.QVQdan modelQwen2.5-VLlainnya:Setiap token sesuai dengan28x28piksel.
Kode berikut menunjukkan logika penskalaan gambar perkiraan yang digunakan oleh model. Gunakan kode ini untuk memperkirakan token gambar. Untuk penagihan aktual, rujuk respons API.
import math from PIL import Image # pip install Pillow def smart_resize(image_path, max_pixels, vl_high_resolution_images): """Menghitung dimensi gambar yang diskalakan berdasarkan parameter model untuk memperkirakan token gambar.""" image = Image.open(image_path) height, width = image.height, image.width # Faktor penskalaan adalah 32 untuk model seperti Qwen3.6, Qwen3.5, dan Qwen3-VL. Untuk model lain, nilainya 28. factor = 32 h_bar = round(height / factor) * factor w_bar = round(width / factor) * factor # Batas bawah token: 4 token min_pixels = 4 * factor * factor # Jika vl_high_resolution_images=True, batas atas token tetap pada 16384, dan max_pixels diabaikan. if vl_high_resolution_images: max_pixels = 16384 * factor * factor # Membatasi jumlah total piksel ke rentang [min_pixels, max_pixels]. if h_bar * w_bar > max_pixels: beta = math.sqrt((height * width) / max_pixels) h_bar = math.floor(height / beta / factor) * factor w_bar = math.floor(width / beta / factor) * factor elif h_bar * w_bar < min_pixels: beta = math.sqrt(min_pixels / (height * width)) h_bar = math.ceil(height * beta / factor) * factor w_bar = math.ceil(width * beta / factor) * factor return h_bar, w_bar if __name__ == "__main__": # Catatan: Nilai max_pixels dan vl_high_resolution_images harus sesuai dengan parameter yang diberikan saat memanggil model. h_bar, w_bar = smart_resize("xxx/test.jpg", max_pixels=2560 * 32 * 32, vl_high_resolution_images=False) print(f"Dimensi gambar yang diskalakan: Tinggi {h_bar}, Lebar {w_bar}") # Setiap gambar mencakup satu token <vision_bos> dan satu token <vision_eos>. token = int(h_bar * w_bar / (32 * 32)) + 2 print(f"Jumlah token gambar: {token}")Video
-
File video:
Saat memproses file video, model pertama-tama mengekstraksi frame lalu menghitung jumlah total token untuk semua frame video. Karena perhitungan ini kompleks, Anda dapat menggunakan kode berikut untuk memperkirakan total konsumsi token video dengan memberikan path-nya:
# Sebelum digunakan, instal: pip install opencv-python import math import os import logging import cv2 logger = logging.getLogger(__name__) FRAME_FACTOR = 2 # Untuk model seperti Qwen3.6, Qwen3.5, Qwen3-VL, qwen-vl-max-0813, qwen-vl-plus-0815, dan qwen-vl-plus-0710, faktor penskalaan gambar adalah 32. IMAGE_FACTOR = 32 # Untuk model lain, faktor penskalaan gambar adalah 28. # IMAGE_FACTOR = 28 # Rasio aspek maksimum untuk frame video MAX_RATIO = 200 # Batas bawah piksel untuk frame video VIDEO_MIN_PIXELS = 4 * 32 * 32 # Batas atas piksel untuk frame video. Untuk model Qwen3-VL-Plus, VIDEO_MAX_PIXELS adalah 640 * 32 * 32. Untuk model lain, nilainya 768 * 32 * 32. VIDEO_MAX_PIXELS = 640 * 32 * 32 # Jika pengguna tidak memberikan parameter FPS, nilai default digunakan untuk fps. FPS = 2.0 # Jumlah minimum frame yang diekstraksi FPS_MIN_FRAMES = 4 # Jumlah maksimum frame yang diekstraksi (ditetapkan berdasarkan model yang dipilih) FPS_MAX_FRAMES = 2000 # Nilai piksel maksimum untuk input video. Untuk model Qwen3-VL-Plus, atur VIDEO_TOTAL_PIXELS ke 131072 * 32 * 32. Untuk model lain, atur ke 65536 * 32 * 32. VIDEO_TOTAL_PIXELS = int(float(os.environ.get('VIDEO_TOTAL_PIXELS', 131072 * 32 * 32))) def round_by_factor(number: int, factor: int) -> int: """Mengembalikan bilangan bulat terdekat dengan 'number' yang habis dibagi 'factor'.""" return round(number / factor) * factor def ceil_by_factor(number: int, factor: int) -> int: """Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan 'number' dan habis dibagi 'factor'.""" return math.ceil(number / factor) * factor def floor_by_factor(number: int, factor: int) -> int: """Mengembalikan bilangan bulat terbesar yang lebih kecil dari atau sama dengan 'number' dan habis dibagi 'factor'.""" return math.floor(number / factor) * factor def extract_vision_info(conversations): vision_infos = [] if isinstance(conversations[0], dict): conversations = [conversations] for conversation in conversations: for message in conversation: if isinstance(message["content"], list): for ele in message["content"]: if ( "image" in ele or "image_url" in ele or "video" in ele or ele.get("type","") in ("image", "image_url", "video") ): vision_infos.append(ele) return vision_infos def smart_nframes(ele,total_frames,video_fps): """Menghitung jumlah frame video yang diekstraksi. Args: ele (dict): Kamus yang berisi konfigurasi video. - fps: Mengontrol jumlah frame input yang diekstraksi untuk model. total_frames (int): Jumlah total frame asli dalam video. video_fps (int | float): Laju frame asli video. Raises: Kesalahan dilaporkan jika nframes tidak berada dalam interval [FRAME_FACTOR, total_frames]. Returns: Jumlah frame video untuk input model. """ assert not ("fps" in ele and "nframes" in ele), "Hanya menerima salah satu dari `fps` atau `nframes`" fps = ele.get("fps", FPS) min_frames = ceil_by_factor(ele.get("min_frames", FPS_MIN_FRAMES), FRAME_FACTOR) max_frames = floor_by_factor(ele.get("max_frames", min(FPS_MAX_FRAMES, total_frames)), FRAME_FACTOR) duration = total_frames / video_fps if video_fps != 0 else 0 if duration-int(duration)>(1/fps): total_frames = math.ceil(duration * video_fps) else: total_frames = math.ceil(int(duration)*video_fps) nframes = total_frames / video_fps * fps if nframes > total_frames: logger.warning(f"smart_nframes: nframes[{nframes}] > total_frames[{total_frames}]") nframes = int(min(min(max(nframes, min_frames), max_frames), total_frames)) if not (FRAME_FACTOR <= nframes and nframes <= total_frames): raise ValueError(f"nframes harus berada dalam interval [{FRAME_FACTOR}, {total_frames}], tetapi mendapatkan {nframes}.") return nframes def get_video(video_path): # Mendapatkan informasi video cap = cv2.VideoCapture(video_path) frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # Mendapatkan tinggi video frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) video_fps = cap.get(cv2.CAP_PROP_FPS) return frame_height, frame_width, total_frames, video_fps def smart_resize(ele, path, factor=IMAGE_FACTOR): # Mendapatkan lebar dan tinggi asli video height, width, total_frames, video_fps = get_video(path) # Batas bawah token untuk frame video min_pixels = VIDEO_MIN_PIXELS total_pixels = VIDEO_TOTAL_PIXELS # Jumlah frame video yang diekstraksi nframes = smart_nframes(ele, total_frames, video_fps) max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR),int(min_pixels * 1.05)) # Rasio aspek video tidak boleh melebihi 200:1 atau 1:200. if max(height, width) / min(height, width) > MAX_RATIO: raise ValueError( f"rasio aspek absolut harus lebih kecil dari {MAX_RATIO}, mendapatkan {max(height, width) / min(height, width)}" ) h_bar = max(factor, round_by_factor(height, factor)) w_bar = max(factor, round_by_factor(width, factor)) if h_bar * w_bar > max_pixels: beta = math.sqrt((height * width) / max_pixels) h_bar = floor_by_factor(height / beta, factor) w_bar = floor_by_factor(width / beta, factor) elif h_bar * w_bar < min_pixels: beta = math.sqrt(min_pixels / (height * width)) h_bar = ceil_by_factor(height * beta, factor) w_bar = ceil_by_factor(width * beta, factor) return h_bar, w_bar def token_calculate(video_path, fps): # Berikan path video dan parameter ekstraksi frame fps. messages = [{"content": [{"video": video_path, "fps": fps}]}] vision_infos = extract_vision_info(messages)[0] resized_height, resized_width = smart_resize(vision_infos, video_path) height, width, total_frames, video_fps = get_video(video_path) num_frames = smart_nframes(vision_infos, total_frames, video_fps) print(f"Dimensi video asli: {height}*{width}, Dimensi input model: {resized_height}*{resized_width}, Total frame video: {total_frames}, Total frame yang diekstraksi saat fps {fps}: {num_frames}", end=", ") video_token = int(math.ceil(num_frames / 2) * resized_height / 32 * resized_width / 32) video_token += 2 # Sistem secara otomatis menambahkan penanda visual <|vision_bos|> dan <|vision_eos|> (masing-masing 1 token). return video_token video_token = token_calculate("xxx/test.mp4", 1) print("Token video:", video_token)-
Daftar gambar:
Saat video diberikan sebagai daftar gambar, artinya ekstraksi frame telah dilakukan. Gunakan kode berikut untuk menghitung konsumsi token dengan memberikan path dan jumlah gambar:
# Sebelum digunakan, instal: pip install Pillow import math import os import logging from typing import Tuple from PIL import Image logger = logging.getLogger(__name__) # ==================== Definisi Konstanta ==================== FRAME_FACTOR = 2 # Untuk model seperti Qwen3-VL, qwen-vl-max-0813, qwen-vl-plus-0815, dan qwen-vl-plus-0710, faktor penskalaan adalah 32. IMAGE_FACTOR = 32 # Untuk model lain, faktor penskalaan adalah 28. # IMAGE_FACTOR = 28 # Konstanta untuk perhitungan token TOKEN_DIVISOR = 32 # Pembagi untuk perhitungan token VISION_SPECIAL_TOKENS = 2 # Penanda <|vision_bos|> dan <|vision_eos|> # Rasio aspek maksimum untuk frame video MAX_RATIO = 200 # Batas bawah piksel untuk frame video VIDEO_MIN_PIXELS = 4 * 32 * 32 # Batas atas piksel untuk frame video. Untuk model Qwen3-VL-Plus, VIDEO_MAX_PIXELS adalah 640 * 32 * 32. Untuk model lain, nilainya 768 * 32 * 32. VIDEO_MAX_PIXELS = 640 * 32 * 32 # Nilai piksel maksimum untuk input video. Untuk model Qwen3-VL-Plus, atur VIDEO_TOTAL_PIXELS ke 131072 * 32 * 32. Untuk model lain, atur ke 65536 * 32 * 32. VIDEO_TOTAL_PIXELS = int(float(os.environ.get('VIDEO_TOTAL_PIXELS', 131072 * 32 * 32))) def round_by_factor(number: int, factor: int) -> int: """Mengembalikan bilangan bulat terdekat dengan 'number' yang habis dibagi 'factor'.""" return round(number / factor) * factor def ceil_by_factor(number: int, factor: int) -> int: """Mengembalikan bilangan bulat terkecil yang lebih besar dari atau sama dengan 'number' dan habis dibagi 'factor'.""" return math.ceil(number / factor) * factor def floor_by_factor(number: int, factor: int) -> int: """Mengembalikan bilangan bulat terbesar yang lebih kecil dari atau sama dengan 'number' dan habis dibagi 'factor'.""" return math.floor(number / factor) * factor def get_image_size(image_path: str) -> Tuple[int, int]: if not os.path.exists(image_path): raise FileNotFoundError(f"File gambar tidak ditemukan: {image_path}") try: image = Image.open(image_path) height = image.height width = image.width image.close() # Tutup file segera return height, width except Exception as e: raise ValueError(f"Tidak dapat membaca file gambar {image_path}: {str(e)}") def smart_resize(height: int, width: int, nframes: int, factor: int = IMAGE_FACTOR) -> Tuple[int, int]: """ Menghitung dimensi gambar yang diskalakan Args: height: Tinggi gambar asli width: Lebar gambar asli nframes: Jumlah frame video factor: Faktor penskalaan, default ke IMAGE_FACTOR Returns: (resized_height, resized_width) Tinggi dan lebar yang diskalakan Raises: ValueError: Rasio aspek melebihi batas """ # Batas bawah token untuk frame video min_pixels = VIDEO_MIN_PIXELS total_pixels = VIDEO_TOTAL_PIXELS # Jumlah frame video yang diekstraksi max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR), int(min_pixels * 1.05)) # Rasio aspek video tidak boleh melebihi 200:1 atau 1:200. aspect_ratio = max(height, width) / min(height, width) if aspect_ratio > MAX_RATIO: raise ValueError( f"Rasio aspek gambar harus kurang dari {MAX_RATIO}:1, tetapi saat ini {aspect_ratio:.2f}:1" ) h_bar = max(factor, round_by_factor(height, factor)) w_bar = max(factor, round_by_factor(width, factor)) if h_bar * w_bar > max_pixels: beta = math.sqrt((height * width) / max_pixels) h_bar = floor_by_factor(height / beta, factor) w_bar = floor_by_factor(width / beta, factor) elif h_bar * w_bar < min_pixels: beta = math.sqrt(min_pixels / (height * width)) h_bar = ceil_by_factor(height * beta, factor) w_bar = ceil_by_factor(width * beta, factor) return h_bar, w_bar def calculate_video_tokens(image_path: str, nframes: int = 1, factor: int = IMAGE_FACTOR, verbose: bool = True) -> int: """ Args: image_path: Path ke file frame video nframes: Jumlah frame video, factor: Faktor penskalaan, default ke IMAGE_FACTOR verbose: Apakah akan mencetak informasi detail Returns: Jumlah token yang dikonsumsi Raises: FileNotFoundError: File tidak ada ValueError: Format file tidak valid atau rasio aspek melebihi batas """ # Mendapatkan dimensi gambar asli (baca hanya sekali) height, width = get_image_size(image_path) # Menghitung dimensi yang diskalakan resized_height, resized_width = smart_resize(height, width, nframes, factor) # Menghitung jumlah token # Rumus: ceil(nframes/2) * (height/TOKEN_DIVISOR) * (width/TOKEN_DIVISOR) + VISION_SPECIAL_TOKENS video_token = int( math.ceil(nframes / 2) * (resized_height / TOKEN_DIVISOR) * (resized_width / TOKEN_DIVISOR) ) # Tambahkan token penanda visual (<|vision_bos|> dan <|vision_eos|>) video_token += VISION_SPECIAL_TOKENS if verbose: print(f"Dimensi frame video asli: {height}x{width}, Dimensi input model: {resized_height}x{resized_width}, ", end="") return video_token if __name__ == "__main__": try: video_token = calculate_video_tokens("xxx/test.jpg", nframes=30) print(f"Token video: {video_token}\n") except Exception as e: print(f"Kesalahan: {str(e)}\n") -
-
-
Lihat tagihan:Lihat tagihan atau isi ulang akun Anda di halaman Biaya dan Pengeluaran di Konsol Manajemen Alibaba Cloud.
-
Pembatasan laju:Untuk informasi lebih lanjut tentang kondisi pembatasan laju untuk model pemahaman visual, lihat Pembatasan laju.
-
Kuota gratis(Hanya wilayah Singapura): Kuota gratis sebesar 1 juta token disediakan untuk model pemahaman visual. Periode validitas 90 hari dimulai sejak tanggal Anda mengaktifkan Model Studio atau permintaan model Anda disetujui.
Referensi API
Untuk informasi lebih lanjut mengenai parameter input dan output model pemahaman visual, lihat generasi teks.
FAQ
Bagaimana cara memilih metode unggah file?
Pilih metode unggah yang paling sesuai berdasarkan jenis SDK, ukuran file, dan stabilitas jaringan.
Jenis file | Spesifikasi file | DashScope SDK (Python, Java) | Kompatibel dengan OpenAI / DashScope HTTP |
|---|---|---|---|
Image | Lebih dari 7 MB dan kurang dari 10 MB | Gunakan path lokal | Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service |
Kurang dari 7 MB | Gunakan path lokal | Base64 encoding | |
Video | Lebih dari 100 MB | Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service | Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service |
Lebih dari 7 MB dan kurang dari 100 MB | Gunakan path lokal | Hanya URL jaringan publik yang didukung. Gunakan Alibaba Cloud Object Storage Service | |
Kurang dari 7 MB | Gunakan path lokal | Base64 encoding |
Base64 encoding meningkatkan ukuran data. Ukuran file asli harus kurang dari 7 MB.
Gunakan Base64 atau path lokal untuk menghindari timeout unduhan di sisi server dan meningkatkan stabilitas.
Bagaimana cara memampatkan gambar atau video agar sesuai ukuran yang diminta?
Model pemahaman visual memiliki batas ukuran untuk file input. Gunakan metode berikut untuk memampatkan file Anda.
Metode kompresi gambar
- Alat online: Gunakan alat online seperti CompressJPEG untuk memampatkan gambar.
- Perangkat lunak lokal: Gunakan perangkat lunak seperti Photoshop untuk menyesuaikan kualitas saat mengekspor.
- Implementasi kode:
# pip install pillow
from PIL import Image
def compress_image(input_path, output_path, quality=85):
with Image.open(input_path) as img:
img.save(output_path, "JPEG", optimize=True, quality=quality)
# Gunakan gambar lokal
compress_image("/xxx/before-large.jpeg","/xxx/after-min.jpeg")
# Kompresi batch gambar dalam direktori
import glob
import os
def batch_compress(input_dir, output_dir, quality=85):
files = (
glob.glob(os.path.join(input_dir, "*.jpg"))
+ glob.glob(os.path.join(input_dir, "*.jpeg"))
+ glob.glob(os.path.join(input_dir, "*.png"))
)
for i, f in enumerate(files, 1):
try:
compress_image(f, os.path.join(output_dir, os.path.basename(f)), quality)
print(f"[{i}/{len(files)}] {os.path.basename(f)} selesai")
except Exception as e:
print(f"[{i}/{len(files)}] {os.path.basename(f)} error: {e}")
batch_compress("/xxx/input_dir", "/xxx/output_dir")
Metode kompresi video
- Alat online: Gunakan alat online seperti FreeConvert untuk memampatkan video.
- Perangkat lunak lokal: Gunakan perangkat lunak seperti HandBrake.
- Implementasi kode: Gunakan tool FFmpeg. Untuk informasi lebih lanjut, lihat website resmi FFmpeg.
# Perintah transformasi dasar
# -i, fungsi: path file input, contoh: input.mp4
# -vcodec, fungsi: penyandi video, nilai umum termasuk libx264 (umumnya direkomendasikan) dan libx265 (rasio kompresi lebih tinggi)
# -crf, fungsi: mengontrol kualitas video, rentang nilai: [18-28]. Semakin kecil nilainya, semakin tinggi kualitas dan semakin besar ukuran file.
# --preset, fungsi: mengontrol keseimbangan antara kecepatan encoding dan efisiensi kompresi. Nilai umum termasuk slow, fast, dan faster.
# -y, fungsi: menimpa file yang sudah ada (tidak perlu nilai)
# output.mp4, fungsi: path file output
ffmpeg -i input.mp4 -vcodec libx264 -crf 28 -preset slow output.mp4
Setelah model menghasilkan hasil lokasi objek, bagaimana cara menggambar bingkai deteksi pada gambar asli?
Setelah model pemahaman visual mengembalikan hasil lokasi objek, Anda dapat menggunakan kode berikut untuk menggambar bingkai deteksi beserta informasi label-nya pada gambar asli.
- Qwen2.5-VL: Koordinat yang dikembalikan adalah nilai absolut dalam piksel, relatif terhadap pojok kiri atas gambar yang telah diskalakan. Untuk menggambar bingkai deteksi, lihat kode dalam qwen2_5_vl_2d.py.
- Seri Qwen3-VL, Qwen3.5, Qwen3.6, dan Qwen3.7 (seperti qwen3.5-plus, qwen3.6-plus, dan qwen3.7-plus): Koordinat yang dikembalikan bersifat relatif dan dinormalisasi ke rentang
[0, 999]. Untuk menggambar bingkai deteksi, lihat kode dalam qwen3_vl_2d.py (posisi 2D) atau qwen3_vl_3d.zip (posisi 3D).
Kode error
Jika pemanggilan model gagal, pesan error akan dikembalikan. Untuk informasi tentang cara mengatasi error tersebut, lihat Kode error.












