TL;DR
Qwen3.5-Omni; metin, resim, ses ve video gibi girdileri kabul eder ve metin veya gerçek zamanlı konuşma döndürür. Alibaba Cloud DashScope API aracılığıyla erişebilir veya HuggingFace Transformers aracılığıyla yerel olarak çalıştırabilirsiniz. Bu rehberde API kurulumunu, her modalite için çalışan kod örneklerini, ses klonlamayı ve isteklerinizi Apidog ile nasıl test edeceğinizi bulacaksınız.
Qwen3.5-Omni ile Neler Yapabilirsiniz?
Qwen3.5-Omni, metin, resim, ses ve video olmak üzere dört giriş türünü aynı anda işleyebilen bir modeldir. İsteğinizin konfigürasyonuna göre metin veya doğal konuşma çıktısı üretebilir.
26 Mart 2026'da yayınlanan bu model, MoE tabanlı Thinker-Talker mimarisiyle çalışır. Thinker, multimodal girdileri işler; Talker, tamamlanmadan önce ses akışını başlatan bir sistemle çıktıyı konuşmaya dönüştürür.
Üç varyant mevcut:
- Plus: En yüksek kalite, ileri akıl yürütme ve ses klonlama için.
- Flash: Hız ve kalite dengesi, çoğu üretim senaryosu için önerilir.
- Light: Düşük gecikme, mobil ve edge senaryolarında kullanılır.
Pratikte çoğu örnekte "Flash" kullanılır, maksimum kalite için "Plus" tercih edilir.
DashScope ile API Erişimi
Qwen3.5-Omni'yi üretimde kullanmanın ana yolu, Alibaba Cloud DashScope API'dir. Aşağıdaki adımları izleyerek hızlıca başlayabilirsiniz.
1. DashScope Hesabı Oluşturun
https://dashscope.aliyuncs.com adresinden kaydolun. Alibaba Cloud hesabınız varsa kullanabilirsiniz.
2. API Anahtarınızı Alın
- DashScope konsoluna giriş yapın.
- Sol menüden API Anahtar Yönetimi'ne tıklayın.
-
API Anahtarı Oluştur'a basın ve anahtarı kopyalayın (ör:
sk-...).
3. SDK Kurulumu
pip install dashscope
veya OpenAI uyumlu uç noktayı kullanmak için:
pip install openai
DashScope, https://dashscope.aliyuncs.com/compatible-mode/v1 adresinde OpenAI uyumlu bir API sunar. Kodunuzda sadece base_url'ü değiştirin.
Metin Girişi ve Çıkışı
En basit kullanım: Metin girişi ile metin çıktısı almak.
from openai import OpenAI
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
messages=[
{
"role": "user",
"content": "REST ve GraphQL API'leri arasındaki farkı basit terimlerle açıkla."
}
],
)
print(response.choices[0].message.content)
Daha karmaşık işler için qwen3.5-omni-plus veya düşük gecikme için qwen3.5-omni-light kullanabilirsiniz.
Ses Girişi: Transkripsiyon ve Anlama
Ses dosyasını (URL veya base64) doğrudan gönderin. Model, transkripsiyon ve anlama işlemini tek adımda gerçekleştirir.
import base64
from openai import OpenAI
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
with open("meeting_recording.wav", "rb") as f:
audio_data = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
messages=[
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": audio_data,
"format": "wav"
}
},
{
"type": "text",
"text": "Bu toplantıda alınan temel kararları özetle ve eylem maddelerini listele."
}
]
}
],
)
print(response.choices[0].message.content)
Model 113 dili otomatik tanır. Desteklenen formatlar: WAV, MP3, M4A, OGG, FLAC.
Ses Çıkışı: Metinden Konuşmaya
Yanıtta konuşma almak için modalities ve ses parametrelerini ayarlayın.
from openai import OpenAI
import base64
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
modalities=["text", "audio"],
audio={"voice": "Chelsie", "format": "wav"},
messages=[
{
"role": "user",
"content": "OAuth 2.0 kullanarak bir REST API'yi kimlik doğrulama adımlarını açıklar mısın?"
}
],
)
text_content = response.choices[0].message.content
audio_data = response.choices[0].message.audio.data
with open("response.wav", "wb") as f:
f.write(base64.b64decode(audio_data))
print(f"Metin: {text_content}")
print("Ses response.wav'e kaydedildi.")
İki hazır ses: Chelsie (kadın), Ethan (erkek). 36 dilde konuşma üretimi yapılabilir.
Resim Girişi: Görsel Anlama
Bir resim (URL veya base64) ve metin sorusuyla birlikte gönderin.
from openai import OpenAI
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/api-diagram.png"
}
},
{
"type": "text",
"text": "Bu API mimarisi diyagramını açıkla ve olası darboğazları belirle."
}
]
}
],
)
print(response.choices[0].message.content)
Yerel resmi base64 olarak gönder:
import base64
with open("screenshot.png", "rb") as f:
image_data = base64.b64encode(f.read()).decode("utf-8")
image_url = f"data:image/png;base64,{image_data}"
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": image_url}},
{"type": "text", "text": "Bu ekran görüntüsünde hangi hata gösteriliyor?"}
]
}
],
)
Video Girişi: Video ve Ekran Kaydı Anlamlandırma
Qwen3.5-Omni, video ve ses parçalarını birlikte işler.
from openai import OpenAI
import base64
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
messages=[
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": "https://example.com/product-demo.mp4"
}
},
{
"type": "text",
"text": "Geliştiricinin bu demoda ne inşa ettiğini açıkla ve eşdeğer kodu yaz."
}
]
}
],
)
print(response.choices[0].message.content)
Ses-Görsel "Vibe Kodlama"
Bir ekran kaydını geçirip modelden kod ürettirmek için:
with open("screen_recording.mp4", "rb") as f:
video_data = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="qwen3.5-omni-plus", # Kod üretimi için Plus tavsiye edilir
messages=[
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {"url": f"data:video/mp4;base64,{video_data}"}
},
{
"type": "text",
"text": "Bu ekran kaydını izleyin ve gördüğünüz uygulamayı kod olarak çoğaltın. Tüm UI ve etkileşimleri dahil edin."
}
]
}
],
)
print(response.choices[0].message.content)
256K token pencere, yaklaşık 400 saniye 720p video barındırır. Daha uzun videolar için bölme yapın.
Ses Klonlama
Modelin yanıtını verdiğiniz örnek sesle klonlatabilirsiniz (Plus ve Flash'ta API üzerinden mevcut).
import base64
from openai import OpenAI
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
with open("voice_sample.wav", "rb") as f:
voice_sample = base64.b64encode(f.read()).decode("utf-8")
response = client.chat.completions.create(
model="qwen3.5-omni-plus",
modalities=["text", "audio"],
audio={
"voice": "custom",
"format": "wav",
"voice_sample": {
"data": voice_sample,
"format": "wav"
}
},
messages=[
{
"role": "user",
"content": "Apidog geliştirici portalına hoş geldiniz. Size bugün nasıl yardımcı olabilirim?"
}
],
)
audio_data = response.choices[0].message.audio.data
with open("cloned_response.wav", "wb") as f:
f.write(base64.b64decode(audio_data))
İpuçları:
- Temiz, arka plansız bir kayıt kullanın.
- 15-30 saniyelik örnekler idealdir.
- 16kHz veya üstü WAV formatı.
- Doğal konuşma içeren örnekler, metin okumasından daha iyidir.
Akış Yanıtları
Gerçek zamanlı sohbet veya uygulamalar için akışlı cevap alın:
from openai import OpenAI
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
stream = client.chat.completions.create(
model="qwen3.5-omni-flash",
modalities=["text", "audio"],
audio={"voice": "Ethan", "format": "pcm16"},
messages=[
{
"role": "user",
"content": "WebSocket bağlantılarının HTTP sorgulamadan nasıl farklı olduğunu açıkla."
}
],
stream=True,
)
audio_chunks = []
text_chunks = []
for chunk in stream:
delta = chunk.choices[0].delta
if hasattr(delta, "audio") and delta.audio:
if delta.audio.get("data"):
audio_chunks.append(delta.audio["data"])
if delta.content:
text_chunks.append(delta.content)
print(delta.content, end="", flush=True)
print()
if audio_chunks:
import base64
full_audio = b"".join(base64.b64decode(chunk) for chunk in audio_chunks)
with open("streamed_response.pcm", "wb") as f:
f.write(full_audio)
PCM16 formatı doğrudan ses arabelleğine aktarılabilir ve tam dosya beklemeniz gerekmez.
Karma Modalitelerle Çok Turlu Konuşma
Farklı modaliteleri bir konuşmada birleştirerek işleyin:
from openai import OpenAI
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
)
conversation = []
def send_message(content_parts):
conversation.append({"role": "user", "content": content_parts})
response = client.chat.completions.create(
model="qwen3.5-omni-flash",
messages=conversation,
)
reply = response.choices[0].message.content
conversation.append({"role": "assistant", "content": reply})
return reply
# 1. Tur: metin
print(send_message([{"type": "text", "text": "Sürekli 503 hataları döndüren bir API'im var."}]))
# 2. Tur: resim ekle (hata günlüğü ekran görüntüsü)
import base64
with open("error_log.png", "rb") as f:
img = base64.b64encode(f.read()).decode()
print(send_message([
{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{img}"}},
{"type": "text", "text": "İşte hata günlüğü ekran görüntüsü. Buna ne sebep oluyor?"}
]))
# 3. Tur: takip sorusu
print(send_message([{"type": "text", "text": "Bahsettiğiniz bağlantı havuzu tükenmesini nasıl düzeltirim?"}]))
256K bağlam, uzun ve multimodal konuşmalar için yeterlidir.
HuggingFace ile Yerel Dağıtım
Kendi altyapınızda çalıştırmak için:
pip install transformers==4.57.3
pip install accelerate
pip install qwen-omni-utils -U
pip install -U flash-attn --no-build-isolation
import soundfile as sf
from transformers import Qwen3OmniMoeForConditionalGeneration, Qwen3OmniMoeProcessor
from qwen_omni_utils import process_mm_info
model_path = "Qwen/Qwen3-Omni-30B-A3B-Instruct"
model = Qwen3OmniMoeForConditionalGeneration.from_pretrained(
model_path,
device_map="auto",
attn_implementation="flash_attention_2",
)
processor = Qwen3OmniMoeProcessor.from_pretrained(model_path)
conversation = [
{
"role": "system",
"content": [
{"type": "text", "text": "Siz, Qwen Ekibi, Alibaba Group tarafından geliştirilmiş, işitsel ve görsel girdileri algılayabilen, ayrıca metin ve konuşma üretebilen sanal bir insansınız."}
],
},
{
"role": "user",
"content": [
{"type": "audio", "audio": "path/to/your/audio.wav"},
{"type": "text", "text": "Bu seste ne tartışılıyor?"}
],
},
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
audios, images, videos = process_mm_info(conversation, use_audio_in_video=True)
inputs = processor(
text=text,
audio=audios,
images=images,
videos=videos,
return_tensors="pt",
padding=True,
)
inputs = inputs.to(model.device).to(model.dtype)
text_ids, audio_output = model.generate(**inputs, speaker="Chelsie")
text_response = processor.batch_decode(text_ids, skip_special_tokens=True)[0]
sf.write("local_response.wav", audio_output.reshape(-1).cpu().numpy(), samplerate=24000)
print(text_response)
Yerel dağıtım için minimum GPU bellek:
| Varyant | Hassasiyet | Minimum VRAM |
|---|---|---|
| Plus (30B MoE) | BF16 | ~40GB |
| Flash | BF16 | ~20GB |
| Light | BF16 | ~10GB |
Üretim için vLLM kullanmak performansı artırır.
Apidog ile Qwen3.5-Omni İsteklerini Test Etme
Çok modlu API istekleri karmaşıktır: base64 kodlu medya, iç içe içerik dizileri, çoklu yanıt tipleri. Terminalden test etmek yerine Apidog kullanarak süreci kolaylaştırın.
- DashScope uç noktanızı yeni bir koleksiyon olarak tanımlayın.
- API anahtarınızı ortam değişkeni olarak yönetin.
- Her modalite ve varyant (Plus, Flash, Light) için şablonlar oluşturun, kolayca çoğaltıp parametreleri değiştirin.
- Yanıt, gecikme ve kaliteyi aynı ekranda kıyaslayın.
- Apidog'da test iddiaları yazabilirsiniz:
- Metin yanıtı için
choices[0].message.contentboş mu kontrol edin. - Ses çıkışı gerektiren isteklerde
choices[0].message.audio.datamevcut mu doğrulayın. - Flash varyantında yanıt gecikmesini eşik altında tutun.
- Metin yanıtı için
Hata Yönetimi ve Retry Mantığı
Büyük modellerde hız sınırı ve zaman aşımı sık görülebilir. Retry mantığını doğrudan kodunuza ekleyin:
import time
import random
from openai import OpenAI, RateLimitError, APITimeoutError, APIConnectionError
client = OpenAI(
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
api_key="sk-YOUR_DASHSCOPE_KEY",
timeout=120, # Büyük video için 2 dakika timeout
)
def call_with_retry(messages, model="qwen3.5-omni-flash", max_retries=3):
for attempt in range(max_retries):
try:
return client.chat.completions.create(
model=model,
messages=messages,
)
except RateLimitError:
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Hız sınırı aşıldı. {wait:.1f}s bekleniyor...")
time.sleep(wait)
except (APITimeoutError, APIConnectionError) as e:
if attempt == max_retries - 1:
raise
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Bağlantı hatası: {e}. {wait:.1f}s içinde tekrar denenecek...")
time.sleep(wait)
raise RuntimeError(f"{max_retries} denemeden sonra başarısız oldu")
100MB üzeri video için:
- Gerekli kısmı kırpın,
- Çözünürlüğü düşürün (ör. 480p),
- Uzun kayıtları bölün.
Yaygın Problemler ve Çözümleri
"Sayılar veya teknik terimlerde ses bozuk"
Qwen3.5-Omni'nin güncel sürümünü kullanın. Kendi sunucunuzda çalıştırıyorsanız HuggingFace'den son ağırlıkları alın."Ses kesintisi çalışmıyor"
Flash veya Plus varyantına geçin, akışlı yanıt kullanın."Ses klonlama kalitesi düşük"
Temiz örnek, en az 15 saniye ve 16kHz/44.1kHz WAV kullanın."Video girişinde token limiti hatası"
Video süresi 6 dakikanın altında olmalı; gerekirse kırpın."Yerel dağıtım yavaş"
vLLM ile dağıtım yapın, transformer yerine vllm kullanımı performansı artırır.
SSS
Qwen3.5-Omni için hangi DashScope model kimliğini kullanmalıyım?
Kalite ve gecikmeye göre qwen3.5-omni-plus, qwen3.5-omni-flash veya qwen3.5-omni-light. Genellikle Flash ile başlayın.
OpenAI Python SDK'yı DashScope ile kullanabilir miyim?
Evet. base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ayarlayın ve DashScope anahtarınızı kullanın. Format OpenAI ile aynıdır.
Tek istekte birden fazla dosya (ses + resim) nasıl gönderilir?
Her türü content dizisinde ayrı obje olarak gönderin. Dört modalite de aynı mesajda olabilir.
Ses/video dosyaları için boyut sınırı var mı?
DashScope'da istek başına limitler var. Büyük dosyalar için base64 yerine bir URL referansı verin.
Ses çıkışını nasıl kapatır, sadece metin alırım?
modalities=["text"] ayarlayın veya hiç göndermeyin; sadece metin döner.
İşlev/araç çağırma destekleniyor mu?
Evet, standart tools parametresiyle işlev çağırabilirsiniz.
Uzun ses kayıtlarını nasıl işleyebilirim?
10 saatten kısa kayıtları tek seferde, daha uzunları ise bölerek gönderin ve sonuçları birleştirin.
Çok modlu istekleri uygulama yazmadan önce nasıl test ederim?
Her modalite için Apidog'da istek şablonları oluşturun. Model varyantları arasında geçiş yapabilir, yanıtları ve kaliteyi analiz edebilirsiniz. Apidog üzerinden hızlıca test edin.


Top comments (0)