Qwen3-Omni-Captioner adalah model open-source yang dibangun di atas Qwen3-Omni. Model ini secara otomatis menghasilkan deskripsi akurat dan komprehensif untuk audio kompleks, termasuk ucapan, suara lingkungan, musik, dan efek suara, tanpa memerlukan prompt apa pun. Model ini dapat mengidentifikasi emosi pembicara, elemen musik seperti gaya dan instrumen, serta informasi sensitif. Sangat ideal untuk analisis konten audio, audit keamanan, pengenalan maksud, dan pengeditan video.
Model yang didukung
Internasional (Singapura)
Model | Jendela konteks | Masukan maksimum | Keluaran maksimum | Biaya masukan | Biaya keluaran | Kuota gratis |
(Token) | (Juta token) | |||||
qwen3-omni-30b-a3b-captioner | 65.536 | 32.768 | 32.768 | $3,81 | $3,06 | 1 juta token Berlaku: 90 hari setelah Anda mengaktifkan Alibaba Cloud Model Studio |
Tiongkok Daratan (Beijing)
Model | Jendela konteks | Masukan maksimum | Keluaran maksimum | Biaya masukan | Biaya keluaran | Kuota gratis |
(Token) | (Per 1 juta token) | |||||
qwen3-omni-30b-a3b-captioner | 65.536 | 32.768 | 32.768 | $2,265 | $1,821 | Tidak ada kuota gratis |
Aturan konversi token untuk audio: Total token = Durasi audio (dalam detik) × 12,5. Jika durasi audio kurang dari satu detik, dihitung sebagai satu detik.Memulai
Prasyarat
Jika Anda menggunakan SDK untuk membuat panggilan, instal versi terbaru SDK.
Qwen3-Omni-Captioner hanya mendukung panggilan API. Tidak tersedia untuk pengujian online di konsol Alibaba Cloud Model Studio.
Contoh kode berikut menunjukkan cara menganalisis audio online yang ditentukan oleh URL, bukan file lokal. Pelajari cara melewati file lokal dan batasan pada file audio.
Kompatibel dengan OpenAI
Python
import os
from openai import OpenAI
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 adalah 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-30b-a3b-captioner",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
}
}
]
}
]
)
print(completion.choices[0].message.content)Node.js
import OpenAI from "openai";
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 adalah 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-30b-a3b-captioner",
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
}
}]
}]
});
console.log(completion.choices[0].message.content)curl
# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_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-30b-a3b-captioner",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
}
}
]
}
]
}'DashScope
Python
import dashscope
import os
# URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url="https://dashscope-intl.aliyuncs.com/api/v1"
messages = [
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
]
}
]
response = dashscope.MultiModalConversation.call(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-omni-30b-a3b-captioner",
messages=messages
)
print("Keluaran:")
print(response["output"]["choices"][0]["message"].content[0]["text"])Java
import java.util.Arrays;
import java.util.Collections;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void simpleMultiModalConversationCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(
Collections.singletonMap("audio", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav")))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model("qwen3-omni-30b-a3b-captioner")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println("Keluaran:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
simpleMultiModalConversationCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}curl
# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"input":{
"messages":[
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
]
}
]
}
}'Cara kerjanya
Interaksi satu putaran: Model tidak mendukung percakapan multi-putaran. Setiap permintaan adalah tugas analisis independen.
Tugas tetap: Tugas inti model adalah menghasilkan deskripsi audio hanya dalam bahasa Inggris. Anda tidak dapat menggunakan instruksi, seperti pesan sistem, untuk mengubah perilakunya, seperti mengontrol format keluaran atau fokus konten.
Hanya masukan audio: Model hanya menerima audio sebagai masukan. Anda tidak perlu melewati prompt teks. Format parameter
messagetetap.
Keluaran streaming
Setelah model menerima masukan, ia menghasilkan hasil antara langkah demi langkah. Hasil akhir adalah kombinasi dari hasil antara ini. Metode menghasilkan dan mengeluarkan hasil secara bersamaan ini disebut keluaran streaming. Dengan keluaran streaming, Anda dapat membaca respons saat dihasilkan, yang mengurangi waktu tunggu Anda.
Kompatibel dengan OpenAI
Mengaktifkan keluaran streaming dengan metode kompatibel OpenAI sangatlah mudah. Cukup atur parameter stream menjadi true dalam permintaan Anda.
Python
import os
from openai import OpenAI
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 adalah 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-30b-a3b-captioner",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
}
}
]
}
],
stream=True,
stream_options={"include_usage": True},
)
for chunk in completion:
# Jika stream_options.include_usage adalah True, bidang choices dari chunk terakhir adalah daftar kosong dan harus dilewati. Anda bisa mendapatkan penggunaan token dari chunk.usage.
if chunk.choices and chunk.choices[0].delta.content != "":
print(chunk.choices[0].delta.content,end="")Node.js
import OpenAI from "openai";
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 adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
baseURL: "https://dashscope-intl.ali.aliyuncs.com/compatible-mode/v1"
}
);
const completion = await openai.chat.completions.create({
model: "qwen3-omni-30b-a3b-captioner",
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
},
}]
}],
stream: true,
stream_options: {
include_usage: true
},
});
for await (const chunk of completion) {
if (Array.isArray(chunk.choices) && chunk.choices.length > 0) {
console.log(chunk.choices[0].delta.content);
} else {
console.log(chunk.usage);
}
}curl
# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_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-30b-a3b-captioner",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"
}
}
]
}
],
"stream":true,
"stream_options":{
"include_usage":true
}
}'DashScope
Anda dapat memanggil model melalui SDK DashScope atau menggunakan HTTP untuk menggunakan keluaran streaming. Atur parameter berdasarkan metode panggilan Anda:
Python SDK: Atur parameter
streammenjadi True.Java SDK: Gunakan metode
streamCall.HTTP: Di header, atur
X-DashScope-SSEmenjadienable.
Secara default, keluaran streaming bersifat non-incremental. Ini berarti setiap chunk yang dikembalikan berisi semua konten yang sebelumnya dihasilkan. Jika Anda menginginkan keluaran streaming incremental, atur parameterincremental_output(atauincrementalOutputuntuk Java) menjaditrue.
Python
import dashscope
# URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url="https://dashscope-intl.aliyuncs.com/api/v1"
messages = [
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
]
}
]
response = dashscope.MultiModalConversation.call(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-omni-30b-a3b-captioner",
messages=messages,
stream=True,
incremental_output=True
)
full_content = ""
print("Keluaran streaming:")
for response in response:
if response["output"]["choices"][0]["message"].content:
print(response["output"]["choices"][0]["message"].content[0]["text"])
full_content += response["output"]["choices"][0]["message"].content[0]["text"]
print(f"Konten lengkap: {full_content}")Java
import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void streamCall()
throws ApiException, NoApiKeyException, UploadFileException {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
// qwen3-omni-30b-a3b-captioner hanya mendukung satu file audio sebagai masukan.
.content(Arrays.asList(
new HashMap<String, Object>(){{put("audio", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav");}}
)).build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan kunci API Model Studio Anda: .apiKey("sk-xxx")
// 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(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3-omni-30b-a3b-captioner")
.message(userMessage)
.incrementalOutput(true)
.build();
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(item -> {
try {
var content = item.getOutput().getChoices().get(0).getMessage().getContent();
// Periksa apakah konten ada dan tidak kosong.
if (content != null && !content.isEmpty()) {
System.out.println(content.get(0).get("text"));
}
} catch (Exception e){
System.exit(0);
}
});
}
public static void main(String[] args) {
try {
streamCall();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}curl
# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'X-DashScope-SSE: enable' \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"input":{
"messages":[
{
"role": "user",
"content": [
{"audio": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20240916/xvappi/Renovation_Noise.wav"}
]
}
]
},
"parameters": {
"incremental_output": true
}
}'Melewati file lokal (Pengkodean Base64 atau jalur file)
Model menyediakan dua metode untuk mengunggah file lokal:
Pengkodean Base64
Jalur file langsung (Disarankan untuk transmisi lebih stabil)
Metode unggah:
Melewati jalur file
Lewatkan jalur file langsung ke model. Metode ini hanya didukung oleh SDK Python dan Java DashScope, bukan oleh HTTP. Lihat tabel berikut untuk menentukan jalur file berdasarkan bahasa pemrograman dan sistem operasi Anda.
Melewati pengkodean Base64
Konversikan file ke string terkode Base64 lalu lewatkan ke model.
Batasan:
Kami merekomendasikan melewati jalur file langsung untuk stabilitas yang lebih besar. Anda juga dapat menggunakan pengkodean Base64 untuk file yang lebih kecil dari 1 MB.
Saat melewati jalur file langsung, file audio harus lebih kecil dari 10 MB.
Saat melewati file menggunakan pengkodean Base64, string terkode Base64 harus lebih kecil dari 10 MB. Pengkodean Base64 meningkatkan ukuran data.
Melewati jalur file
Melewati jalur file hanya didukung oleh SDK Python dan Java DashScope, bukan oleh HTTP.
Python
import dashscope
# URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
# Jalur penuh file lokal harus diberi awalan file:// untuk memastikan jalur valid, contohnya: file:///home/images/test.mp3
audio_file_path = "file://ABSOLUTE_PATH/welcome.mp3"
messages = [
{
"role": "user",
# Lewatkan jalur file dengan awalan file:// di parameter audio.
"content": [{"audio": audio_file_path}],
}
]
response = dashscope.MultiModalConversation.call(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-omni-30b-a3b-captioner",
messages=messages)
print("Keluaran:")
print(response["output"]["choices"][0]["message"].content[0]["text"])
Java
import java.util.Arrays;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.JsonUtils;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
public static void callWithLocalFile()
throws ApiException, NoApiKeyException, UploadFileException {
// Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
// Jalur penuh file lokal harus diberi awalan file:// untuk memastikan jalur valid, contohnya: file:///home/images/test.mp3
// Sistem pengujian saat ini adalah macOS. Jika Anda menggunakan Windows, gunakan "file:///ABSOLUTE_PATH/welcome.mp3" sebagai gantinya.
String localFilePath = "file://ABSOLUTE_PATH/welcome.mp3";
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
.content(Arrays.asList(
new HashMap<String, Object>(){{put("audio", localFilePath);}}
))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx"),
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.model("qwen3-omni-30b-a3b-captioner")
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println("Keluaran:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
callWithLocalFile();
} catch (ApiException | NoApiKeyException | UploadFileException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}Melewati pengkodean Base64
Kompatibel dengan OpenAI
Python
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 adalah 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")
# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
audio_file_path = "xxx/ABSOLUTE_PATH/welcome.mp3"
base64_audio = encode_audio(audio_file_path)
completion = client.chat.completions.create(
model="qwen3-omni-30b-a3b-captioner",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
# Saat melewati file lokal dengan pengkodean Base64, Anda harus menggunakan awalan data: untuk memastikan URL file valid.
# Kata kunci "base64" harus disertakan sebelum data terkode Base64 (base64_audio), jika tidak akan terjadi kesalahan.
"data": f"data:;base64,{base64_audio}"
},
}
],
},
]
)
print(completion.choices[0].message.content)Node.js
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 adalah 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');
};
// Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
const base64Audio = encodeAudio("xxx/ABSOLUTE_PATH/welcome.mp3")
const completion = await openai.chat.completions.create({
model: "qwen3-omni-30b-a3b-captioner",
messages: [
{
"role": "user",
"content": [{
"type": "input_audio",
"input_audio": { "data": `data:;base64,${base64Audio}`}
}]
}]
});
console.log(completion.choices[0].message.content);curl
Untuk informasi tentang cara mengonversi file ke string terkode Base64, lihat contoh kode.
Untuk tujuan demonstrasi, string Base64
"data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."dipotong. Dalam praktiknya, Anda harus meneruskan string terkode lengkap.
# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_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-30b-a3b-captioner",
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."
}
}
]
}
]
}'DashScope
Python
import os
import base64
import dashscope
dashscope.base_http_api_url="https://dashscope-intl.aliyuncs.com/api/v1"
# Fungsi enkode: Mengonversi file lokal ke string terkode Base64
def encode_audio(audio_file_path):
with open(audio_file_path, "rb") as audio_file:
return base64.b64encode(audio_file.read()).decode("utf-8")
# Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur absolut file audio lokal Anda.
audio_file_path = "xxx/ABSOLUTE_PATH/welcome.mp3"
base64_audio = encode_audio(audio_file_path)
print(base64_audio)
messages = [
{
"role": "user",
# Saat melewati file lokal dengan pengkodean Base64, Anda harus menggunakan awalan data: untuk memastikan URL file valid.
# Kata kunci "base64" harus disertakan sebelum data terkode Base64 (base64_audio), jika tidak akan terjadi kesalahan.
"content": [{"audio":f"data:;base64,{base64_audio}"}],
}
]
response = dashscope.MultiModalConversation.call(
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv("DASHSCOPE_API_KEY")
model="qwen3-omni-30b-a3b-captioner",
messages=messages,
)
print(response.output.choices[0].message.content[0]["text"])Java
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.Base64;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// URL berikut adalah untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
private static String encodeAudioToBase64(String audioPath) throws IOException {
Path path = Paths.get(audioPath);
byte[] audioBytes = Files.readAllBytes(path);
return Base64.getEncoder().encodeToString(audioBytes);
}
public static void callWithLocalFile()
throws ApiException, NoApiKeyException, UploadFileException,IOException{
// Ganti ABSOLUTE_PATH/welcome.mp3 dengan jalur aktual file lokal Anda.
String localFilePath = "ABSOLUTE_PATH/welcome.mp3";
String base64Audio = encodeAudioToBase64(localFilePath);
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
// Saat melewati file lokal dengan pengkodean Base64, Anda harus menggunakan awalan data: untuk memastikan URL file valid.
// Kata kunci "base64" harus disertakan sebelum data terkode Base64 (base64_audio), jika tidak akan terjadi kesalahan.
.content(Arrays.asList(
new HashMap<String, Object>(){{put("audio", "data:;base64," + base64Audio);}}
))
.build();
MultiModalConversationParam param = MultiModalConversationParam.builder()
.model("qwen3-omni-30b-a3b-captioner")
// Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.message(userMessage)
.build();
MultiModalConversationResult result = conv.call(param);
System.out.println("Keluaran:\n" + result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
}
public static void main(String[] args) {
try {
callWithLocalFile();
} catch (ApiException | NoApiKeyException | UploadFileException | IOException e) {
System.out.println(e.getMessage());
}
System.exit(0);
}
}curl
Untuk informasi tentang cara mengonversi file ke string terkode Base64, lihat contoh kode.
Untuk tujuan demonstrasi, string Base64
"data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."dipotong. Dalam praktiknya, Anda harus melewati string terkode lengkap.
# ======= Penting =======
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# Berikut adalah base_url untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === Hapus komentar ini sebelum eksekusi ===
curl -X POST 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"model": "qwen3-omni-30b-a3b-captioner",
"input":{
"messages":[
{
"role": "user",
"content": [
{"audio": "data:;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjI5...."}
]
}
]
}
}'Referensi API
Untuk informasi lebih lanjut tentang parameter masukan dan keluaran dari Qwen3-Omni-Captioner, lihat Qwen.
Kode kesalahan
Jika panggilan gagal, lihat Pesan kesalahan untuk pemecahan masalah.
FAQ
Batasan
Model memiliki batasan berikut untuk file audio:
Durasi: Kurang dari atau sama dengan 40 menit.
Jumlah file: Hanya satu file audio yang didukung per permintaan.
Format file: Format yang didukung termasuk AMR, WAV (CodecID: GSM_MS), WAV (PCM), 3GP, 3GPP, AAC, dan MP3.
Metode masukan file: URL audio yang dapat diakses publik, Pengkodean Base64, atau jalur file lokal.
Ukuran file:
URL publik: Tidak lebih dari 1 GB.
Jalur file: File audio harus lebih kecil dari 10 MB.
Pengkodean Base64: String terkode Base64 harus lebih kecil dari 10 MB. Untuk informasi lebih lanjut, lihat Melewati file lokal (Pengkodean Base64 atau jalur file).
Untuk mengecilkan file, lihat Cara mengecilkan ukuran file audio ke yang diperlukan?