Todos os produtos
Search
Central de documentação

Alibaba Cloud Model Studio:Improve recognition accuracy

Última atualização: Sep 09, 2026

O reconhecimento de fala do Model Studio oferece três formas de aumentar a precisão no reconhecimento de termos especializados, nomes de product e outros vocabulários específicos de domínio: hotwords pré-compiladas, hotwords instantâneas e aprimoramento de contexto. Este tópico descreve o escopo e o uso de cada abordagem.

ImportanteApenas o workspace primário suporta hotwords. Os sub-workspaces não oferecem esse suporte.

Visão geral

Alguns termos de negócios, como nomes de product, substantivos próprios e jargões do setor, estão ausentes do vocabulário geral do modelo e, por isso, têm menor precisão no reconhecimento. O reconhecimento de fala do Model Studio fornece três maneiras de melhorar o reconhecimento desses termos: hotwords pré-compiladas, hotwords instantâneas e aprimoramento de contexto.

Hotwords pré-compiladas vs. hotwords instantâneas vs. aprimoramento de contexto

As hotwords personalizadas existem em duas formas: pré-compiladas e instantâneas. A tabela a seguir compara as três abordagens, aplicáveis a diferentes modelos e API:

Dimensão

Hotwords pré-compiladas

Hotwords instantâneas

Aprimoramento de contexto

Funcionamento

Crie um vocabulário ponderado antecipadamente. O modelo aumenta a probabilidade de correspondência dessas palavras durante a decodificação.

Passe hotwords ponderadas diretamente na requisição. O modelo eleva a probabilidade de correspondência delas durante a decodificação.

Forneça o histórico da conversa ou texto de domínio. O modelo utiliza esse contexto para corrigir os resultados do reconhecimento.

Modelos suportados

Consulte Supported models and regions.

Consulte Supported models and regions.

Consulte Supported models and regions.

Quando usar

O vocabulário é conhecido e relativamente estável, e você precisa reutilizar a mesma lista de palavras em várias requisições (por exemplo, nomes de product ou termos médicos).

Hotwords temporárias, no nível da sessão, que não precisam ser reutilizadas entre requisições (por exemplo, o nome de uma pessoa ou um termo ad hoc usado em uma única sessão).

O vocabulário muda dinamicamente durante uma conversa, ou você precisa de contexto para ajudar o modelo a entender substantivos próprios (por exemplo, participantes em atas de reunião ou termos de negócios em conversas de atendimento ao cliente).

Como configure

Crie uma lista de hotwords antecipadamente e passe o ID da lista ao fazer a chamada.

Passe pares chave-valor vocabulary diretamente na requisição. Nenhuma lista é necessária.

Envie o histórico da conversa ou texto de domínio com cada requisição. Para reconhecimento não em tempo real, use input.messages; para reconhecimento em tempo real, use input.context.

Pré-requisitos

Hotwords pré-compiladas

Crie uma lista de hotwords antecipadamente, obtenha o ID dessa lista e passe-o durante o reconhecimento. Essa abordagem é adequada para cenários em que o vocabulário é conhecido e relativamente estável, e você precisa reutilizar a mesma lista de palavras em várias requisições, como nomes de product ou termos médicos.

Modelos e regiões suportados

Singapore

Para chamar os modelos a seguir, use uma chave de API na região de Singapore:

  • Reconhecimento de fala em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07
  • Reconhecimento de fala não em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15
    • Fun-ASR: fun-asr, fun-asr-2025-11-07, fun-asr-2025-08-25, fun-asr-mtl, fun-asr-mtl-2025-08-25

China (Beijing)

Para chamar os modelos a seguir, use uma chave de API na região de Beijing:

  • Reconhecimento de fala em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07, fun-asr-realtime-2025-09-15, fun-asr-flash-8k-realtime, fun-asr-flash-8k-realtime-2026-01-28
    • Paraformer: paraformer-realtime-v2, paraformer-realtime-8k-v2
  • Reconhecimento de fala não em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15
    • Fun-ASR: fun-asr, fun-asr-2025-11-07, fun-asr-2025-08-25, fun-asr-mtl, fun-asr-mtl-2025-08-25
    • Paraformer: paraformer-v2, paraformer-8k-v2

Início rápido

Fluxo de trabalho

Primeiro crie uma lista de hotwords e depois referencie o ID dela durante o reconhecimento de fala:

  1. Crie uma lista de hotwords.

    Chame a API create-hotword-list. Especifique target_model (targetModel em Java) para indicar a qual modelo de reconhecimento de fala a lista pertence.

    Se você já tiver uma lista de hotwords (verificável por meio da API list-all-hotword-lists), pule esta etapa.

  2. Chame a API de reconhecimento de fala e passe o ID da lista de hotwords.

    O modelo usado para reconhecimento deve corresponder ao target_model (targetModel em Java) especificado na criação da lista. Caso contrário, as hotwords não terão efeito.

Código de exemplo

Exemplo de ponta a ponta: crie uma lista de hotwords, execute o reconhecimento de fala e exclua a lista.

ObservaçãoA API de gerenciamento de hotwords e a API de reconhecimento de fala devem usar a mesma conta. Caso contrário, a API de reconhecimento não conseguirá acessar a lista de hotwords correspondente.

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}', vocabulary_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/zh/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;
    }
}

Formato das hotwords

Envie as hotwords como um array JSON, em que cada elemento define uma única hotword e seus atributos.

Exemplo: Melhorar a precisão do reconhecimento de títulos de filmes.

[
    {"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"}
]

Descrição dos campos:

Campo

Tipo

Obrigatório

Descrição

text

string

Sim

O texto da hotword. Deve ser uma palavra real, e não uma sequência arbitrária de caracteres, e seu idioma deve estar dentro do intervalo suportado pelo modelo selecionado. Para limites de comprimento, consulte Hotword text rules.

weight

int

Sim

O peso da hotword. Valores válidos: [1, 5]. Recomendado: 4. Um peso maior torna mais provável que o modelo produza a palavra. As séries de modelos Qwen-Audio-3.0-ASR-Flash-Streaming, Qwen-Audio-3.0-ASR-Flash-Filetrans e Qwen-Audio-3.0-ASR-Flash também suportam weight=50 (super hotwords), o que melhora significativamente o recall. Você pode ter no máximo 50 super hotwords. Para orientações de ajuste, consulte Adjust hotword weights.

lang

string

Não

O código de idioma que limita o idioma ao qual a hotword se aplica. Pode ser omitido quando o idioma for desconhecido.

Nota: language_hints é um parâmetro da API de reconhecimento de fala (não da API de hotwords) e declara o idioma do áudio. Uma vez definido, apenas as hotwords cujo idioma corresponde a language_hints entram em vigor; hotwords em outros idiomas são ignoradas.

Hotwords instantâneas

As hotwords instantâneas são passadas como pares chave-valor vocabulary diretamente na requisição de reconhecimento. Elas funcionam essencialmente como um conjunto de hotwords ponderadas, idêntico à lista de palavras usada pelas hotwords pré-compiladas, exceto pelo fato de serem enviadas diretamente na requisição, sem necessidade de uma lista pré-criada. Isso é ideal para ajustes temporários de hotwords no nível da sessão.

ImportanteAs hotwords instantâneas são suportadas apenas pelas séries de modelos Qwen-Audio-3.0-ASR-Flash-Streaming, Qwen-Audio-3.0-ASR-Flash-Filetrans e Qwen-Audio-3.0-ASR-Flash. Para esses modelos, se você configure hotwords pré-compiladas e instantâneas simultaneamente, o sistema mescla os dois conjuntos. Se o conjunto mesclado contiver mais de 2.000 hotwords, o sistema selecionará aleatoriamente 2.000 para uso.

Modelos e regiões suportados

Singapore

Para chamar os modelos a seguir, use uma chave de API na região de Singapore:

  • Reconhecimento de fala em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
  • Reconhecimento de fala não em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash

China (Beijing)

Para chamar os modelos a seguir, use uma chave de API na região de Beijing:

  • Reconhecimento de fala em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
  • Reconhecimento de fala não em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash

Início rápido

Passe vocabulary nos parameters da requisição de reconhecimento. Nenhuma lista de hotwords é necessária. Para uso detalhado de cada API, consulte a referência da API em Speech-to-text.

Exemplo (reconhecimento de fala não em tempo 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.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}
    }
}'

O exemplo usa o endpoint do DashScope para a região China (Beijing). Você também pode substituí-lo pelo endpoint específico do seu workspace, como https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com, utilizado nos exemplos de hotwords pré-compiladas. Nenhuma outra alteração na requisição é necessária.

Formato das hotwords

Envie as hotwords instantâneas como um objeto JSON (pares chave-valor): a chave é o texto da hotword (string) e o valor é o peso da hotword (integer). Para regras de texto das hotwords, consulte Hotword text rules.

Exemplo:

{"Michael": 5, "Jennifer": 5, "Speech Lab": 50}

O peso varia no intervalo [1, 5] ou 50: valores em [1, 5] definem hotwords regulares, onde um valor maior indica uma preferência mais forte; 50 define uma super hotword, que melhora significativamente o recall. Você pode ter no máximo 50 super hotwords. Para ajuste de pesos, consulte Adjust hotword weights.

Ajuste e regras de hotwords

As seguintes regras de texto e dicas de ajuste de hotwords aplicam-se tanto a hotwords pré-compiladas quanto a instantâneas.

Regras de texto das hotwords

Uma hotword deve ser uma palavra real. Aplicam-se os seguintes limites de comprimento:

  • Com caracteres não ASCII: A contagem total de caracteres (a soma de caracteres não ASCII, como caracteres chineses, kana japonês, hangul coreano e letras cirílicas, mais quaisquer caracteres ASCII) não deve exceder 15.

    Exemplos:

    • "厄洛替尼盐酸盐" (7 caracteres)
    • "EGFR抑制剂" (7 caracteres, onde EGFR conta como 4 caracteres ASCII)
    • "こんにちは" (5 caracteres)
    • "Фенибут Белфарм" (15 caracteres, incluindo o espaço no meio)
    • "Клофелин Белмедпрепараты" (24 caracteres)
  • Apenas com caracteres ASCII: Após dividir por espaços, o número de segmentos não deve exceder 7.

    Exemplos:

    • "Exothermic reaction" → 2 segmentos
    • "Human immunodeficiency virus type 1" → 5 segmentos
    • "The effect of temperature variations on enzyme activity in biochemical reactions" → 11 segmentos

Ajustar pesos das hotwords

O peso controla a intensidade com que o modelo prefere uma hotword. Defini-lo adequadamente melhora a precisão do reconhecimento das palavras-alvo, evitando erros de reconhecimento.

Peso

Efeito

Quando usar

1–2

Preferência leve

A hotword tem som semelhante a uma palavra comum, e você precisa evitar correções excessivas.

3–4

Preferência clara (recomendado)

O melhor valor inicial para a maioria dos cenários.

5

Preferência forçada

A palavra aparece frequentemente no áudio e dificilmente será confundida com outras. Um peso muito alto pode fazer com que palavras de sonoridade similar sejam reconhecidas incorretamente como a hotword.

Comece os testes com weight=4 e ajuste conforme os resultados.

Super hotwords (weight=50): Tanto hotwords pré-compiladas quanto instantâneas suportam super hotwords, mas apenas as séries de modelos Qwen-Audio-3.0-ASR-Flash-Streaming, Qwen-Audio-3.0-ASR-Flash-Filetrans e Qwen-Audio-3.0-ASR-Flash oferecem esse recurso. Um peso de 50 melhora significativamente o recall. Você pode ter no máximo 50 super hotwords.

Recomendações de design

  • Agrupe por cenário: Organize as hotwords separadamente para diferentes cenários de negócios (por exemplo, um grupo para termos médicos e outro para nomes de product) para simplificar a manutenção e a reutilização. Para hotwords pré-compiladas, crie uma lista distinta para cada cenário.
  • Misture idiomas (hotwords pré-compiladas): Uma única lista de hotwords pode conter termos em diferentes idiomas, diferenciados pelo campo lang. Ao especifique language_hints durante o reconhecimento, apenas as hotwords naquele idioma entrarão em vigor.
  • Faça limpezas regulares (hotwords pré-compiladas): Exclua listas de hotwords que não são mais usadas para liberar sua cota (até 10 por conta).

Limites e faturamento de hotwords

Limite

Descrição

Número de listas de hotwords (hotwords pré-compiladas)

Uma lista de hotwords é uma lista persistente de palavras criada antecipadamente para hotwords pré-compiladas (cada lista corresponde a um vocabulary_id). Você pode ter até 10 listas por conta, compartilhadas entre todos os modelos.

Número máximo de hotwords (hotwords pré-compiladas / instantâneas)

O número máximo de hotwords depende do modelo usado para reconhecimento:

  • Séries Qwen-Audio-3.0-ASR-Flash-Streaming, Qwen-Audio-3.0-ASR-Flash-Filetrans e Qwen-Audio-3.0-ASR-Flash: até 2.000.

  • Modelos da versão principal das séries Fun-ASR-Realtime, Fun-ASR-Flash e Fun-ASR: até 2.000.

  • Outros modelos das séries Fun-ASR-Realtime, Fun-ASR-Flash e Fun-ASR, além da série Paraformer: até 500.

Para hotwords pré-compiladas, a contagem é por lista de hotwords. Para hotwords instantâneas, a contagem é por requisição.

Número de super hotwords (hotwords pré-compiladas / instantâneas)

Você pode ter até 50 super hotwords (peso 50).

Faturamento

Tanto hotwords pré-compiladas quanto instantâneas são gratuitas.

Aprimoramento de contexto

Modelos e regiões suportados

Singapore

Para chamar os modelos a seguir, use uma chave de API na região de Singapore:

  • Reconhecimento de fala em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07
  • Reconhecimento de fala não em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15

China (Beijing)

Para chamar os modelos a seguir, use uma chave de API na região de Beijing:

  • Reconhecimento de fala em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Streaming: qwen-audio-3.0-asr-flash-streaming
    • Fun-ASR-Realtime: fun-asr-realtime, fun-asr-realtime-2025-11-07
  • Reconhecimento de fala não em tempo real:

    • Qwen-Audio-3.0-ASR-Flash-Filetrans: qwen-audio-3.0-asr-flash-filetrans
    • Qwen-Audio-3.0-ASR-Flash: qwen-audio-3.0-asr-flash
    • Fun-ASR-Flash: fun-asr-flash-2026-06-15

Início rápido

O aprimoramento de contexto não exige recursos pré-criados. Passe os parâmetros de contexto diretamente na requisição de reconhecimento:

  • Reconhecimento de fala não em tempo real: Passe mensagens de contexto em input.messages da requisição http, posicionadas antes da mensagem de áudio.
  • Reconhecimento de fala em tempo real: Passe mensagens de contexto em input.context do evento WebSocket run-task. Para atualize o contexto enquanto a tarefa está em execução, envie um evento continue-task. O DashScope SDK encapsula esse protocolo, permitindo que você passe o contexto diretamente por meio de um parâmetro.

Casos de uso: Passar o histórico da conversa ou termos de domínio como contexto melhora significativamente a precisão da transcrição de substantivos próprios, como nomes de pessoas, lugares e termos de product. O contexto pode ser um histórico de conversa com múltiplos turnos (os resultados de reconhecimento e respostas do modelo de turnos anteriores) ou simplesmente um conjunto de termos de domínio ou uma lista de palavras.

Importante

  • Limite de mensagens: O mecanismo mantém no máximo os 5 turnos mais recentes de contexto. Ao passar apenas termos de domínio ou uma lista de palavras, geralmente basta 1 mensagem, sem impacto desse limite. Quando o limite é excedido, as mensagens mais antigas são ignoradas automaticamente, sem gerar erro.
  • Limite de comprimento de texto: O comprimento total do texto por turno (a soma dos comprimentos dos campos text de todas as mensagens user e assistant no mesmo turno) não deve exceder 400 caracteres (contados caractere a caractere, onde cada caractere — incluindo letras, caracteres chineses, dígitos, espaços e pontuação — conta como 1). Qualquer excesso é truncado a partir do final, sem gerar erro. Em um contexto de múltiplos turnos, cada turno é contado independentemente.
  • Como o contexto funciona: O contexto atua principalmente por correspondência de lista de palavras, portanto o campo text deve conter exatamente as palavras a serem reconhecidas no áudio (por exemplo, "Kubernetes" ou "Bulge Bracket"). Passar apenas uma descrição semanticamente relacionada que não contenha as palavras exatas tem efeito corretivo limitado.

Reconhecimento de fala não em tempo real

Passe o contexto por meio de input.messages. A função user com o tipo input_text transmite os resultados de reconhecimento de turnos anteriores ou uma lista de palavras relacionadas ao domínio, e a função assistant passa as respostas do modelo de turnos anteriores (opcional). Posicione as mensagens de contexto antes da mensagem de áudio. Para detalhes, consulte Non-real-time speech recognition (Qwen-Audio-3.0-ASR-Flash/Fun-ASR-Flash).

Transmita os resultados de reconhecimento de turnos anteriores (user / input_text) e as respostas do modelo (assistant / text). Para passar apenas termos de domínio ou uma lista de palavras, omita o histórico da conversa (as mensagens 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": {}
}

Reconhecimento de fala em tempo real

O reconhecimento de fala em tempo real passa o contexto por meio de input.context, e o áudio é enviado como frames binários WebSocket. Para atualize o contexto enquanto a tarefa está em execução, envie um evento continue-task. Para o formato de eventos WebSocket, consulte Client events. Para parâmetros do DashScope SDK, consulte o Python SDK (≥ 1.25.23) e o Java SDK (≥ 2.22.23).

Contexto de conversa com múltiplos turnos

Transmita os resultados de reconhecimento de turnos anteriores (user / input_text) e as respostas do modelo (assistant / text). Para passar apenas termos de domínio ou uma lista de palavras, omita o histórico da conversa (as mensagens 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");

Exemplo

O campo text do contexto aceita um formato flexível — uma lista de palavras, um parágrafo em linguagem natural ou uma combinação de ambos — e é altamente tolerante a textos irrelevantes.

O resultado correto de reconhecimento para um trecho de áudio deveria ser "How many of the insider jargon terms in the investment banking world do you know? First, the nine major foreign investment banks—Bulge Bracket, BB ...".

Sem aprimoramento de contexto

Sem o aprimoramento de contexto, alguns nomes de bancos de investimento são reconhecidos incorretamente. Por exemplo, "Bird Rock" deveria ser "Bulge Bracket".

Resultado do reconhecimento: "How many of the insider jargon terms in the investment banking world do you know? First, the nine major foreign investment banks—Bird Rock, BB ..."

Com aprimoramento de contexto

Com o aprimoramento de contexto, os nomes dos bancos de investimento são reconhecidos corretamente.

Resultado do reconhecimento: "How many of the insider jargon terms in the investment banking world do you know? First, the nine major foreign investment banks—Bulge Bracket, BB ..."

Para obter esse aprimoramento, adicione uma lista de palavras ou um parágrafo em linguagem natural que inclua termos especializados, como "Bulge Bracket", ao campo text do contexto.

Referência da API

FAQ

P: O reconhecimento não melhora após defina hotwords?

Verifique os itens a seguir nesta ordem:

  1. Correspondência de modelo (hotwords pré-compiladas): O target_model especificado na criação da lista de hotwords deve corresponder ao modelo usado pela API de reconhecimento de fala. Quando não há correspondência, a API não retorna erro e o reconhecimento ainda produz resultados, mas as hotwords não têm efeito. Se os resultados não incluírem as hotwords esperadas, verifique este item primeiro.
  2. Suporte do modelo
  3. Peso: Aumente o peso de 4 para 5 e observe o efeito. Se palavras com sonoridade semelhante forem reconhecidas incorretamente como a hotword, reverta para 4.
  4. Status da lista de hotwords (hotwords pré-compiladas): Use a API de consulta para confirme se o status é OK.

P: As hotwords pré-compiladas são usadas da mesma forma no reconhecimento de fala em tempo real e não em tempo real?

Elas são criadas da mesma maneira, mas chamadas de forma diferente:

  • Reconhecimento de fala em tempo real: Passe vocabulary_id nos parâmetros de conexão do Recognition ou WebSocket.
  • Transcrição de arquivos de áudio: Passe vocabulary_id nos parâmetros da requisição de Transcription.

Em ambos os casos, o target_model deve corresponder ao modelo de reconhecimento de fala realmente chamado. Hotwords instantâneas não exigem lista nem target_model; basta passar pares chave-valor vocabulary nos parâmetros da requisição. Para as séries de modelos Qwen-Audio-3.0-ASR-Flash-Streaming, Qwen-Audio-3.0-ASR-Flash-Filetrans e Qwen-Audio-3.0-ASR-Flash, que suportam hotwords instantâneas, o sistema mescla hotwords pré-compiladas e instantâneas quando ambas estão configuradas. Se o conjunto mesclado contiver mais de 2.000 hotwords, o sistema selecionará aleatoriamente 2.000 para uso.

P: Além de hotwords e aprimoramento de contexto, quais outras formas podem melhorar a precisão do reconhecimento?

Você também pode otimizar das seguintes maneiras:

  • Qualidade do áudio: Alinhe a taxa de amostragem à exigência do modelo (16 kHz ou 8 kHz) e reduza o ruído de fundo.
  • Escolha o modelo certo: Diferentes cenários exigem modelos diferentes. Para detalhes, consulte o guia de seleção Speech-to-text.
  • Especifique o idioma: Declare o idioma do áudio por meio de language_hints para melhorar a precisão em cenários de idioma único.