La reconnaissance vocale de Model Studio propose deux méthodes pour accroître la précision des termes spécialisés, des noms de produits et d'autres vocabulaires métier : les mots clés personnalisés et l'amélioration contextuelle. Cette rubrique détaille le périmètre et l'utilisation de chaque approche.
ImportantSeul l'espace de travail principal prend en charge les mots clés. Les sous-espaces de travail ne les prennent pas en charge.
Présentation
Certains termes métier, tels que les noms de produits, les noms propres et le jargon industriel, sont absents du vocabulaire général d'un modèle et sont donc reconnus avec moins de précision. La reconnaissance vocale de Model Studio offre trois moyens d'améliorer la reconnaissance de ces termes : les mots clés précompilés, les mots clés instantanés et l'amélioration contextuelle.
Mots clés précompilés contre mots clés instantanés contre amélioration contextuelle
Les mots clés personnalisés se présentent sous deux formes : les mots clés précompilés et les mots clés instantanés. Le tableau suivant compare ces trois approches, qui s'appliquent à différents modèles et API :
Dimension | Mots clés précompilés | Mots clés instantanés | Amélioration contextuelle |
|---|---|---|---|
Fonctionnement | Créez un vocabulaire pondéré à l'avance. Le modèle augmente la probabilité de correspondance de ces mots lors du décodage. | Transmettez des mots clés pondérés directement dans la requête. Le modèle augmente leur probabilité de correspondance lors du décodage. | Transmettez l'historique des conversations ou du texte métier. Le modèle utilise ce contexte pour corriger les résultats de reconnaissance. |
Modèles pris en charge | Consultez Modèles et régions pris en charge. | Consultez Modèles et régions pris en charge. | Consultez Modèles et régions pris en charge. |
Cas d'usage | Le vocabulaire est connu et relativement stable, et vous devez réutiliser la même liste de mots entre les requêtes (par exemple, des noms de produits ou des termes médicaux). | Mots clés temporaires au niveau de la session qui n'ont pas besoin d'être réutilisés entre les requêtes (par exemple, le nom d'une personne ou un terme ad hoc utilisé dans une seule session). | Le vocabulaire change dynamiquement pendant une conversation, ou vous avez besoin de contexte pour aider le modèle à comprendre les noms propres (par exemple, les participants dans des comptes rendus de réunion ou des termes métier dans des conversations de service client). |
Configuration | Créez une liste de mots clés à l'avance et transmettez son ID de liste lors de l'appel. | Transmettez des paires clé-valeur | Transmettez l'historique des conversations ou du texte métier avec chaque requête. Pour la reconnaissance non temps réel, utilisez |
Prérequis
- Vous avez obtenu une clé API et l'avez configurée comme variable d'environnement.
- Pour appeler le service via le SDK DashScope, installez la dernière version du SDK.
Mots clés précompilés
Créez une liste de mots clés à l'avance, obtenez son ID de liste et transmettez cet ID lors de la reconnaissance. Cette approche convient aux scénarios où le vocabulaire est connu et relativement stable, et où vous devez réutiliser la même liste de mots entre les requêtes, comme pour les noms de produits ou les termes médicaux.
ImportantLorsque des mots clés précompilés et instantanés sont configurés simultanément, seuls les mots clés instantanés prennent effet.
Modèles et régions pris en charge
Singapore
Pour appeler les modèles suivants, utilisez une clé API dans la région de Singapour :
-
Reconnaissance vocale temps réel :
- Qwen-Audio-ASR-Message : qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming : qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime : fun-asr-realtime
-
Reconnaissance vocale non temps réel :
- Qwen-Audio-ASR-Filetrans : qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR : qwen-audio-3.0-asr-flash
- Fun-ASR-Flash : fun-asr-flash-2026-06-15
- Fun-ASR : fun-asr
China (Beijing)
Pour appeler les modèles suivants, utilisez une clé API dans la région de Pékin :
-
Reconnaissance vocale temps réel :
- Qwen-Audio-ASR-Message : qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming : qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime : fun-asr-realtime, fun-asr-flash-8k-realtime, fun-asr-flash-8k-realtime-2026-01-28
- Paraformer : paraformer-realtime-v2, paraformer-realtime-8k-v2
-
Reconnaissance vocale non temps réel :
- Qwen-Audio-ASR-Filetrans : qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR : qwen-audio-3.0-asr-flash
- Fun-ASR-Flash : fun-asr-flash-2026-06-15
- Fun-ASR : fun-asr
- Paraformer : paraformer-v2, paraformer-8k-v2
Démarrage rapide
Flux de travail
Créez d'abord une liste de mots clés, puis référencez son ID lors de la reconnaissance vocale :
-
Créez une liste de mots clés.
Appelez l'API create-hotword-list. Vous devez spécifier target_model (targetModel en Java) pour indiquer à quel modèle de reconnaissance vocale la liste appartient.
Si vous possédez déjà une liste de mots clés (vérifiable via l'API list-all-hotword-lists), ignorez cette étape.
-
Appelez l'API de reconnaissance vocale et transmettez l'ID de la liste de mots clés.
Le modèle utilisé pour la reconnaissance doit correspondre au paramètre target_model (targetModel en Java) spécifié lors de la création de la liste. Sinon, les mots clés ne prennent pas effet.
Exemple de code
Exemple de bout en bout : créez une liste de mots clés, exécutez une reconnaissance vocale, puis supprimez la liste.
RemarqueL'API de gestion des mots clés et l'API de reconnaissance vocale doivent utiliser le même compte. Autrement, l'API de reconnaissance ne peut pas accéder à la liste de mots clés correspondante.
import dashscope
from dashscope.audio.asr import *
import os
# The API Key differs between the Beijing and Singapore regions. Get an API Key: https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# If the environment variable is not configured, replace the line below with: dashscope.api_key = "sk-xxx"
dashscope.api_key = os.environ.get('DASHSCOPE_API_KEY')
# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_http_api_url = 'https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1'
# The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
dashscope.base_websocket_api_url = 'wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference'
prefix = 'testpfx'
target_model = "qwen-audio-3.0-asr-flash-streaming"
my_vocabulary = [
{"text": "Speech Lab", "weight": 4}
]
service = VocabularyService()
vocabulary_id = service.create_vocabulary(
prefix=prefix,
target_model=target_model,
vocabulary=my_vocabulary)
try:
if service.query_vocabulary(vocabulary_id)['status'] == 'OK':
recognition = Recognition(model=target_model,
format='wav',
sample_rate=16000,
callback=None)
result = recognition.call('{YOUR_AUDIO_FILE}', phrase_id=vocabulary_id)
print(result.output)
finally:
# Delete the hotword list regardless of whether recognition succeeds, to avoid consuming quota
service.delete_vocabulary(vocabulary_id)
import com.alibaba.dashscope.audio.asr.recognition.Recognition;
import com.alibaba.dashscope.audio.asr.recognition.RecognitionParam;
import com.alibaba.dashscope.audio.asr.vocabulary.Vocabulary;
import com.alibaba.dashscope.audio.asr.vocabulary.VocabularyService;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.Constants;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class Main {
// The API Key differs between the Beijing and Singapore regions. Get an API Key: https://www.alibabacloud.com/help/en/model-studio/get-api-key
// If the environment variable is not configured, replace the line below with: public static String apiKey = "sk-xxx"
public static String apiKey = System.getenv("DASHSCOPE_API_KEY");
public static void main(String[] args) throws NoApiKeyException, InputRequiredException {
// The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
Constants.baseHttpApiUrl = "https://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api/v1";
// The following is the configuration for the Singapore region. When calling, replace "{WorkspaceId}" with your actual workspace ID. The configuration differs by region.
Constants.baseWebsocketApiUrl = "wss://{WorkspaceId}.ap-southeast-1.maas.aliyuncs.com/api-ws/v1/inference";
String targetModel = "qwen-audio-3.0-asr-flash-streaming";
JsonArray vocabularyJson = new JsonArray();
List<Hotword> wordList = new ArrayList<>();
wordList.add(new Hotword("Speech Lab", 4));
for (Hotword word : wordList) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("text", word.text);
jsonObject.addProperty("weight", word.weight);
vocabularyJson.add(jsonObject);
}
VocabularyService service = new VocabularyService(apiKey);
Vocabulary vocabulary = service.createVocabulary(targetModel, "testpfx", vocabularyJson);
try {
if ("OK".equals(service.queryVocabulary(vocabulary.getVocabularyId()).getStatus())) {
Recognition recognizer = new Recognition();
RecognitionParam param =
RecognitionParam.builder()
.model(targetModel)
.apiKey(apiKey)
.format("wav")
.sampleRate(16000)
.vocabularyId(vocabulary.getVocabularyId())
.build();
try {
System.out.println("Recognition result: " + recognizer.call(param, new File("{YOUR_AUDIO_FILE}")));
} catch (Exception e) {
e.printStackTrace();
} finally {
// Close the WebSocket connection
recognizer.getDuplexApi().close(1000, "bye");
}
}
} finally {
// Delete the hotword list regardless of whether recognition succeeds, to avoid consuming quota
service.deleteVocabulary(vocabulary.getVocabularyId());
}
System.exit(0);
}
}
class Hotword {
String text;
int weight;
public Hotword(String text, int weight) {
this.text = text;
this.weight = weight;
}
}
Format des mots clés
Soumettez les mots clés sous forme de tableau JSON, où chaque élément définit un mot clé unique et ses attributs.
Exemple : Améliorer la précision de reconnaissance des titres de films.
[
{"text": "Warriors of the Rainbow: Seediq Bale", "weight": 4, "lang": "en"},
{"text": "Seediq Bale", "weight": 4, "lang": "en"},
{"text": "Goodbye Mr. Loser", "weight": 4, "lang": "en"},
{"text": "Never Say Die", "weight": 4, "lang": "en"},
{"text": "Confucius Family", "weight": 4, "lang": "en"},
{"text": "Confucius' Family", "weight": 4, "lang": "en"}
]
Description des champs :
Champ | Type | Obligatoire | Description |
|---|---|---|---|
text | string | Oui | Texte du mot clé. Il doit s'agir d'un mot réel plutôt que d'une chaîne de caractères arbitraire, et sa langue doit figurer parmi celles prises en charge par le modèle sélectionné. Pour les limites de longueur, consultez Règles relatives au texte des mots clés. |
weight | int | Oui | Poids du mot clé. Valeurs valides : [1, 5]. Recommandé : 4. Un poids plus élevé augmente la probabilité que le modèle produise ce mot. Les séries de modèles Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans et Qwen-Audio-ASR prennent également en charge |
lang | string | Non | Code de langue limitant la langue à laquelle le mot clé s'applique. Vous pouvez l'omettre lorsque la langue est inconnue. Remarque : |
Mots clés instantanés
Les mots clés instantanés sont transmis sous forme de paires clé-valeur vocabulary directement dans la requête de reconnaissance. Ils constituent essentiellement un ensemble de mots clés pondérés, identiques à la liste utilisée par les mots clés précompilés, sauf qu'ils sont transmis en ligne avec la requête et ne nécessitent aucune liste précréée. Cela convient à l'ajustement temporaire de mots clés au niveau de la session. Lorsque des mots clés instantanés et des mots clés précompilés (vocabulary_id) sont configurés simultanément, seuls les mots clés instantanés prennent effet.
ImportantLorsque des mots clés précompilés et instantanés sont configurés simultanément, seuls les mots clés instantanés prennent effet.
Modèles et régions pris en charge
Singapore
Pour appeler les modèles suivants, utilisez une clé API dans la région de Singapour :
-
Reconnaissance vocale temps réel :
- Qwen-Audio-ASR-Message : qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming : qwen-audio-3.0-asr-flash-streaming
-
Reconnaissance vocale non temps réel :
- Qwen-Audio-ASR-Filetrans : qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR : qwen-audio-3.0-asr-flash
China (Beijing)
Pour appeler les modèles suivants, utilisez une clé API dans la région de Pékin :
-
Reconnaissance vocale temps réel :
- Qwen-Audio-ASR-Message : qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming : qwen-audio-3.0-asr-flash-streaming
-
Reconnaissance vocale non temps réel :
- Qwen-Audio-ASR-Filetrans : qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR : qwen-audio-3.0-asr-flash
Démarrage rapide
Transmettez vocabulary dans les parameters de la requête de reconnaissance. Aucune liste de mots clés n'est requise. Pour l'utilisation détaillée de chaque API, consultez la référence API sous Speech-to-text.
Exemple (reconnaissance vocale non temps réel) :
curl --location --request POST 'https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--header "X-DashScope-SSE: disable" \
--data '{
"model": "qwen-audio-3.0-asr-flash",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav"
}
}
]
}
]
},
"parameters": {
"format": "wav",
"sample_rate": "16000",
"vocabulary": {"John": 5, "Jane": 5}
}
}'
Format des mots clés
Transmettez les mots clés instantanés sous forme d'objet JSON (paires clé-valeur) : la clé est le texte du mot clé (string), et la valeur est le poids du mot clé (integer). Pour les règles relatives au texte des mots clés, consultez Règles relatives au texte des mots clés.
Exemple :
{"Michael": 5, "Jennifer": 5, "Speech Lab": 50}
Le poids varie sur [1, 5] ou 50 : les valeurs dans [1, 5] définissent des mots clés standard, où une valeur plus élevée indique une préférence plus forte ; 50 définit un super mot clé, qui améliore considérablement le rappel. Vous pouvez avoir au maximum 50 super mots clés. Pour l'ajustement des poids, consultez Ajuster les poids des mots clés.
Ajustement et règles des mots clés
Les règles de texte et les conseils d'ajustement suivants s'appliquent aux mots clés précompilés et instantanés.
Règles relatives au texte des mots clés
Un mot clé doit être un mot réel. Les limites de longueur suivantes s'appliquent :
-
Avec des caractères non ASCII : Le nombre total de caractères (la somme des caractères non ASCII tels que les caractères chinois, les kana japonais, le hangul coréen et les lettres cyrilliques, plus tous les caractères ASCII) ne doit pas dépasser 15.
Exemples :
- Valide :
"厄洛替尼盐酸盐"(7 caractères) - Valide :
"EGFR抑制剂"(7 caractères, où EGFR compte pour 4 caractères ASCII) - Valide :
"こんにちは"(5 caractères) - Valide :
"Фенибут Белфарм"(15 caractères, y compris l'espace au milieu) - Invalide :
"Клофелин Белмедпрепараты"(24 caractères)
- Valide :
-
Avec uniquement des caractères ASCII : Après division sur les espaces, le nombre de segments ne doit pas dépasser 7.
Exemples :
- Valide :
"Exothermic reaction"→ 2 segments - Valide :
"Human immunodeficiency virus type 1"→ 5 segments - Invalide :
"The effect of temperature variations on enzyme activity in biochemical reactions"→ 11 segments
- Valide :
Ajuster les poids des mots clés
Le poids contrôle la force avec laquelle le modèle privilégie un mot clé. Un réglage approprié améliore la précision de reconnaissance des mots cibles tout en évitant les erreurs de reconnaissance.
Poids | Effet | Quand l'utiliser |
|---|---|---|
1–2 | Légère préférence | Le mot clé a une sonorité similaire à un mot courant, et vous devez éviter une surcorrection. |
3–4 | Préférence marquée (recommandé) | La meilleure valeur de départ pour la plupart des scénarios. |
5 | Préférence forcée | Le mot apparaît fréquemment dans l'audio et risque peu d'être confondu avec d'autres mots. Un poids trop élevé peut entraîner la reconnaissance erronée de mots à la sonorité similaire comme étant le mot clé. |
Commencez les tests avec weight=4 et ajustez en fonction des résultats.
Super mots clés (weight=50) : Les mots clés précompilés et instantanés prennent en charge les super mots clés, mais uniquement les séries de modèles Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans et Qwen-Audio-ASR. Un poids de 50 améliore considérablement le rappel. Vous pouvez avoir au maximum 50 super mots clés.
Recommandations de conception
- Regrouper par scénario : Organisez les mots clés séparément pour différents scénarios métier (par exemple, un groupe pour les termes médicaux et un autre pour les noms de produits) afin de simplifier la maintenance et la réutilisation. Pour les mots clés précompilés, créez une liste distincte pour chaque scénario.
- Mélanger les langues (mots clés précompilés) : Une seule liste peut contenir des mots clés dans différentes langues, distingués par le champ
lang. Lorsque vous spécifiezlanguage_hintslors de la reconnaissance, seuls les mots clés dans cette langue prennent effet. - Nettoyer régulièrement (mots clés précompilés) : Supprimez les listes de mots clés inutilisées pour libérer votre quota (jusqu'à 10 par compte).
Limites et facturation des mots clés
| Limite | Description |
|---|---|
Nombre de listes de mots clés (mots clés précompilés) | Une liste de mots clés est une liste persistante créée à l'avance pour les mots clés précompilés (chaque liste correspond à un vocabulary_id). Vous pouvez avoir jusqu'à 10 listes par compte, partagées entre tous les modèles. |
Nombre maximal de mots clés (mots clés précompilés / instantanés) | Le nombre maximal de mots clés dépend du modèle utilisé pour la reconnaissance :
Pour les mots clés précompilés, le décompte se fait par liste. Pour les mots clés instantanés, le décompte se fait par requête. |
Nombre de super mots clés (mots clés précompilés / instantanés) | Vous pouvez avoir jusqu'à 50 super mots clés (poids 50). |
Facturation | Les mots clés précompilés et instantanés sont gratuits. |
Amélioration contextuelle
Modèles et régions pris en charge
Singapore
Pour appeler les modèles suivants, utilisez une clé API dans la région de Singapour :
-
Reconnaissance vocale temps réel :
- Qwen-Audio-ASR-Streaming : qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime : fun-asr-realtime
-
Reconnaissance vocale non temps réel :
- Qwen-Audio-ASR-Filetrans : qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR : qwen-audio-3.0-asr-flash
- Fun-ASR-Flash : fun-asr-flash-2026-06-15
China (Beijing)
Pour appeler les modèles suivants, utilisez une clé API dans la région de Pékin :
-
Reconnaissance vocale temps réel :
- Qwen-Audio-ASR-Streaming : qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime : fun-asr-realtime
-
Reconnaissance vocale non temps réel :
- Qwen-Audio-ASR-Filetrans : qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR : qwen-audio-3.0-asr-flash
- Fun-ASR-Flash : fun-asr-flash-2026-06-15
Démarrage rapide
L'amélioration contextuelle ne nécessite aucune ressource précréée. Transmettez les paramètres de contexte directement dans la requête de reconnaissance :
- Reconnaissance vocale non temps réel : Transmettez les messages de contexte dans
input.messagesde la requête HTTP, placés avant le message audio. - Reconnaissance vocale temps réel : Transmettez les messages de contexte dans
input.contextde l'événement WebSocketrun-task. Le SDK DashScope encapsule ce protocole, vous pouvez donc transmettre le contexte directement via un paramètre.
Cas d'utilisation : Transmettre l'historique des conversations ou des termes métier comme contexte améliore considérablement la précision de transcription des noms propres tels que les noms de personnes, les noms de lieux et les termes produits. Le contexte peut être un historique de conversation multi-tours (les résultats de reconnaissance et les réponses du modèle des tours précédents) ou simplement un ensemble de termes métier ou une liste de mots.
Important
- Limite du nombre de messages : Le moteur conserve au maximum les 5 tours de contexte les plus récents. Lorsque vous transmettez uniquement des termes métier ou une liste de mots, un seul message suffit généralement et vous n'êtes pas affecté par cette limite. En cas de dépassement, les messages les plus anciens sont ignorés automatiquement sans erreur.
- Limite de longueur du texte : La longueur totale du texte par tour (la longueur combinée des champs
textde tous les messagesuseretassistantdans le même tour) ne doit pas dépasser 400 caractères (comptés par caractère, chaque caractère — y compris les lettres, les caractères chinois, les chiffres, les espaces et la ponctuation — comptant pour 1). Tout excédent est tronqué à partir de la fin sans erreur. Dans un contexte multi-tours, chaque tour est compté indépendamment. - Fonctionnement du contexte : Le contexte agit principalement par correspondance avec une liste de mots, donc le champ
textdoit contenir les mots exacts à reconnaître dans l'audio (par exemple, « Kubernetes » ou « Bulge Bracket »). Transmettre uniquement une description sémantiquement liée qui ne contient pas les mots exacts a un effet correctif limité.
Reconnaissance vocale non temps réel
Transmettez le contexte via input.messages. Le rôle user avec le type input_text transmet les résultats de reconnaissance des tours précédents ou une liste de mots liés au domaine, et le rôle assistant transmet les réponses du modèle des tours précédents (facultatif). Placez les messages de contexte avant le message audio. Pour plus de détails, consultez Reconnaissance vocale non temps réel (Qwen-Audio-ASR/Fun-ASR-Flash).
Transmettez les résultats de reconnaissance des tours précédents (user / input_text) et les réponses du modèle (assistant / text). Pour transmettre uniquement des termes métier ou une liste de mots, omettez l'historique de conversation (les messages assistant).
{
"model": "qwen-audio-3.0-asr-flash",
"input": {
"messages": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Recognition result of the user's speech in the previous turn"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Response content of the large model in the previous turn"
}
]
},
{
"role": "user",
"content": [
{
"type": "input_audio",
"input_audio": {
"data": "URL or Base64 of the audio to be recognized in the current turn"
}
}
]
}
]
},
"parameters": {}
}
Reconnaissance vocale temps réel
La reconnaissance vocale temps réel transmet le contexte via input.context, et l'audio est envoyé sous forme de trames binaires WebSocket. Pour le format des événements WebSocket, consultez Événements client Qwen-Audio-ASR-Streaming / Événements client Fun-ASR-Realtime. Pour les paramètres du SDK DashScope, consultez le Qwen-Audio-ASR-Streaming SDK Python / Fun-ASR-Realtime SDK Python (≥ 1.25.23) et le Qwen-Audio-ASR-Streaming SDK Java / Fun-ASR-Realtime SDK Java (≥ 2.22.23).
Contexte de conversation multi-tours
Transmettez les résultats de reconnaissance des tours précédents (user / input_text) et les réponses du modèle (assistant / text). Pour transmettre uniquement des termes métier ou une liste de mots, omettez l'historique de conversation (les messages assistant).
{
"header": {
"action": "run-task",
"task_id": "2bf83b9a-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"streaming": "duplex"
},
"payload": {
"task_group": "audio",
"task": "asr",
"function": "recognition",
"model": "qwen-audio-3.0-asr-flash-streaming",
"parameters": {
"format": "pcm",
"sample_rate": 16000
},
"input": {
"context": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Recognition result of the user's speech in the previous turn"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Response content of the large model in the previous turn"
}
]
}
]
}
}
}
from dashscope.audio.asr import Recognition
recognition = Recognition(
model='qwen-audio-3.0-asr-flash-streaming',
format='wav',
sample_rate=16000,
callback=None)
context = {
"context": [
{
"role": "user",
"content": [
{
"type": "input_text",
"text": "Recognition result of the user's speech in the previous turn"
}
]
},
{
"role": "assistant",
"content": [
{
"type": "text",
"text": "Response content of the large model in the previous turn"
}
]
}
]
}
result = recognition.call('audio.wav', raw_input=context)
print(result.output)
Map<String, Object> userContent = new HashMap<>();
userContent.put("type", "input_text");
userContent.put("text", "Recognition result of the user's speech in the previous turn");
Map<String, Object> assistantContent = new HashMap<>();
assistantContent.put("type", "text");
assistantContent.put("text", "Response content of the large model in the previous turn");
Map<String, Object> userMessage = new HashMap<>();
userMessage.put("role", "user");
userMessage.put("content", Arrays.asList(userContent));
Map<String, Object> assistantMessage = new HashMap<>();
assistantMessage.put("role", "assistant");
assistantMessage.put("content", Arrays.asList(assistantContent));
Map<String, Object> input = new HashMap<>();
input.put("context", Arrays.asList(userMessage, assistantMessage));
RecognitionParam param = RecognitionParam.builder()
.model("qwen-audio-3.0-asr-flash-streaming")
.format("wav")
.sampleRate(16000)
.input(input)
.build();
Recognition recognizer = new Recognition();
System.out.println(recognizer.call(param, new File("audio.wav")));
recognizer.getDuplexApi().close(1000, "bye");
Exemple
Le champ text du contexte accepte un format flexible — une liste de mots, un paragraphe en langage naturel ou un mélange des deux — et tolère largement le texte non pertinent.
Le résultat de reconnaissance correct pour un extrait audio devrait être : « Combien de termes du jargon interne du monde de la banque d'investissement connaissez-vous ? D'abord, les neuf grandes banques d'investissement étrangères — Bulge Bracket, BB... ».
Sans amélioration contextuelle Sans amélioration contextuelle, certains noms de banques d'investissement sont reconnus incorrectement. Par exemple, « Bird Rock » devrait être « Bulge Bracket ». Résultat de reconnaissance : « Combien de termes du jargon interne du monde de la banque d'investissement connaissez-vous ? D'abord, les neuf grandes banques d'investissement étrangères — Bird Rock, BB... » | Avec amélioration contextuelle Avec l'amélioration contextuelle, les noms de banques d'investissement sont reconnus correctement. Résultat de reconnaissance : « Combien de termes du jargon interne du monde de la banque d'investissement connaissez-vous ? D'abord, les neuf grandes banques d'investissement étrangères — Bulge Bracket, BB... » |
Pour obtenir cette amélioration, ajoutez une liste de mots ou un paragraphe en langage naturel incluant des termes spécialisés tels que « Bulge Bracket » au champ text du contexte.
Référence API
- Référence API des mots clés précompilés
- Reconnaissance vocale temps réel - Référence API Qwen-Audio-ASR-Streaming
- Reconnaissance vocale temps réel - Référence API Fun-ASR-Realtime
- Reconnaissance vocale temps réel - Référence API Qwen-ASR
- Reconnaissance vocale temps réel - Référence API Paraformer
- Reconnaissance vocale non temps réel - Référence API Qwen-Audio-ASR-Filetrans/Fun-ASR
- Reconnaissance vocale non temps réel - Référence API Qwen-Audio-ASR/Fun-ASR-Flash
- Reconnaissance vocale non temps réel - Référence API Qwen-ASR
- Reconnaissance vocale non temps réel - Référence API Paraformer
FAQ
Q : La reconnaissance ne s'améliore pas après la configuration des mots clés ?
Vérifiez les points suivants dans l'ordre :
- Correspondance du modèle (mots clés précompilés) : Le
target_modelspécifié lors de la création de la liste de mots clés doit correspondre au modèle utilisé par l'API de reconnaissance vocale. Si les deux ne correspondent pas, l'API ne renvoie pas d'erreur et la reconnaissance produit toujours des résultats, mais les mots clés ne prennent pas effet. Si les résultats ne contiennent pas les mots clés attendus, vérifiez ce point en premier. - Prise en charge par le modèle
- Poids : Augmentez le poids de 4 à 5 et observez l'effet. Si des mots à la sonorité similaire sont reconnus à tort comme le mot clé, revenez à 4.
- État de la liste de mots clés (mots clés précompilés) : Utilisez l'API de requête pour confirmer que le
statusestOK.
Q : Les mots clés précompilés s'utilisent-ils de la même manière en reconnaissance vocale temps réel et non temps réel ?
Ils sont créés de la même manière mais appelés différemment :
- Reconnaissance vocale temps réel : Transmettez
vocabulary_iddans les paramètres de connexion Recognition ou WebSocket. - Transcription de fichiers audio : Transmettez
vocabulary_iddans les paramètres de la requête Transcription.
Dans les deux cas, le target_model doit correspondre au modèle de reconnaissance vocale réellement appelé. Les mots clés instantanés ne nécessitent ni liste ni target_model ; transmettez simplement des paires clé-valeur vocabulary dans les paramètres de la requête.
Q : Outre les mots clés et l'amélioration contextuelle, quels autres moyens permettent d'améliorer la précision de la reconnaissance ?
Vous pouvez également optimiser la reconnaissance des manières suivantes :
- Qualité audio : Adaptez le taux d'échantillonnage aux exigences du modèle (16 kHz ou 8 kHz) et réduisez le bruit de fond.
- Choix du modèle adapté : Différents scénarios requièrent différents modèles. Pour plus de détails, consultez le guide de sélection Speech-to-text.
- Spécification de la langue : Déclarez la langue de l'audio via
language_hintspour améliorer la précision dans les scénarios monolingues.