El reconocimiento de voz de Model Studio ofrece dos formas de mejorar la precisión de reconocimiento de términos especializados, nombres de productos y otro vocabulario específico del dominio: palabras clave personalizadas y mejora de contexto. Este tema describe el alcance y el uso de cada enfoque.
ImportanteSolo el espacio de trabajo principal admite palabras clave. Los subespacios de trabajo no.
Visión general
Algunos términos comerciales, como nombres de productos, nombres propios y jerga industrial, están ausentes del vocabulario general de un modelo y, por lo tanto, se reconocen con menor precisión. El reconocimiento de voz de Model Studio proporciona tres formas de mejorar el reconocimiento de dichos términos: palabras clave precompiladas, palabras clave instantáneas y mejora de contexto.
Palabras clave precompiladas frente a palabras clave instantáneas frente a mejora de contexto
Las palabras clave personalizadas se presentan en dos formas: palabras clave precompiladas y palabras clave instantáneas. La siguiente tabla compara los tres enfoques, que se aplican a diferentes modelos y APIs:
Dimensión | Palabras clave precompiladas | Palabras clave instantáneas | Mejora de contexto |
|---|---|---|---|
Cómo funciona | Cree un vocabulario ponderado con antelación. El modelo aumenta la probabilidad de coincidencia de estas palabras durante la decodificación. | Pase palabras clave ponderadas en línea con la solicitud. El modelo aumenta su probabilidad de coincidencia durante la decodificación. | Pase el historial de conversaciones o texto de dominio. El modelo utiliza este contexto para corregir los resultados de reconocimiento. |
Modelos compatibles | Consulte Modelos y regiones compatibles. | Consulte Modelos y regiones compatibles. | Consulte Modelos y regiones compatibles. |
Cuándo usar | El vocabulario es conocido y relativamente estable, y necesita reutilizar la misma lista de palabras en distintas solicitudes (por ejemplo, nombres de productos o términos médicos). | Palabras clave temporales a nivel de sesión que no necesitan reutilizarse en distintas solicitudes (por ejemplo, el nombre de una persona o un término ad hoc utilizado en una sola sesión). | El vocabulario cambia dinámicamente durante una conversación, o necesita contexto para ayudar al modelo a comprender nombres propios (por ejemplo, asistentes en actas de reuniones o términos comerciales en conversaciones de servicio al cliente). |
Cómo configurar | Cree una lista de palabras clave con antelación y pase su ID de lista cuando realice una llamada. | Pase pares clave-valor de | Pase el historial de conversaciones o texto de dominio con cada solicitud. Para reconocimiento sin tiempo real, utilice |
Requisitos previos
- Una clave de API está Obtener una clave de API y configurada como variable de entorno.
- Para llamar al servicio a través del DashScope SDK, instale el SDK más reciente.
Palabras clave precompiladas
Cree una lista de palabras clave con antelación, obtenga su ID de lista y pase dicho ID durante el reconocimiento. Este enfoque es adecuado para escenarios donde el vocabulario es conocido y relativamente estable, y necesita reutilizar la misma lista de palabras en distintas solicitudes, como nombres de productos o términos médicos. Si necesita actualizar una lista de palabras clave, espere al menos 5 minutos entre actualizaciones. De lo contrario, es posible que las palabras clave actualizadas no surtan efecto.
ImportanteLas palabras clave instantáneas solo son compatibles con las series de modelos Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans y Qwen-Audio-ASR. Para estos modelos, si configura tanto palabras clave precompiladas como instantáneas, el sistema fusiona ambos conjuntos. Si el conjunto fusionado contiene más de 2,000 palabras clave, el sistema selecciona aleatoriamente 2,000 para usar.
Modelos y regiones compatibles
Singapore
Para llamar a los siguientes modelos, utilice una clave de API en la región de Singapore:
-
Reconocimiento de voz en tiempo real:
- Qwen-Audio-ASR-Message: qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming: qwen-audio-3.1-asr-flash-streaming, qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime: fun-asr-realtime
-
Reconocimiento de voz sin tiempo real:
- Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, qwen-audio-3.0-asr-flash
- Fun-ASR-Flash: fun-asr-flash-2026-06-15
- Fun-ASR: fun-asr
China (Beijing)
Para llamar a los siguientes modelos, utilice una clave de API en la región de Pekín:
-
Reconocimiento de voz en tiempo real:
- Qwen-Audio-ASR-Message: qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming: qwen-audio-3.1-asr-flash-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
-
Reconocimiento de voz sin tiempo real:
- Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, 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
Inicio rápido
Flujo de trabajo
Primero cree una lista de palabras clave, luego haga referencia a su ID durante el reconocimiento de voz:
-
Crear una lista de palabras clave.
Llame a la API create-hotword-list. Debe especificar target_model (targetModel en Java) para indicar a qué modelo de reconocimiento de voz pertenece la lista.
Si ya tiene una lista de palabras clave (que puede consultar mediante la API list-all-hotword-lists), omita este paso.
-
Llame a la API de reconocimiento de voz y pase el ID de la lista de palabras clave.
El modelo utilizado para el reconocimiento debe coincidir con target_model (targetModel en Java) especificado cuando se creó la lista. De lo contrario, las palabras clave no surtirán efecto.
Código de ejemplo
Un ejemplo de extremo a extremo: crear una lista de palabras clave, ejecutar el reconocimiento de voz y eliminar la lista.
NotaLa API de gestión de palabras clave y la API de reconocimiento de voz deben utilizar la misma cuenta. De lo contrario, la API de reconocimiento no podrá acceder a la lista de palabras clave correspondiente.
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/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.1-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/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.1-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;
}
}
Formato de palabras clave
Envíe las palabras clave como una matriz JSON, donde cada elemento define una sola palabra clave y sus atributos.
Ejemplo: Mejorar la precisión de reconocimiento de títulos de películas.
[
{"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"}
]
Descripciones de campos:
Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
text | string | Sí | El texto de la palabra clave. Debe ser una palabra real y no una cadena arbitraria de caracteres, y su idioma debe estar dentro del rango admitido por el modelo seleccionado. Para conocer los límites de longitud, consulte Reglas de texto de palabras clave. |
weight | int | Sí | El peso de la palabra clave. Valores válidos: [1, 5]. Recomendado: 4. Un peso mayor aumenta la probabilidad de que el modelo genere la palabra. Las series de modelos Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans y Qwen-Audio-ASR también admiten |
lang | string | No | El código de idioma que limita el idioma al que se aplica la palabra clave. Puede omitirlo cuando se desconoce el idioma. Nota: |
Palabras clave instantáneas
Las palabras clave instantáneas se pasan como pares clave-valor de vocabulary directamente en la solicitud de reconocimiento. Son esencialmente un conjunto de palabras clave ponderadas, igual que la lista de palabras utilizada por las palabras clave precompiladas, excepto que se pasan en línea con la solicitud y no requieren una lista precreada. Esto se adapta al ajuste de palabras clave temporales a nivel de sesión.
ImportanteLas palabras clave instantáneas solo son compatibles con las series de modelos Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans y Qwen-Audio-ASR. Para estos modelos, si configura tanto palabras clave precompiladas como instantáneas, el sistema fusiona ambos conjuntos. Si el conjunto fusionado contiene más de 2,000 palabras clave, el sistema selecciona aleatoriamente 2,000 para usar.
Modelos y regiones compatibles
Singapore
Para llamar a los siguientes modelos, utilice una clave de API en la región de Singapore:
-
Reconocimiento de voz en tiempo real:
- Qwen-Audio-ASR-Message: qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming: qwen-audio-3.1-asr-flash-streaming, qwen-audio-3.0-asr-flash-streaming
-
Reconocimiento de voz sin tiempo real:
- Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, qwen-audio-3.0-asr-flash
China (Beijing)
Para llamar a los siguientes modelos, utilice una clave de API en la región de Pekín:
-
Reconocimiento de voz en tiempo real:
- Qwen-Audio-ASR-Message: qwen-audio-3.1-asr-flash-message
- Qwen-Audio-ASR-Streaming: qwen-audio-3.1-asr-flash-streaming, qwen-audio-3.0-asr-flash-streaming
-
Reconocimiento de voz sin tiempo real:
- Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, qwen-audio-3.0-asr-flash
Inicio rápido
Pase vocabulary en los parameters de la solicitud de reconocimiento. No se requiere ninguna lista de palabras clave. Para obtener información detallada sobre el uso de cada API, consulte la referencia de la API en Voz a texto.
Ejemplo (reconocimiento de voz sin tiempo real):
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.1-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}
}
}'
Formato de palabras clave
Pase las palabras clave instantáneas como un objeto JSON (pares clave-valor): la clave es el texto de la palabra clave (string) y el valor es el peso de la palabra clave (integer). Para conocer las reglas de texto de las palabras clave, consulte Reglas de texto de palabras clave.
Ejemplo:
{"Michael": 5, "Jennifer": 5, "Speech Lab": 50}
El peso varía en [1, 5] o 50: los valores en [1, 5] definen palabras clave regulares, donde un valor más alto significa una preferencia más fuerte; 50 define una superpalabra clave, que mejora enormemente la recuperación. Puede tener como máximo 50 superpalabras clave. Para el ajuste de pesos, consulte Ajustar pesos de palabras clave.
Ajuste y reglas de palabras clave
Las siguientes reglas de texto de palabras clave y consejos de ajuste se aplican tanto a las palabras clave precompiladas como a las instantáneas.
Reglas de texto de palabras clave
Una palabra clave debe ser una palabra real. Se aplican los siguientes límites de longitud:
-
Con caracteres no ASCII: El recuento total de caracteres (la suma de caracteres no ASCII, como caracteres chinos, kana japonés, hangul coreano y letras cirílicas, más cualquier carácter ASCII) no debe exceder 15.
Ejemplos:
- Válido:
"厄洛替尼盐酸盐"(7 caracteres) - Válido:
"EGFR抑制剂"(7 caracteres, donde EGFR cuenta como 4 caracteres ASCII) - Válido:
"こんにちは"(5 caracteres) - Válido:
"Фенибут Белфарм"(15 caracteres, incluyendo el espacio en medio) - Inválido:
"Клофелин Белмедпрепараты"(24 caracteres)
- Válido:
-
Solo con caracteres ASCII: Después de dividir por espacios, el número de segmentos no debe exceder 7.
Ejemplos:
- Válido:
"Exothermic reaction"→ 2 segmentos - Válido:
"Human immunodeficiency virus type 1"→ 5 segmentos - No válido:
"The effect of temperature variations on enzyme activity in biochemical reactions"→ 11 segmentos
- Válido:
Ajustar pesos de palabras clave
El peso controla la intensidad con la que el modelo prefiere una palabra clave. Configurarlo adecuadamente mejora la precisión del reconocimiento de las palabras objetivo y evita errores de reconocimiento.
Peso | Efecto | Cuándo usar |
|---|---|---|
1–2 | Preferencia leve | La palabra clave suena similar a una palabra común y necesita evitar la corrección excesiva. |
3–4 | Preferencia clara (recomendado) | El mejor valor inicial para la mayoría de los escenarios. |
5 | Preferencia forzada | La palabra aparece frecuentemente en el audio y es poco probable que se confunda con otras palabras. Un peso demasiado alto puede provocar que palabras con sonido similar se reconozcan erróneamente como la palabra clave. |
Comience las pruebas con weight=4 y ajuste según los resultados.
Superpalabras clave (weight=50): Tanto las palabras clave precompiladas como las instantáneas admiten superpalabras clave, pero solo las series de modelos Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans y Qwen-Audio-ASR lo hacen. Un peso de 50 mejora enormemente la recuperación. Puede tener como máximo 50 superpalabras clave.
Recomendaciones de diseño
- Agrupar por escenario: Organice las palabras clave por separado para diferentes escenarios comerciales (por ejemplo, un grupo para términos médicos y otro para nombres de productos) para simplificar el mantenimiento y la reutilización. Para palabras clave precompiladas, cree una lista de palabras clave independiente para cada escenario.
- Mezclar idiomas (palabras clave precompiladas): Una sola lista de palabras clave puede mezclar palabras clave en diferentes idiomas, distinguidas por el campo
lang. Cuando especificalanguage_hintsdurante el reconocimiento, solo surten efecto las palabras clave en ese idioma. - Limpieza periódica (palabras clave precompiladas): Elimine las listas de palabras clave que ya no utilice para liberar su cuota (hasta 10 por cuenta).
Límites y facturación de palabras clave
Límite | Descripción |
|---|---|
Número de listas de palabras clave (palabras clave precompiladas) | Una lista de palabras clave es una lista de palabras persistente creada con antelación para palabras clave precompiladas (cada lista corresponde a un vocabulary_id). Puede tener hasta 10 listas por cuenta, compartidas entre todos los modelos. |
Número máximo de palabras clave (palabras clave precompiladas / instantáneas) | El número máximo de palabras clave depende del modelo utilizado para el reconocimiento:
Para las palabras clave precompiladas, el recuento es por lista de palabras clave. Para las palabras clave instantáneas, el recuento es por solicitud. |
Número de superpalabras clave (palabras clave precompiladas / instantáneas) | Puede tener hasta 50 superpalabras clave (peso 50). |
Facturación | Tanto las palabras clave precompiladas como las instantáneas son gratuitas. |
Mejora de contexto
Modelos y regiones compatibles
Singapore
Para llamar a los siguientes modelos, utilice una clave de API en la región de Singapore:
-
Reconocimiento de voz en tiempo real:
- Qwen-Audio-ASR-Streaming: qwen-audio-3.1-asr-flash-streaming, qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime: fun-asr-realtime
-
Reconocimiento de voz sin tiempo real:
- Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, qwen-audio-3.0-asr-flash
- Fun-ASR-Flash: fun-asr-flash-2026-06-15
China (Beijing)
Para llamar a los siguientes modelos, utilice una clave de API en la región de Pekín:
-
Reconocimiento de voz en tiempo real:
- Qwen-Audio-ASR-Streaming: qwen-audio-3.1-asr-flash-streaming, qwen-audio-3.0-asr-flash-streaming
- Fun-ASR-Realtime: fun-asr-realtime
-
Reconocimiento de voz sin tiempo real:
- Qwen-Audio-ASR-Filetrans: qwen-audio-3.1-asr-flash-filetrans, qwen-audio-3.0-asr-flash-filetrans
- Qwen-Audio-ASR: qwen-audio-3.1-asr-flash, qwen-audio-3.0-asr-flash
- Fun-ASR-Flash: fun-asr-flash-2026-06-15
Inicio rápido
La mejora de contexto no requiere recursos creados previamente. Pase los parámetros de contexto directamente en la solicitud de reconocimiento:
- Reconocimiento de voz sin tiempo real: Pase mensajes de contexto en
input.messagesde la solicitud HTTP, colocados antes del mensaje de audio. - Reconocimiento de voz en tiempo real: Pase mensajes de contexto en
input.contextdel eventorun-taskde WebSocket. El SDK de DashScope encapsula este protocolo, por lo que puede pasar el contexto directamente a través de un parámetro.
Casos de uso: Pasar el historial de conversaciones o términos del dominio como contexto mejora significativamente la precisión de la transcripción de nombres propios, como nombres de personas, lugares y términos de productos. El contexto puede ser un historial de conversaciones de múltiples turnos (los resultados de reconocimiento y las respuestas del modelo de turnos anteriores) o simplemente un conjunto de términos del dominio o una lista de palabras.
Importante
- Límite de recuento de mensajes: El motor conserva como máximo los 5 turnos de contexto más recientes. Cuando pasa solo términos de dominio o una lista de palabras, generalmente necesita solo 1 mensaje y no se ve afectado por este límite. Cuando se supera el límite, los mensajes más antiguos se ignoran automáticamente sin generar un error.
- Límite de longitud de texto: La longitud total del texto por turno (la longitud combinada de los campos
textde todos los mensajesuseryassistanten el mismo turno) no debe exceder 400 caracteres (contados por carácter, donde cada carácter —incluidas letras, caracteres chinos, dígitos, espacios y signos de puntuación— cuenta como 1). Cualquier exceso se trunca desde el final sin generar un error. En un contexto de múltiples turnos, cada turno se cuenta de forma independiente. - Cómo funciona el contexto: El contexto surte efecto principalmente mediante la coincidencia de listas de palabras, por lo que el campo
textdebe contener las palabras exactas que se reconocerán en el audio (por ejemplo, "Kubernetes" o "Bulge Bracket"). Pasar solo una descripción semánticamente relacionada que no contenga las palabras exactas tiene un efecto correctivo limitado.
Reconocimiento de voz no en tiempo real
Pase el contexto a través de input.messages. El rol user con el tipo input_text pasa los resultados de reconocimiento de turnos anteriores o una lista de palabras relacionadas con el dominio, y el rol assistant pasa las respuestas del modelo de turnos anteriores (opcional). Coloque los mensajes de contexto antes del mensaje de audio. Para más detalles, consulte Reconocimiento de voz no en tiempo real (Qwen-Audio-ASR/Fun-ASR-Flash).
Pase los resultados de reconocimiento de turnos anteriores (user / input_text) y las respuestas del modelo (assistant / text). Para pasar solo términos de dominio o una lista de palabras, omita el historial de conversaciones (los mensajes de assistant).
{
"model": "qwen-audio-3.1-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": {}
}
Reconocimiento de voz en tiempo real
El reconocimiento de voz en tiempo real pasa el contexto a través de input.context, y el audio se envía como tramas binarias de WebSocket. Para el formato de eventos de WebSocket, consulte Qwen-Audio-ASR-Streaming Eventos del cliente / Fun-ASR-Realtime Eventos del cliente. Para los parámetros del SDK de DashScope, consulte el Qwen-Audio-ASR-Streaming SDK de Python / Fun-ASR-Realtime SDK de Python (≥ 1.25.23) y el Qwen-Audio-ASR-Streaming SDK de Java / Fun-ASR-Realtime SDK de Java (≥ 2.22.23).
Contexto de conversación de múltiples turnos
Pase los resultados de reconocimiento de turnos anteriores (user / input_text) y las respuestas del modelo (assistant / text). Para pasar solo términos de dominio o una lista de palabras, omita el historial de conversaciones (los mensajes de 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.1-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.1-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.1-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");
Ejemplo
El campo text del contexto acepta un formato flexible (una lista de palabras, un párrafo en lenguaje natural o una combinación de ambos) y es altamente tolerante al texto irrelevante.
El resultado correcto del reconocimiento para un clip de audio debería ser "¿Cuántos de los términos de jerga interna del mundo de la banca de inversión conoce? Primero, los nueve grandes bancos de inversión extranjeros: Bulge Bracket, BB...".
Sin mejora de contexto Sin la mejora de contexto, algunos nombres de bancos de inversión se reconocen incorrectamente. Por ejemplo, "Bird Rock" debería ser "Bulge Bracket". Resultado del reconocimiento: "¿Cuántos de los términos de jerga interna del mundo de la banca de inversión conoce? Primero, los nueve grandes bancos de inversión extranjeros: Bird Rock, BB..." | Con mejora de contexto Con la mejora de contexto, los nombres de los bancos de inversión se reconocen correctamente. Resultado del reconocimiento: "¿Cuántos de los términos de jerga interna del mundo de la banca de inversión conoce? Primero, los nueve grandes bancos de inversión extranjeros: Bulge Bracket, BB..." |
Para lograr esta mejora, agregue una lista de palabras o un párrafo en lenguaje natural que incluya términos especializados como "Bulge Bracket" al campo text del contexto.
Referencia de API
- Referencia de API de palabras clave precompiladas
- Reconocimiento de voz en tiempo real - Referencia de API de Qwen-Audio-ASR-Streaming
- Reconocimiento de voz en tiempo real - Referencia de API de Fun-ASR-Realtime
- Reconocimiento de voz en tiempo real - Referencia de API de Qwen-ASR
- Reconocimiento de voz en tiempo real - Referencia de API de Paraformer
- Reconocimiento de voz sin tiempo real - Referencia de API de Qwen-Audio-ASR-Filetrans/Fun-ASR
- Reconocimiento de voz sin tiempo real - Referencia de API de Qwen-Audio-ASR/Fun-ASR-Flash
- Reconocimiento de voz sin tiempo real - Referencia de API de Qwen-ASR
- Reconocimiento de voz sin tiempo real - Referencia de API de Paraformer
FAQ
P: ¿El reconocimiento no mejora después de configurar las palabras clave?
Verifique lo siguiente en orden:
- Coincidencia de modelo (palabras clave precompiladas): El
target_modelespecificado al crear la lista de palabras clave debe coincidir con el modelo utilizado por la API de reconocimiento de voz. Cuando ambos no coinciden, la API no devuelve un error y el reconocimiento sigue arrojando resultados, pero las palabras clave no surten efecto. Si los resultados omiten las palabras clave esperadas, verifique esto primero. - Soporte de modelos
- Peso: Aumente el peso de 4 a 5 y observe el efecto. Si palabras con sonido similar se reconocen erróneamente como la palabra clave, revierta a 4.
- Estado de la lista de palabras clave (palabras clave precompiladas): Utilice la API de consulta para confirmar que
statusesOK.
P: ¿Se utilizan las palabras clave precompiladas de la misma manera en el reconocimiento de voz en tiempo real y sin tiempo real?
Se crean de la misma manera pero se invocan de forma diferente:
- Reconocimiento de voz en tiempo real: Pase
vocabulary_iden los parámetros de conexión de Reconocimiento o WebSocket. - Transcripción de archivos de audio: Pase
vocabulary_iden los parámetros de solicitud de Transcripción.
En ambos casos, el target_model debe coincidir con el modelo de reconocimiento de voz al que llama realmente. Las palabras clave instantáneas no requieren lista ni target_model; basta con pasar pares clave-valor de vocabulary en los parámetros de la solicitud. Para las series de modelos Qwen-Audio-ASR-Message, Qwen-Audio-ASR-Streaming, Qwen-Audio-ASR-Filetrans y Qwen-Audio-ASR, que admiten palabras clave instantáneas, el sistema fusiona las palabras clave precompiladas e instantáneas cuando ambas están configuradas. Si el conjunto fusionado contiene más de 2,000 palabras clave, el sistema selecciona aleatoriamente 2,000 para su uso.
P: Además de las palabras clave y la mejora de contexto, ¿qué otras formas existen para mejorar la precisión del reconocimiento?
También puede optimizar de las siguientes maneras:
- Calidad del audio: Ajuste la frecuencia de muestreo al requisito del modelo (16 kHz o 8 kHz) y reduzca el ruido de fondo.
- Elegir el modelo adecuado: Diferentes escenarios requieren diferentes modelos. Para más detalles, consulte la guía de selección de Voz a texto.
- Especificar el idioma: Declare el idioma del audio mediante
language_hintspara mejorar la precisión en escenarios de un solo idioma.