Source: https://ailoot.ai/models/ar/qwen-audio-3-0-realtime-plus/
Canonical: https://ailoot.ai/models/ar/qwen-audio-3-0-realtime-plus/
Language: ar

# qwen-audio-3.0-realtime-plus

[Markdown](https://ailoot.ai/models/ar/qwen-audio-3-0-realtime-plus/index.md) · [JSON](https://ailoot.ai/models/ar/qwen-audio-3-0-realtime-plus/facts.json)

## [qwen-audio-3.0-realtime-plus](https://ailoot.ai/models/ar/qwen-audio-3-0-realtime-plus/)

نموذج لحوار صوتي مباشر يقبل الكلام والنص ويجيب بالصوت أو النص. مصمم لوتيرة تواصل طبيعية والتفاعل مع الأدوات.

- [**Ailoot · صوت في الوقت الفعلي** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` `qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/ar/qwen-audio-3-0-realtime-plus/#method-0)

عن النموذج

يغطي هذا الوصف قدرات النموذج. وترد أدناه المدخلات والمخرجات والخيارات المتاحة في Ailoot للطريقة المحددة.

Qwen-Audio-3.0-Realtime-Plus هو نموذج من Alibaba للحوار الصوتي المباشر. يقبل الكلام والنص ويجيب بالصوت والنص ويدعم محادثة ثنائية الاتجاه مع تبادل طبيعي للأدوار. يمكن إرسال الصوت واستقباله على أجزاء، لذا يتطور التفاعل أثناء المحادثة.

#### متى ينتهي المتحدث من فكرته

تتوفر عدة طرق لتحديد حدود دور الكلام: النشاط الصوتي، والاكتمال الدلالي، والتحكم الصريح. لدى المصنّع يُختار الوضع قبل إرسال أول صوت؛ ويتطلب تغييره بعد بدء المحادثة اتصالًا جديدًا. يعتمد دعم هذا التحكم على الطريقة المختارة. يراعي الوضع الدلالي التوقفات وحشوات الكلام: التردد القصير لا يعني بالضرورة أن المستخدم أنهى فكرته. يمكن لكلام جديد من المستخدم أن يقاطع الإجابة الجاري تكوينها، لتستمر المحادثة مع مراعاة الدور التالي. في الوضع الدلالي يمكن توجيه التعرف إلى عينة صوتية للمتحدث المختار لتقليل التأثر بأصوات الآخرين وضوضاء الخلفية.

تحدد التعليمات دور المساعد وأسلوب التواصل. يمكن للأداء الصوتي مراعاة النبرة والسرعة والعاطفة؛ ويتوفر في الإصدار 3.0 خمسة أصوات نظامية وأصوات مبنية على عينة كلام. يدعم النموذج 11 لغة، منها الروسية، إلى جانب أنواع اللهجات الصينية التي يحددها المصنّع. لدى المصنّع يُحدد الصوت عند أول تحديث لإعدادات الجلسة؛ ويُتجاهل إرسال صوت جديد لاحقًا في المحادثة نفسها. تتطلب هذه الإعدادات دعم طريقة الاستدعاء المختارة.

#### الأدوات وسجل المحادثة

يُدعم استدعاء الدوال. يشكّل النموذج الفعل المطلوب، وينفذه التطبيق المتصل، ثم يعيد النتيجة إلى الحوار. يتيح ذلك بناء المحادثة على بيانات فعلية ومتابعتها بعد إتمام العملية. يمكن للمساعد الصوتي الاستناد إلى نتائج الأدوات مع الحفاظ على سياق الحديث. تشمل إمكانات المصنّع أيضًا بحثًا مدمجًا على الويب إذا كانت الطريقة المختارة توفره. لا يمكن تفعيل بحث الويب واستدعاء الدوال معًا في جلسة واحدة.

يتضمن السجل افتراضيًا 20 دورًا في المحادثة، مع نطاق من دور واحد إلى 50. يبلغ الحد للصوت المتراكم 300 ثانية؛ وتُحذف الأجزاء القديمة من السجل عند تجاوز الحدود. يختلف ذلك عن مدة الدور الواحد: فالسجل يحدد المادة السابقة التي تظل متاحة عند متابعة الحوار.

#### السياق النصي والصوت

يبلغ السياق الرسمي 40 960 توكنًا. الحد الأقصى للإدخال 16 384 توكنًا وللإخراج 8192؛ وتُذكر حدود الإدخال والإخراج نفسها لوضع الاستدلال، مع حد منفصل لسلسلة الاستدلال قدره 1024 توكنًا.

للصوت المتدفق يُستخدم PCM أحادي القناة بتمثيل 16 بت: تردد الإدخال 16 كيلوهرتز والإخراج 24 كيلوهرتز. تنتمي البيانات النصية والصوتية إلى محادثة واحدة. لم يُعلن عن إدخال بصري أو إخراج صور لهذا النموذج بعينه؛ فهو متخصص في الكلام والنص والتفاعل الصوتي.

**Ailoot · صوت في الوقت الفعلي** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` `qwen-audio-3.0-realtime-plus`

[`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/ar/#m=qwen-audio-3.0-realtime-plus&route=Core&caller=qwen-audio-3.0-realtime-plus&fmt=realtime)

Alibaba /`qwen-audio-3.0-realtime-plus`

### البداية

نموذج لحوار صوتي مباشر يقبل الكلام والنص ويجيب بالصوت أو النص. مصمم لوتيرة تواصل طبيعية والتفاعل مع الأدوات.

المدخلات المقبولة

النص · الصوت

النتائج

النص · الصوت

### متاح في Ailoot · المدخلات والطرائق

**Ailoot · صوت في الوقت الفعلي** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus`

الإدخال

`text`, `audio`

الإخراج

`text`, `audio`

صيغة الإخراج

أحداث الجلسة

| الحقل | النوع | المتطلب | القيم والحدود | القيمة الافتراضية |
| --- | --- | --- | --- | --- |
| الحقل`query.model` | النوع`string` | المتطلبمطلوب | القيم والحدود qwen-audio-3.0-realtime-plus | القيمة الافتراضية— |
| الحقل`session.input_audio_format` | النوع`string` | المتطلباختياري | القيم والحدود pcm16, pcm | القيمة الافتراضية— |
| الحقل`session.output_audio_format` | النوع`string` | المتطلباختياري | القيم والحدود pcm16, pcm | القيمة الافتراضية— |
| الحقل`session.instructions` | النوع`string` | المتطلباختياري | القيم والحدود نطاق تطبيق الحد: سياسة الجلسة المختارة | القيمة الافتراضية— |
| الحقل`session.max_history_turns` | النوع`integer` | المتطلباختياري | القيم والحدود الحد الأدنى: ⁦1⁩ نطاق تطبيق الحد: سياسة الجلسة المختارة | القيمة الافتراضية— |
| الحقل`input_audio_buffer.append.audio` | النوع`base64_string` | المتطلبمطلوب | القيم والحدود محتوى الإدخال: PCM16 أحادي القناة؛ إدخال بتردد 16 kHz ومخرجات بتردد 24 kHz؛ طول بالبايت غير صفري وعدد بايتات زوجي | القيمة الافتراضية— |

تركيبات مواد الإدخال

**realtime\_text\_audio**

معلمات الطريقة ودورة حياتها

| المعلمة | المواصفات |
| --- | --- |
| المعلمة`material_types` | المواصفاتtext, audio |
| المعلمة`required` | المواصفاتnull |
| المعلمة`optional_controls` | المواصفاتnull |
| المعلمة`content_type` | المواصفاتWebSocket |

دورة الحياة: `exact retained published method`

بُنى الطرق ومعرّفاتها دقيقة؛ قدرة المورد منفصلة عن السماح بالطلب.

### الباقات

#### تعرفات طرائق Ailoot

الإدخال

⁦‏0.0008 US$⁩ */ 1K*

الإخراج

⁦‏0.0064 US$⁩ */ 1K*

الإدخال

⁦‏0.0048 US$⁩ *لكل دقيقة صوت*

الإخراج

⁦‏0.018 US$⁩ *لكل دقيقة صوت مُخرج*

تحجز Ailoot مبلغًا تقديريًا قبل الطلب. وبعد ظهور النتيجة، تُسوّي الرسوم النهائية بناءً على الاستخدام المقاس. وتستخدم تسوية البث سجل الاستخدام النهائي. [كيفية عمل حجز المبلغ وتسوية الرسوم →](https://ailoot.ai/docs/ar/billing/reserve/)

### أمثلة للطلبات

#### Ailoot · صوت في الوقت الفعلي

Python WebSocket · نصPython WebSocket · صوت

```python
# Install the documented client once: python3 -m pip install websockets
import base64, json, os, time, wave
from pathlib import Path
from websockets.sync.client import connect

key = os.environ.get("AILOOT_API_KEY", "")
if not key.strip():
    raise SystemExit("Set your AILOOT_API_KEY before connecting")
file = Path(os.environ.get("AILOOT_TEXT_FILE", ""))
if not file.is_file(): raise SystemExit("Set AILOOT_TEXT_FILE to your actual UTF-8 material")
material = file.read_text(encoding="utf-8")
if not material.strip(): raise SystemExit("Text material must not be empty")
out = Path("realtime-results")
out.mkdir(exist_ok=True)
audio, texts, complete = {}, {}, []
current_response = None
pending = False
deadline = time.monotonic() + 570  # Local client bound; lower server/session limits still apply.

def receive(ws, log):
    global current_response, pending
    left = deadline - time.monotonic()
    if left <= 0:
        raise TimeoutError("Client session limit; preserve IDs and partial results, do not replay")
    event = json.loads(ws.recv(timeout=min(60, left)))
    log.write(json.dumps(event, ensure_ascii=False) + "\n")
    log.flush()
    kind = event.get("type")
    if kind == "error":
        raise RuntimeError(json.dumps(event, ensure_ascii=False))
    if kind == "response.created":
        current_response = event["response"]["id"]
    if kind in {"response.audio.delta", "response.output_audio.delta", "response.text.delta", "response.output_text.delta", "response.audio_transcript.delta", "response.output_audio_transcript.delta", "response.text.done", "response.audio_transcript.done"}:
        identity = (event["response_id"], event["item_id"], event["output_index"], event["content_index"])
        if kind in {"response.audio.delta", "response.output_audio.delta"}:
            raw = base64.b64decode(event["delta"], validate=True)
            if len(raw) % 2: raise ValueError("Output PCM16 chunk must have an even byte length")
            audio.setdefault(identity, bytearray()).extend(raw)
        elif kind.endswith(".done"):
            texts[identity] = event.get("text", event.get("transcript", ""))
        else:
            texts[identity] = texts.get(identity, "") + event["delta"]
            print(event["delta"], end="", flush=True)
    if kind == "response.done":
        response = event["response"]
        complete.append(response)
        if current_response is None: current_response = response["id"]
        if response["id"] == current_response: pending = False
    return event

def wait_for(ws, log, kind):
    while True:
        event = receive(ws, log)
        if event.get("type") == kind: return event

def send(ws, event):
    ws.send(json.dumps(event, ensure_ascii=False))

try:
    # One exact model query; no reconnect/retry loop and no provider credentials.
    with connect("wss://api.ailoot.ai/v1/realtime?model=qwen-audio-3.0-realtime-plus", additional_headers={"Authorization": "Bearer " + key}) as ws:
        with (out / "events.jsonl").open("w", encoding="utf-8") as log:
            wait_for(ws, log, "session.created")
            send(ws, {"type":"session.update", "session":{"modalities":["audio","text"], "input_audio_format":"pcm", "output_audio_format":"pcm", "turn_detection":None}})
            wait_for(ws, log, "session.updated")
            send(ws, {"type":"conversation.item.create", "item":{"type":"message", "role":"user", "content":[{"type":"input_text", "text":material}]}})
            send(ws, {"type":"response.create"})
            pending = True
            try:
                while pending: receive(ws, log)
            except KeyboardInterrupt:
                # Cancel the actual current inference, then preserve its returned status.
                send(ws, {"type":"response.cancel"})
                while pending: receive(ws, log)
    if not complete or complete[-1].get("status") != "completed":
        raise RuntimeError("Response did not complete normally; inspect saved events and status")
finally:
    manifest = {"responses":complete, "parts":[]}
    for number, identity in enumerate(dict.fromkeys(list(audio) + list(texts))):
        record = {"response_id":identity[0], "item_id":identity[1], "output_index":identity[2], "content_index":identity[3]}
        if identity in audio:
            raw = bytes(audio[identity])
            pcm_file = out / ("audio-" + str(number) + ".pcm")
            wav_file = out / ("audio-" + str(number) + ".wav")
            pcm_file.write_bytes(raw)
            with wave.open(str(wav_file), "wb") as wav:
                wav.setnchannels(1); wav.setsampwidth(2); wav.setframerate(24000); wav.writeframes(raw)
            record.update({"pcm":str(pcm_file), "wav":str(wav_file), "sample_rate_hz":24000})
        if identity in texts:
            text_file = out / ("text-" + str(number) + ".txt")
            text_file.write_text(texts[identity], encoding="utf-8")
            record["text"] = str(text_file)
        manifest["parts"].append(record)
    (out / "results.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
    print("\nSaved every received event and result in", out)
```

```python
# Install the documented client once: python3 -m pip install websockets
import base64, json, os, time, wave
from pathlib import Path
from websockets.sync.client import connect

key = os.environ.get("AILOOT_API_KEY", "")
if not key.strip():
    raise SystemExit("Set your AILOOT_API_KEY before connecting")
file = Path(os.environ.get("AILOOT_AUDIO_FILE", ""))
if not file.is_file(): raise SystemExit("Set AILOOT_AUDIO_FILE to your raw PCM16 mono 16-kHz recording")
material = file.read_bytes()
if not material or len(material) % 2 or material.startswith(b"RIFF"):
    raise SystemExit("Use nonempty signed little-endian PCM16 mono 16-kHz bytes, not a WAV header")
out = Path("realtime-results")
out.mkdir(exist_ok=True)
audio, texts, complete = {}, {}, []
current_response = None
pending = False
deadline = time.monotonic() + 570  # Local client bound; lower server/session limits still apply.

def receive(ws, log):
    global current_response, pending
    left = deadline - time.monotonic()
    if left <= 0:
        raise TimeoutError("Client session limit; preserve IDs and partial results, do not replay")
    event = json.loads(ws.recv(timeout=min(60, left)))
    log.write(json.dumps(event, ensure_ascii=False) + "\n")
    log.flush()
    kind = event.get("type")
    if kind == "error":
        raise RuntimeError(json.dumps(event, ensure_ascii=False))
    if kind == "response.created":
        current_response = event["response"]["id"]
    if kind in {"response.audio.delta", "response.output_audio.delta", "response.text.delta", "response.output_text.delta", "response.audio_transcript.delta", "response.output_audio_transcript.delta", "response.text.done", "response.audio_transcript.done"}:
        identity = (event["response_id"], event["item_id"], event["output_index"], event["content_index"])
        if kind in {"response.audio.delta", "response.output_audio.delta"}:
            raw = base64.b64decode(event["delta"], validate=True)
            if len(raw) % 2: raise ValueError("Output PCM16 chunk must have an even byte length")
            audio.setdefault(identity, bytearray()).extend(raw)
        elif kind.endswith(".done"):
            texts[identity] = event.get("text", event.get("transcript", ""))
        else:
            texts[identity] = texts.get(identity, "") + event["delta"]
            print(event["delta"], end="", flush=True)
    if kind == "response.done":
        response = event["response"]
        complete.append(response)
        if current_response is None: current_response = response["id"]
        if response["id"] == current_response: pending = False
    return event

def wait_for(ws, log, kind):
    while True:
        event = receive(ws, log)
        if event.get("type") == kind: return event

def send(ws, event):
    ws.send(json.dumps(event, ensure_ascii=False))

try:
    # One exact model query; no reconnect/retry loop and no provider credentials.
    with connect("wss://api.ailoot.ai/v1/realtime?model=qwen-audio-3.0-realtime-plus", additional_headers={"Authorization": "Bearer " + key}) as ws:
        with (out / "events.jsonl").open("w", encoding="utf-8") as log:
            wait_for(ws, log, "session.created")
            send(ws, {"type":"session.update", "session":{"modalities":["audio","text"], "input_audio_format":"pcm", "output_audio_format":"pcm", "turn_detection":None}})
            wait_for(ws, log, "session.updated")
            for offset in range(0, len(material), 640):
                send(ws, {"type":"input_audio_buffer.append", "audio":base64.b64encode(material[offset:offset+640]).decode("ascii")})
                time.sleep(0.02)
            send(ws, {"type":"input_audio_buffer.commit"})
            wait_for(ws, log, "input_audio_buffer.committed")
            send(ws, {"type":"response.create"})
            pending = True
            try:
                while pending: receive(ws, log)
            except KeyboardInterrupt:
                # Cancel the actual current inference, then preserve its returned status.
                send(ws, {"type":"response.cancel"})
                while pending: receive(ws, log)
    if not complete or complete[-1].get("status") != "completed":
        raise RuntimeError("Response did not complete normally; inspect saved events and status")
finally:
    manifest = {"responses":complete, "parts":[]}
    for number, identity in enumerate(dict.fromkeys(list(audio) + list(texts))):
        record = {"response_id":identity[0], "item_id":identity[1], "output_index":identity[2], "content_index":identity[3]}
        if identity in audio:
            raw = bytes(audio[identity])
            pcm_file = out / ("audio-" + str(number) + ".pcm")
            wav_file = out / ("audio-" + str(number) + ".wav")
            pcm_file.write_bytes(raw)
            with wave.open(str(wav_file), "wb") as wav:
                wav.setnchannels(1); wav.setsampwidth(2); wav.setframerate(24000); wav.writeframes(raw)
            record.update({"pcm":str(pcm_file), "wav":str(wav_file), "sample_rate_hz":24000})
        if identity in texts:
            text_file = out / ("text-" + str(number) + ".txt")
            text_file.write_text(texts[identity], encoding="utf-8")
            record["text"] = str(text_file)
        manifest["parts"].append(record)
    (out / "results.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2), encoding="utf-8")
    print("\nSaved every received event and result in", out)
```

### استلام النتائج وحفظها

#### Ailoot · صوت في الوقت الفعلي

أحداث الجلسة

##### الاحتفاظ بكل النتائج المكتملة

احتفظ بكل استجابة كاملة وكل ملف وجزء محتوى تم إرجاعه.

جمّع كل جزء صوتي مُعاد وكل نتيجة نصية أو حدث لكل معرّف استجابة فعلي.

##### عند الحاجة إلى التحقق من الاستجابة الأصلية

احتفظ بالمعرّفات الفعلية للجلسة والاستجابة والأحداث وبسجلات الإثبات.

الأخطاء والخطوات التالية

| الاستجابة | الشرط | الخطوة التالية |
| --- | --- | --- |
| الاستجابة⁦426⁩ · `invalid_request_error` | الشرطلم تتم ترقية الاتصال إلى WebSocket | الخطوة التاليةاستخدم عميل WebSocket مع Upgrade: websocket. |

### الأسماء البديلة

#### الأسماء البديلة للنموذج

**Ailoot** [`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/ar/#m=qwen-audio-3.0-realtime-plus&route=Core&caller=qwen-audio-3.0-realtime-plus&fmt=realtime)

#### الأسماء البديلة لمسارات الطرائق

استخدم مسارات الطرائق المعروضة أعلاه.

#### معرّفات النماذج ذات الصلة IDs

[`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/ar/#m=qwen-audio-3.0-realtime-plus&route=Core&caller=qwen-audio-3.0-realtime-plus&fmt=realtime)

FAQ · qwen-audio-3.0-realtime-plus

ما المدخلات والنتائج المتاحة؟

`GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` · `qwen-audio-3.0-realtime-plus`: `text`, `audio` → `text`, `audio`

ما الحدود المطبقة؟

`GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` · `qwen-audio-3.0-realtime-plus`: `session.max_history_turns.minimum`: `1`

اربط Ailoot بخدمة Claude Code أوOpenCode أوHermes أوتطبيقك.

## الشركة ومحفظة مشاريعها

الشركة ومحفظة مشاريعها: ملايين العملاء؛ مبيعات بالمليارات شهريًا.

## اشتر الرموز بخصم.

خصم اشتراك للعمل المنتظم. الرموز الترويجية حتى 50% على شراء الرموز.

الاشتراك

اختر خطة بخصم لطلباتك المنتظمة.

رمز خصم حتى 50%

أدخل الرمز عند الشراء. يعاد حساب السعر وفق العرض الساري.

المصروفات في السجل

يحفظ النموذج والرموز والمبلغ لكل طلب.

[اختر اشتراكا](https://ailoot.ai/docs/ar/billing/subscriptions/) · [اعرض أسعار النماذج](https://ailoot.ai/models/ar/)

## اربط API بالمنتج الذي تبيعه.

SaaS والتطبيقات والبوتات وفق العرض واتفاقية ترخيص Ailoot. لإعادة البيع، اطلب ترخيص موزع.

تطبيق تجاري

أضف توليد النص والصور والفيديو والصوت إلى ميزات خدمتك المدفوعة.

ترخيص إعادة البيع

أرسل وصف المشروع وطريقة توفير الوصول. اطلب شروط استخدام وإعادة بيع مكتوبة.

المستندات على الموقع

العرض واتفاقية الترخيص وسياسة معالجة البيانات متاحة قبل الربط.

[اطلب ترخيص إعادة بيع](mailto:support@ailoot.ai) · [العرض واتفاقية الترخيص](https://ailoot.ai/legal/offer?lang=ar)

## Ailoot · الشركة ومحفظة مشاريعها





تستند Ailoot إلى خبرة تشغيلية متراكمة وقاعدة عملاء واسعة وخدمة مستقرة ومراقبة مستمرة لمؤشرات الأداء KPI.





الشركة ومحفظة مشاريعها: ملايين العملاء؛ مبيعات بالمليارات شهريًا.





توظف Ailoot هذه الخبرة التشغيلية لإتاحة الوصول عبر API إلى قدرات الذكاء الاصطناعي في منتجات العملاء ووكلائهم وتطبيقاتهم وعمليات الأتمتة.
