باختصار
يقبل Qwen3.5-Omni النصوص والصور والصوت والفيديو كمدخلات ويعيد نصًا أو كلامًا في الوقت الفعلي. يمكنك الوصول إليه عبر واجهة برمجة تطبيقات Alibaba Cloud DashScope أو تشغيله محليًا عبر HuggingFace Transformers. يغطي هذا الدليل إعداد واجهة برمجة التطبيقات، وأمثلة تعليمات برمجية عملية لكل وسيلة، واستنساخ الصوت، وكيفية اختبار طلباتك باستخدام Apidog.
ما تتعامل معه
Qwen3.5-Omni هو نموذج واحد يدعم أربعة أنواع من المدخلات: النص، الصور، الصوت، والفيديو. ويعيد إما نصًا أو كلامًا طبيعيًا حسب تهيئة الطلب.
تم إطلاقه في 30 مارس 2026، وهو مبني على بنية Thinker-Talker مع MoE backbone. Thinker يعالج المدخلات متعددة الوسائط ويقوم بالتعليل، Talker يحول المخرجات إلى كلام عبر نظام multi-codebook ويبدأ ببث الصوت قبل اكتمال الاستجابة.
الأنواع المتاحة:
- Plus: أعلى جودة، الأفضل للتعليل واستنساخ الصوت
- Flash: توازن بين السرعة والجودة، موصى به لمعظم الاستخدامات
- Light: أقل زمن استجابة، لسيناريوهات الأجهزة المحمولة
الدليل يستخدم Flash للأمثلة الافتراضية. استخدم Plus عندما تحتاج أقصى جودة.
الوصول إلى واجهة برمجة التطبيقات (API) عبر DashScope
واجهة برمجة تطبيقات DashScope من Alibaba Cloud هي الطريقة الأساسية لتشغيل Qwen3.5-Omni في الإنتاج. ستحتاج إلى حساب ومفتاح API.
الخطوة 1: إنشاء حساب DashScope
- انتقل إلى dashscope.aliyuncs.com وسجل حسابك. إذا كان لديك حساب Alibaba Cloud، استخدمه.
الخطوة 2: الحصول على مفتاح API
- سجل الدخول إلى لوحة DashScope
- من الشريط الجانبي الأيسر اختر إدارة مفتاح API
- اضغط إنشاء مفتاح API
- انسخ المفتاح (التنسيق:
sk-...)
الخطوة 3: تثبيت حزمة SDK
pip install dashscope
أو استخدم نقطة نهاية متوافقة مع OpenAI عبر حزمة openai:
pip install openai
DashScope توفر واجهة متوافقة مع OpenAI عبر
https://dashscope.aliyuncs.com/compatible-mode/v1
يمكنك ببساطة تبديل base_url واستخدام نفس الكود.
المدخلات والمخرجات النصية
أبسط حالة: نص مدخل، نص مخرج.
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": "Explain the difference between REST and GraphQL APIs in plain terms."
}
],
)
print(response.choices[0].message.content)
- بدّل إلى
qwen3.5-omni-plusلمهام أكثر تعقيدًا، أوqwen3.5-omni-lightلزمن استجابة أقل.
مدخلات الصوت: النسخ والفهم
مرر ملف صوتي كعنوان URL أو base64. النموذج ينسخ ويفهم الصوت مباشرةً.
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": "Summarize the key decisions made in this meeting and list any action items."
}
]
}
],
)
print(response.choices[0].message.content)
- يدعم النموذج 113 لغة للتعرف على الكلام.
- تنسيقات الصوت المدعومة: WAV، MP3، M4A، OGG، FLAC.
مخرجات الصوت: تحويل النص إلى كلام
للحصول على صوت بدلاً من النص، فعّل مخرج الصوت عبر معلمة modalities:
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": "Describe the steps to authenticate a REST API using OAuth 2.0."
}
],
)
text_content = response.choices[0].message.content
audio_data = response.choices[0].message.audio.data # base64-encoded WAV
with open("response.wav", "wb") as f:
f.write(base64.b64decode(audio_data))
print(f"Text: {text_content}")
print("Audio saved to response.wav")
- الأصوات المتاحة:
Chelsie(أنثى) وEthan(ذكر) - يدعم التوليد الصوتي في 36 لغة.
مدخلات الصورة: الفهم البصري
مرر صورة كعنوان URL أو data URL (base64):
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": "Describe this API architecture diagram and identify any potential bottlenecks."
}
]
}
],
)
print(response.choices[0].message.content)
للصور المحلية:
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": "What error is shown in this screenshot?"
}
]
}
],
)
مدخلات الفيديو: فهم التسجيلات والشروحات
Qwen3.5-Omni يحلل الفيديو (صوت وصورة) ويستنتج الكود أو يلخص ما يجري.
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": "Describe what the developer is building in this demo and write equivalent code."
}
]
}
],
)
print(response.choices[0].message.content)
الترميز البصري السمعي (Audio-Visual Vibe Coding)
تمرير تسجيل شاشة وتوليد الكود المقابل:
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", # Plus لأفضل جودة توليد كود
messages=[
{
"role": "user",
"content": [
{
"type": "video_url",
"video_url": {
"url": f"data:video/mp4;base64,{video_data}"
}
},
{
"type": "text",
"text": "Watch this screen recording and write the complete code that replicates what you see being built. Include all the UI components and their interactions."
}
]
}
],
)
print(response.choices[0].message.content)
- نافذة السياق 256K رمز تكفي حتى 400 ثانية فيديو 720p مع صوت.
- للتسجيلات الأطول: قص أو قسم الفيديو.
استنساخ الصوت
استنساخ الصوت يتيح لك إعطاء النموذج عينة صوتية ليجيب بنفس الصوت. متاح في Plus وFlash.
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": "Welcome to the Apidog developer portal. How can I help you today?"
}
],
)
audio_data = response.choices[0].message.audio.data
with open("cloned_response.wav", "wb") as f:
f.write(base64.b64decode(audio_data))
نصائح لتحسين الجودة:
- استخدم تسجيلًا نظيفًا وخالٍ من الضوضاء
- 15–30 ثانية أفضل من المقاطع القصيرة
- WAV بتردد 16kHz أو أعلى
- يفضل أن يحتوي المثال على كلام عفوي وليس نصًا مقروءًا فقط
تدفق الاستجابات (Streaming)
للحصول على استجابات صوتية أو تفاعلية في الوقت الحقيقي، فعّل خيار stream:
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": "Explain how WebSocket connections differ from HTTP polling."
}
],
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 مثالي للتدفق المباشر.
محادثة متعددة الأدوار بوسائل مختلطة
لإدارة سجل محادثة بمدخلات متنوعة:
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
# Turn 1: نص فقط
print(send_message([{"type": "text", "text": "I have an API that keeps returning 503 errors."}]))
# Turn 2: صورة (screenshot)
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": "Here's the error log screenshot. What's causing this?"}
]))
# Turn 3: متابعة نصية
print(send_message([{"type": "text", "text": "How do I fix the connection pool exhaustion you mentioned?"}]))
- نافذة السياق الكبيرة (256K رمز) تدعم محادثات طويلة بوسائط متعددة.
النشر المحلي باستخدام HuggingFace
لتشغيل النموذج على البنية التحتية الخاصة بك:
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": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech."}
],
},
{
"role": "user",
"content": [
{"type": "audio", "audio": "path/to/your/audio.wav"},
{"type": "text", "text": "What is being discussed in this audio?"}
],
},
]
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)
متطلبات ذاكرة GPU:
| النوع | الدقة | الحد الأدنى لـ VRAM |
|---|---|---|
| Plus (30B MoE) | BF16 | ~40GB |
| Flash | BF16 | ~20GB |
| Light | BF16 | ~10GB |
- للاستدلال في الإنتاج، استخدم vLLM وليس HuggingFace Transformers لنماذج MoE.
اختبار طلبات Qwen3.5-Omni باستخدام Apidog
طلبات الـ API متعددة الوسائط أصعب في التصحيح من JSON العادي بسبب الصوت والفيديو المشفرين، والمصفوفات المتداخلة، والاستجابات المختلطة.
Apidog يجعل ذلك أسهل:
- أنشئ نقطة نهاية DashScope كمجموعة جديدة
- خزّن مفتاح API كمتغير بيئة
- أنشئ قوالب طلبات لكل وسيلة
- كرر الطلبات مع تغيير نوع النموذج وقارن النتائج مباشرةً
- أضف تأكيدات اختبار مثل:
- تحقق من أن
choices[0].message.contentغير فارغ للنص - تحقق من وجود
choices[0].message.audio.dataللصوت - تحقق من زمن استجابة Flash
- تحقق من أن
هذا يمكّنك من اتخاذ قرار عملي حول النموذج المناسب للإنتاج.
معالجة الأخطاء ومنطق إعادة المحاولة
النماذج متعددة الوسائط غالبًا ما تتعرض لحدود السرعة أو المهلات، خاصة لمدخلات الفيديو. أضف منطق إعادة المحاولة:
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, # 2 دقيقة للمدخلات الكبيرة
)
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"Rate limit hit. Waiting {wait:.1f}s...")
time.sleep(wait)
except (APITimeoutError, APIConnectionError) as e:
if attempt == max_retries - 1:
raise
wait = (2 ** attempt) + random.uniform(0, 1)
print(f"Connection error: {e}. Retrying in {wait:.1f}s...")
time.sleep(wait)
raise RuntimeError(f"Failed after {max_retries} attempts")
للملفات الكبيرة:
- قص إلى الجزء المهم
- خفض الدقة إلى 480p عند الإمكان
- قسم التسجيلات الطويلة وجمّع النتائج
المشكلات الشائعة والإصلاحات
"مخرجات الصوت مشوهة على الأرقام أو المصطلحات التقنية"
استخدم Qwen3.5-Omni الأحدث. إذا كنت تستضيف محليًا، استخدم أحدث weights من HuggingFace.
"النموذج يستمر في الكلام عند إرسال مقاطعة صوتية"
المقاطعة الفورية مدعومة في Flash/Plus فقط، وليس Light. يجب تفعيل البث (streaming).
"جودة استنساخ الصوت رديئة"
استخدم عينة صوت نظيفة، خالية من الضوضاء، مدة كافية (15 ثانية+)، تنسيق WAV.
"مدخلات الفيديو ترجع خطأ حول حدود الرموز"
الحد 256K رمز (≈6 دقائق فيديو 720p). قلل المدة أو الدقة.
"النشر المحلي بطيء جدًا"
استخدم vLLM وليس HuggingFace Transformers للاستدلال في الإنتاج.
الأسئلة الشائعة
ما هو معرف نموذج DashScope الذي أستخدمه لـ Qwen3.5-Omni؟
استخدم qwen3.5-omni-plus أو qwen3.5-omni-flash أو qwen3.5-omni-light حسب متطلباتك. ابدأ بـ Flash.
هل يمكنني استخدام حزمة OpenAI Python SDK مع DashScope؟
نعم. عيّن
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
واستخدم مفتاحك من DashScope كـ api_key.
كيف أرسل ملفات متعددة (صوت + صورة) في طلب واحد؟
ضعها جميعًا في مصفوفة content ككائنات منفصلة مع نوع محدد. كل وسائط ممكنة في نفس الرسالة.
هل هناك حد لحجم ملفات الصوت أو الفيديو؟
نعم. للملفات الكبيرة استخدم URL بدلاً من base64. استضف الملف ومرر الرابط في audio أو video_url.
كيف أوقف مخرجات الصوت وأحصل على نص فقط؟
عيّن modalities=["text"] أو احذف معلمة modalities. الاستجابات النصية أسرع وأقل تكلفة.
هل يدعم استدعاء الدالة/الأداة؟
نعم. استخدم معلمة tools القياسية. النموذج يعيد كائنات منظمة لتنفيذها في كودك.
ما هي أفضل طريقة للتعامل مع التسجيلات الصوتية الطويلة؟
للملفات أقل من 10 ساعات أرسلها دفعة واحدة. للأطول، قسمها عند نقاط توقف طبيعية وجمّع النتائج.
كيف أختبر طلباتي متعددة الوسائط قبل بناء تطبيق كامل؟
استخدم Apidog لبناء وحفظ قوالب الطلبات لكل وسيلة، فحص الاستجابات، وكتابة تأكيدات جودة المخرجات دون الحاجة لكود التطبيق مسبقًا.

Top comments (0)