## 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 kılavuz, API kurulumunu, her modalite için çalışan kod örneklerini, ses klonlamayı ve isteklerinizi Apidog ile nasıl test edeceğinizi kapsar. ## Ne ile çalışıyorsunuz? Qwen3.5-Omni, metin, resim, ses ve video olmak üzere dört giriş türünü aynı anda işleyen tek bir modeldir. İsteği nasıl yapılandırdığınıza bağlı olarak metin veya doğal konuşma döndürür. (Resim) 26 Mart 2026'da yayınlanan bu model, MoE omurgasına sahip bir Thinker-Talker mimarisi üzerine kurulmuştur. Thinker, multimodal girdiyi işler ve üzerinde akıl yürütür. Talker, tam yanıt tamamlanmadan önce ses akışını başlatan çoklu kod defteri sistemi kullanarak çıktıyı konuşmaya dönüştürür. Üç varyant mevcuttur: * **Plus**: En yüksek kalite, akıl yürütme ve ses klonlama için en iyisi. * **Flash**: Dengeli hız ve kalite, çoğu üretim kullanımı için önerilir. * **Light**: En düşük gecikme, mobil ve uç senaryolar için. Bu kılavuz, çoğu uygulama için doğru başlangıç noktası olduğu için çoğu örnekte Flash'ı kullanır. Maksimum kaliteye ihtiyaç duyduğunuzda Plus'ı kullanın. ## DashScope aracılığıyla API erişimi Alibaba Cloud'un DashScope API'si, Qwen3.5-Omni'yi üretimde kullanmanın birincil yoludur. Bir DashScope hesabına ve bir API anahtarına ihtiyacınız olacak. ### Adım 1: Bir DashScope hesabı oluşturun dashscope.aliyuncs.com adresine gidin ve kaydolun. Zaten bir Alibaba Cloud hesabınız varsa, onu kullanın. ### Adım 2: API anahtarınızı alın 1. DashScope konsoluna giriş yapın. 2. Sol kenar çubuğunda **API Anahtar Yönetimi**'ne tıklayın. 3. **API Anahtarı Oluştur**'a tıklayın. 4. Anahtarı kopyalayın (biçim: `sk-...`). ### Adım 3: SDK'yı yükleyin ```bash pip install dashscope ``` Veya OpenAI uyumlu uç noktayı doğrudan `openai` SDK'sıyla kullanın: ```bash pip install openai ``` DashScope, `https://dashscope.aliyuncs.com/compatible-mode/v1` adresinde OpenAI uyumlu bir API sunar; bu, `base_url`'inizi değiştirebileceğiniz ve OpenAI için yazacağınız aynı kodu kullanabileceğiniz anlamına gelir. ## Metin girişi ve çıktısı En basit durumla başlayın: metin girişi, metin çıktısı. ```python 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çıklayın." } ], ) print(response.choices[0].message.content) ``` Daha zor akıl yürütme görevleri için `qwen3.5-omni-plus`'a veya gecikmenin öncelikli olduğu durumlarda `qwen3.5-omni-light`'a geçin. --- ## Ses girişi: transkripsiyon ve anlama Bir ses dosyası URL'si veya base64 kodlu ses geçirin. Model, içeriği doğal olarak deşifre eder, anlar ve üzerinde akıl yürütür. Ayrı bir ASR adımına gerek yoktur. ```python import base64 from openai import OpenAI client = OpenAI( base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="sk-YOUR_DASHSCOPE_KEY", ) # Yerel bir ses dosyasını yükle 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ı özetleyin ve eylem maddelerini listeleyin." } ] } ], ) print(response.choices[0].message.content) ``` Model, konuşma tanıma için 113 dili işler. Dili belirtmenize gerek yoktur; otomatik olarak algılar. Desteklenen ses formatları: WAV, MP3, M4A, OGG, FLAC. ## Ses çıkışı: yanıtta metinden konuşmaya Metin yerine konuşma almak için `modalities` parametresini ayarlayın ve ses çıkışını yapılandırın: ```python 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çıklayın." } ], ) # Yanıt hem metin hem de ses içerir text_content = response.choices[0].message.content audio_data = response.choices[0].message.audio.data # base64 kodlu WAV # Sesi kaydet 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 yerleşik ses mevcuttur: `Chelsie` (kadın) ve `Ethan` (erkek). Konuşma üretimi 36 dilde çalışır. ## Resim girişi: görsel anlama Bir resim URL'si veya base64 kodlu bir resmi bir metin sorusuyla birlikte geçirin: ```python 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çıklayın ve olası darboğazları belirleyin." } ] } ], ) print(response.choices[0].message.content) ``` Yerel resimler için, bunları base64 olarak kodlayın: ```python import base64 with open("screenshot.png", "rb") as f: image_data = base64.b64encode(f.read()).decode("utf-8") # Veri URL formatını kullan 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: kayıtları ve ekran yakalamalarını anlama Video girişi, Qwen3.5-Omni'nin hiçbir metin veya resim modelinin yapamayacağı bir şeyi yaptığı yerdir: görsel ve ses parçaları üzerinde aynı anda akıl yürütme. ```python from openai import OpenAI import base64 client = OpenAI( base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="sk-YOUR_DASHSCOPE_KEY", ) # Bir video URL'si geçirin 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çıklayın ve eşdeğer kodu yazın." } ] } ], ) print(response.choices[0].message.content) ``` ### Ses-Görsel Vibe Kodlama "Vibe Kodlama" kullanım durumu, bir ekran kaydını geçirmek ve modelden gördüklerinden kod oluşturmasını istemektir: ```python 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", # En iyi kod üretimi kalitesi için Plus kullanın 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 inşa edildiğini gördüğünüz şeyi çoğaltan tam kodu yazın. Tüm UI bileşenlerini ve etkileşimlerini dahil edin." } ] } ], ) print(response.choices[0].message.content) ``` 256K token bağlam penceresi, yaklaşık 400 saniye 720p videoyu sesle birlikte barındırır. Bundan daha uzun kayıtlar için kırpın veya bölün. ## Ses klonlama Ses klonlama, modele bir hedef ses vermenizi ve o sesle yanıt vermesini sağlar. Bu, API aracılığıyla Plus ve Flash'ta mevcuttur. ```python import base64 from openai import OpenAI client = OpenAI( base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", api_key="sk-YOUR_DASHSCOPE_KEY", ) # Klonlama için 10-30 saniyelik bir ses örneği yükle 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)) ``` Ses klonlama kalitesi için ipuçları: * Arka plan gürültüsü olmayan temiz bir kayıt kullanın. * 15-30 saniye, çok kısa kliplerden daha iyi çalışır. * 16kHz veya daha yüksek WAV formatı. * Ses örneği, daha iyi prozodi eşleşmesi için okunan metin değil, doğal konuşma içermelidir. ## Akış yanıtları Gerçek zamanlı sesli sohbet veya etkileşimli uygulamalar için akışı kullanın. Model, tam yanıt oluşturulmadan önce sesi döndürmeye başlar: ```python 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çıklayın." } ], 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() # Akış metninden sonra yeni satır # Ses parçalarını birleştir ve kaydet 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ı, bir ses çıkış arabelleğine doğrudan aktarılabilir olduğu için akış için iyi çalışır ve tam bir dosya beklemenize gerek kalmaz. ## Karma modalitelerle çok turlu konuşma Gerçek konuşmalar, farklı modalitelerdeki girdileri turlar arasında karıştırır. Konuşma geçmişini farklı modalitelerle nasıl yöneteceğiniz aşağıda açıklanmıştır: ```python 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: bir 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 metni print(send_message([{"type": "text", "text": "Bahsettiğiniz bağlantı havuzu tükenmesini nasıl düzeltirim?"}])) ``` 256K bağlam penceresi, kesme sorunları yaşamadan, gömülü görüntüler ve ses içeren uzun konuşmalar yapabileceğiniz anlamına gelir. ## HuggingFace ile yerel dağıtım Qwen3.5-Omni'yi kendi altyapınızda çalıştırmanız gerekiyorsa: ```bash pip install transformers==4.57.3 pip install accelerate pip install qwen-omni-utils -U pip install -U flash-attn --no-build-isolation ``` ```python 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 GPU bellek gereksinimleri:** | Varyant | Hassasiyet | Minimum VRAM | |---|---|---| | Plus (30B MoE) | BF16 | ~40GB | | Flash | BF16 | ~20GB | | Light | BF16 | ~10GB | Üretim yerel çıkarımı için HuggingFace Transformers yerine vLLM kullanın. MoE modelleri, vLLM'nin yönlendirme optimizasyonları altında daha hızlı çalışır. ## Apidog ile Qwen3.5-Omni isteklerinizi test etme Çok modlu API isteklerinin hata ayıklaması, düz JSON'dan daha zordur. Base64 kodlu ses ve video, iç içe içerik dizileri ve hem metin hem de ses içerebilen yanıtlarla uğraşıyorsunuz. Bunu bir terminalden yapmak hızla sıkıcı hale gelir. (Resim) Apidog bunu temiz bir şekilde halleder. DashScope uç noktanızı yeni bir koleksiyon olarak ayarlayın, API anahtarınızı bir ortam değişkeni olarak saklayın ve üzerinde çalıştığınız her modalite için istek şablonları oluşturun. Her varyant (Plus, Flash, Light) için, temel isteği çoğaltabilir ve model parametresini değiştirebilirsiniz. Üçünü de art arda çalıştırın ve yanıtları, gecikmeyi ve çıktı kalitesini tek bir görünümde karşılaştırın. Çok modlu yanıtlarınızı doğrulamak için Apidog'da test iddiaları da yazabilirsiniz: * Metin yanıtları için `choices[0].message.content`'in boş olmadığını kontrol edin. * Ses çıkışı istendiğinde `choices[0].message.audio.data`'nın mevcut olduğunu doğrulayın. * Flash için yanıt gecikmesinin hedef eşiğinizin altında olduğunu iddia edin. Bu, üretimde hangi varyantı kullanacağınıza karar verirken kullanışlıdır. ## Hata işleme ve tekrar deneme mantığı Büyük çok modlu modellerde, özellikle video girişleri için hız sınırları ve zaman aşımı yaygındır. Yeniden deneme işlemini baştan itibaren oluşturun: ```python 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 girişleri için 2 dakikalık zaman aşımı ) 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'tan büyük video girişleri için şunları göz önünde bulundurun: * Göndermeden önce ilgili kısmı kırpma. * Görsel içeriğin yüksek çözünürlük gerektirmemesi durumunda çözünürlüğü 480p'ye düşürme. * Uzun kayıtları bölümlere ayırma ve sonuçları toplama. --- ## Yaygın sorunlar ve çözümler **"Sayılar veya teknik terimlerde ses çıkışı bozuk"** Bu, ARIA teknolojisinin ele aldığı sorundur. Qwen3.5-Omni (daha eski bir sürüm değil) kullandığınızdan emin olun. Kendi kendine barındırıyorsanız, HuggingFace'den en son model ağırlıklarını kullanın. **"Bir ses kesintisi gönderdiğimde model konuşmaya devam ediyor"** Anlamsal kesinti için Flash veya Plus varyantı gerekir. Light'ta bu özellik olmayabilir. Ayrıca, kesintinin çalışması için yanıtı akış olarak (toplu değil) gönderdiğinizden emin olun. **"Ses klonlama kalitesi düşük"** Ses örneğinin temiz olması gerekir. Yüklemeden önce Audacity gibi bir araçla arka plan gürültüsünü giderin. En az 15 saniye ses kullanın. 16kHz veya 44.1kHz'deki WAV en iyi şekilde çalışır. **"Video girişi, token limitleri hakkında bir hata döndürüyor"** 256K token, yaklaşık 400 saniye 720p videoyu kapsar. Daha uzun videoların kırpılması veya daha düşük çözünürlük kullanılması gerekir. Video sürenizi kontrol edin ve güvenlik için 6 dakikanın altına düşürün. **"Yerel dağıtım çok yavaş"** Üretim yerel çıkarımı için HuggingFace Transformers yerine vLLM kullanın. MoE modelleri, makul verim için vLLM'nin yönlendirme optimizasyonlarına ihtiyaç duyar. ## SSS ### Qwen3.5-Omni için hangi DashScope model kimliğini kullanmalıyım? Kalite ve gecikme ihtiyaçlarınıza bağlı olarak `qwen3.5-omni-plus`, `qwen3.5-omni-flash` veya `qwen3.5-omni-light` kullanın. Çoğu kullanım durumu için Flash ile başlayın. ### OpenAI Python SDK'yı DashScope ile kullanabilir miyim? Evet. `base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"` olarak ayarlayın ve DashScope anahtarınızı `api_key` olarak kullanın. İstek ve yanıt formatı OpenAI API ile aynıdır. ### Tek bir istekte birden fazla dosya (ses + resim) nasıl gönderilir? Bunları, metin isteminizle birlikte ayrı türdeki nesneler olarak `content` dizisine koyun. Dört modalite de aynı mesajda görünebilir. ### Ses veya video dosyaları için bir boyut sınırı var mı? DashScope'un istek başına yük sınırları vardır. Büyük dosyalar için base64 kodlaması yerine bir URL referansı kullanın. Dosyayı erişilebilir depolama alanında barındırın ve URL'yi `audio` veya `video_url` alanına geçirin. ### Ses çıkışını nasıl devre dışı bırakır ve yalnızca metin alırım? `modalities=["text"]` olarak ayarlayın veya `modalities` parametresini atlayın. Yalnızca metin yanıtları daha hızlı ve daha ucuzdur. ### İşlev/araç çağırmayı destekliyor mu? Evet. İşlev tanımlarıyla standart `tools` parametresini kullanın, tıpkı herhangi bir OpenAI uyumlu modelde olduğu gibi. Model, kendi kodunuzda yürüteceğiniz yapılandırılmış araç çağrı nesneleri döndürür. ### Uzun ses kayıtlarını işlemenin en iyi yolu nedir? 10 saatin altındaki kayıtlar için bunları tek bir istek olarak gönderin. Daha uzun kayıtlar için doğal duraklama noktalarında bölün ve her segmenti ayrı ayrı işleyin. Sonuçları uygulama katmanınızda toplayın. ### Tam bir uygulama oluşturmadan önce çok modlu isteklerimi nasıl test ederim? Her modalite için istek şablonları oluşturmak ve kaydetmek için Apidog'u kullanın. Model varyantları arasında geçiş yapabilir, tam yanıt yapısını inceleyebilir ve uygulama kodu yazmadan önce çıktı kalitesini doğrulayan iddialar yazabilirsiniz.
