Utilisez le SDK DashScope pour Java afin d'appeler Qwen-ASR-Realtime.
Guide utilisateur : Pour une présentation du modèle, ses fonctionnalités et des exemples de code complets, consultez Reconnaissance vocale en temps réel - Qwen.
Prérequis
- SDK DashScope version 2.22.5 ou ultérieure (Installer le SDK)
- Obtenir une clé API
- Maîtriser le flux d'interaction entre le client et le serveur
ImportantAlibaba Cloud Model Studio a publié des domaines spécifiques à chaque espace de travail pour les régions Chine (Pékin) et Singapour. Ces nouveaux domaines dédiés offrent des performances supérieures et une stabilité accrue pour les requêtes d'inférence. Nous vous recommandons de migrer vers ces nouveaux domaines :
- Chine (Pékin) : de
dashscope.aliyuncs.comvers{WorkspaceId}.cn-beijing.maas.aliyuncs.com - Singapour : de
dashscope-intl.aliyuncs.comvers{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com
Remplacez {WorkspaceId} par votre ID d'espace de travail. Les domaines existants restent pleinement opérationnels.
Modes d'interaction
Qwen-ASR-Realtime propose deux modes pour déterminer le moment de traitement de l'audio :
Mode | enableTurnDetection | Fonctionnement |
|---|---|---|
Mode VAD (par défaut) |
| Le serveur détecte les limites de la parole grâce à la détection d'activité vocale (VAD) et décide quand soumettre le tampon audio à la reconnaissance. |
Mode manuel |
| Le client contrôle la soumission de l'audio en appelant |
Pour plus de détails sur chaque mode, reportez-vous aux sections Mode VAD et Mode manuel.
Paramètres de requête
Paramètres de connexion (OmniRealtimeParam)
Définissez ces paramètres à l'aide des méthodes chaînées de la classe OmniRealtimeParam.
Cliquez pour afficher l'exemple de code
OmniRealtimeParam param = OmniRealtimeParam.builder()
.model("qwen3-asr-flash-realtime")
// Endpoint for the Singapore region.
// The following configuration is for the Singapore region. Replace "{WorkspaceId}" with your actual workspace ID. The configuration varies by region.
.url("wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/realtime")
// The API keys for the Singapore and Beijing regions are different.
// To obtain an API key, see https://www.alibabacloud.com/help/en/model-studio/get-api-key
// If you have not configured an environment variable, replace the following line with .apikey("sk-xxx").
.apikey(System.getenv("DASHSCOPE_API_KEY"))
.build();
Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
|
| Oui | Modèle à utiliser. Exemple : |
|
| Oui | Endpoint du service. Chine (Pékin) : |
|
| Non | Clé API. |
Configuration de session (OmniRealtimeConfig)
Définissez ces paramètres via les méthodes chaînées de la classe OmniRealtimeConfig.
Cliquez pour afficher l'exemple de code
OmniRealtimeTranscriptionParam transcriptionParam = new OmniRealtimeTranscriptionParam();
transcriptionParam.setLanguage("zh");
transcriptionParam.setInputSampleRate(16000);
transcriptionParam.setInputAudioFormat("pcm");
OmniRealtimeConfig config = OmniRealtimeConfig.builder()
.modalities(Collections.singletonList(OmniRealtimeModality.TEXT))
.enableTurnDetection(true)
.turnDetectionType("server_vad")
.turnDetectionThreshold(0.0f)
.turnDetectionSilenceDurationMs(400)
.transcriptionConfig(transcriptionParam)
.build();
Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
|
| Oui | Modalité de sortie. Valeur fixe : |
|
| Non | Active le VAD côté serveur. Si cette option est désactivée, appelez |
|
| Non | Type de VAD. Valeur fixe : |
|
| Non | Seuil de sensibilité du VAD. Valeur recommandée : Valeur par défaut : Des valeurs plus basses augmentent la sensibilité (risque de déclenchement sur le bruit ambiant). Des valeurs plus élevées réduisent la sensibilité et limitent les faux positifs dans les environnements bruyants. |
|
| Non | Durée de silence en millisecondes marquant la fin d'une énonciation. Valeur recommandée : Valeur par défaut : Des durées plus courtes (ex. : 300 ms) accélèrent les réponses mais peuvent fractionner les pauses naturelles. Des durées plus longues (ex. : 1200 ms) gèrent mieux les pauses mais augmentent la latence. |
|
| Non | Paramètres de reconnaissance vocale. Consultez la section Paramètres de transcription. |
Paramètres de transcription (OmniRealtimeTranscriptionParam)
Configurez ces paramètres au moyen des méthodes setter de la classe OmniRealtimeTranscriptionParam.
Cliquez pour afficher l'exemple de code
OmniRealtimeTranscriptionParam transcriptionParam = new OmniRealtimeTranscriptionParam();
transcriptionParam.setLanguage("zh");
transcriptionParam.setInputSampleRate(16000);
transcriptionParam.setInputAudioFormat("pcm");
Paramètre | Type | Obligatoire | Description |
|---|---|---|---|
|
| Non | Langue de la source audio. Pour la liste des langues prises en charge, voir Langues prises en charge. |
|
| Non | Taux d'échantillonnage audio en Hz. Valeurs valides : Valeur par défaut : La valeur |
|
| Non | Format d'encodage audio. Valeurs valides : |
|
| Non | Texte contextuel pour le biaisage contextuel. Fournissez du texte de fond, des vocabulaires d'entités ou des documents de référence afin d'améliorer la précision de la reconnaissance. Maximum : 10 000 tokens. |
Interfaces clés
OmniRealtimeConversation
Importation : com.alibaba.dashscope.audio.omni.OmniRealtimeConversation
Cette classe gère le cycle de vie WebSocket : connexion au serveur, envoi de l'audio et clôture de la session.
Créer une conversation
OmniRealtimeConversation conversation =
new OmniRealtimeConversation(param, callback);
Crée une nouvelle instance de conversation avec les paramètres de connexion et le gestionnaire de callback spécifiés.
Se connecter au serveur
conversation.connect();
Ouvre une connexion WebSocket. Le serveur répond par les événements session.created et session.updated.
Exceptions levées : NoApiKeyException, InterruptedException.
Configurer la session
conversation.updateSession(config);
Met à jour la configuration de la session une fois la connexion établie. Le serveur répond par un événement session.updated. En l'absence d'appel, le serveur applique les paramètres par défaut.
Envoyer des données audio
conversation.appendAudio(audioBase64);
Ajoute un segment audio encodé en Base64 au tampon audio côté serveur.
- Mode VAD (
enableTurnDetection=true) : Le serveur détecte les limites de la parole et décide du moment de traitement du tampon. - Mode manuel (
enableTurnDetection=false) : L'audio s'accumule dans le tampon jusqu'à l'appel decommit()pour déclencher la reconnaissance. Chaque événement peut contenir jusqu'à 15 Mio de données audio.
Soumettre le tampon audio
conversation.commit();
Soumet l'audio mis en tampon pour reconnaissance. Le serveur répond par un événement input_audio_buffer.committed.
Cette méthode n'est disponible qu'en mode manuel (
enableTurnDetection=false). Une erreur survient si le tampon audio est vide.
Terminer la session
conversation.endSession(); // synchronous
// or
conversation.endSessionAsync(); // asynchronous
Signale au serveur de finir le traitement de l'audio restant et de clore la session. Le serveur répond par un événement session.finished.
Moments d'appel recommandés :
- Mode VAD : Après avoir terminé l'envoi de l'audio.
- Mode manuel : Après avoir appelé
commit().
Fermer la connexion
conversation.close();
Arrête la tâche et ferme immédiatement la connexion WebSocket.
Obtenir les ID de session et de réponse
String sessionId = conversation.getSessionId();
String responseId = conversation.getResponseId();
getSessionId()renvoie l'ID de session de la tâche en cours.getResponseId()renvoie l'ID de la réponse serveur la plus récente.
OmniRealtimeCallback
Importation : com.alibaba.dashscope.audio.omni.OmniRealtimeCallback
Héritez de cette classe et implémentez les méthodes de callback pour traiter les événements serveur.
Méthode | Paramètres | Déclenchement |
|---|---|---|
| Aucun | La connexion WebSocket est établie. |
|
| Réception d'un événement serveur. Analysez le champ |
|
| La connexion WebSocket est fermée. |