μοντέλα

qwen-audio-3.0-realtime-plus

Markdown · JSON

qwen-audio-3.0-realtime-plus

Μοντέλο ζωντανού φωνητικού διαλόγου που δέχεται ομιλία και κείμενο και απαντά με φωνή ή κείμενο. Έχει σχεδιαστεί για φυσικό ρυθμό επικοινωνίας και αλληλεπίδραση με εργαλεία.

Σχετικά με το μοντέλο

Αυτή η περιγραφή καλύπτει τις δυνατότητες του μοντέλου. Οι είσοδοι, έξοδοι και επιλογές που διατίθενται στο Ailoot παρατίθενται παρακάτω για την επιλεγμένη μέθοδο.

Το Qwen-Audio-3.0-Realtime-Plus είναι μοντέλο της Alibaba για ζωντανό φωνητικό διάλογο. Δέχεται ομιλία και κείμενο, απαντά με ήχο και κείμενο και υποστηρίζει αμφίδρομη συνομιλία με φυσική εναλλαγή μεταξύ των συνομιλητών. Ο ήχος μπορεί να αποστέλλεται και να λαμβάνεται τμηματικά, ώστε η αλληλεπίδραση να εξελίσσεται κατά τη διάρκεια της συνομιλίας.

Πότε ο συνομιλητής ολοκληρώνει τη σκέψη του

Υπάρχουν διάφοροι τρόποι προσδιορισμού των ορίων μιας εκφώνησης: από τη δραστηριότητα του ήχου, από τη νοηματική ολοκλήρωση και με ρητό έλεγχο. Στην υλοποίηση του κατασκευαστή η λειτουργία επιλέγεται πριν αποσταλεί ο πρώτος ήχος· για να αλλάξει μετά την έναρξη της συνομιλίας απαιτείται νέα σύνδεση. Η υποστήριξη αυτού του ελέγχου εξαρτάται από την επιλεγμένη μέθοδο. Η νοηματική λειτουργία λαμβάνει υπόψη παύσεις και λέξεις πλήρωσης του λόγου: ένα σύντομο κόμπιασμα δεν σημαίνει απαραίτητα ότι ο χρήστης ολοκλήρωσε τη σκέψη του. Νέα ομιλία του χρήστη μπορεί να διακόψει την απάντηση που παράγεται, ώστε η συνομιλία να συνεχιστεί λαμβάνοντας υπόψη την επόμενη παρέμβαση. Στη νοηματική λειτουργία, η αναγνώριση μπορεί να προσανατολιστεί σε δείγμα ομιλίας του επιλεγμένου συνομιλητή, για να αποσπάται λιγότερο από άλλες φωνές και θόρυβο περιβάλλοντος.

Οι οδηγίες καθορίζουν τον ρόλο του βοηθού και το ύφος της συνομιλίας. Η φωνητική απόδοση μπορεί να λαμβάνει υπόψη τον τόνο, τον ρυθμό και το συναίσθημα· για την έκδοση 3.0 προβλέπονται πέντε φωνές του συστήματος και φωνές βάσει δείγματος ομιλίας. Το μοντέλο υποστηρίζει 11 γλώσσες, μεταξύ των οποίων τα ρωσικά, καθώς και τις παραλλαγές κινεζικών διαλέκτων που αναφέρει ο κατασκευαστής. Στην υλοποίηση του κατασκευαστή η φωνή ορίζεται κατά την πρώτη ενημέρωση των ρυθμίσεων της συνεδρίας· αν αποσταλεί νέα φωνή αργότερα στην ίδια συνομιλία, αγνοείται. Αυτές οι ρυθμίσεις απαιτούν υποστήριξη από τον επιλεγμένο τρόπο πρόσβασης.

Εργαλεία και ιστορικό συνομιλίας

Υποστηρίζονται κλήσεις συναρτήσεων. Το μοντέλο διαμορφώνει την απαιτούμενη ενέργεια, η συνδεδεμένη εφαρμογή την εκτελεί και επιστρέφει το αποτέλεσμα στη συνομιλία. Έτσι η συνομιλία μπορεί να βασίζεται σε πραγματικά δεδομένα και να συνεχίζεται μετά την ολοκλήρωση της ενέργειας. Ο φωνητικός βοηθός μπορεί να αξιοποιεί αποτελέσματα εργαλείων, διατηρώντας τα συμφραζόμενα της συζήτησης. Οι δυνατότητες του κατασκευαστή περιλαμβάνουν επίσης ενσωματωμένη αναζήτηση στον ιστό, εφόσον την παρέχει η επιλεγμένη μέθοδος. Η αναζήτηση στον ιστό και οι κλήσεις συναρτήσεων δεν μπορούν να ενεργοποιηθούν ταυτόχρονα στην ίδια συνεδρία.

Από προεπιλογή, το ιστορικό περιέχει 20 γύρους συνομιλίας, με διαθέσιμο εύρος από έναν έως 50. Για τον συσσωρευμένο ήχο ισχύει όριο 300 δευτερολέπτων· όταν ξεπερνιούνται τα όρια, αφαιρούνται τα παλαιότερα τμήματα του ιστορικού. Αυτό διαφέρει από τη διάρκεια μιας μεμονωμένης εκφώνησης: το ιστορικό καθορίζει ποιο προηγούμενο υλικό παραμένει διαθέσιμο όταν συνεχίζεται η συνομιλία.

Παράθυρο κειμένου και ήχος

Το ονομαστικό παράθυρο συμφραζομένων είναι 40 960 token. Το ανώτατο όριο εισόδου είναι 16 384 token και εξόδου 8192· τα ίδια όρια εισόδου και εξόδου αναφέρονται για τη λειτουργία συλλογισμού, με ξεχωριστό όριο 1024 token για την αλυσίδα συλλογισμού.

Για τον ήχο σε ροή προβλέπεται μονοκαναλικό PCM με αναπαράσταση 16 bit: στην είσοδο 16 kHz και στην έξοδο 24 kHz. Τα δεδομένα κειμένου και ήχου ανήκουν στην ίδια συνομιλία. Για το συγκεκριμένο μοντέλο δεν έχει δηλωθεί οπτική είσοδος ούτε παραγωγή εικόνων· εξειδικεύεται στην ομιλία, το κείμενο και τη φωνητική αλληλεπίδραση.

Ailoot · Φωνή σε πραγματικό χρόνο GET /v1/realtime?model=qwen-audio-3.0-realtime-plus qwen-audio-3.0-realtime-plus

qwen-audio-3.0-realtime-plus

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· μη κενό άρτιο πλήθος byte
Προεπιλογή—
Συνδυασμοί υλικών εισόδου

realtime_text_audio

Παράμετροι και κύκλος ζωής μεθόδου
ΠαράμετροςΣύμβαση
Παράμετροςmaterial_typesΣύμβασηtext, audio
ΠαράμετροςrequiredΣύμβασηnull
Παράμετροςoptional_controlsΣύμβασηnull
Παράμετροςcontent_typeΣύμβασηWebSocket

Κύκλος ζωής: exact retained published method

Οι δομές και τα ID των μεθόδων είναι ακριβή· η δυνατότητα του προμηθευτή είναι ξεχωριστή από την αποδοχή αιτημάτων.

Τιμολόγηση

Χρεώσεις μεθόδων Ailoot

Ailoot Φωνή σε πραγματικό χρόνοGET /v1/realtime?model=qwen-audio-3.0-realtime-plus
Είσοδος
0,0008 $ / 1K
Έξοδος
0,0064 $ / 1K
Είσοδος
0,0048 $ ανά λεπτό ήχου
Έξοδος
0,018 $ ανά λεπτό ήχου εξόδου

Το Ailoot δεσμεύει ένα εκτιμώμενο ποσό πριν από το αίτημα. Μετά το αποτέλεσμα, εκκαθαρίζει την τελική χρέωση βάσει της μετρημένης χρήσης. Η εκκαθάριση ροής χρησιμοποιεί την τελική καταγραφή χρήσης. Πώς λειτουργούν η δέσμευση και η εκκαθάριση →

Παραδείγματα αιτημάτων

Ailoot · Φωνή σε πραγματικό χρόνο

Python WebSocket · κείμενοPython WebSocket · ήχος
# 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)
# 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 · Φωνή σε πραγματικό χρόνο

συμβάντα συνεδρίας

Διατηρήστε όλα τα ολοκληρωμένα αποτελέσματα

Διατηρήστε κάθε πλήρη απάντηση, αρχείο και τμήμα περιεχομένου που επιστρέφεται.

Συναρμολογήστε κάθε τμήμα ήχου και αποτέλεσμα κειμένου ή συμβάντος που επιστρέφεται για κάθε πραγματικό ID απόκρισης.

Αν χρειάζεται έλεγχος της αρχικής απάντησης

Διατηρήστε τα πραγματικά ID συνεδρίας, απόκρισης και συμβάντων, καθώς και τα αποδεικτικά.

Σφάλματα και επόμενα βήματα
ΑπάντησηΣυνθήκηΕπόμενο βήμα
Απάντηση426 · invalid_request_errorΣυνθήκηΔεν έγινε αναβάθμιση σε WebSocketΕπόμενο βήμαΧρησιμοποιήστε πελάτη WebSocket με Upgrade: websocket.

Εναλλακτικά ονόματα

Εναλλακτικά ονόματα μοντέλου

Ailoot qwen-audio-3.0-realtime-plus

Εναλλακτικές διαδρομές μεθόδων

Χρησιμοποιήστε τις διαδρομές μεθόδων που εμφανίζονται παραπάνω.

Σχετικά ID μοντέλων

qwen-audio-3.0-realtime-plus

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 ή τη δική σας εφαρμογή.

Η εταιρεία και το χαρτοφυλάκιο έργων της

Η εταιρεία και το χαρτοφυλάκιο έργων της: εκατομμύρια πελάτες· μηνιαίες πωλήσεις δισεκατομμυρίων.

Αγοράστε token με έκπτωση.

Έκπτωση συνδρομής για τακτική χρήση. Προωθητικοί κωδικοί — έως 50% στην αγορά token.

Συνδρομή
Επιλέξτε πρόγραμμα με έκπτωση για τα τακτικά αιτήματά σας.
Προωθητικός κωδικός έως 50%
Εισαγάγετε τον κωδικό στην αγορά. Η τιμή επανυπολογίζεται σύμφωνα με την ενεργή προσφορά.
Δαπάνες στο ιστορικό
Μοντέλο, token και ποσό αποθηκεύονται για κάθε αίτημα.

Επιλέξτε συνδρομή · Δείτε τιμές μοντέλων

Συνδέστε το API με το προϊόν που πουλάτε.

SaaS, εφαρμογές και bot — σύμφωνα με τη δημόσια προσφορά και τη σύμβαση άδειας χρήσης Ailoot. Για μεταπώληση ζητήστε σχετική άδεια.

Εμπορική εφαρμογή
Ενσωματώστε δημιουργία κειμένου, εικόνων, βίντεο και ήχου στις πληρωμένες λειτουργίες της υπηρεσίας σας.
Άδεια για μεταπωλητή
Στείλτε περιγραφή έργου και τρόπο πρόσβασης. Ζητήστε γραπτούς όρους χρήσης και μεταπώλησης.
Έγγραφα στον ιστότοπο
Δημόσια προσφορά, σύμβαση άδειας χρήσης και πολιτική επεξεργασίας δεδομένων είναι διαθέσιμες πριν τη σύνδεση.

Ζητήστε άδεια μεταπώλησης · Δημόσια προσφορά και σύμβαση άδειας χρήσης