全部产品
Search
文档中心

Alibaba Cloud Model Studio:Omni-modal (Qwen-Omni)

更新时间:Nov 20, 2025

Model Qwen-Omni menerima kombinasi teks dan satu modalitas lainnya—seperti citra, audio, atau video—sebagai masukan, serta menghasilkan tanggapan dalam bentuk teks atau ucapan. Model ini menyediakan berbagai suara alami dan mendukung keluaran ucapan dalam berbagai bahasa dan dialek. Anda dapat menggunakannya untuk berbagai skenario, seperti pembuatan teks, pengenalan visual, dan asisten suara.

Mulai

Prasyarat

Metode pemanggilan: Qwen-Omni saat ini hanya mendukung keluaran streaming. Parameter stream harus diatur ke True. Jika tidak, terjadi kesalahan.

Contoh berikut menunjukkan cara mengirim teks ke API Qwen-Omni dan menerima tanggapan streaming yang berisi teks dan audio.

import os
import base64
import soundfile as sf
import numpy as np
from openai import OpenAI

# 1. Inisialisasi klien
client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # Pastikan variabel lingkungan telah dikonfigurasi
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

# 2. Mulai permintaan
try:
    completion = client.chat.completions.create(
        model="qwen3-omni-flash",
        messages=[{"role": "user", "content": "Who are you"}],
        modalities=["text", "audio"],  # Tentukan keluaran teks dan audio
        audio={"voice": "Cherry", "format": "wav"},
        stream=True,  # Harus diatur ke True
        stream_options={"include_usage": True},
    )

    # 3. Proses tanggapan 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}")
// Persiapan sebelum menjalankan:
// Berlaku universal untuk Windows/Mac/Linux:
// 1. Pastikan Node.js telah diinstal (disarankan versi >= 14)
// 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 konversi audio: konversi string Base64 dan simpan 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,        // Saluran tunggal
            bitDepth: 16        // Kedalaman 16-bit
        });
        // Buat aliran keluaran file dan buat koneksi pipeline
        const outputStream = createWriteStream(audioPath);
        writer.pipe(outputStream);

        // Tulis data PCM dan akhiri penulisan
        writer.write(wavBuffer);
        writer.end();

        // Gunakan Promise untuk menunggu file selesai ditulis
        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 successfully saved as ${audioPath}`);
    } catch (error) {
        console.error('An error occurred during processing:', error);
    }
}

//  1. Inisialisasi klien
const openai = new OpenAI(
    {
        // Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
// 2. Mulai permintaan
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash",  
    messages: [
        {
            "role": "user",
            "content": "Who are you?"
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Cherry", format: "wav" }
});

let audioString = "";
console.log("Model response:")

// 3. Proses tanggapan 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-omni-flash",
    "messages": [
        {
            "role": "user", 
            "content": "Who are you?"
        }
    ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    },
    "modalities":["text","audio"],
    "audio":{"voice":"Cherry","format":"wav"}
}'

Tanggapan

Setelah menjalankan kode Python dan Node.js, tanggapan teks model akan ditampilkan di konsol. File audio bernama audio_assistant.wav akan dihasilkan 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 secara langsung mengembalikan teks dan bidang audio yang berisi data audio terenkripsi Base64.

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-omni-flash","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-omni-flash","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-omni-flash","id":"chatcmpl-a68eca3b-c67e-4666-a72f-73c0b4919860"}
data: {"choices":[{"finish_reason":"stop","delta":{"audio":{"transcript":""}},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1757940330,"system_fingerprint":null,"model":"qwen3-omni-flash","id":"chatcmpl-9cdd5a26-f9e9-4eff-9dcc-93a878165afc"}
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-omni-flash","id":"chatcmpl-9cdd5a26-f9e9-4eff-9dcc-93a878165afc"}

Daftar model

Dibandingkan dengan model Qwen-VL , model Qwen-Omni dapat:

  • Memahami informasi visual dan audio dalam file video.

  • Memahami data dalam berbagai modalitas.

  • Menghasilkan audio.

Model ini juga berkinerja baik dalam pemahaman visual dan audio.

Gunakan Qwen3-Omni-Flash untuk kinerja terbaik. Dibandingkan dengan Qwen-Omni-Turbo (yang tidak lagi diperbarui), Qwen3-Omni-Flash menawarkan peningkatan signifikan:

  • Mendukung mode berpikir dan non-berpikir. Anda dapat beralih antar mode menggunakan parameter enable_thinking. Secara default, mode berpikir dinonaktifkan.

  • Untuk keluaran audio dalam mode non-berpikir:

    • Jumlah suara yang didukung meningkat menjadi 17. Qwen-Omni-Turbo hanya mendukung 4.

    • Jumlah bahasa yang didukung meningkat menjadi 10. Qwen-Omni-Turbo hanya mendukung 2.

Internasional (Singapura)

Model komersial

Dibandingkan dengan versi sumber terbuka, model komersial menawarkan fitur dan peningkatan terbaru.

Model

Versi

Mode

Jendela konteks

Maks. masukan

Maks. rantai-pikiran

Maks. keluaran

Kuota gratis

(Catatan)

(Token)

qwen3-omni-flash

Saat ini memiliki kemampuan yang sama dengan qwen3-omni-flash-2025-09-15

Stabil

Mode berpikir

65.536

16.384

32.768

16.384

1 juta token masing-masing (tidak memandang modalitas)

Berlaku selama 90 hari setelah Anda mengaktifkan Model Studio

Mode non-berpikir

49.152

-

qwen3-omni-flash-2025-09-15

Juga dikenal sebagai qwen3-omni-flash-0915

Cuplikan

Mode berpikir

65.536

16.384

32.768

16.384

Mode non-berpikir

49.152

-

Model lainnya

Model

Versi

Jendela konteks

Maks. masukan

Maks. keluaran

Kuota gratis

(Catatan)

(Token)

qwen-omni-turbo

Versi ini memiliki kemampuan yang sama dengan qwen-omni-turbo-2025-03-26.

Stabil

32.768

30.720

2.048

1 juta token masing-masing (tidak memandang modalitas)

Berlaku selama 90 hari setelah mengaktifkan Model Studio.

qwen-omni-turbo-latest

Selalu mengarah ke versi cuplikan terbaru.
Kemampuan setara

Terbaru

qwen-omni-turbo-2025-03-26

Juga dikenal sebagai qwen-omni-turbo-0326.

Cuplikan

Model sumber terbuka

Model

Jendela konteks

Maks. masukan

Maks. keluaran

Kuota gratis

(Catatan)

(Token)

qwen2.5-omni-7b

32.768

30.720

2.048

1 juta token (tidak memandang modalitas)

Berlaku selama 90 hari setelah mengaktifkan Alibaba Cloud Model Studio.

China Daratan (Beijing)

Model komersial

Model

Versi

Mode

Jendela konteks

Maks. masukan

Maks. rantai-pikiran

Maks. keluaran

Kuota gratis

(Catatan)

(Tokens)

qwen3-omni-flash

Saat ini memiliki kemampuan yang sama dengan qwen3-omni-flash-2025-09-15

Stabil

Mode berpikir

65.536

16.384

32.768

16.384

Tidak ada kuota gratis

Mode non-berpikir

49,152

-

qwen3-omni-flash-2025-09-15

Juga dikenal sebagai qwen3-omni-flash-0915

Cuplikan

Mode berpikir

65.536

16.384

32.768

16.384

Mode non-berpikir

49.152

-

Model lainnya

Model

Versi

Jendela konteks

Maks. masukan

Maks. keluaran

Kuota gratis

(Catatan)

(Token)

qwen-omni-turbo

Model ini saat ini memiliki kemampuan yang sama dengan qwen-omni-turbo-2025-03-26.

Stabil

32.768

30.720

2.048

Tidak ada kuota gratis

qwen-omni-turbo-latest

Selalu selaras dengan cuplikan terbaru
Kemampuan identik

Terbaru

qwen-omni-turbo-2025-03-26

Juga dikenal sebagai qwen-omni-turbo-0326.

Cuplikan

qwen-omni-turbo-2025-01-19

Juga dikenal sebagai qwen-omni-turbo-0119.

Model sumber terbuka

Model

Jendela konteks

Maks. masukan

Maks. keluaran

Kuota gratis

(Catatan)

(Token)

qwen2.5-omni-7b

32.768

30.720

2.048

Tidak ada kuota gratis

Catatan penggunaan

Masukan

Dalam satu pesan user, larik content dapat berisi teks dan satu modalitas lainnya, seperti citra, audio, atau video. Larik tersebut tidak dapat berisi beberapa modalitas lainnya sekaligus.

Keluaran

  • Modalitas keluaran yang didukung: Keluaran audio berupa data terenkripsi Base64. Untuk informasi selengkapnya tentang cara mengonversinya menjadi file audio, lihat Uraikan keluaran data audio terenkripsi Base64.

    Modalitas keluaran

    modalities nilai parameter

    Gaya tanggapan

    Teks

    ["text"] (default)

    Lebih formal dan bergaya tertulis.

    Teks dan audio

    ["text","audio"]

    Qwen3-Omni-Flash tidak mendukung keluaran audio dalam mode berpikir.

    Lebih percakapan. Tanggapan mencakup kata pengisi dan mendorong interaksi lebih lanjut.

    Qwen-Omni-Turbo tidak mendukung pengaturan Pesan Sistem saat modalitas keluaran mencakup audio.
  • Bahasa keluaran audio yang didukung:

    • Qwen-Omni-Turbo: Hanya mendukung Bahasa Mandarin (Tiongkok) dan Bahasa Inggris.

    • Qwen3-Omni-Flash (mode non-berpikir): Mendukung Bahasa Mandarin (Tiongkok dan beberapa dialek), Bahasa Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, dan Korea.

  • Suara audio yang didukung: Anda dapat mengonfigurasi suara dan format file keluaran audio menggunakan parameter audio. Contoh: audio={"voice": "Cherry", "format": "wav"}:

    • Format file (format): Hanya dapat diatur ke "wav".

    • Suara audio (voice): Untuk daftar suara yang didukung setiap model, lihat Daftar suara.

Batasan

  • Keluaran streaming bersifat wajib: Semua permintaan ke model Qwen-Omni harus mengatur stream=True.

  • Hanya model Qwen3-Omni-Flash yang merupakan model berpikir hibrida. Untuk informasi tentang cara memanggilnya, lihat Aktifkan atau nonaktifkan mode berpikir. Dalam mode berpikir, keluaran audio tidak didukung.

Aktifkan atau nonaktifkan mode berpikir

Model Qwen3-Omni-Flash adalah model berpikir hibrida. Anda dapat menggunakan parameter enable_thinking untuk mengaktifkan atau menonaktifkan mode berpikir:

  • true: Mengaktifkan mode berpikir.

  • false (default): Menonaktifkan mode berpikir.

Qwen-Omni-Turbo bukan model berpikir.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash",
    messages=[{"role": "user", "content": "Who are you"}],

    # Aktifkan atau nonaktifkan mode berpikir. Keluaran audio tidak didukung dalam mode berpikir. qwen-omni-turbo tidak mendukung pengaturan enable_thinking.
    extra_body={'enable_thinking': True},

    # Atur modalitas data keluaran. Dua modalitas didukung dalam mode non-berpikir: ["text","audio"] dan ["text"]. Hanya ["text"] yang didukung dalam mode berpikir.
    modalities=["text"],

    # Atur suara. Parameter audio tidak didukung dalam mode berpikir.
    # audio={"voice": "Cherry", "format": "wav"},
    # stream harus diatur ke True untuk menghindari kesalahan.
    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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.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 untuk menghindari kesalahan.
    stream: true,
    stream_options: {
        include_usage: true
    },
    // Aktifkan atau nonaktifkan mode berpikir. Keluaran audio tidak didukung dalam mode berpikir. qwen-omni-turbo tidak mendukung pengaturan enable_thinking.
    extra_body:{'enable_thinking': true},
    //  Atur modalitas data keluaran. Dua modalitas didukung dalam mode non-berpikir: ["text","audio"] dan ["text"]. Hanya ["text"] yang didukung dalam mode berpikir.
    modalities: ["text"],
    // Atur suara. Parameter audio tidak didukung dalam mode berpikir.
    //audio: { voice: "Cherry", 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen3-omni-flash",
    "messages": [
        {
            "role": "user",
            "content": "Who are you?"
        }
    ],
    "stream":true,
    "stream_options":{
        "include_usage":true
    },
    "modalities":["text"],
    "enable_thinking": true
}'

Tanggapan

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

Masukan citra dan teks

Qwen-Omni mendukung beberapa masukan citra. Persyaratan untuk citra masukan adalah sebagai berikut:

  • Ukuran file citra tunggal tidak boleh melebihi 10 MB.

  • Jumlah citra dibatasi oleh batas token total model untuk citra dan teks. Jumlah total token untuk semua citra tidak boleh melebihi batas token masukan maksimum model.

  • Lebar dan tinggi citra harus keduanya lebih besar dari 10 piksel. Rasio aspek tidak boleh melebihi 200:1 atau 1:200.

  • Untuk informasi tentang jenis citra yang didukung, lihat Pemahaman visual.

Kode contoh berikut menggunakan URL citra dari Internet sebagai contoh. Untuk memasukkan citra lokal, lihat Masukkan file lokal yang dikodekan Base64. Saat ini, hanya panggilan dengan keluaran streaming yang didukung.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash", # Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 data keluaran. Dua modalitas didukung: ["text","audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # stream harus diatur ke True untuk menghindari kesalahan.
    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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", // Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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: "Cherry", 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===


curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-omni-7b",
    "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":"Cherry","format":"wav"}
}'

Masukan audio dan teks

  • Hanya satu file audio yang dapat dimasukkan.

  • Ukuran file

    • Qwen3-Omni-Flash: Tidak boleh melebihi 100 MB, dengan durasi maksimum 20 menit.

    • Qwen-Omni-Turbo: Tidak boleh melebihi 10 MB, dengan durasi maksimum 3 menit.

Kode contoh berikut menggunakan URL audio dari Internet sebagai contoh. Untuk memasukkan file audio lokal, lihat Masukkan file lokal yang dikodekan Base64. Saat ini, hanya panggilan dengan keluaran streaming yang didukung.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash",# Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 data keluaran. Dua modalitas didukung: ["text","audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # stream harus diatur ke True untuk menghindari kesalahan.
    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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", // Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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: "Cherry", 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-omni-7b",
    "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":"Cherry","format":"wav"}
}'

Masukan video dan teks

Anda dapat memasukkan video sebagai daftar citra atau file video (dengan pemahaman audio).

Kode contoh berikut menggunakan URL video dari Internet sebagai contoh. Untuk memasukkan video lokal, lihat Masukkan file lokal yang dikodekan Base64. Saat ini, hanya panggilan dengan keluaran streaming yang didukung.

Format daftar citra

Jumlah citra

  • Qwen3-Omni-Flash: Minimal 2 citra dan maksimal 128 citra.

  • Qwen-Omni-Turbo: Minimal 4 citra dan maksimal 80 citra.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash", # Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 data keluaran. Dua modalitas didukung: ["text","audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # stream harus diatur ke True untuk menghindari kesalahan.
    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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", //Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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: "Cherry", 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-omni-7b",
    "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": "Cherry",
        "format": "wav"
    }
}'

Format file video (dapat memahami audio dalam video)

  • Hanya satu file video yang dapat dimasukkan.

  • Ukuran file:

    • Qwen3-Omni-Flash: Dibatasi hingga 256 MB, dengan batas durasi 150 detik.

    • Qwen-Omni-Turbo: Dibatasi hingga 150 MB, dengan batas durasi 40 detik.

  • 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash", # Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 content of the video?"},
            ],
        },
    ],
    # Atur modalitas data keluaran. Dua modalitas didukung: ["text","audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # stream harus diatur ke True untuk menghindari kesalahan.
    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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", // Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 content of the video?" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Cherry", 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "qwen2.5-omni-7b",
    "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 content of the video"
        }
      ]
    }
  ],
    "stream":true,
    "stream_options": {
        "include_usage": true
    },
    "modalities":["text","audio"],
    "audio":{"voice":"Cherry","format":"wav"}
}'

Percakapan multi-putaran

Saat menggunakan fitur percakapan multi-putaran Qwen-Omni, perhatikan hal berikut:

  • Pesan asisten

    Pesan asisten dalam larik pesan hanya mendukung data teks.

  • Pesan pengguna

    Pesan pengguna dapat berisi teks dan data dari hanya satu modalitas lainnya. Dalam percakapan multi-putaran, Anda dapat menggunakan modalitas berbeda dalam pesan pengguna terpisah.

Kompatibel dengan OpenAI

import os
from openai import OpenAI

client = OpenAI(
    # Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash", # Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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": "Can you tell me about this company?"}],
        },
    ],
    # Atur modalitas data keluaran. Dua modalitas didukung: ["text","audio"] dan ["text"].
    modalities=["text"],
    # stream harus diatur ke True untuk menghindari kesalahan.
    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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", // Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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": "Can you 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === Hapus komentar ini sebelum eksekusi ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen2.5-omni-7b",
  "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": "Can you tell me about this company?"
        }
      ]
    }
  ],
  "stream": true,
  "stream_options": {
    "include_usage": true
  },
  "modalities": ["text"]
}'

Uraikan keluaran data audio terenkripsi Base64

Keluaran audio dari Qwen-Omni berupa data terenkripsi Base64 yang dikirimkan dalam aliran. Untuk merekonstruksi file audio, Anda dapat menggunakan variabel string untuk mengumpulkan data Base64 dari setiap fragmen saat tiba. Setelah aliran selesai, Anda dapat mendekode string akhir untuk membuat file audio. Atau, Anda dapat mendekode dan memutar setiap fragmen secara real-time saat diterima.

# Instruksi instalasi untuk pyaudio:
# APPLE Mac OS X
#   brew install portaudio
#   pip install pyaudio
# Debian/Ubuntu
#   sudo apt-get install python-pyaudio python3-pyaudio
#   or
#   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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen3-omni-flash", # Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    messages=[{"role": "user", "content": "Who are you"}],
    # Atur modalitas data keluaran. Dua modalitas didukung: ["text","audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # stream harus diatur ke True untuk menghindari kesalahan.
    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.audio["transcript"])
    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 menghasilkan (hapus komentar 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 langsung
#                 stream.write(audio_np.tobytes())
#             except Exception as e:
#                 print(chunk.choices[0].delta.audio["transcript"])

# time.sleep(0.8)
# # Bersihkan sumber daya
# stream.stop_stream()
# stream.close()
# p.terminate()
// Persiapan sebelum menjalankan:
// Berlaku universal untuk Windows/Mac/Linux:
// 1. Pastikan Node.js telah diinstal (disarankan versi >= 14)
// 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. Untuk informasi selengkapnya, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
        apiKey: process.env.DASHSCOPE_API_KEY,
        // Berikut ini adalah URL untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", // Saat model adalah Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    messages: [
        {
            "role": "user",
            "content": "Who are you?"
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Cherry", 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,        // Saluran tunggal
            bitDepth: 16        // Kedalaman 16-bit
        });
        // Buat aliran keluaran file dan buat koneksi pipeline
        const outputStream = createWriteStream(audioPath);
        writer.pipe(outputStream);

        // Tulis data PCM dan akhiri penulisan
        writer.write(wavBuffer);
        writer.end();

        // Gunakan Promise untuk menunggu file selesai ditulis
        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);
    }
}
// Jalankan konversi
convertAudio(audioString, "audio_assistant_mjs.wav");


// Metode 2: Hasilkan dan putar secara real-time
// Anda harus terlebih dahulu menginstal komponen yang diperlukan sesuai dengan instruksi sistem Anda di atas.
// import Speaker from 'speaker'; // Impor pustaka pemutaran audio

// // Buat instance speaker (konfigurasi sesuai dengan 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 diputar
//                 speaker.write(pcmBuffer);
//             }
//         }
//     } else {
//         console.log(chunk.usage);
//     }
// }
// speaker.on('finish', () => console.log('Playback complete'));
// speaker.end(); // Panggil berdasarkan akhir sebenarnya dari aliran API

Masukkan file lokal yang dikodekan Base64

Citra

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. 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 ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)


# Format pengkodean 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-omni-flash", # Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/png;base64,{base64_image}"},
                },
                {"type": "text", "text": "What scene does the image depict?"},
            ],
        },
    ],
    # Atur modalitas keluaran. Modalitas yang didukung adalah ["text", "audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # Atur stream ke True. Jika tidak, terjadi kesalahan.
    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. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
};
const base64Image = encodeImage("eagle.png")

const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash",// Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    messages: [
        {
            "role": "user",
            "content": [{
                "type": "image_url",
                "image_url": { "url": `data:image/png;base64,${base64Image}` },
            },
            { "type": "text", "text": "What scene does the image depict?" }]
        }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Cherry", 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. 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 ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
    base_url="https://dashscope-intl.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-omni-flash", # Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 keluaran. Modalitas yang didukung adalah ["text", "audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # Atur stream ke True. Jika tidak, terjadi kesalahan.
    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. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
        baseURL: "https://dashscope-intl.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-omni-flash", // Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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: "Cherry", 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. 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 ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)

# Format pengkodean 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-omni-falsh", # Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "video_url",
                    "video_url": {"url": f"data:;base64,{base64_video}"},
                },
                {"type": "text", "text": "What is she singing?"},
            ],
        },
    ],
    # Atur modalitas keluaran. Modalitas yang didukung adalah ["text", "audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # Atur stream ke True. Jika tidak, terjadi kesalahan.
    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. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeVideo = (videoPath) => {
    const videoFile = readFileSync(videoPath);
    return videoFile.toString('base64');
};
const base64Video = encodeVideo("spring_mountain.mp4")

const completion = await openai.chat.completions.create({
    model: "qwen3-omni-flash", // Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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: "Cherry", 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 citra

Contoh ini menggunakan 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. 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 ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)


# Format pengkodean 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-omni-flash", # Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 specific procedure shown in this video."},
            ],
        }
    ],
    # Atur modalitas keluaran. Modalitas yang didukung adalah ["text", "audio"] dan ["text"].
    modalities=["text", "audio"],
    audio={"voice": "Cherry", "format": "wav"},
    # Atur stream ke True. Jika tidak, terjadi kesalahan.
    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. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key.
        apiKey: process.env.DASHSCOPE_API_KEY,
        // URL berikut ini untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan https://dashscope.aliyuncs.com/compatible-mode/v1.
        baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
    }
);

const encodeImage = (imagePath) => {
    const imageFile = readFileSync(imagePath);
    return imageFile.toString('base64');
  };
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-omni-flash", // Saat menggunakan model Qwen3-Omni-Flash, jalankan dalam mode non-berpikir.
    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 specific procedure shown in this video."
            }
        ]
    }],
    stream: true,
    stream_options: {
        include_usage: true
    },
    modalities: ["text", "audio"],
    audio: { voice: "Cherry", 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 informasi tentang parameter masukan dan keluaran Qwen-Omni, lihat Qwen.

Penagihan dan pembatasan laju

Aturan penagihan

Qwen-Omni ditagih berdasarkan jumlah token untuk berbagai modalitas, seperti audio, citra, dan video. Untuk informasi selengkapnya tentang detail penagihan, lihat Daftar Model.

Aturan konversi audio, citra, dan video ke token

Audio

Qwen-Omni-Turbo: Total token = Durasi audio (dalam detik) × 25. Jika durasi audio kurang dari 1 detik, dihitung sebagai 1 detik.

Citra

  • Model Qwen3-Omni-Flash: Setiap blok piksel 32×32 setara dengan 1 token.

  • Model Qwen-Omni-Turbo: Setiap blok piksel 28×28 setara dengan 1 token.

Citra memerlukan minimal 4 token dan maksimal 1280 token. Anda dapat menggunakan kode berikut dan memberikan jalur citra untuk memperkirakan jumlah total token untuk satu citra:

import math
# Untuk menginstal pustaka Pillow, jalankan perintah berikut: pip install Pillow
from PIL import Image

# Untuk model Qwen-Omni-Turbo, atur faktor ke 28.
# factor = 28
# Untuk model Qwen3-Omni-Flash, atur faktor ke 32.
factor = 32

def token_calculate(image_path=''):
    """
    param image_path: Jalur citra.
    return: Jumlah token untuk satu citra.
    """
    if len(image_path) > 0:
        # Buka file citra yang ditentukan.
        image = Image.open(image_path)
        # Dapatkan dimensi asli citra.
        height = image.height
        width = image.width
    print(f"Dimensi citra sebelum penskalaan: Tinggi={height}, Lebar={width}")
    # Sesuaikan tinggi agar menjadi kelipatan faktor.
    h_bar = round(height / factor) * factor
    # Sesuaikan lebar agar menjadi kelipatan faktor.
    w_bar = round(width / factor) * factor
    # Token minimum untuk citra: 4 token.
    min_pixels = 4 * factor * factor
    # Token maksimum untuk citra: 1280 token.
    max_pixels = 1280 * factor * factor
    # Skala citra untuk memastikan jumlah total piksel berada dalam rentang [min_pixels, max_pixels].
    if h_bar * w_bar > max_pixels:
        # Hitung faktor zoom beta agar total piksel citra yang diskala tidak melebihi max_pixels.
        beta = math.sqrt((height * width) / max_pixels)
        # Hitung ulang tinggi yang disesuaikan agar menjadi kelipatan faktor.
        h_bar = math.floor(height / beta / factor) * factor
        # Hitung ulang lebar yang disesuaikan agar menjadi kelipatan faktor.
        w_bar = math.floor(width / beta / factor) * factor
    elif h_bar * w_bar < min_pixels:
        # Hitung faktor zoom beta agar total piksel citra yang diskala tidak kurang dari min_pixels.
        beta = math.sqrt(min_pixels / (height * width))
        # Hitung ulang tinggi yang disesuaikan agar menjadi kelipatan faktor.
        h_bar = math.ceil(height * beta / factor) * factor
        # Hitung ulang lebar yang disesuaikan agar menjadi kelipatan faktor.
        w_bar = math.ceil(width * beta / factor) * factor
    print(f"Dimensi citra yang diskala: Tinggi={h_bar}, Lebar={w_bar}")
    # Hitung jumlah token untuk citra: Total piksel / (factor * factor).
    token = int((h_bar * w_bar) / (factor * factor)) + 2
    print(f"Jumlah token setelah penskalaan: {token}")
    return token
    
if __name__ == "__main__":
    token = token_calculate(image_path="path/to/your/test.jpg")

Video

Token untuk file video dibagi menjadi video_tokens (visual) dan audio_tokens (audio).

  • video_tokens

    Perhitungannya kompleks. Lihat kode berikut:

    # Sebelum digunakan, instal opencv-python: pip install opencv-python
    import math
    import os
    import logging
    import cv2
    
    logger = logging.getLogger(__name__)
    
    # Parameter tetap
    FRAME_FACTOR = 2
    
    # Untuk model Qwen3-Omni-Flash, atur IMAGE_FACTOR ke 32.
    IMAGE_FACTOR = 32
    
    # Untuk model Qwen-Omni-Turbo, atur IMAGE_FACTOR ke 28.
    # IMAGE_FACTOR = 28
    
    # Rasio aspek bingkai video
    MAX_RATIO = 200
    
    # Token minimum untuk bingkai video. Untuk Qwen3-Omni-Flash: 128 * 32 * 32
    VIDEO_MIN_PIXELS = 128 * 32 * 32
    # Untuk Qwen-Omni-Turbo:
    # VIDEO_MIN_PIXELS = 128 * 28 * 28
    
    # Token maksimum untuk bingkai video. Untuk Qwen3-Omni-Flash: 768 * 32 * 32
    VIDEO_MAX_PIXELS = 768 * 32 * 32
    # Untuk Qwen-Omni-Turbo:
    # VIDEO_MAX_PIXELS = 768 * 28 * 28
    
    FPS = 2
    # Jumlah minimum bingkai yang diekstraksi
    FPS_MIN_FRAMES = 4
    
    # Jumlah maksimum bingkai yang diekstraksi
    # Jumlah maksimum bingkai yang diekstraksi untuk model Qwen3-Omni-Flash: 128
    # Jumlah maksimum bingkai yang diekstraksi untuk model Qwen-Omni-Turbo: 80
    FPS_MAX_FRAMES = 128
    
    # Nilai piksel maksimum untuk masukan video. Untuk Qwen3-Omni-Flash: 16384 * 32 * 32
    VIDEO_TOTAL_PIXELS = 16384 * 32 * 32
    # Untuk Qwen-Omni-Turbo:
    # VIDEO_TOTAL_PIXELS = 16384 * 28 * 28
    
    def round_by_factor(number, factor):
        return round(number / factor) * factor
    
    def ceil_by_factor(number, factor):
        return math.ceil(number / factor) * factor
    
    def floor_by_factor(number, factor):
        return math.floor(number / factor) * factor
    
    def get_video(video_path):
        cap = cv2.VideoCapture(video_path)
        frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
        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)
        cap.release()
        return frame_height, frame_width, total_frames, video_fps
    
    def smart_nframes(total_frames, video_fps):
        min_frames = ceil_by_factor(FPS_MIN_FRAMES, FRAME_FACTOR)
        max_frames = floor_by_factor(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
        nframes = int(min(min(max(nframes, min_frames), max_frames), total_frames))
        if not (FRAME_FACTOR <= nframes <= total_frames):
            raise ValueError(f"nframes should in interval [{FRAME_FACTOR}, {total_frames}], but got {nframes}.")
        return nframes
    
    def smart_resize(height, width, nframes, factor=IMAGE_FACTOR):
        min_pixels = VIDEO_MIN_PIXELS
        total_pixels = VIDEO_TOTAL_PIXELS
        max_pixels = max(min(VIDEO_MAX_PIXELS, total_pixels / nframes * FRAME_FACTOR), int(min_pixels * 1.05))
        if max(height, width) / min(height, width) > MAX_RATIO:
            raise ValueError(f"absolute aspect ratio must be smaller than {MAX_RATIO}, got {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 video_token_calculate(video_path):
        height, width, total_frames, video_fps = get_video(video_path)
        nframes = smart_nframes(total_frames, video_fps)
        resized_height, resized_width = smart_resize(height, width, nframes)
        video_token = int(math.ceil(nframes / FPS) * resized_height / 32 * resized_width / 32)
        video_token += 2  # Tanda visual
        return video_token
    
    if __name__ == "__main__":
        video_path = "spring_mountain.mp4"  # Jalur video Anda
        video_token = video_token_calculate(video_path)
        print("video_tokens:", video_token)
  • audio_tokens

    • Qwen-Omni-Turbo: Total token = Durasi audio (dalam detik) × 25

    Jika durasi audio kurang dari 1 detik, dihitung sebagai 1 detik.

Kuota gratis

Untuk informasi selengkapnya tentang cara mengklaim, menanyakan, dan menggunakan kuota gratis Anda, lihat Kuota gratis untuk pengguna baru.

Pembatasan laju

Untuk informasi tentang aturan pembatasan laju model dan FAQ, lihat Batas laju.

Kode kesalahan

Jika panggilan gagal, lihat Pesan kesalahan untuk pemecahan masalah.

Daftar suara

Model mendukung suara yang berbeda. Untuk menggunakan suara, atur parameter permintaan voice ke nilai yang sesuai di kolom parameter suara pada tabel di bawah ini.

Qwen3-Omni-Flash (mode non-berpikir)

Model Qwen3-Omni-Flash memungkinkan Anda mengatur suara menggunakan parameter voice hanya dalam mode non-berpikir. Dalam mode berpikir, model hanya mendukung keluaran teks.

Nama

voice parameter

Efek suara

Deskripsi

Bahasa yang didukung

Cherry

Cherry

Suara perempuan muda yang ceria, ramah, dan alami.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Ethan

Ethan

Bahasa Mandarin standar dengan sedikit aksen utara. Suara yang cerah, hangat, dan energetik.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Nofish

Nofish

Seorang desainer yang tidak menggunakan konsonan retrofleks.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Jennifer

Jennifer

Suara perempuan premium berbahasa Inggris Amerika bergaya sinematik.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Ryan

Ryan

Suara ritmis dan dramatis dengan realisme dan ketegangan.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Katerina

Katerina

Suara perempuan dewasa dan ritmis.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Elias

Elias

Menjelaskan topik kompleks dengan ketelitian akademis dan narasi yang jelas.

Bahasa Mandarin, Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Shanghai-Jada

Jada

Perempuan ceria dari Shanghai.

Bahasa Mandarin (Shanghainese), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Beijing-Dylan

Dylan

Remaja yang tumbuh di gang-gang Beijing.

Bahasa Mandarin (dialek Beijing), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Sichuan-Sunny

Sunny

Suara perempuan manis dari Sichuan.

Bahasa Mandarin (Sichuanese), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Nanjing-Li

Li

Guru yoga yang sabar.

Bahasa Mandarin (dialek Nanjing), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Shaanxi-Marcus

Marcus

Suara tulus dan dalam dari Shaanxi.

Bahasa Mandarin (dialek Shaanxi), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Man Nan-Roy

Roy

Suara laki-laki muda yang lucu dan ceria dengan aksen Minnan.

Bahasa Mandarin (Min Nan), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Tianjin-Peter

Peter

Suara pelawak pendiam dalam crosstalk Tianjin.

Bahasa Mandarin (dialek Tianjin), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Cantonese-Rocky

Rocky

Suara laki-laki lucu dan jenaka untuk obrolan daring.

Bahasa Mandarin (Kanton), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Cantonese-Kiki

Kiki

Sahabat perempuan manis dari Hong Kong.

Bahasa Mandarin (Kanton), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Sichuan-Eric

Eric

Suara laki-laki tidak konvensional dan rapi dari Chengdu, Sichuan.

Bahasa Mandarin (Sichuanese), Inggris, Prancis, Jerman, Rusia, Italia, Spanyol, Portugis, Jepang, Korea, Thailand

Qwen-Omni-Turbo

Nama

voice parameter

Efek suara

Deskripsi

Bahasa yang didukung

Cherry

Cherry

Perempuan muda yang ceria, ramah, dan tulus.

Bahasa Mandarin, Inggris

Serena

Serena

Perempuan muda yang baik hati.

Bahasa Mandarin, Inggris

Ethan

Ethan

Bahasa Mandarin standar dengan sedikit aksen utara. Suara yang cerah, hangat, dan energetik.

Bahasa Mandarin, Inggris

Chelsie

Chelsie

Suara pacar virtual bergaya anime.

Bahasa Mandarin, Inggris

Qwen-Omni sumber terbuka

Nama

voice parameter

Efek suara

Deskripsi

Bahasa yang didukung

Ethan

Ethan

Bahasa Mandarin standar dengan sedikit aksen utara. Suara yang cerah, hangat, dan energetik.

Bahasa Mandarin, Inggris

Chelsie

Chelsie

Suara pacar virtual bergaya anime.

Bahasa Mandarin, Inggris