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

# qwen-audio-3.0-realtime-plus

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

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

Model pro hlasový dialog v reálném čase, který přijímá řeč i text a odpovídá hlasem nebo textem. Je navržen pro přirozené tempo rozhovoru a práci s nástroji.

- [**Ailoot · Hlas v reálném čase** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus` `qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/cs/qwen-audio-3-0-realtime-plus/#method-0)

O modelu

Tento popis zahrnuje schopnosti modelu. Vstupy, výstupy a možnosti dostupné v Ailoot jsou uvedeny níže pro vybranou metodu.

Qwen-Audio-3.0-Realtime-Plus je model Alibaba pro hlasový dialog v reálném čase. Přijímá řeč i text, odpovídá zvukem i textem a podporuje obousměrný rozhovor s přirozeným střídáním replik. Zvuk lze odesílat a přijímat po částech, takže interakce probíhá průběžně během rozhovoru.

#### Kdy účastník rozhovoru dokončil myšlenku

K dispozici je několik způsobů určování hranic repliky: podle zvukové aktivity, podle významového dokončení a pomocí explicitního řízení. U výrobce se režim volí před odesláním prvního zvuku; změna po zahájení rozhovoru vyžaduje nové spojení. Podpora tohoto řízení závisí na zvolené metodě. Významový režim zohledňuje pauzy a výplňové výrazy: krátké zaváhání nemusí znamenat, že uživatel dokončil myšlenku. Další promluva uživatele může přerušit právě vytvářenou odpověď, aby rozhovor pokračoval s ohledem na následující repliku. Ve významovém režimu lze rozpoznávání zaměřit na řečový vzorek vybraného účastníka rozhovoru, aby je méně rušily cizí hlasy a hluk v pozadí.

Instrukce určují roli asistenta a styl komunikace. Hlasový projev může zohledňovat tón, tempo a emoce; pro verzi 3.0 je k dispozici pět systémových hlasů a hlasy podle řečového vzorku. Model podporuje 11 jazyků včetně ruštiny a také varianty čínských dialektů uvedené výrobcem. U výrobce se hlas nastavuje při první aktualizaci nastavení relace; následné zadání nového hlasu v témže rozhovoru se ignoruje. Tato nastavení vyžadují podporu zvoleného způsobu volání.

#### Nástroje a historie rozhovoru

Podporováno je volání funkcí. Model navrhne potřebnou akci, připojená aplikace ji provede a vrátí výsledek do dialogu. Díky tomu lze vést rozhovor na základě skutečných dat a pokračovat v něm po provedené operaci. Hlasový asistent může vycházet z výsledků nástrojů a přitom zachovávat kontext rozhovoru. Možnosti výrobce zahrnují také vestavěné vyhledávání na webu, pokud je poskytuje zvolená metoda. Vyhledávání na webu a volání funkcí nelze zapnout současně v jedné relaci.

Ve výchozím nastavení historie obsahuje 20 kol rozhovoru; dostupný rozsah je od jednoho do 50. Pro nahromaděný zvuk je stanoven limit 300 sekund; při překročení omezení se staré části historie odstraňují. Tento limit se liší od délky jednotlivé repliky: historie určuje, jaký předchozí materiál zůstává dostupný při pokračování dialogu.

#### Textový kontext a zvuk

Formální velikost kontextu je 40 960 tokenů. Maximální délka vstupu je 16 384 tokenů a výstupu 8192; stejné limity vstupu a výstupu jsou uvedeny pro režim uvažování, se samostatným limitem řetězce uvažování 1024 tokenů.

Pro streamovaný zvuk je určen jednokanálový PCM v 16bitovém formátu: na vstupu 16 kHz, na výstupu 24 kHz. Textová a zvuková data patří do jednoho rozhovoru. Vizuální vstup ani generování obrázků nejsou pro tento konkrétní model deklarovány; specializuje se na řeč, text a hlasovou interakci.

**Ailoot · Hlas v reálném čase** `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/cs/#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`

### Úvod

Model pro hlasový dialog v reálném čase, který přijímá řeč i text a odpovídá hlasem nebo textem. Je navržen pro přirozené tempo rozhovoru a práci s nástroji.

Přijímané vstupy

Text · Zvuk

Výsledky

Text · Zvuk

### Dostupné v Ailoot · vstupy a metody

**Ailoot · Hlas v reálném čase** `GET /v1/realtime?model=qwen-audio-3.0-realtime-plus`

Vstup

`text`, `audio`

Výstup

`text`, `audio`

Výstupní formát

události relace

| Pole | Typ | Požadavek | Hodnoty a limity | Výchozí |
| --- | --- | --- | --- | --- |
| Pole`query.model` | Typ`string` | PožadavekPovinné | Hodnoty a limity qwen-audio-3.0-realtime-plus | Výchozí— |
| Pole`session.input_audio_format` | Typ`string` | PožadavekVolitelné | Hodnoty a limity pcm16, pcm | Výchozí— |
| Pole`session.output_audio_format` | Typ`string` | PožadavekVolitelné | Hodnoty a limity pcm16, pcm | Výchozí— |
| Pole`session.instructions` | Typ`string` | PožadavekVolitelné | Hodnoty a limity Limit platí pro: zvolená pravidla relace | Výchozí— |
| Pole`session.max_history_turns` | Typ`integer` | PožadavekVolitelné | Hodnoty a limity Minimum: 1 Limit platí pro: zvolená pravidla relace | Výchozí— |
| Pole`input_audio_buffer.append.audio` | Typ`base64_string` | PožadavekPovinné | Hodnoty a limity Vstupní obsah: PCM16 mono; vstup 16 kHz, výstup 24 kHz; neprázdná sudá délka v bajtech | Výchozí— |

Kombinace vstupních materiálů

**realtime\_text\_audio**

Parametry a životní cyklus metody

| Parametr | Kontrakt |
| --- | --- |
| Parametr`material_types` | Kontrakttext, audio |
| Parametr`required` | Kontraktnull |
| Parametr`optional_controls` | Kontraktnull |
| Parametr`content_type` | KontraktWebSocket |

Životní cyklus: `exact retained published method`

Struktury metod a ID jsou přesné; schopnosti dodavatele jsou oddělené od připuštění požadavku.

### Tarify

#### Sazby metod Ailoot

Vstup

0,0008 US$ */ 1K*

Výstup

0,0064 US$ */ 1K*

Vstup

0,0048 US$ *za minutu zvuku*

Výstup

0,018 US$ *za minutu výstupního zvuku*

Ailoot před požadavkem rezervuje odhadovanou částku. Po výsledku vyúčtuje konečný poplatek podle naměřeného využití. Při streamování se účtování řídí konečným záznamem využití. [Jak funguje rezervace a vyúčtování →](https://ailoot.ai/docs/cs/billing/reserve/)

### Příklady požadavků

#### Ailoot · Hlas v reálném čase

Python WebSocket · textPython WebSocket · zvuk

```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)
```

### Přijímání a ukládání výsledků

#### Ailoot · Hlas v reálném čase

události relace

##### Uchovejte všechny dokončené výsledky

Uchovejte každou úplnou vrácenou odpověď, soubor i část obsahu.

Pro každé skutečné ID odpovědi sestavte všechny vrácené zvukové přírůstky a textové výsledky či události.

##### Pokud je nutné ověřit původní odpověď

Uchovejte skutečná ID relací, odpovědí a událostí i doklady.

Chyby a další kroky

| Odpověď | Podmínka | Další krok |
| --- | --- | --- |
| Odpověď426 · `invalid_request_error` | PodmínkaBez přepnutí na WebSocket | Další krokPoužijte klienta WebSocket s Upgrade: websocket. |

### Aliasy

#### Aliasy modelu

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

#### Aliasy cest metod

Použijte cesty metod uvedené výše.

#### Související ID modelů

[`qwen-audio-3.0-realtime-plus`](https://ailoot.ai/models/cs/#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

Jaké vstupy a výsledky jsou dostupné?

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

Jaké limity platí?

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

Připojte Ailoot k Claude Code, OpenCode, Hermes nebo vlastní aplikaci.

## Společnost a její portfolio projektů

Společnost a její portfolio projektů: miliony zákazníků; měsíční tržby v miliardách.

## Nakupujte tokeny se slevou.

Sleva předplatného pro pravidelnou práci. Promo kódy až 50% na nákup tokenů.

Předplatné

Pro pravidelné požadavky vyberte tarif se slevou.

Promo kód až 50%

Při nákupu zadejte kód. Cena se přepočítá podle probíhající akce.

Výdaje v historii

U každého požadavku se uloží model, tokeny a částka.

[Vybrat předplatné](https://ailoot.ai/docs/cs/billing/subscriptions/) · [Zobrazit ceny modelů](https://ailoot.ai/models/cs/)

## Připojte API k produktu, který prodáváte.

SaaS, aplikace a boti podle nabídky a licenční smlouvy Ailoot. Pro přeprodej požádejte o licenci přeprodejce.

Komerční aplikace

Začleňte generování textu, obrázků, videa a zvuku do placených funkcí své služby.

Licence pro přeprodejce

Pošlete popis projektu a způsob poskytování přístupu. Vyžádejte písemné podmínky použití a přeprodeje.

Dokumenty na webu

Nabídka, licenční smlouva a zásady zpracování dat jsou dostupné před připojením.

[Požádat o licenci přeprodejce](mailto:support@ailoot.ai) · [Nabídka a licenční smlouva](https://ailoot.ai/legal/offer?lang=cs)

## Ailoot · Společnost a její portfolio projektů





Ailoot staví na dlouhodobých provozních zkušenostech, široké klientské základně, stabilních službách a průběžném sledování KPI.





Společnost a její portfolio projektů: miliony zákazníků; měsíční tržby v miliardách.





Ailoot využívá tyto provozní zkušenosti k poskytování přístupu přes API k funkcím AI v produktech zákazníků, agentech, aplikacích a automatizacích.
