Model Qwen-Omni menerima input multimodal dan menghasilkan respons berupa teks atau ucapan. Model ini menghasilkan suara yang menyerupai manusia serta mendukung output ucapan dalam berbagai bahasa dan dialek. Kasus penggunaan mencakup moderasi konten, pembuatan teks, pengenalan visual, dan interaksi audio-video.
Wilayah yang didukung:Singapura, Beijing. Gunakan Kunci API untuk wilayah Anda.
Mulai
Prasyarat- Dapatkan Kunci API dan atur kunci API sebagai Variabel lingkungan.
- Model Qwen-Omni hanya mendukung pemanggilan yang kompatibel dengan OpenAI. Anda harus menginstal SDK terbaru. Versi minimum yang diperlukan adalah 1.52.0 untuk OpenAI Python SDK dan 4.68.0 untuk Node.js SDK.
Contoh berikut mengirimkan prompt teks ke API Qwen-Omni dan mengembalikan respons streaming yang mencakup teks dan audio.
import os
import base64
import soundfile as sf
import numpy as np
from openai import OpenAI
# 1. Inisialisasi client
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # Pastikan variabel lingkungan telah diatur
# Wilayah Singapura. Ganti {WorkspaceId} dengan ID ruang kerja Bailian Anda. URL bervariasi berdasarkan wilayah.
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
# 2. Kirim permintaan
try:
completion = client.chat.completions.create(
model="qwen3.5-omni-plus",
messages=[{"role": "user", "content": "Who are you?"}],
modalities=["text", "audio"], # Tentukan output teks dan audio
audio={"voice": "Tina", "format": "wav"},
stream=True, # Harus diatur ke True
stream_options={"include_usage": True},
)
# 3. Proses respons streaming dan dekode audio
print("Model response:")
audio_base64_string = ""
for chunk in completion:
# Proses bagian teks
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
# Kumpulkan bagian audio
if chunk.choices and hasattr(chunk.choices[0].delta, "audio") and chunk.choices[0].delta.audio:
audio_base64_string += chunk.choices[0].delta.audio.get("data", "")
# 4. Simpan file audio
if audio_base64_string:
wav_bytes = base64.b64decode(audio_base64_string)
audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
sf.write("audio_assistant.wav", audio_np, samplerate=24000)
print("\nAudio file saved to: audio_assistant.wav")
except Exception as e:
print(f"Request failed: {e}")
// Sebelum menjalankan kode ini:
// Untuk Windows/Mac/Linux:
// 1. Pastikan versi Node.js >= 14 telah diinstal.
// 2. Jalankan perintah berikut untuk menginstal dependensi yang diperlukan:
// npm install openai wav
import OpenAI from "openai";
import { createWriteStream } from 'node:fs';
import { Writer } from 'wav';
// Definisikan fungsi untuk mengonversi string Base64 dan menyimpannya sebagai file audio WAV standar
async function convertAudio(audioString, audioPath) {
try {
// Dekode string Base64 menjadi Buffer
const wavBuffer = Buffer.from(audioString, 'base64');
// Buat aliran penulisan file WAV
const writer = new Writer({
sampleRate: 24000, // Laju sampel
channels: 1, // Mono
bitDepth: 16 // Kedalaman 16-bit
});
// Buat aliran output file dan buat koneksi pipe
const outputStream = createWriteStream(audioPath);
writer.pipe(outputStream);
// Tulis data PCM dan akhiri penulisan
writer.write(wavBuffer);
writer.end();
// Gunakan Promise untuk menunggu penulisan file selesai
await new Promise((resolve, reject) => {
outputStream.on('finish', resolve);
outputStream.on('error', reject);
});
// Tambahkan waktu tunggu ekstra untuk memastikan integritas audio
await new Promise(resolve => setTimeout(resolve, 800));
console.log(`\nAudio file saved to: ${audioPath}`);
} catch (error) {
console.error('Error during processing:', error);
}
}
// 1. Inisialisasi client
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
}
);
// 2. Kirim permintaan
const completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus",
messages: [
{
"role": "user",
"content": "Who are you?"
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
let audioString = "";
console.log("Model response:")
// 3. Proses respons streaming dan dekode audio
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
// Proses konten teks
if (chunk.choices[0].delta.content) {
process.stdout.write(chunk.choices[0].delta.content);
}
// Proses konten audio
if (chunk.choices[0].delta.audio) {
if (chunk.choices[0].delta.audio["data"]) {
audioString += chunk.choices[0].delta.audio["data"];
}
}
}
}
// 4. Simpan file audio
convertAudio(audioString, "audio_assistant.wav");
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",
"messages": [
{
"role": "user",
"content": "Who are you?"
}
],
"stream":true,
"stream_options":{
"include_usage":true
},
"modalities":["text","audio"],
"audio":{"voice":"Tina","format":"wav"}
}'
Respons
Setelah menjalankan kode Python atau Node.js, respons teks akan muncul di konsol dan file audio bernama audio_assistant.wav akan disimpan di direktori yang sama dengan file kode Anda.
Model response:
I am a large language model developed by Alibaba Cloud. My name is Qwen. How can I help you?
Menjalankan kode HTTP akan mengembalikan teks dan data audio yang dikodekan Base64 secara langsung di bidang audio.
data: {"choices":[{"delta":{"content":"I"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757647879,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
data: {"choices":[{"delta":{"content":"am"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757647879,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
......
data: {"choices":[{"delta":{"audio":{"data":"/v8AAAAAAAAAAAAAAA...","expires_at":1757647879,"id":"audio_a68eca3b-c67e-4666-a72f-73c0b4919860"}},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757647879,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
data: {"choices":[{"finish_reason":"stop","delta":{"content":""},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1764763585,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-e8c82e9e-073e-4289-a786-a20eb444ac9c"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":207,"completion_tokens":103,"total_tokens":310,"completion_tokens_details":{"audio_tokens":83,"text_tokens":20},"prompt_tokens_details":{"text_tokens":207}},"created":1757940330,"system_fingerprint":null,"model":"qwen3.5-omni-plus","id":"chatcmpl-9cdd5a26-f9e9-4eff-9dcc-93a878165afc"}
Pemilihan model
-
Seri Qwen3.5-Omni: Paling cocok untuk analisis video panjang, ringkasan rapat, pembuatan keterangan, moderasi konten, dan interaksi audio-video.
- Batas input: Hingga 3 jam audio atau 1 jam video
- Kontrol audio: Mendukung penyesuaian volume, laju bicara, dan emosi melalui instruksi
- Kemampuan visual: Setara dengan Qwen3.5. Memahami gambar, ucapan, efek suara, dan input multimodal lainnya
- Input multimodal gabungan: Mendukung kombinasi apa pun antara teks dengan gambar, audio, dan video dalam satu permintaan
- Input multimodal gabungan hanya didukung oleh seri Qwen3.5-Omni. Anda dapat menyertakan data dalam berbagai modalitas—seperti kombinasi gambar, audio, dan teks atau video, gambar, dan teks—dalam satu permintaan yang sama.
-
Seri Qwen3-Omni-Flash: Paling cocok untuk analisis video pendek dan skenario yang sensitif terhadap biaya.
- Batas input: Input audio dan video hingga 150 detik
- Mode berpikir: Satu-satunya model seri Qwen-Omni yang mendukung mode berpikir
- Modalitas input: Hanya mendukung kombinasi teks dengan satu modalitas lain (gambar, audio, atau video).
-
Seri Qwen-Omni-Turbo
Seri ini tidak lagi diperbarui dan memiliki fitur terbatas. Kami merekomendasikan migrasi ke seri Qwen3.5-Omni atau Qwen3-Omni-Flash.
| Seri | Deskripsi audio-video | Berpikir mendalam | Pencarian web | Bahasa input audio | Bahasa output audio | Suara yang didukung |
Qwen3.5-Omni Model omni-modal generasi terbaru | Kuat | Tidak didukung | Didukung | 113 74 bahasa dan 39 dialek Bahasa: Chinese, English, German, French, Italian, Czech, Indonesian, Thai, Korean, Polish, Japanese, Vietnamese, Finnish, Portuguese, Spanish, Dutch, Russian, Malay, Catalan, Swedish, Turkish, Ukrainian, Romanian, Slovak, Danish, Icelandic, Norwegian (Bokmål), Macedonian, Greek, Hungarian, Galician, Filipino, Croatian, Bosnian, Slovenian, Bulgarian, Kazakh, Belarusian, Latvian, Estonian, Azerbaijani, Uyghur, Swahili, Hindi, Esperanto, Kyrgyz, Tajik, Cebuano, Afrikaans, Arabic, Lithuanian, Javanese, Bengali, Persian, Hebrew, Punjabi, Gujarati, Mongolian, Asturian, Kannada, Marathi, Interlingua, Malayalam, Maltese, Norwegian Nynorsk, Telugu, Urdu, Georgian, Basque, Tamil, Odia, Serbian, Maori Dialek: | 36 29 bahasa dan 7 dialek Bahasa:Chinese, English, German, Italian, Portuguese, Spanish, Japanese, Korean, French, Russian, Thai, Indonesian, Arabic, Vietnamese, Turkish, Finnish, Polish, Hindi, Dutch, Czech, Urdu, Tagalog, Swedish, Danish, Hebrew, Icelandic, Malay, Norwegian, Persian Dialek:Sichuan dialect, Beijing dialect, Tianjin dialect, Nanjing dialect, Shaanxi dialect, Cantonese, Southern Min | 55 |
Qwen3-Omni-Flash Model berpikir hibrida | Lebih lemah | Didukung | Tidak didukung | 19 11 bahasa dan 8 dialek Bahasa: Chinese, English, German, French, Italian, Thai, Korean, Japanese, Russian, Spanish, Portuguese Dialek:Sichuan dialect, Shanghainese, Cantonese, Southern Min, Shaanxi dialect, Nanjing dialect, Tianjin dialect, Beijing dialect | 19 11 bahasa dan 8 dialek Bahasa: Chinese, English, German, French, Italian, Thai, Korean, Japanese, Russian, Spanish, Portuguese Dialek:Sichuanese, Shanghainese, Cantonese, Hokkien, Shaanxi dialect, Nanjing dialect, Tianjin dialect, Beijing dialect | 17 hingga 49
|
Qwen-Omni-Turbo Tidak lagi diperbarui | Tidak ada | Tidak didukung | Tidak didukung | Chinese, English | Chinese, English | 4 |
Untuk nama model, ukuran jendela konteks, harga, dan versi snapshot, periksa di Konsol Studio Model. Untuk batasan laju, lihat Pembatasan laju.
Kinerja model
Analisis konten audio dan video
| 00:00.000 – 00:02.500 Jalan kota yang basah oleh hujan memenuhi bingkai layar lebar. Fotografi eksposur panjang menciptakan garis-garis lampu mobil merah dan biru di atas trotoar basah. Seorang pria sendirian mengenakan mantel panjang gelap dan kemeja terang dengan dasi berjalan menuju kamera di sepanjang trotoar kanan. Tetesan hujan menempel di bahunya dan rambutnya. Setiap langkah menghasilkan suara "plop" yang diredam di atas beton basah. Dengungan elektronik rendah yang mengancam menyertai suara sekitar, sementara hujan yang stabil berderak di sekelilingnya. Grafiti berwarna-warni menutupi dinding bata di sampingnya, dan papan reklame neon bersinar di kejauhan—satu dengan jelas menampilkan tulisan miring oranye-merah bertuliskan "Nice", sedangkan papan vertikal lainnya menunjukkan huruf "AT" di bagian bawahnya. ...... 00:12.300 – 00:14.533Kamera dimiringkan ke bawah. Di dalam sorotan senter, selembar kertas tunggal yang menguning dan tua tergeletak di genangan dangkal, ujung-ujungnya hangus dan sudut-sudutnya melengkung. Paragraf-paragraf bertinta menutupi sebagian besar permukaannya, tetapi kelembapan dan bekas hangus membuat teksnya tidak terbaca. Pria itu berlutut, menjulurkan jari-jari yang mengenakan sarung tangan ke arah dokumen tersebut. Riak-riak menyebar ke luar saat tangannya mendekat. Suara sirene mencapai puncaknya lalu mulai sedikit mereda, sementara dengungan sekitar tetap stabil. Adegan membeku tepat sebelum kertas yang bergetar disentuh, mengakhiri klip.
|
Pemahaman multidialek
| Audio ini menampilkan pertunjukan rap oleh penyanyi dari berbagai wilayah Tiongkok, menampilkan keberagaman dialek yang kaya. Berikut adalah deskripsi detail tentang ciri vokal, keadaan emosional, dan lirik masing-masing penyanyi: Dialek Hangzhou (Wu)Ciri vokal:Suara penyanyi pria ini lembut dan halus, dengan kehalusan dan kehangatan khas dialek Wu. Intonasinya naik dan turun dengan lembut, dan ritmenya ringan dan cepat, menciptakan efek bercerita yang santai. Keadaan emosional:Santai, nyaman, dan penuh kehidupan sehari-hari. Ia menggambarkan gaya hidup Hangzhou yang lambat dan perubahan perkotaan, mengekspresikan kasih sayang terhadap kampung halamannya dan refleksi terhadap perkembangan modern. Secara keseluruhan, ia merasa nyaman dan akrab. Lirik:> Dialek Hangzhou, dengarkan baik-baik! Budaya kami termasuk pelafalan lokal erhua. > Seperti bunga yang mekar di Danau Barat, tidak perlu survei budaya—kami memahaminya paling baik. > Tidak seorang pun dari kalian memahami. 'San bu da men', 'ge'r', 'lao'r', 'fen'r', 'ya'r'... bagaimana orang luar bisa membedakan semua ini? > Ayo pergi! Transportasi cepat—kereta bawah tanah ada di mana-mana. Kita akan memeriksanya. > Menyambut Asia Tenggara dan Thailand, menonton acara "Thirteen Ta". Bangga dengan kota kami, langsung dalam kepribadian. > Jadi kamu hanya datang untuk pengalaman "menyeberangi jembatan", dan karena rasanya berbeda, kamu tidak kembali?
|
Pembuatan keterangan lirik
| [00:00:12,680 --> 00:00:16,960] Benang kucing bergoyang melewati cahaya bulan di pepohonan. [00:00:18,400 --> 00:00:22,800] Radiator mendengung lagu-lagu populer tahun 1998. [00:00:24.160 → 00:00:28.080] Waktu memisahkan gelombang panas seperti kabut. [00:00:28,920 --> 00:00:33,000] Neon dari layar bersinar di pangkal hidungku. ...... [00:03:16,720 --> 00:03:21,680] Kami bersarang di cincin paling lembut dari batang pohon. [00:03:22,400 --> 00:03:27,000] Pernapasan mengubah kehangatan sisa menjadi madu-gula. [00:03:28,160 --> 00:03:33,200] Sofa tenggelam ke bentuk awan-lembut. [00:03:34,000 --> 00:03:38,800] Setiap pori menyerap sinar matahari. [00:04:09,000 --> 00:04:10,020] (Akhir)
|
Pemrograman audio-video
Penggunaan
Keluaran streaming
Semua permintaan ke Qwen-Omni harus mengatur stream=True.
Konfigurasi model
Konfigurasikan parameter, prompt, dan durasi media untuk menyeimbangkan biaya, kecepatan, dan kualitas.
Pemahaman audio-video
| Kasus penggunaan | Durasi video yang direkomendasikan | Prompt yang direkomendasikan | max_pixels maksimum yang direkomendasikan |
Tinjauan cepat, biaya rendah | ≤60 menit | Prompt sederhana dalam 50 kata | 230.400 |
Ekstraksi konten (segmentasi video panjang) | ≤60 menit | 921.600~2.073.600 | |
Analisis standar (penandaan video pendek) | ≤4 menit | Gunakan prompt terstruktur di bawah ini Prompt yang direkomendasikan | 921.600~2.073.600 |
Analisis detail halus (beberapa pembicara/scene kompleks) | ≤2 menit | 2.073.600 |
CatatanAnda dapat melakukan segmentasi video panjang terlebih dahulu untuk mendapatkan deskripsi detail halus.
Pemahaman audio
Anda dapat menyeimbangkan biaya dan kualitas dengan mengontrol durasi audio dan kompleksitas prompt.
| Kasus penggunaan | Durasi audio yang direkomendasikan | Prompt yang direkomendasikan |
Tinjauan cepat, biaya rendah | ≤60 menit | Prompt sederhana dalam 50 kata |
Ekstraksi konten (segmentasi audio panjang) | ≤60 menit | |
Analisis standar (penandaan audio) | ≤2 menit | Gunakan prompt terstruktur Prompt terstruktur |
Analisis detail halus (beberapa pembicara/scene kompleks) | ≤1 menit |
CatatanAnda dapat melakukan segmentasi audio panjang terlebih dahulu untuk mendapatkan deskripsi detail halus.
Input multimodal gabungan
CatatanInput multimodal gabungan hanya didukung oleh seri Qwen3.5-Omni. Anda dapat memberikan data dalam beberapa modalitas, seperti kombinasi apa pun antara gambar, audio, dan teks, atau video, gambar, dan teks, dalam satu permintaan yang sama.
Contoh berikut menunjukkan cara memberikan gambar dan audio dalam satu permintaan untuk analisis multimodal.
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"),
base_url="https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
model="qwen3.5-omni-plus",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
},
},
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
"format": "wav"
},
},
{"type": "text", "text": "Describe the image content and tell me what the audio is about."},
],
},
],
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus",
messages: [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": { "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg" },
},
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
"format": "wav"
},
},
{ "type": "text", "text": "Describe the image content and tell me what the audio is about." }
]
}
],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
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.5-omni-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
}
},
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
"format": "wav"
}
},
{
"type": "text",
"text": "Describe the image content and tell me what the audio is about."
}
]
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"modalities": ["text", "audio"],
"audio": {"voice": "Tina", "format": "wav"}
}'
Input modalitas tunggal
Setiap permintaan berisi teks dan satu modalitas lain (video, audio, atau gambar). Semua model Qwen-Omni mendukung ini.
Input video dan teks
Berikan video sebagai daftar gambar atau file video (dengan dukungan audio).
File video (mendukung audio dalam video)
-
Jumlah file:
- Seri Qwen3.5-Omni: Hingga 512 file menggunakan URL publik dan hingga 250 file menggunakan encoding Base64.
- Seri Qwen3-Omni-Flash dan Qwen-Omni-Turbo: Hanya satu file yang diizinkan.
-
Ukuran file:
-
Menggunakan URL publik:
- Seri Qwen3.5-Omni: Hingga 2 GB
- Qwen3-Omni-Flash: Hingga 256 MB
- Qwen-Omni-Turbo: Hingga 150 MB
-
Menggunakan encoding Base64: String Base64 yang dikodekan harus lebih kecil dari 10 MB
-
-
Batas durasi:
- Seri Qwen3.5-Omni: 1 jam
- Qwen3-Omni-Flash: 150 detik
- Qwen-Omni-Turbo: 40 detik
-
Format file: MP4, AVI, MKV, MOV, FLV, dan WMV.
-
Informasi visual dan audio dalam file video ditagih secara terpisah.
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
},
},
{"type": "text", "text": "What is the video about?"},
],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": [{
"type": "video_url",
"video_url": { "url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4" },
},
{ "type": "text", "text": "What is the video about?" }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241115/cqqkru/1.mp4"
}
},
{
"type": "text",
"text": "What is the video about"
}
]
}
],
"stream":true,
"stream_options": {
"include_usage": true
},
"modalities":["text","audio"],
"audio":{"voice":"Tina","format":"wav"}
}'
Format daftar gambar
Jumlah gambar- Seri Qwen3.5-Omni: Minimal 2 gambar dan maksimal 2048 gambar
- Qwen3-Omni-Flash: Minimal 2 gambar dan maksimal 128 gambar
- Qwen-Omni-Turbo: Minimal 4 gambar dan maksimal 80 gambar
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "video",
"video": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg",
],
},
{"type": "text", "text": "Describe the process shown in this video"},
],
}
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [{
role: "user",
content: [
{
type: "video",
video: [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
]
},
{
type: "text",
text: "Describe the process shown in this video"
}
]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "video",
"video": [
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/xzsgiz/football1.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/tdescd/football2.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/zefdja/football3.jpg",
"https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/aedbqh/football4.jpg"
]
},
{
"type": "text",
"text": "Describe the process shown in this video"
}
]
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"modalities": ["text", "audio"],
"audio": {
"voice": "Tina",
"format": "wav"
}
}'
Input audio dan teks
-
Jumlah file:
- Seri Qwen3.5-Omni: Hingga 2048 file menggunakan URL publik dan hingga 250 file menggunakan encoding Base64.
- Seri Qwen3-Omni-Flash dan Qwen-Omni-Turbo: Hanya satu file yang diizinkan.
-
Ukuran file:
-
Menggunakan URL publik:
- Seri Qwen3.5-Omni: Hingga 2 GB
- Qwen3-Omni-Flash: Hingga 100 MB
- Qwen-Omni-Turbo: Hingga 10 MB
-
Menggunakan encoding Base64: String Base64 yang dikodekan harus lebih kecil dari 10 MB
-
-
Batas durasi:
- Seri Qwen3.5-Omni: Hingga 3 jam
- Qwen3-Omni-Flash: Hingga 20 menit
- Qwen-Omni-Turbo: Hingga 3 menit
-
Format file: AMR, WAV, 3GP, 3GPP, AAC, dan MP3.
Contoh ini menggunakan URL audio publik. Untuk menggunakan file lokal, lihat Kirim file lokal dengan encoding Base64. Hanya keluaran streaming yang didukung untuk pemanggilan ini.
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",# Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
"format": "wav",
},
},
{"type": "text", "text": "What is this audio about"},
],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": { "data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav", "format": "wav" },
},
{ "type": "text", "text": "What is this audio about" }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250211/tixcef/cherry.wav",
"format": "wav"
}
},
{
"type": "text",
"text": "What is this audio about"
}
]
}
],
"stream":true,
"stream_options":{
"include_usage":true
},
"modalities":["text","audio"],
"audio":{"voice":"Tina","format":"wav"}
}'
Input gambar dan teks
Model Qwen-Omni mendukung beberapa gambar per permintaan. Persyaratan gambar:
-
Jumlah gambar:
- Menggunakan URL publik: Hingga 2048 gambar
- Menggunakan encoding Base64: Hingga 250 gambar
-
Ukuran gambar:
-
Menggunakan URL publik:
- Seri Qwen3.5-Omni: Setiap file gambar tidak boleh melebihi 20 MB
- Seri Qwen3-Omni-Flash dan Qwen-Omni-Turbo: Setiap file gambar tidak boleh melebihi 10 MB
-
Menggunakan encoding Base64: String Base64 yang dikodekan harus lebih kecil dari 10 MB.
-
-
Lebar dan tinggi harus melebihi 10 piksel. Rasio aspek tidak boleh melebihi 200:1 atau 1:200.
-
Jenis gambar yang didukung: Lihat Pemahaman gambar dan video.
Contoh ini menggunakan URL gambar publik. Untuk menggunakan file lokal, lihat File lokal yang dikodekan Base64. Keluaran streaming wajib digunakan.
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
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": "What scene is depicted in the image?"},
],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={
"include_usage": True
}
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
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": "What scene is depicted in the image?" }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241022/emyrja/dog_and_girl.jpeg"
}
},
{
"type": "text",
"text": "What scene is depicted in the image?"
}
]
}
],
"stream":true,
"stream_options":{
"include_usage":true
},
"modalities":["text","audio"],
"audio":{"voice":"Tina","format":"wav"}
}'
Pencarian web
Seri Qwen3.5-Omni mendukung pencarian web untuk mengambil informasi real-time dan melakukan penalaran.
- Pencarian web hanya didukung dalam seri Qwen3.5-Omni. Parameter
search_strategyhanya menerimaagent. - Untuk penagihan, lihat kebijakan
agentdi Penagihan.
Untuk mengaktifkan pencarian web, atur enable_search dan search_strategy ke agent:
Kompatibel dengan OpenAI
# Prasyarat:
# pip install openai
import os
from openai import OpenAI
# Inisialisasi client
client = OpenAI(
# Kunci API berbeda antara wilayah Singapura dan Beijing. Dapatkan Kunci API:https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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",
)
# Kirim permintaan (dengan pencarian web diaktifkan)
try:
completion = client.chat.completions.create(
model="qwen3.5-omni-plus",
messages=[{
"role": "user",
"content": "What is today's date and day of the week, and what important holidays are there today?"
}],
stream=True,
stream_options={"include_usage": True},
# Aktifkan pencarian web
extra_body={
"enable_search": True
}
)
print("Model response (with real-time information):")
for chunk in completion:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="")
print()
except Exception as e:
print(f"Request failed:{e}")
// Prasyarat:
// npm install openai
import OpenAI from "openai";
// Inisialisasi client
const openai = new OpenAI({
// Kunci API berbeda antara wilayah Singapura dan Beijing. Dapatkan Kunci API:https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
baseURL: "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"
});
// Kirim permintaan (dengan pencarian web diaktifkan)
const completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus",
messages: [{
"role": "user",
"content": "What is today's date and day of the week, and what important holidays are there today?"
}],
stream: true,
stream_options: {
include_usage: true
},
// Aktifkan pencarian web
extra_body: {
enable_search: true
}
});
console.log("Model response (with real-time information):");
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
if (chunk.choices[0].delta.content) {
process.stdout.write(chunk.choices[0].delta.content);
}
}
}
console.log();
# ======= Penting =======
# Kunci API berbeda antara wilayah Singapura dan Beijing. Dapatkan Kunci API:https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
# === Hapus komentar ini sebelum menjalankan ===
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.5-omni-plus",
"messages": [
{
"role": "user",
"content": "What is today's date and day of the week, and what important holidays are there today?"
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"enable_search": true
}'
Aktifkan/nonaktifkan mode berpikir
Dalam seri Qwen-Omni, hanya model Qwen3-Omni-Flash yang merupakan model berpikir hibrida. Anda dapat menggunakan parameter enable_thinking untuk mengaktifkan atau menonaktifkan mode berpikir:
truefalse(default)
Dalam mode berpikir, output audio tidak didukung.
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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-omni-flash",
messages=[{"role": "user", "content": "Who are you?"}],
# Aktifkan atau nonaktifkan mode berpikir. Output audio tidak didukung dalam mode berpikir. Qwen-Omni-Turbo tidak mendukung enable_thinking.
extra_body={'enable_thinking': True},
# Atur modalitas output. Dua opsi yang didukung dalam mode non-thinking: ["text","audio"] dan ["text"]. Hanya ["text"] yang didukung dalam mode berpikir.
modalities=["text"],
# Atur suara. Parameter audio tidak didukung dalam mode berpikir.
# audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3-omni-flash",
messages: [
{ role: "user", content: "Who are you?" }
],
// stream harus diatur ke True, jika tidak akan terjadi error.
stream: true,
stream_options: {
include_usage: true
},
// Aktifkan atau nonaktifkan mode berpikir. Output audio tidak didukung dalam mode berpikir. Qwen-Omni-Turbo tidak mendukung enable_thinking.
extra_body:{'enable_thinking': true},
// Atur modalitas output. Dua opsi yang didukung dalam mode non-thinking: ["text","audio"] dan ["text"]. Hanya ["text"] yang didukung dalam mode berpikir.
modalities: ["text"],
// Atur suara. Parameter audio tidak didukung dalam mode berpikir.
//audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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-omni-flash",
"messages": [
{
"role": "user",
"content": "Who are you?"
}
],
"stream":true,
"stream_options":{
"include_usage":true
},
"modalities":["text"],
"enable_thinking": true
}'
Respons
data: {"choices":[{"delta":{"content":null,"role":"assistant","reasoning_content":""},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":null,"reasoning_content":"Hmm"},"index":0}],"object":"chat.completion.chunk","usage":null,"reated":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"delta":{"content":null,"reasoning_content":","},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"reated":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
......
data: {"choices":[{"delta":{"content":"Tell me"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"tem_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"delta":{"content":"!"},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"systm_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":11,"completion_tokens":363,"total_tokens":374,"completion_tokens_details":{"reasoning_tokens":195,"text_tokens":168},"prompt_tokens_details":{"text_tokens":11}},"created":1757937336,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-ce3d6fe5-e717-4b7e-8b40-3aef12288d4c"}
Percakapan multi-putaran
Saat menggunakan model Qwen-Omni untuk percakapan multi-putaran, perhatikan hal berikut:
-
Pesan Asisten
Pesan asisten dalam array pesan hanya dapat berisi data teks.
-
Pesan Pengguna
Pesan pengguna dapat berisi teks dan satu modalitas lain. Dalam percakapan multi-putaran, Anda dapat memasukkan modalitas berbeda dalam pesan pengguna yang berbeda.
Kompatibel dengan OpenAI
import os
from openai import OpenAI
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3",
"format": "mp3",
},
},
{"type": "text", "text": "What is this audio about"},
],
},
{
"role": "assistant",
"content": [{"type": "text", "text": "This audio says: Welcome to Alibaba Cloud"}],
},
{
"role": "user",
"content": [{"type": "text", "text": "Tell me about this company."}],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text"],
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3",
"format": "mp3",
},
},
{ "type": "text", "text": "What is this audio about" },
],
},
{
"role": "assistant",
"content": [{ "type": "text", "text": "This audio says: Welcome to Alibaba Cloud" }],
},
{
"role": "user",
"content": [{ "type": "text", "text": "Tell me about this company." }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text"]
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
# ======= Catatan penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://dashscope.oss-cn-beijing.aliyuncs.com/audios/welcome.mp3"
}
},
{
"type": "text",
"text": "What is this audio about"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "This audio says: Welcome to Alibaba Cloud"
}
]
},
{
"role": "user",
"content": [
{
"type": "text",
"text": "Tell me about this company."
}
]
}
],
"stream": true,
"stream_options": {
"include_usage": true
},
"modalities": ["text"]
}'
Mengurai data audio yang dikodekan Base64
Model Qwen-Omni menghasilkan audio sebagai data streaming yang dikodekan Base64. Selama generasi, pertahankan variabel string dan tambahkan data Base64 dari setiap potongan yang dikembalikan. Setelah generasi selesai, dekode Base64 dari string lengkap untuk mendapatkan file audio. Atau, dekode dan putar setiap potongan secara real time.
# Instruksi instalasi untuk pyaudio:
# APPLE Mac OS X
# brew install portaudio
# pip install pyaudio
# Debian/Ubuntu
# sudo apt-get install python-pyaudio python3-pyaudio
# atau
# pip install pyaudio
# CentOS
# sudo yum install -y portaudio portaudio-devel && pip install pyaudio
# Microsoft Windows
# python -m pip install pyaudio
import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[{"role": "user", "content": "Who are you?"}],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
# Metode 1: Dekode setelah generasi selesai
audio_string = ""
for chunk in completion:
if chunk.choices:
if hasattr(chunk.choices[0].delta, "audio"):
try:
audio_string += chunk.choices[0].delta.audio["data"]
except Exception as e:
print(chunk.choices[0].delta.content)
else:
print(chunk.usage)
wav_bytes = base64.b64decode(audio_string)
audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
sf.write("audio_assistant_py.wav", audio_np, samplerate=24000)
# Metode 2: Dekode saat generasi berlangsung (komentari kode Metode 1 untuk menggunakan Metode 2)
# # Inisialisasi PyAudio
# import pyaudio
# import time
# p = pyaudio.PyAudio()
# # Buat aliran audio
# stream = p.open(format=pyaudio.paInt16,
# channels=1,
# rate=24000,
# output=True)
# for chunk in completion:
# if chunk.choices:
# if hasattr(chunk.choices[0].delta, "audio"):
# try:
# audio_string = chunk.choices[0].delta.audio["data"]
# wav_bytes = base64.b64decode(audio_string)
# audio_np = np.frombuffer(wav_bytes, dtype=np.int16)
# # Putar data audio secara langsung
# stream.write(audio_np.tobytes())
# except Exception as e:
# print(chunk.choices[0].delta.content)
# time.sleep(0.8)
# # Bersihkan sumber daya
# stream.stop_stream()
# stream.close()
# p.terminate()
// Sebelum menjalankan:
// Untuk Windows/Mac/Linux:
// 1. Pastikan versi Node.js >= 14 telah diinstal.
// 2. Jalankan perintah berikut untuk menginstal dependensi yang diperlukan:
// npm install openai wav
//
// Untuk menggunakan fitur pemutaran real time (Metode 2), Anda juga perlu:
// Windows:
// npm install speaker
// Mac:
// brew install portaudio
// npm install speaker
// Linux (Ubuntu/Debian):
// sudo apt-get install libasound2-dev
// npm install speaker
import OpenAI from "openai";
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": "Who are you?"
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
// Metode 1: Dekode setelah generasi selesai
// Memerlukan instalasi: npm install wav
import { createWriteStream } from 'node:fs'; // node:fs adalah modul bawaan Node.js, tidak perlu instalasi
import { Writer } from 'wav';
async function convertAudio(audioString, audioPath) {
try {
// Dekode string Base64 menjadi Buffer
const wavBuffer = Buffer.from(audioString, 'base64');
// Buat aliran penulisan file WAV
const writer = new Writer({
sampleRate: 24000, // Laju sampel
channels: 1, // Mono
bitDepth: 16 // Kedalaman 16-bit
});
// Buat aliran output file dan buat koneksi pipe
const outputStream = createWriteStream(audioPath);
writer.pipe(outputStream);
// Tulis data PCM dan akhiri penulisan
writer.write(wavBuffer);
writer.end();
// Gunakan Promise untuk menunggu penulisan file selesai
await new Promise((resolve, reject) => {
outputStream.on('finish', resolve);
outputStream.on('error', reject);
});
// Tambahkan waktu tunggu ekstra untuk memastikan integritas audio
await new Promise(resolve => setTimeout(resolve, 800));
console.log(`Audio file successfully saved as ${audioPath}`);
} catch (error) {
console.error('An error occurred during processing:', error);
}
}
let audioString = "";
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
if (chunk.choices[0].delta.audio) {
if (chunk.choices[0].delta.audio["data"]) {
audioString += chunk.choices[0].delta.audio["data"];
}
}
} else {
console.log(chunk.usage);
}
}
// Eksekusi konversi
convertAudio(audioString, "audio_assistant_mjs.wav");
// Metode 2: Hasilkan dan putar secara real time
// Instal komponen yang diperlukan sesuai instruksi sistem Anda di atas.
// import Speaker from 'speaker'; // Impor library pemutaran audio
// // Buat instance speaker (konfigurasi sesuai parameter file WAV)
// const speaker = new Speaker({
// sampleRate: 24000, // Laju sampel
// channels: 1, // Jumlah saluran suara
// bitDepth: 16, // Kedalaman bit
// signed: true // PCM bertanda
// });
// for await (const chunk of completion) {
// if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
// if (chunk.choices[0].delta.audio) {
// if (chunk.choices[0].delta.audio["data"]) {
// const pcmBuffer = Buffer.from(chunk.choices[0].delta.audio.data, 'base64');
// // Tulis langsung ke speaker untuk pemutaran
// speaker.write(pcmBuffer);
// }
// }
// } else {
// console.log(chunk.usage);
// }
// }
// speaker.on('finish', () => console.log('Playback complete'));
// speaker.end(); // Panggil berdasarkan akhir sebenarnya dari aliran API
Input file lokal terenkode Base64
Saat menggunakan encoding Base64 untuk mengirim file, string Base64 yang dikodekan harus lebih kecil dari 10 MB.
Gambar
Contoh ini menggunakan file yang disimpan lokal eagle.png.
import os
from openai import OpenAI
import base64
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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",
)
# Format encoding Base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image = encode_image("eagle.png")
completion = client.chat.completions.create(
model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {"url": f"data:image/png;base64,{base64_image}"},
},
{"type": "text", "text": "What scene is depicted in the image?"},
],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 base64Image = encodeImage("eagle.png")
const completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus",// Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": [{
"type": "image_url",
"image_url": { "url": `data:image/png;base64,${base64Image}` },
},
{ "type": "text", "text": "What scene is depicted in the image?" }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
Audio
Contoh ini menggunakan file yang disimpan lokal welcome.mp3.
import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf
import requests
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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",
)
def encode_audio(audio_path):
with open(audio_path, "rb") as audio_file:
return base64.b64encode(audio_file.read()).decode("utf-8")
base64_audio = encode_audio("welcome.mp3")
completion = client.chat.completions.create(
model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": f"data:;base64,{base64_audio}",
"format": "mp3",
},
},
{"type": "text", "text": "What is this audio about"},
],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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 encodeAudio = (audioPath) => {
const audioFile = readFileSync(audioPath);
return audioFile.toString('base64');
};
const base64Audio = encodeAudio("welcome.mp3")
const completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": { "data": `data:;base64,${base64Audio}`, "format": "mp3" },
},
{ "type": "text", "text": "What is this audio about" }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
Video
File video
Contoh ini menggunakan file yang disimpan lokal spring_mountain.mp4.
import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, 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",
)
# Format encoding Base64
def encode_video(video_path):
with open(video_path, "rb") as video_file:
return base64.b64encode(video_file.read()).decode("utf-8")
base64_video = encode_video("spring_mountain.mp4")
completion = client.chat.completions.create(
model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {"url": f"data:;base64,{base64_video}"},
},
{"type": "text", "text": "What is she singing?"},
],
},
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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');
};
const base64Video = encodeVideo("spring_mountain.mp4")
const completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [
{
"role": "user",
"content": [{
"type": "video_url",
"video_url": { "url": `data:;base64,${base64Video}` },
},
{ "type": "text", "text": "What is she singing?" }]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
Daftar gambar
Sebagai contoh, pertimbangkan file yang disimpan lokal football1.jpg, football2.jpg, football3.jpg, dan football4.jpg.
import os
from openai import OpenAI
import base64
import numpy as np
import soundfile as sf
client = OpenAI(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
api_key=os.getenv("DASHSCOPE_API_KEY"),
# URL berikut untuk wilayah Singapura. Saat memanggil, ganti {WorkspaceId} dengan ID ruang kerja aktual Anda. URL bervariasi berdasarkan wilayah.
)
# Format encoding Base64
def encode_image(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
base64_image_1 = encode_image("football1.jpg")
base64_image_2 = encode_image("football2.jpg")
base64_image_3 = encode_image("football3.jpg")
base64_image_4 = encode_image("football4.jpg")
completion = client.chat.completions.create(
model="qwen3.5-omni-plus", # Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages=[
{
"role": "user",
"content": [
{
"type": "video",
"video": [
f"data:image/jpeg;base64,{base64_image_1}",
f"data:image/jpeg;base64,{base64_image_2}",
f"data:image/jpeg;base64,{base64_image_3}",
f"data:image/jpeg;base64,{base64_image_4}",
],
},
{"type": "text", "text": "Describe the process shown in this video"},
],
}
],
# Atur modalitas output. Dua opsi yang didukung saat ini: ["text","audio"] dan ["text"]
modalities=["text", "audio"],
audio={"voice": "Tina", "format": "wav"},
# stream harus diatur ke True, jika tidak akan terjadi error.
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
if chunk.choices:
print(chunk.choices[0].delta)
else:
print(chunk.usage)
import OpenAI from "openai";
import { readFileSync } from 'fs';
const openai = new OpenAI(
{
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Dapatkan Kunci API: https://www.alibabacloud.com/help/en/model-studio/get-api-key
apiKey: process.env.DASHSCOPE_API_KEY,
// URL berikut untuk wilayah Singapura. Saat memanggil, 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")
const completion = await openai.chat.completions.create({
model: "qwen3.5-omni-plus", // Untuk Qwen3-Omni-Flash, jalankan dalam mode non-thinking.
messages: [{
role: "user",
content: [
{
type: "video",
video: [
`data:image/jpeg;base64,${base64Image1}`,
`data:image/jpeg;base64,${base64Image2}`,
`data:image/jpeg;base64,${base64Image3}`,
`data:image/jpeg;base64,${base64Image4}`
]
},
{
type: "text",
text: "Describe the process shown in this video"
}
]
}],
stream: true,
stream_options: {
include_usage: true
},
modalities: ["text", "audio"],
audio: { voice: "Tina", format: "wav" }
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta);
} else {
console.log(chunk.usage);
}
}
Referensi API
Untuk parameter input dan output, lihat Kompatibel dengan OpenAI - Chat.
Penagihan dan batasan laju
Aturan penagihanQwen-Omni ditagih berdasarkan token yang dikonsumsi di berbagai modalitas (audio, gambar, dan video). Periksa detail penagihan di konsol.
Aturan konversi token untuk audio, gambar, dan video
Audio
-
Seri Qwen3.5-Omni:- Rumus audio input:
Total token = Durasi audio (detik) × 7 - Rumus audio output:
Total token = Durasi audio (detik) × 12,5
- Rumus audio input:
-
Qwen3-Omni-Flash: Untuk audio input dan output,Total token = Durasi audio (detik) × 12,5 -
Qwen-Omni-Turbo: Untuk audio input dan output,Total token = Durasi audio (detik) × 25
Jika durasi audio kurang dari 1 detik, dihitung sebagai 1 detik.
Gambar
Seri Qwen3.5-OmnidanQwen3-Omni-Flash1 token per32×32pikselModel Qwen-Omni-Turbo: 1 token per28×28piksel
Untuk seri Qwen3.5-Omni, setiap gambar memerlukan minimal 24 token; untuk model lain, minimal 4 token. Maksimum default adalah 1280 token. Seri Qwen3.5-Omni mendukung parameter vl_high_resolution_images untuk meningkatkan maksimum menjadi 16384 token (Qwen-Omni-Turbo dan Qwen3-Omni-Flash tidak mendukung parameter ini). Gunakan kode berikut untuk memperkirakan jumlah token untuk satu gambar:
import math
from PIL import Image # pip install Pillow
# ============ Konfigurasi model (modifikasi sesuai kebutuhan) ============
# Faktor gambar: 32 untuk seri Qwen3.5-Omni dan Qwen3-Omni-Flash; 28 untuk Qwen-Omni-Turbo
IMAGE_FACTOR = 32
# Token minimum: 24 untuk seri Qwen3.5-Omni; 4 untuk Qwen-Omni-Turbo dan Qwen3-Omni-Flash
MIN_TOKENS = 24
# Mode resolusi tinggi (hanya untuk seri Qwen3.5-Omni; tidak didukung oleh Qwen-Omni-Turbo atau Qwen3-Omni-Flash)
# True → token maksimum = 16384
# False → token maksimum = 1280 (default)
VL_HIGH_RESOLUTION_IMAGES = False
# ============ Rentang piksel (dihitung otomatis dari atas) ============
MIN_PIXELS = MIN_TOKENS * IMAGE_FACTOR * IMAGE_FACTOR
MAX_PIXELS = (16384 if VL_HIGH_RESOLUTION_IMAGES else 1280) * IMAGE_FACTOR * IMAGE_FACTOR
def smart_resize(height, width, factor=IMAGE_FACTOR,
min_pixels=MIN_PIXELS, max_pixels=MAX_PIXELS):
"""Sejajarkan dimensi gambar ke kelipatan faktor dan skala ke [min_pixels, max_pixels]."""
h_bar = max(factor, round(height / factor) * factor)
w_bar = max(factor, round(width / factor) * factor)
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__":
image = Image.open("xxx/test.jpg")
print(f"Ukuran asli: {image.width}x{image.height}")
resized_h, resized_w = smart_resize(image.height, image.width)
token = int(resized_h * resized_w / (IMAGE_FACTOR * IMAGE_FACTOR)) + 2
print(f"Diubah ukuran: {resized_w}x{resized_h}, token: {token}")
Video
Token untuk file video dibagi menjadi video_tokens dan audio_tokens.
-
video_tokensPerhitungannya kompleks. Lihat kode berikut:
# pip install opencv-python
import math
import cv2
# ============ Konfigurasi model (modifikasi sesuai kebutuhan) ============
# Faktor gambar: 32 untuk seri Qwen3.5-Omni dan Qwen3-Omni-Flash; 28 untuk Qwen-Omni-Turbo
IMAGE_FACTOR = 32
FRAME_FACTOR = 2
FPS = 2
MAX_RATIO = 200
# Piksel minimum per frame video
VIDEO_MIN_PIXELS = 64 * IMAGE_FACTOR * IMAGE_FACTOR
# Piksel maksimum per frame video
# Seri Qwen3.5-Omni: 640 * 32 * 32
# Qwen3-Omni-Flash: 768 * 32 * 32
# Qwen-Omni-Turbo: 768 * 28 * 28
VIDEO_MAX_PIXELS = 640 * IMAGE_FACTOR * IMAGE_FACTOR
# Frame minimum yang diekstraksi: 2 untuk seri Qwen3.5-Omni dan Qwen3-Omni-Flash; 4 untuk Qwen-Omni-Turbo
FPS_MIN_FRAMES = 2
# Frame maksimum yang diekstraksi: 2048 untuk seri Qwen3.5-Omni; 128 untuk Qwen3-Omni-Flash; 80 untuk Qwen-Omni-Turbo
FPS_MAX_FRAMES = 2048
# Total piksel maksimum untuk input video
# Seri Qwen3.5-Omni: 180224 * 32 * 32
# Qwen3-Omni-Flash: 16384 * 32 * 32
# Qwen-Omni-Turbo: 16384 * 28 * 28
VIDEO_TOTAL_PIXELS = 180224 * IMAGE_FACTOR * IMAGE_FACTOR
# ============ Fungsi inti ============
def get_video_info(video_path):
"""Baca info dasar video: tinggi, lebar, total frame, fps."""
cap = cv2.VideoCapture(video_path)
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
fps = cap.get(cv2.CAP_PROP_FPS)
cap.release()
return height, width, total_frames, fps
def smart_nframes(total_frames, video_fps):
"""Hitung jumlah frame yang akan diekstraksi berdasarkan durasi video dan fps."""
min_frames = math.ceil(FPS_MIN_FRAMES / FRAME_FACTOR) * FRAME_FACTOR
max_frames = min(FPS_MAX_FRAMES, total_frames) // FRAME_FACTOR * FRAME_FACTOR
duration = total_frames / video_fps if video_fps 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
nframes = int(min(max(nframes, min_frames), max_frames, total_frames))
if not (FRAME_FACTOR <= nframes <= total_frames):
raise ValueError(f"nframes should in [{FRAME_FACTOR}, {total_frames}], got {nframes}")
return nframes
def smart_resize(height, width, nframes, factor=IMAGE_FACTOR):
"""Skala frame video ke rentang piksel yang wajar, sejajarkan ke kelipatan faktor."""
max_pixels = max(
min(VIDEO_MAX_PIXELS, VIDEO_TOTAL_PIXELS / nframes * FRAME_FACTOR),
int(VIDEO_MIN_PIXELS * 1.05)
)
if max(height, width) / min(height, width) > MAX_RATIO:
raise ValueError(f"aspect ratio exceeds {MAX_RATIO}")
h_bar = max(factor, round(height / factor) * factor)
w_bar = max(factor, round(width / factor) * factor)
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 < VIDEO_MIN_PIXELS:
beta = math.sqrt(VIDEO_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
# ============ Hitung token ============
if __name__ == "__main__":
video_path = "spring_mountain.mp4"
height, width, total_frames, video_fps = get_video_info(video_path)
print(f"Info video: {width}x{height}, {total_frames} frame, {video_fps:.1f} fps")
nframes = smart_nframes(total_frames, video_fps)
resized_h, resized_w = smart_resize(height, width, nframes)
video_tokens = int(
math.ceil(nframes / FPS) * resized_h / IMAGE_FACTOR * resized_w / IMAGE_FACTOR
) + 2
print(f"Frame yang diekstraksi: {nframes}, diubah ukuran: {resized_w}x{resized_h}, video_tokens: {video_tokens}")
-
audio_tokens-
Seri Qwen3.5-Omni:- Audio input:
Total token = Durasi audio (detik) × 7 - Audio output:
Total token = Durasi audio (detik) × 12,5
- Audio input:
-
Qwen3-Omni-Flash: Untuk audio input dan output,Total token = Durasi audio (detik) × 12,5 -
Qwen-Omni-Turbo: Untuk audio input dan output,Total token = Durasi audio (detik) × 25
Audio dengan durasi kurang dari 1 detik dihitung sebagai 1 detik.
-
Untuk mengklaim, menanyakan, atau menggunakan kuota gratis Anda, lihat Kuota gratis untuk pengguna baru.
Batasan lajuUntuk aturan pembatasan laju dan FAQ, lihat Pembatasan laju.
Kode error
Jika pemanggilan model gagal dan mengembalikan pesan error, lihat Kode error untuk resolusi.
Daftar suara
Untuk daftar suara model Qwen-Omni, lihat Daftar suara.