L'API Qwen-Audio Realtime permet des conversations vocales en temps réel via le protocole WebSocket. Les clients interagissent avec le serveur par l'envoi et la réception d'événements JSON. Cette API prend en charge les entrées audio et texte, la détection d'activité vocale (VAD), ainsi que la sortie en streaming audio et texte.
Guide utilisateur : Conversation audio en temps réel (Qwen-Audio-Realtime). Pour une description détaillée des événements client et serveur, consultez les rubriques Événements client et Événements serveur.
ImportantAlibaba Cloud Model Studio a publié un domaine spécifique à l'espace de travail pour la région Chine (Pékin). Ce nouveau domaine dédié offre des performances supérieures et une stabilité accrue pour les requêtes d'inférence. Nous vous recommandons de migrer de dashscope.aliyuncs.com vers {WorkspaceId}.cn-beijing.maas.aliyuncs.com.
Remplacez {WorkspaceId} par votre ID d'espace de travail réel. Le domaine existant reste pleinement fonctionnel.
Endpoint du service
L'URL WebSocket est fixe. Spécifiez le nom du modèle à l'aide du paramètre de requête model (remplacez <model_name> par le nom réel du modèle) :
China (Beijing)
wss://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/api-ws/v1/realtime?model=<model_name>
Remplacez {WorkspaceId} (y compris les accolades) par votre ID d'espace de travail réel.
ImportantUtilisez le protocole wss://. Définissez l'en-tête Authorization dans la requête. Transmettez le nom du modèle via le paramètre de requête URL model.
En-têtes de requête
Incluez les en-têtes suivants dans votre requête :
Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
Authorization | string | Oui | Jeton d'authentification au format |
user-agent | string | Non | Identifiant client pour le suivi des requêtes côté serveur. |
X-DashScope-WorkSpace | string | Non | ID de l'espace de travail Alibaba Cloud Model Studio. |
ImportantL'autorisation est vérifiée lors de la négociation WebSocket. Si la clé API est invalide ou manquante, la négociation échoue avec une erreur HTTP 401/403.
Concepts clés
- Session : Une connexion WebSocket unique correspond à une session qui conserve la configuration et le contexte de conversation.
- Élément de conversation : Message individuel au sein d'une conversation, maintenu dans un ordre séquentiel.
- Réponse : Sortie générée par une inférence unique du modèle, contenant un ou plusieurs éléments de sortie. Un élément de sortie peut être un message de l'assistant ou un appel de fonction.
- Appel de fonction : Élément généré par le modèle lorsqu'il nécessite l'exécution d'une fonction outil par le client. Après avoir exécuté l'outil, le client renvoie le résultat via
function_call_outputet déclenche l'inférence suivante avecresponse.create. - Détection de tour de parole : Contrôle le moment où déclencher l'inférence du modèle.
Modes d'interaction
L'API Qwen-Audio Realtime prend en charge trois modes d'interaction, configurables via le paramètre turn_detection.type de l'événement session.update :
Mode | turn_detection.type | Description | Cas d'utilisation |
|---|---|---|---|
server_vad |
| La VAD côté serveur détecte le début et la fin de la parole, puis déclenche automatiquement l'inférence. | Conversation mains libres, assistants vocaux |
smart_turn |
| Détection intelligente des tours de parole combinant analyse acoustique et sémantique pour déterminer les limites de prise de parole, au-delà des simples signaux vocaux. Les sons non sémantiques (comme « euh » ou « ah ») ne déclenchent pas de tour de parole ni n'interrompent la lecture. | Conversation naturelle à faible latence, interruption de haute qualité |
push-to-talk |
| Le client soumet manuellement l'audio et déclenche l'inférence. | Push-to-talk, contrôle précis |
Flux d'interaction
Pour une description détaillée des événements client et serveur, consultez les rubriques Événements client et Événements serveur.
Mode server_vad
Le serveur effectue une détection d'activité vocale sur le flux audio entrant et déclenche automatiquement l'inférence après avoir détecté la fin de la parole.
Activation : Définissez le paramètre turn_detection.type de l'événement session.update sur server_vad.
Tour de conversation complet
Le diagramme suivant illustre la séquence d'interaction typique en mode server_vad :
L'interaction se déroule comme suit :
- Le client établit une connexion WebSocket et le serveur renvoie un événement
session.created. - Le client envoie
session.updatepour configurer les paramètres de session, et le serveur répond parsession.updated. - Le client envoie en continu
input_audio_buffer.appendpour diffuser les données audio. - Le serveur détecte le début de la parole et renvoie
input_audio_buffer.speech_started. Il diffuse également les deltas de transcription ASR viaconversation.item.input_audio_transcription.delta. - Le serveur détecte la fin de la parole et renvoie
input_audio_buffer.speech_stopped,input_audio_buffer.committedetconversation.item.created. - Le serveur génère automatiquement une réponse en diffusant les deltas de texte et d'audio (
response.audio_transcript.delta,response.audio.delta), puis renvoie finalementresponse.done.
Interruption utilisateur
Si la VAD détecte que l'utilisateur commence à parler pendant la lecture d'une réponse par le modèle, le serveur annule la réponse en cours (renvoie response.done avec le statut cancelled), puis entame un nouveau cycle d'entrée vocale et de réponse. Le diagramme suivant illustre la séquence d'interaction lors d'une interruption utilisateur :
Mode smart_turn
Le mode smart_turn détecte la fin de la parole en combinant perception acoustique et compréhension sémantique, filtrant ainsi les réponses de type backchannel, le bruit ambiant et autres sons non sémantiques. Ces sons non sémantiques sont transmis sous forme d'événements conversation.item.ambient_audio_transcription.delta sans déclencher de tour de conversation.
Activation : Définissez le paramètre turn_detection.type de l'événement session.update sur smart_turn.
Tour de conversation complet
Le diagramme suivant illustre la séquence d'interaction typique en mode smart_turn :
Différences principales par rapport au mode server_vad :
- Les sons non sémantiques (« euh », « ah », etc.) ne déclenchent pas d'inférence. Ils sont en revanche renvoyés via des événements
ambient_audio_transcription. - Une parole précédemment validée peut être invalidée (
input_audio_buffer.speech_stoppedrenvoiereason=turn_invalid), auquel cas aucune inférence n'est déclenchée. - En attendant la prochaine entrée de l'utilisateur, le client peut explicitement envoyer
response.createpour déclencher une inférence.
Interruption utilisateur
La gestion des interruptions est globalement identique à celle du mode server_vad. Le diagramme suivant illustre la séquence d'interaction lors d'une interruption utilisateur :
Tour de parole invalide
Une parole précédemment validée peut être invalidée (input_audio_buffer.speech_stopped renvoie reason=turn_invalid), auquel cas aucune inférence n'est déclenchée. Le client doit continuer à envoyer l'audio et attendre la prochaine parole valide. Le diagramme suivant illustre la séquence d'interaction pour un tour de parole invalide :
Flux de configuration de l'amélioration du locuteur
En mode smart_turn, lorsque voiceprint_audio_urls est inclus dans le premier événement session.update, le serveur effectue de manière asynchrone l'enregistrement de l'empreinte vocale (chargement des caractéristiques audio du locuteur cible) et notifie au client la progression de cet enregistrement via des événements. Un échec de l'enregistrement de l'empreinte vocale ne bloque pas le déroulement normal de la conversation.
La séquence d'interaction pour l'enregistrement de l'empreinte vocale est la suivante :
-
Le client envoie
session.updateavec les URL audio de l'empreinte vocale dansturn_detection.voiceprint_audio_urls. Le serveur renvoiesession.created. -
Le serveur lance immédiatement l'enregistrement de l'empreinte vocale de façon asynchrone et pousse
voiceprint_audio_list.in_progressavant de renvoyersession.updated. Cet événement contient l'item_idqui identifie de manière unique la tâche d'enregistrement. -
Le serveur renvoie
session.updatedpour confirmer que la configuration de la session a pris effet. -
Une fois l'enregistrement terminé, le serveur pousse un événement terminal (l'
item_idcorrespond à celui de l'étape 2) :- Succès de l'enregistrement :
voiceprint_audio_list.completed. - Échec de l'enregistrement :
voiceprint_audio_list.failed, avec un champreasondécrivant la cause de l'échec (par exemple, impossibilité de télécharger l'URL audio).
- Succès de l'enregistrement :
RemarqueLe paramètre voiceprint_audio_urls n'est configurable que dans le premier événement session.update. Ce champ est ignoré dans les appels session.update ultérieurs.
Mode push-to-talk
Le client contrôle manuellement la soumission de l'audio et le déclenchement de l'inférence. Privilégiez ce mode pour contrôler précisément le moment où l'audio est soumis et où l'inférence débute.
Activation : Définissez le paramètre turn_detection de l'événement session.update sur null.
Tour de conversation complet
Le diagramme suivant illustre la séquence d'interaction typique en mode push-to-talk :
L'interaction se déroule comme suit :
- Le client envoie en continu
input_audio_buffer.appendpour diffuser les données audio. - Une fois que l'utilisateur a fini de parler, le client envoie
input_audio_buffer.commitpour valider le tampon. - Le client envoie
response.createpour déclencher manuellement l'inférence. - Le serveur génère une réponse en diffusant le texte et l'audio.
Interruption utilisateur
Le client envoie response.cancel pour annuler la réponse en cours, et le serveur renvoie response.done (avec le statut cancelled et la raison client_cancelled). Le diagramme suivant illustre la séquence d'interaction lors d'une interruption utilisateur :
Contraintes opérationnelles des modes
Opération | push-to-talk | server_vad | smart_turn |
|---|---|---|---|
session.update | Tous les paramètres peuvent être modifiés à l'état IDLE ; certains sont restreints hors état IDLE | Tous les paramètres peuvent être modifiés à l'état IDLE ; certains sont restreints hors état IDLE | Tous les paramètres peuvent être modifiés à l'état IDLE ; certains sont restreints hors état IDLE |
input_audio_buffer.append | Autorisé | Autorisé | Autorisé |
input_audio_buffer.commit | Autorisé | Ignoré | Ignoré |
input_audio_buffer.clear | Autorisé | Ignoré | Ignoré |
response.create | Autorisé. L'audio doit d'abord être validé via | Autorisé lorsqu'aucune réponse n'est en cours de génération ; interdit pendant la génération d'une réponse | Autorisé en attendant la prochaine entrée de l'utilisateur ; interdit pendant un tour de parole actif (de |
response.cancel | Autorisé (pendant l'inférence) | Autorisé (pendant l'inférence) | Autorisé (pendant l'inférence) |
conversation.item.create/delete/retrieve | Autorisé | Autorisé | Autorisé |
RemarqueLes paramètres turn_detection et input_audio_format ne peuvent être modifiés qu'avant l'envoi du premier flux audio (état IDLE).
Gestion des erreurs
Type | Comportement | Exemples |
|---|---|---|
Erreur client ( | La connexion reste ouverte ; le client reçoit un événement d'erreur | Paramètres invalides, état non autorisé, item_id dupliqué |
Erreur serveur ( | Connexion interrompue | Échec de connexion LLM, défaillance du stockage |