Model penalaran visual pertama-tama menghasilkan proses pemikirannya, lalu memberikan jawaban. Pendekatan ini menjadikannya cocok untuk tugas analisis visual kompleks, seperti menyelesaikan soal matematika, menganalisis data grafik, atau memahami video yang rumit.
Contoh
Komponen di atas hanya untuk tujuan demonstrasi dan tidak mengirim permintaan nyata.
Model yang didukung
Qwen3-VL
Model hybrid-thinking: seri qwen3-vl-plus, seri qwen3-vl-flash
Model thinking-only: qwen3-vl-235b-a22b-thinking, qwen3-vl-32b-thinking, qwen3-vl-30b-a3b-thinking, qwen3-vl-8b-thinking
QVQ
Model thinking-only: seri qvq-max, seri qvq-plus
Cara menggunakan
Proses pemikiran: Alibaba Cloud Model Studio menyediakan dua jenis model penalaran visual: hybrid-thinking dan thinking-only.
Model hybrid-thinking: Anda dapat mengontrol perilaku pemikirannya menggunakan parameter
enable_thinking:Atur ke
trueuntuk mengaktifkan pemikiran. Model akan terlebih dahulu menghasilkan proses pemikirannya lalu memberikan tanggapan akhir.Atur ke
falseuntuk menonaktifkan pemikiran. Model akan langsung menghasilkan tanggapan.
Model thinking-only: Model ini selalu berpikir sebelum memberikan tanggapan, dan perilaku ini tidak dapat dinonaktifkan.
Metode keluaran: Model penalaran visual mencakup proses pemikiran yang mendetail. Untuk menghindari timeout akibat tanggapan yang panjang, gunakan keluaran streaming.
Seri Qwen3-VL mendukung metode streaming dan non-streaming.
Seri QVQ hanya mendukung keluaran streaming.
Rekomendasi Prompt Sistem:
Untuk percakapan satu giliran atau sederhana: Untuk hasil inferensi terbaik, jangan atur
System Message. Berikan instruksi, seperti pengaturan peran model dan persyaratan format keluaran, melaluiUser Message.Untuk aplikasi kompleks seperti membangun agen atau mengimplementasikan pemanggilan alat: Gunakan
System Messageuntuk menentukan peran, kemampuan, dan kerangka perilaku model guna memastikan stabilitas dan keandalan.
Memulai
Prasyarat
Anda telah mendapatkan kunci API dan mengonfigurasi kunci API sebagai variabel lingkungan.
Jika Anda memanggil model menggunakan SDK, Anda harus menginstal versi terbaru SDK. SDK DashScope Python harus versi 1.24.6 atau lebih baru, dan SDK DashScope Java harus versi 2.21.10 atau lebih baru.
Contoh berikut menunjukkan cara memanggil model qvq-max untuk menyelesaikan soal matematika dalam citra dan mencetak proses pemikiran serta tanggapan akhir secara terpisah menggunakan keluaran streaming.
Kompatibel dengan OpenAI
Python
from openai import OpenAI
import os
# Inisialisasi klien OpenAI
client = OpenAI(
# Jika Anda menggunakan model di wilayah China (Beijing), Anda perlu menggunakan kunci API untuk wilayah tersebut. Untuk mendapatkannya, lihat https://bailian.console.alibabacloud.com/?tab=model#/api-key
# Jika variabel lingkungan belum dikonfigurasi, ganti ini dengan Kunci API Model Studio Anda: api_key="sk-xxx"
api_key = os.getenv("DASHSCOPE_API_KEY"),
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # Menyimpan seluruh proses pemikiran
answer_content = "" # Menyimpan seluruh tanggapan
is_answering = False # Memeriksa apakah proses pemikiran telah selesai dan tanggapan telah dimulai
# Buat permintaan chat completion
completion = client.chat.completions.create(
model="qvq-max", # Contoh ini menggunakan qvq-max. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan.
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "Bagaimana cara menyelesaikan soal ini?"},
],
},
],
stream=True,
# Hapus komentar berikut untuk mengembalikan penggunaan token pada chunk terakhir
# stream_options={
# "include_usage": True
# }
)
print("\n" + "=" * 20 + "Proses pemikiran" + "=" * 20 + "\n")
for chunk in completion:
# Jika chunk.choices kosong, cetak penggunaan
if not chunk.choices:
print("\nPenggunaan:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# Cetak proses pemikiran
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# Mulai memberikan tanggapan
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
is_answering = True
# Cetak proses tanggapan
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "Proses pemikiran lengkap" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
# print(answer_content)Node.js
import OpenAI from "openai";
import process from 'process';
// Inisialisasi klien OpenAI
const openai = new OpenAI({
apiKey: process.env.DASHSCOPE_API_KEY, // Baca dari variabel lingkungan. Jika Anda menggunakan model di wilayah China (Beijing), Anda perlu menggunakan kunci API untuk wilayah tersebut. Untuk mendapatkannya, lihat https://bailian.console.alibabacloud.com/?tab=model#/api-key
// Jika Anda menggunakan model di wilayah China (Beijing), ganti baseURL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1'
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "Selesaikan soal ini" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qvq-max',
messages: messages,
stream: true
});
console.log('\n' + '='.repeat(20) + 'Proses pemikiran' + '='.repeat(20) + '\n');
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\nPenggunaan:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// Tangani proses pemikiran
if (delta.reasoning_content) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// Tangani tanggapan resmi
else if (delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + 'Tanggapan lengkap' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('Error:', error);
}
}
main();HTTP
# ======= PENTING =======
# Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Jika Anda menggunakan model di wilayah China (Beijing), Anda perlu menggunakan kunci API untuk wilayah tersebut. Untuk mendapatkannya, lihat https://bailian.console.alibabacloud.com/?tab=model#/api-key
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qvq-max",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "Selesaikan soal ini"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true}
}'DashScope
Saat memanggil model QVQ menggunakan DashScope:
Parameter
incremental_outputsecara default bernilaitruedan tidak dapat diatur kefalse. Hanya keluaran streaming inkremental yang didukung.Parameter
result_formatsecara default bernilai"message"dan tidak dapat diatur ke"text".
Python
import os
import dashscope
from dashscope import MultiModalConversation
# Jika Anda menggunakan model di wilayah China (Beijing), ganti base_http_api_url dengan: https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Bagaimana cara menyelesaikan soal ini?"}
]
}
]
response = MultiModalConversation.call(
# Jika Anda menggunakan model di wilayah China (Beijing), Anda perlu menggunakan kunci API untuk wilayah tersebut. Untuk mendapatkannya, lihat https://bailian.console.alibabacloud.com/?tab=model#/api-key
# Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="sk-xxx",
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qvq-max", # Contoh ini menggunakan qvq-max. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan.
messages=messages,
stream=True,
)
# Menyimpan seluruh proses pemikiran
reasoning_content = ""
# Menyimpan seluruh tanggapan
answer_content = ""
# Memeriksa apakah proses pemikiran telah selesai dan tanggapan telah dimulai
is_answering = False
print("=" * 20 + "Proses pemikiran" + "=" * 20)
for chunk in response:
# Jika baik proses pemikiran maupun tanggapan kosong, abaikan
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# Jika saat ini sedang dalam proses pemikiran
if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# Jika saat ini sedang memberikan tanggapan
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "Tanggapan lengkap" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# Untuk mencetak proses pemikiran dan tanggapan lengkap, hapus komentar dan jalankan kode berikut
# print("=" * 20 + "Proses pemikiran lengkap" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
# print(f"{answer_content}")Java
// Versi SDK DashScope >= 2.19.0
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {
// Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1
Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // Nilai default
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================Proses pemikiran====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================Tanggapan lengkap====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return MultiModalConversationParam.builder()
// Jika Anda menggunakan model di wilayah China (Beijing), Anda perlu menggunakan kunci API untuk wilayah tersebut. Untuk mendapatkannya, lihat https://bailian.console.alibabacloud.com/?tab=model#/api-key
// Jika variabel lingkungan belum dikonfigurasi, ganti baris berikut dengan Kunci API Model Studio Anda: .apiKey("sk-xxx")
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
// Contoh ini menggunakan qvq-max. Anda dapat menggantinya dengan nama model lain sesuai kebutuhan.
.model("qvq-max")
.messages(Arrays.asList(Msg))
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(message);
});
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "Selesaikan soal ini")))
.build();
streamCallWithMessage(conv, userMsg);
// Cetak hasil akhir
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================Tanggapan lengkap====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("Terjadi pengecualian: {}", e.getMessage());
}
System.exit(0);
}
}HTTP
curl
# ======= PENTING =======
# Jika Anda menggunakan model di wilayah China (Beijing), ganti URL dengan: https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# Jika Anda menggunakan model di wilayah China (Beijing), Anda perlu menggunakan kunci API untuk wilayah tersebut. Untuk mendapatkannya, lihat https://bailian.console.alibabacloud.com/?tab=model#/api-key
# === 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": "qvq-max",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Selesaikan soal ini"}
]
}
]
}
}'Kemampuan inti
Mengaktifkan atau menonaktifkan proses pemikiran
Untuk skenario yang memerlukan proses penalaran mendetail, seperti menyelesaikan soal atau menganalisis laporan, Anda dapat mengaktifkan proses pemikiran menggunakan parameter enable_thinking. Contoh berikut menunjukkan cara mengaktifkan proses pemikiran.
Parameter enable_thinking hanya didukung oleh model seri qwen3-vl-plus dan qwen3-vl-flash.
Kompatibel dengan OpenAI
Parameter enable_thinking dan thinking_budget bukan parameter standar OpenAI. Metode untuk meneruskannya bervariasi di SDK untuk bahasa pemrograman berbeda:
SDK Python: Anda harus meneruskannya melalui kamus
extra_body.SDK Node.js: Anda dapat meneruskannya langsung sebagai parameter tingkat atas.
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"),
# Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # Menyimpan seluruh proses pemikiran
answer_content = "" # Menyimpan seluruh tanggapan
is_answering = False # Memeriksa apakah proses pemikiran telah selesai dan tanggapan telah dimulai
enable_thinking = True
# Buat permintaan chat completion
completion = client.chat.completions.create(
model="qwen3-vl-plus",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "Bagaimana cara menyelesaikan soal ini?"},
],
},
],
stream=True,
# Parameter enable_thinking mengaktifkan proses pemikiran.
# Untuk qwen3-vl-plus dan qwen3-vl-flash, Anda dapat menggunakan enable_thinking untuk mengaktifkan atau menonaktifkan pemikiran. Untuk model dengan akhiran 'thinking', seperti qwen3-vl-235b-a22b-thinking, enable_thinking hanya dapat diatur ke true. Parameter ini tidak berlaku untuk model Qwen-VL lainnya.
extra_body={
'enable_thinking': enable_thinking
},
# Hapus komentar berikut untuk mengembalikan penggunaan token pada chunk terakhir
# stream_options={
# "include_usage": True
# }
)
if enable_thinking:
print("\n" + "=" * 20 + "Proses pemikiran" + "=" * 20 + "\n")
for chunk in completion:
# Jika chunk.choices kosong, cetak penggunaan
if not chunk.choices:
print("\nPenggunaan:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# Cetak proses pemikiran
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# Mulai memberikan tanggapan
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
is_answering = True
# Cetak proses tanggapan
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "Proses pemikiran lengkap" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
# print(answer_content)import OpenAI from "openai";
// Inisialisasi klien 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
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let enableThinking = true;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "Selesaikan soal ini" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qwen3-vl-plus',
messages: messages,
stream: true,
// Catatan: Di SDK Node.js, parameter non-standar seperti enableThinking diteruskan sebagai properti tingkat atas dan tidak perlu dimasukkan ke dalam extra_body.
enable_thinking: enableThinking
});
if (enableThinking){console.log('\n' + '='.repeat(20) + 'Proses pemikiran' + '='.repeat(20) + '\n');}
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\nPenggunaan:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// Tangani proses pemikiran
if (delta.reasoning_content) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// Tangani tanggapan resmi
else if (delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + 'Tanggapan lengkap' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('Error:', error);
}
}
main();# ======= PENTING =======
# Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3-vl-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "Selesaikan soal ini"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true},
"enable_thinking": true
}'DashScope
import os
import dashscope
from dashscope import MultiModalConversation
# Jika Anda menggunakan model di wilayah Singapura, hapus komentar baris berikut
# dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
enable_thinking=True
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Bagaimana cara menyelesaikan soal ini?"}
]
}
]
response = MultiModalConversation.call(
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="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
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-vl-plus",
messages=messages,
stream=True,
# Parameter enable_thinking mengaktifkan proses pemikiran.
# Untuk qwen3-vl-plus dan qwen3-vl-flash, Anda dapat menggunakan enable_thinking untuk mengaktifkan atau menonaktifkan pemikiran. Untuk model dengan akhiran 'thinking', seperti qwen3-vl-235b-a22b-thinking, enable_thinking hanya dapat diatur ke true. Parameter ini tidak berlaku untuk model Qwen-VL lainnya.
enable_thinking=enable_thinking
)
# Menyimpan seluruh proses pemikiran
reasoning_content = ""
# Menyimpan seluruh tanggapan
answer_content = ""
# Memeriksa apakah proses pemikiran telah selesai dan tanggapan telah dimulai
is_answering = False
if enable_thinking:
print("=" * 20 + "Proses pemikiran" + "=" * 20)
for chunk in response:
# Jika baik proses pemikiran maupun tanggapan kosong, abaikan
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# Jika saat ini sedang dalam proses pemikiran
if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# Jika saat ini sedang memberikan tanggapan
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "Tanggapan lengkap" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# Untuk mencetak proses pemikiran dan tanggapan lengkap, hapus komentar dan jalankan kode berikut
# print("=" * 20 + "Proses pemikiran lengkap" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
# print(f"{answer_content}")// Versi SDK DashScope >= 2.21.10
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // Nilai default
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================Proses pemikiran====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================Tanggapan lengkap====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return 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-vl-plus")
.messages(Arrays.asList(Msg))
.enableThinking(true)
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(message);
});
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "Selesaikan soal ini")))
.build();
streamCallWithMessage(conv, userMsg);
// Cetak hasil akhir
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================Tanggapan lengkap====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("Terjadi pengecualian: {}", e.getMessage());
}
System.exit(0);
}
}# ======= 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 URL dasar 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-vl-plus",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Selesaikan soal ini"}
]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true
}
}'Batasi panjang proses pemikiran
Untuk mencegah model penalaran visual menghasilkan proses pemikiran yang terlalu panjang, Anda dapat menggunakan parameter thinking_budget untuk membatasi jumlah maksimum token yang dihasilkan untuk proses pemikiran. Jika proses pemikiran melebihi batas ini, kontennya akan dipotong, dan model segera mulai menghasilkan jawaban akhir. Nilai default thinking_budget adalah panjang maksimum rantai-pikiran model. Untuk informasi lebih lanjut, lihat Daftar model.
Parameter thinking_budget hanya didukung oleh Qwen3-VL (mode berpikir).
Kompatibel dengan OpenAI
Parameter thinking_budget bukan parameter standar OpenAI. Jika Anda menggunakan SDK Python OpenAI, Anda harus meneruskannya melalui extra_body.
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"),
# Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1
base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
)
reasoning_content = "" # Menyimpan seluruh proses pemikiran
answer_content = "" # Menyimpan seluruh tanggapan
is_answering = False # Memeriksa apakah proses pemikiran telah selesai dan tanggapan telah dimulai
enable_thinking = True
# Buat permintaan chat completion
completion = client.chat.completions.create(
model="qwen3-vl-plus",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
},
},
{"type": "text", "text": "Bagaimana cara menyelesaikan soal ini?"},
],
},
],
stream=True,
# Parameter enable_thinking mengaktifkan proses pemikiran. Parameter thinking_budget menetapkan jumlah maksimum token untuk proses penalaran.
# Untuk qwen3-vl-plus dan qwen3-vl-flash, Anda dapat menggunakan enable_thinking untuk mengaktifkan atau menonaktifkan pemikiran. Untuk model dengan akhiran 'thinking', seperti qwen3-vl-235b-a22b-thinking, enable_thinking hanya dapat diatur ke true. Parameter ini tidak berlaku untuk model Qwen-VL lainnya.
extra_body={
'enable_thinking': enable_thinking,
"thinking_budget": 81920},
# Hapus komentar berikut untuk mengembalikan penggunaan token pada chunk terakhir
# stream_options={
# "include_usage": True
# }
)
if enable_thinking:
print("\n" + "=" * 20 + "Proses pemikiran" + "=" * 20 + "\n")
for chunk in completion:
# Jika chunk.choices kosong, cetak penggunaan
if not chunk.choices:
print("\nPenggunaan:")
print(chunk.usage)
else:
delta = chunk.choices[0].delta
# Cetak proses pemikiran
if hasattr(delta, 'reasoning_content') and delta.reasoning_content != None:
print(delta.reasoning_content, end='', flush=True)
reasoning_content += delta.reasoning_content
else:
# Mulai memberikan tanggapan
if delta.content != "" and is_answering is False:
print("\n" + "=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
is_answering = True
# Cetak proses tanggapan
print(delta.content, end='', flush=True)
answer_content += delta.content
# print("=" * 20 + "Proses pemikiran lengkap" + "=" * 20 + "\n")
# print(reasoning_content)
# print("=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
# print(answer_content)import OpenAI from "openai";
// Inisialisasi klien 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
// Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: apiKey: "sk-xxx"
apiKey: process.env.DASHSCOPE_API_KEY,
// Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan https://dashscope.aliyuncs.com/compatible-mode/v1
baseURL: "https://dashscope-intl.aliyuncs.com/compatible-mode/v1"
});
let reasoningContent = '';
let answerContent = '';
let isAnswering = false;
let enableThinking = true;
let messages = [
{
role: "user",
content: [
{ type: "image_url", image_url: { "url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg" } },
{ type: "text", text: "Selesaikan soal ini" },
]
}]
async function main() {
try {
const stream = await openai.chat.completions.create({
model: 'qwen3-vl-plus',
messages: messages,
stream: true,
// Catatan: Di SDK Node.js, parameter non-standar seperti enableThinking diteruskan sebagai properti tingkat atas dan tidak perlu dimasukkan ke dalam extra_body.
enable_thinking: enableThinking,
thinking_budget: 81920
});
if (enableThinking){console.log('\n' + '='.repeat(20) + 'Proses pemikiran' + '='.repeat(20) + '\n');}
for await (const chunk of stream) {
if (!chunk.choices?.length) {
console.log('\nPenggunaan:');
console.log(chunk.usage);
continue;
}
const delta = chunk.choices[0].delta;
// Tangani proses pemikiran
if (delta.reasoning_content) {
process.stdout.write(delta.reasoning_content);
reasoningContent += delta.reasoning_content;
}
// Tangani tanggapan resmi
else if (delta.content) {
if (!isAnswering) {
console.log('\n' + '='.repeat(20) + 'Tanggapan lengkap' + '='.repeat(20) + '\n');
isAnswering = true;
}
process.stdout.write(delta.content);
answerContent += delta.content;
}
}
} catch (error) {
console.error('Error:', error);
}
}
main();# ======= PENTING =======
# Berikut adalah URL dasar untuk wilayah Singapura. Jika Anda menggunakan model di wilayah Beijing, ganti base_url dengan: https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# Kunci API untuk wilayah Singapura dan Beijing berbeda. Untuk mendapatkan kunci API, lihat https://www.alibabacloud.com/help/en/model-studio/get-api-key
# === Hapus komentar ini sebelum eksekusi ===
curl --location 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"model": "qwen3-vl-plus",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"
}
},
{
"type": "text",
"text": "Selesaikan soal ini"
}
]
}
],
"stream":true,
"stream_options":{"include_usage":true},
"enable_thinking": true,
"thinking_budget": 81920
}'DashScope
import os
import dashscope
from dashscope import MultiModalConversation
# Jika Anda menggunakan model di wilayah Singapura, hapus komentar baris berikut
# dashscope.base_http_api_url = "https://dashscope-intl.aliyuncs.com/api/v1"
enable_thinking=True
messages = [
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Bagaimana cara menyelesaikan soal ini?"}
]
}
]
response = MultiModalConversation.call(
# Jika Anda belum mengonfigurasi variabel lingkungan, ganti baris berikut dengan Kunci API Model Studio Anda: api_key="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
api_key=os.getenv('DASHSCOPE_API_KEY'),
model="qwen3-vl-plus",
messages=messages,
stream=True,
# Parameter enable_thinking mengaktifkan proses pemikiran.
# Untuk qwen3-vl-plus dan qwen3-vl-flash, Anda dapat menggunakan enable_thinking untuk mengaktifkan atau menonaktifkan pemikiran. Untuk model dengan akhiran 'thinking', seperti qwen3-vl-235b-a22b-thinking, enable_thinking hanya dapat diatur ke true. Parameter ini tidak berlaku untuk model Qwen-VL lainnya.
enable_thinking=enable_thinking,
# Parameter thinking_budget menetapkan jumlah maksimum token untuk proses penalaran.
thinking_budget=81920,
)
# Menyimpan seluruh proses pemikiran
reasoning_content = ""
# Menyimpan seluruh tanggapan
answer_content = ""
# Memeriksa apakah proses pemikiran telah selesai dan tanggapan telah dimulai
is_answering = False
if enable_thinking:
print("=" * 20 + "Proses pemikiran" + "=" * 20)
for chunk in response:
# Jika baik proses pemikiran maupun tanggapan kosong, abaikan
message = chunk.output.choices[0].message
reasoning_content_chunk = message.get("reasoning_content", None)
if (chunk.output.choices[0].message.content == [] and
reasoning_content_chunk == ""):
pass
else:
# Jika saat ini sedang dalam proses pemikiran
if reasoning_content_chunk != None and chunk.output.choices[0].message.content == []:
print(chunk.output.choices[0].message.reasoning_content, end="")
reasoning_content += chunk.output.choices[0].message.reasoning_content
# Jika saat ini sedang memberikan tanggapan
elif chunk.output.choices[0].message.content != []:
if not is_answering:
print("\n" + "=" * 20 + "Tanggapan lengkap" + "=" * 20)
is_answering = True
print(chunk.output.choices[0].message.content[0]["text"], end="")
answer_content += chunk.output.choices[0].message.content[0]["text"]
# Untuk mencetak proses pemikiran dan tanggapan lengkap, hapus komentar dan jalankan kode berikut
# print("=" * 20 + "Proses pemikiran lengkap" + "=" * 20 + "\n")
# print(f"{reasoning_content}")
# print("=" * 20 + "Tanggapan lengkap" + "=" * 20 + "\n")
# print(f"{answer_content}")// Versi SDK DashScope >= 2.21.10
import java.util.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.exception.InputRequiredException;
import java.lang.System;
import com.alibaba.dashscope.utils.Constants;
public class Main {
static {Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";}
private static final Logger logger = LoggerFactory.getLogger(Main.class);
private static StringBuilder reasoningContent = new StringBuilder();
private static StringBuilder finalContent = new StringBuilder();
private static boolean isFirstPrint = true;
private static void handleGenerationResult(MultiModalConversationResult message) {
String re = message.getOutput().getChoices().get(0).getMessage().getReasoningContent();
String reasoning = Objects.isNull(re)?"":re; // Nilai default
List<Map<String, Object>> content = message.getOutput().getChoices().get(0).getMessage().getContent();
if (!reasoning.isEmpty()) {
reasoningContent.append(reasoning);
if (isFirstPrint) {
System.out.println("====================Proses pemikiran====================");
isFirstPrint = false;
}
System.out.print(reasoning);
}
if (Objects.nonNull(content) && !content.isEmpty()) {
Object text = content.get(0).get("text");
finalContent.append(content.get(0).get("text"));
if (!isFirstPrint) {
System.out.println("\n====================Tanggapan lengkap====================");
isFirstPrint = true;
}
System.out.print(text);
}
}
public static MultiModalConversationParam buildMultiModalConversationParam(MultiModalMessage Msg) {
return 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-vl-plus")
.messages(Arrays.asList(Msg))
.enableThinking(true)
.thinkingBudget(81920)
.incrementalOutput(true)
.build();
}
public static void streamCallWithMessage(MultiModalConversation conv, MultiModalMessage Msg)
throws NoApiKeyException, ApiException, InputRequiredException, UploadFileException {
MultiModalConversationParam param = buildMultiModalConversationParam(Msg);
Flowable<MultiModalConversationResult> result = conv.streamCall(param);
result.blockingForEach(message -> {
handleGenerationResult(message);
});
}
public static void main(String[] args) {
try {
MultiModalConversation conv = new MultiModalConversation();
MultiModalMessage userMsg = MultiModalMessage.builder()
.role(Role.USER.getValue())
.content(Arrays.asList(Collections.singletonMap("image", "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"),
Collections.singletonMap("text", "Selesaikan soal ini")))
.build();
streamCallWithMessage(conv, userMsg);
// Cetak hasil akhir
// if (reasoningContent.length() > 0) {
// System.out.println("\n====================Tanggapan lengkap====================");
// System.out.println(finalContent.toString());
// }
} catch (ApiException | NoApiKeyException | UploadFileException | InputRequiredException e) {
logger.error("Terjadi pengecualian: {}", e.getMessage());
}
System.exit(0);
}
}# ======= 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 URL dasar 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-vl-plus",
"input":{
"messages":[
{
"role": "user",
"content": [
{"image": "https://img.alicdn.com/imgextra/i1/O1CN01gDEY8M1W114Hi3XcN_!!6000000002727-0-tps-1024-406.jpg"},
{"text": "Selesaikan soal ini"}
]
}
]
},
"parameters":{
"enable_thinking": true,
"incremental_output": true,
"thinking_budget": 81920
}
}'Contoh penggunaan lainnya
Selain kemampuan penalarannya, model penalaran visual juga memiliki semua fitur model pemahaman visual. Anda dapat menggabungkan fitur-fitur ini untuk menangani skenario yang lebih kompleks:
Informasi penagihan
Total biaya = (Token input × Harga per token input) + (Token output × Harga per token output).
Proses pemikiran (
reasoning_content) merupakan bagian dari konten output dan ditagih sebagai token output. Jika model dalam mode berpikir tidak menghasilkan proses pemikiran, penagihannya mengikuti harga mode non-berpikir.Untuk informasi tentang cara menghitung token untuk citra atau video, lihat Pemahaman visual.
Referensi API
Untuk informasi tentang parameter input dan output model penalaran visual, lihat Qwen.
Kode error
Jika pemanggilan gagal, lihat Pesan error untuk pemecahan masalah.