LLM Discurso para transcrição e tradução de fala (pré-visualização)

Nota

Esta funcionalidade está atualmente em pré-visualização pública. Esta pré-visualização é fornecida sem um acordo de nível de serviço e não é recomendada para cargas de trabalho em produção. Certas funcionalidades podem não ser suportadas ou podem ter capacidades limitadas. Para mais informações, consulte Termos de Utilização Suplementares para Microsoft Azure Pré-visualizações.

LLM Speech é uma API no Microsoft Foundry. Um modelo de linguagem amplo (LLM) melhora um modelo de fala, proporcionando melhor qualidade, compreensão contextual profunda, suporte multilíngue e capacidades de ajuste fino de prompts. Utiliza aceleração GPU para inferências ultra-rápidas, tornando-o ideal para uma vasta gama de cenários. Por exemplo, utilize o LLM Speech para gerar legendas a partir de ficheiros de áudio, resumir notas de reuniões, ajudar agentes de centro de atendimento e transcrever mensagens de voz.

Disponibilidade de funcionalidades

Esta tabela mostra as funcionalidades de transcrição que a API de transcrição rápida suporta, com e sem LLM Speech:

Destaque Transcrição rápida (padrão) LLM Reconhecimento de Voz (melhorado) Transcrever MAI
Transcrição ✅ (Modelos de transcrição de fala) ✅ (modelo multimodal) ✅ (modelo multimodal)
Tradução ✅ (modelo multimodal)
Diarização
Canal (estéreo)
Filtro de palavrões
Especificar localidade 1
Prompting personalizado
Lista de frases 1

1Para o LLM Speech, use sugestões para guiar o estilo de saída, em vez de usar localizações específicas ou listas de frases.

Podes tentar o LLM Speech em Microsoft Foundry sem escrever qualquer código.

Pré-requisitos

Experimente a Fala com LLM

  1. Iniciar sessão no Microsoft Foundry. Certifica-te de que a opção New Foundry está ativada. Estes passos referem-se ao Foundry (new).

  2. No menu superior direito, selecione Construir.

  3. No painel esquerdo, selecione Modelos.

  4. O separador de Serviços de IA mostra os modelos Foundry que pode usar no portal Foundry. Selecione Azure Fala - Fala para texto.

  5. Na lista suspensa, selecione discurso LLM.

  6. Opcionalmente, use a secção de Parâmetros para alterar a linguagem, a política de palavrões e outras definições. Também podes adicionar instruções especiais para o LLM.

  7. Use a secção Carregar ficheiros para selecionar o seu ficheiro de áudio. Depois seleciona Iniciar.

  8. Veja a saída da transcrição no separador Transcrição . Opcionalmente, visualize a saída bruta da resposta da API no separador JSON .

  9. Muda para o separador de Código para obter código de exemplo para usar fala do LLM na tua aplicação.

Pré-requisitos

  • Um recurso Azure Speech no Foundry Tools numa das regiões onde a API de Voz do LLM está disponível. Para a lista atual de regiões suportadas, veja Regiões de serviço de voz.

  • Um ficheiro de áudio com menos de cinco horas de duração e menos de 500 MB de tamanho. O ficheiro de áudio deve estar num dos formatos e codecs suportados pela API de transcrição em lote: WAV, MP3, OPUS/OGG, FLAC, WMA, AAC, ALAW no contentor WAV, MULAW no contentor WAV, AMR, WebM ou SPEEX. Para mais informações sobre formatos de áudio suportados, consulte formatos de áudio suportados.

Use a API de Voz do LLM

As secções seguintes fornecem detalhes sobre como usar esta API.

Línguas suportadas

As seguintes linguagens são atualmente suportadas tanto para transcribe como para translate tarefas: English, Chinese, German, French, Italian, Japanese, Spanish, Portuguese e Korean.

Carregar áudio

Pode fornecer dados de áudio das seguintes formas:

  • Passa os dados de áudio inline.

      --form 'audio=@"YourAudioFile"'
    
  • Carregue um ficheiro de áudio a partir de um arquivo público audioUrl.

      --form 'definition": "{\"audioUrl\": \"https://crbn.us/hello.wav"}"'
    

Dica

Para ficheiros de áudio longos, recomendamos que faça upload a partir de uma URL pública.

Neste artigo, usamos o upload de áudio inline como exemplo.

Chame a API de Voz do LLM

No seu pedido POST ao transcriptions endpoint, use o tipo de conteúdo multipart/form-data com o ficheiro de áudio e as propriedades do corpo da solicitação.

O exemplo seguinte mostra como transcrever um ficheiro de áudio com uma localização especificada. Se souberes a localização do ficheiro de áudio, podes especificá-la para melhorar a precisão da transcrição e minimizar a latência.

  • Substitui YourSpeechResoureKey pela tua chave de recursos de Voz.
  • Substitua YourServiceRegion pela sua região de recursos de fala.
  • Substitui YourAudioFile pelo caminho para o teu ficheiro de áudio.

Importante

Para a autenticação sem chave recomendada com Microsoft Entra ID, substitua --header 'Ocp-Apim-Subscription-Key: YourSpeechResoureKey' por --header "Authorization: Bearer YourAccessToken". Para obter mais informações sobre a autenticação sem chave física, consulte o guia de controlo de acesso baseado em funções.

Use o LLM Speech para transcrever um áudio

Pode transcrever áudio na língua de entrada sem especificar um código local. O modelo deteta e seleciona automaticamente a língua apropriada com base no conteúdo áudio.

curl --location 'https://<YourServiceRegion>.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2025-10-15' \
--header 'Content-Type: multipart/form-data' \
--header 'Ocp-Apim-Subscription-Key: <YourSpeechResourceKey>' \
--form 'audio=@"YourAudioFile.wav"' \
--form 'definition={
  "enhancedMode": {
    "enabled": true,
    "task": "transcribe"
  }
}'

Use LLM Speech para traduzir um ficheiro de áudio

Pode traduzir áudio para uma língua alvo especificada. Para permitir a tradução, deve fornecer o código da língua de destino no pedido.

curl --location 'https://<YourServiceRegion>.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2025-10-15' \
--header 'Content-Type: multipart/form-data' \
--header 'Ocp-Apim-Subscription-Key: <YourSpeechResourceKey>' \
--form 'audio=@"YourAudioFile.wav"' \
--form 'definition={
  "enhancedMode": {
    "enabled": true,
    "task": "translate",
    "targetLanguage": "ko"
  }
}'

Utilize ajuste de prompt para alterar o desempenho

Podes fornecer um texto opcional para guiar o estilo de saída da tarefa transcribe ou translate.

curl --location 'https://<YourServiceRegion>.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2025-10-15' \
--header 'Content-Type: multipart/form-data' \
--header 'Ocp-Apim-Subscription-Key: <YourSpeechResourceKey>' \
--form 'audio=@"YourAudioFile.wav"' \
--form 'definition={
  "enhancedMode": {
    "enabled": true,
    "task": "transcribe",
    "prompt": ["Output must be in lexical format."]
  }
}'

Aqui estão algumas boas práticas para os prompts:

  • Os prompts têm um comprimento máximo de 4.096 caracteres.

  • Os prompts devem ser preferencialmente escritos em inglês.

  • Os prompts podem orientar a formatação da saída. Por defeito, as respostas utilizam um formato de exibição otimizado para legibilidade. Para garantir a formatação lexical, inclui: Output must be in lexical format.

  • Os prompts podem amplificar a relevância de frases ou acrónimos específicos, aumentando a probabilidade de reconhecimento. Utilização: Pay attention to *phrase1*, *phrase2*, …. Para melhores resultados, limite o número de frases por prompt.

  • Os prompts que não estão relacionados com tarefas de fala (por exemplo, Tell me a story.) são normalmente ignorados.

Mais opções de configuração

Pode combinar opções de configuração extra com transcrição rápida para permitir funcionalidades melhoradas, como diarization, profanityFilterMode, e channels.

curl --location 'https://<YourServiceRegion>.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2025-10-15' \
--header 'Content-Type: multipart/form-data' \
--header 'Ocp-Apim-Subscription-Key: <YourSpeechResourceKey>' \
--form 'audio=@"YourAudioFile.wav"' \
--form 'definition={
  "enhancedMode": {
    "enabled": true,
    "task": "transcribe",
    "prompt": ["Output must be in lexical format."]
  },
  "diarization": {
    "maxSpeakers": 2,
    "enabled": true
  },
  "profanityFilterMode": "Masked"
}'

Algumas opções de configuração, como locales e phraseLists, ou não são obrigatórias ou não são aplicáveis ao LLM Speech. Podes omitir estas opções do pedido. Saiba mais nas opções de configuração da transcrição rápida.

Utilize o modelo MAI-Transcribe (versão preliminar)

Também pode usar o modelo MAI-Transcribe-1 fornecido pela Microsoft AI (MAI) com a API de Voz do LLM.

Para a lista atual de regiões onde este modelo é suportado, veja Regiões do serviço de voz.

As seguintes línguas são atualmente suportadas para o modelo mai-transcribe-1: Arabic, Chinese, Czech, Danish, Dutch, English, Finnish, French, German, Hindi, Hungarian, Indonesian, Italian, Japanese, Korean, Norwegian Bokmål, Polish, Portuguese, Romanian, Russian, Spanish, Swedish, Thai, Turkish e Vietnamese.

Para usar o modelo MAI-Transcribe-1, defina a model propriedade em conformidade no pedido.

curl --location 'https://<YourServiceRegion>.api.cognitive.microsoft.com/speechtotext/transcriptions:transcribe?api-version=2025-10-15' \
--header 'Content-Type: multipart/form-data' \
--header 'Ocp-Apim-Subscription-Key: <YourSpeechResourceKey>' \
--form 'audio=@"YourAudioFile.wav"' \
--form 'definition={
  "enhancedMode": {
    "enabled": true,
    "model":"mai-transcribe-1"
  }
}'

Ao utilizar este modelo, esteja ciente das seguintes limitações:

  • O ficheiro de áudio deve ter menos de 70 MB.

  • A diarização não é suportada.

Resposta de exemplo

Na resposta JSON, a combinedPhrases propriedade contém o texto transcrito ou traduzido completo, e a phrases propriedade contém detalhes ao nível do segmento e da palavra.

{
    "durationMilliseconds": 57187,
    "combinedPhrases": [
        {
            "text": "With custom speech,you can evaluate and improve the microsoft speech to text accuracy for your applications and products 现成的语音转文本,利用通用语言模型作为一个基本模型,使用microsoft自有数据进行训练,并反映常用的口语。此基础模型使用那些代表各常见领域的方言和发音进行了预先训练。 Quand vous effectuez une demande de reconnaissance vocale, le modèle de base le plus récent pour chaque langue prise en charge est utilisé par défaut. Le modèle de base fonctionne très bien dans la plupart des scénarios de reconnaissance vocale. A custom model can be used to augment the base model to improve recognition of domain specific vocabulary specified to the application by providing text data to train the model. It can also be used to improve recognition based for the specific audio conditions of the application by providing audio data with reference transcriptions."
        }
    ],
    "phrases": [
        {
            "offsetMilliseconds": 80,
            "durationMilliseconds": 6960,
            "text": "With custom speech,you can evaluate and improve the microsoft speech to text accuracy for your applications and products.",
            "words": [
                {
                    "text": "with",
                    "offsetMilliseconds": 80,
                    "durationMilliseconds": 160
                },
                {
                    "text": "custom",
                    "offsetMilliseconds": 240,
                    "durationMilliseconds": 480
                },

                {
                    "text": "speech",
                    "offsetMilliseconds": 720,
                    "durationMilliseconds": 360
                },,
        // More transcription results...
        // Redacted for brevity
            ],
            "locale": "en-us",
            "confidence": 0
        },
        {
            "offsetMilliseconds": 8000,
            "durationMilliseconds": 8600,
            "text": "现成的语音转文本,利用通用语言模型作为一个基本模型,使用microsoft自有数据进行训练,并反映常用的口语。此基础模型使用那些代表各常见领域的方言和发音进行了预先训练。",
            "words": [
                {
                    "text": "现",
                    "offsetMilliseconds": 8000,
                    "durationMilliseconds": 40
                },
                {
                    "text": "成",
                    "offsetMilliseconds": 8040,
                    "durationMilliseconds": 40
                },
        // More transcription results...
        // Redacted for brevity
                {
                    "text": "训",
                    "offsetMilliseconds": 16400,
                    "durationMilliseconds": 40
                },
                {
                    "text": "练",
                    "offsetMilliseconds": 16560,
                    "durationMilliseconds": 40
                },
            ],
            "locale": "zh-cn",
            "confidence": 0
        // More transcription results...
        // Redacted for brevity
                {
                    "text": "with",
                    "offsetMilliseconds": 54720,
                    "durationMilliseconds": 200
                },
                {
                    "text": "reference",
                    "offsetMilliseconds": 54920,
                    "durationMilliseconds": 360
                },
                {
                    "text": "transcriptions.",
                    "offsetMilliseconds": 55280,
                    "durationMilliseconds": 1200
                }
            ],
            "locale": "en-us",
            "confidence": 0
        }
    ]
}

O formato de resposta é consistente com outras saídas existentes de voz para texto, como a transcrição rápida e a transcrição em lote. Esteja ciente das seguintes diferenças:

  • Nível de palavra durationMilliseconds e offsetMilliseconds não são suportadas na tarefa translate.

  • A diarização não é suportada para esta translate tarefa. Apenas a speaker1 etiqueta é devolvida.

  • confidence não se encontra disponível e permanece sempre 0.

Documentação de referência | Package (PyPi) | GitHub samples

Pré-requisitos

Pré-requisitos do Microsoft Entra ID

Para a autenticação sem chave recomendada com o Microsoft Entra ID, precisa:

  • Instale o CLI do Azure usado para autenticação sem chave com Microsoft Entra ID.

  • Atribua o papel de Utilizador de Serviços Cognitivos à sua conta de utilizador. Pode atribuir funções no portal Azure em Controlo de Acesso (IAM)>Adicionar atribuição de funções.

Preparar o ambiente

  1. Crie uma nova pasta nomeada llm-speech-quickstart e depois vá à pasta com o seguinte comando:

    mkdir llm-speech-quickstart && cd llm-speech-quickstart
    
  2. Para instalar os pacotes de que precisa para este artigo, crie e ative um ambiente virtual em Python. Recomendamos que utilize sempre um ambiente virtual ou conda ao instalar pacotes Python. Caso contrário, pode estragar a sua instalação global do Python. Se já tem Python 3.9 ou posterior instalado, crie um ambiente virtual usando os seguintes comandos:

    py -3 -m venv .venv
    .venv\Scripts\Activate.ps1
    

    Quando ativas o ambiente Python, executar python ou pip a partir da linha de comandos usa o interpretador Python na pasta .venv da tua aplicação. Use o comando deactivate para sair do ambiente virtual Python. Podes reativá-lo mais tarde, quando necessário.

  3. Crie um ficheiro chamado requirements.txt. Adicione os seguintes pacotes ao ficheiro:

    azure-ai-transcription
    azure-identity
    
  4. Instale os pacotes:

    pip install -r requirements.txt
    

Definir variáveis ambientais

Precisas de recuperar o endpoint de recursos e a chave API para autenticação.

  1. Iniciar sessão no portal Foundry (clássico).

  2. Selecione Centro de Gestão no menu esquerdo.

  3. Seleciona Recursos Conectados e encontra o teu recurso Microsoft Foundry (ou adiciona uma ligação se ele não estiver lá). Depois, copie os valores da Chave API e do Destino (endpoint). Use estes valores para definir variáveis de ambiente.

  4. Defina as seguintes variáveis de ambiente:

    $env:AZURE_SPEECH_ENDPOINT="<your-speech-endpoint>"
    $env:AZURE_SPEECH_API_KEY="<your-api-key>"
    

Nota

Para autenticação Microsoft Entra ID (recomendada para produção), instale azure-identity. Configure a autenticação conforme descrito na secção Microsoft Entra ID pré-requisitos.

Transcrever áudio com LLM Speech

O LLM Speech utiliza a EnhancedModeProperties classe para permitir a transcrição que é enriquecida por um grande modelo de linguagem. O modelo deteta automaticamente a língua no seu áudio.

  1. Crie um ficheiro chamado llm_speech_transcribe.py com o seguinte código:

    import os
    from dotenv import load_dotenv
    from azure.core.credentials import AzureKeyCredential
    from azure.ai.transcription import TranscriptionClient
    
    load_dotenv()
    from azure.ai.transcription.models import (
        TranscriptionContent,
        TranscriptionOptions,
        EnhancedModeProperties,
    )
    
    # Get configuration from environment variables
    endpoint = os.environ["AZURE_SPEECH_ENDPOINT"]
    
    # Optional: we recommend using role based access control (RBAC) for production scenarios
    api_key = os.environ["AZURE_SPEECH_API_KEY"]
    
    if api_key:
        credential = AzureKeyCredential(api_key)
    else:
        from azure.identity import DefaultAzureCredential
        credential = DefaultAzureCredential()   
    
    # Create the transcription client
    client = TranscriptionClient(endpoint=endpoint, credential=credential)
    
    # Path to your audio file (replace with your own file path)
    audio_file_path = "<path-to-your-audio-file.wav>"
    
    # Open and read the audio file
    with open(audio_file_path, "rb") as audio_file:
        # Create enhanced mode properties for LLM Speech transcription
        enhanced_mode = EnhancedModeProperties(
            task="transcribe",
            prompt=[],
        )
    
        # Create transcription options with enhanced mode
        options = TranscriptionOptions(enhanced_mode=enhanced_mode)
    
        # Create the request content
        request_content = TranscriptionContent(definition=options, audio=audio_file)
    
        # Transcribe the audio
        result = client.transcribe(request_content)
    
        # Print the transcription result
        print(f"Transcription: {result.combined_phrases[0].text}")
    
        # Print detailed phrase information
        if result.phrases:
            print("\nDetailed phrases:")
            for phrase in result.phrases:
                print(f"  [{phrase.offset_milliseconds}ms]: {phrase.text}")
    

    Para mais informações, consulte as seguintes referências: TranscriptionClient, TranscriptionContent, TranscriptionOptions e EnhancedModeProperties.

  2. Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio. O serviço suporta formatos de áudio WAV, MP3, FLAC, OGG e outros comuns.

  3. Executa o script Python.

    python llm_speech_transcribe.py
    

Saída de transcrição

O guião imprime o resultado da transcrição para a consola:

Transcription: Hi there. This is a sample voice recording created for speech synthesis testing. The quick brown fox jumps over the lazy dog. Just a fun way to include every letter of the alphabet. Numbers, like one, two, three, are spoken clearly. Let's see how well this voice captures tone, timing, and natural rhythm. This audio is provided by samplefiles.com.

Detailed phrases:
  [40ms]: Hi there.
  [800ms]: This is a sample voice recording created for speech synthesis testing.
  [5440ms]: The quick brown fox jumps over the lazy dog.
  [9040ms]: Just a fun way to include every letter of the alphabet.
  [12720ms]: Numbers, like one, two, three, are spoken clearly.
  [17200ms]: Let's see how well this voice captures tone, timing, and natural rhythm.
  [22480ms]: This audio is provided by samplefiles.com.

Traduzir áudio com fala LLM

Também pode usar o LLM Speech para traduzir áudio para a língua-alvo. Defina o task para translate, e especifique o target_language.

  1. Use o código acima, mas especifique o task como translate e adicione o target_language no EnhancedModeProperties.

    
    # Open and read the audio file
    with open(audio_file_path, "rb") as audio_file:
        # Create enhanced mode properties for LLM Speech translation
        # Translate to another language
        enhanced_mode = EnhancedModeProperties(
            task="translate",
            target_language="de",
            prompt=[
                "Translate the following audio to German.",
                "Convert number words to numbers."
            ],  # Optional prompts to guide the enhanced mode
        )
    
        # Create transcription options with enhanced mode
        options = TranscriptionOptions(locales=["en-US"], enhanced_mode=enhanced_mode)
    

    Para mais informações, consulte as seguintes referências: TranscriptionClient e EnhancedModeProperties.

  2. Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio.

  3. Executa o script Python.

    python llm_speech_translate.py
    

Usar afinamento de prompts

Pode fornecer um prompt opcional para orientar o estilo de saída para tarefas de transcrição ou tradução. Substitui o valor prompt no objeto EnhancedModeProperties.

# Open and read the audio file
with open(audio_file_path, "rb") as audio_file:
    # Create enhanced mode properties for LLM Speech transcription
    enhanced_mode = EnhancedModeProperties(
        task="transcribe",
        prompt=[
            "Create lexical output only,",
            "Convert number words to numbers."
        ],  # Optional prompts to guide the enhanced mode, prompt="Create lexical transcription.")
    )


Boas práticas para prompts

  • Os prompts têm um comprimento máximo de 4.096 caracteres.

  • Os prompts devem ser preferencialmente escritos em inglês.

  • Use Output must be in lexical format. para impor a formatação lexical em vez do formato de exibição padrão.

  • Use Pay attention to *phrase1*, *phrase2*, … para melhorar o reconhecimento de expressões ou siglas específicas.

Para mais informações, consulte a seguinte referência: EnhancedModeProperties.

Produção

O guião imprime o resultado da transcrição para a consola:

Transcription: Hello, this is a test of the LLM Speech transcription service.

Detailed phrases:
  [0ms]: Hello, this is a test
  [1500ms]: of the LLM Speech transcription service.

Documentação de referência | Package (NuGet) | GitHub samples

Pré-requisitos

Pré-requisitos do Microsoft Entra ID

Para a autenticação sem chave recomendada com o Microsoft Entra ID, precisa:

  • Instale o CLI do Azure usado para autenticação sem chave com Microsoft Entra ID.

  • Inicia sessão com o CLI do Azure executando az login.

  • Atribua o papel de Utilizador de Serviços Cognitivos à sua conta de utilizador. Pode atribuir funções no portal Azure em Controlo de Acesso (IAM)>Adicionar atribuição de funções.

Preparar o projeto

  1. Crie uma nova aplicação de consola com a CLI .NET:

    dotnet new console -n llm-speech-quickstart
    cd llm-speech-quickstart
    
  2. Instale os pacotes necessários:

    dotnet add package Azure.AI.Speech.Transcription --prerelease
    dotnet add package Azure.Identity
    

Recuperar informação de recursos

Precisas de recuperar o teu endpoint de recursos para autenticação.

  1. Inicie sessão no portal da Foundry.

  2. Selecione Centro de Gestão no menu esquerdo. Em Recursos Conectados, selecione o seu recurso de Voz ou multiserviços.

  3. Selecione Chaves e Endpoint.

  4. Copie o valor Endpoint e defina-o como variável de ambiente:

    $env:AZURE_SPEECH_ENDPOINT="<your-speech-endpoint>"
    

Transcrever áudio usando reconhecimento de fala LLM

O LLM Speech utiliza a EnhancedModeProperties classe para permitir a transcrição que é enriquecida por um grande modelo de linguagem. Quando crias uma EnhancedModeProperties instância, ativas automaticamente o modo melhorado. O modelo deteta automaticamente a língua no seu áudio.

Substitua o conteúdo de Program.cs pelo seguinte código:

using System;
using System.ClientModel;
using System.Linq;
using System.Threading.Tasks;
using Azure.AI.Speech.Transcription;
using Azure.Identity;

Uri endpoint = new Uri(Environment.GetEnvironmentVariable("AZURE_SPEECH_ENDPOINT")
    ?? throw new InvalidOperationException("Set the AZURE_SPEECH_ENDPOINT environment variable."));

// Use DefaultAzureCredential for keyless authentication (recommended).
// To use an API key instead, replace with:
// ApiKeyCredential credential = new ApiKeyCredential("<your-api-key>");
var credential = new DefaultAzureCredential();
TranscriptionClient client = new TranscriptionClient(endpoint, credential);

string audioFilePath = "<path-to-your-audio-file.wav>";
using FileStream audioStream = File.OpenRead(audioFilePath);

// Create enhanced mode properties for LLM Speech transcription
TranscriptionOptions options = new TranscriptionOptions(audioStream)
{
    EnhancedMode = new EnhancedModeProperties
    {
        Task = "transcribe"
    }
};

ClientResult<TranscriptionResult> response = await client.TranscribeAsync(options);

// Print combined transcription
foreach (var combinedPhrase in response.Value.CombinedPhrases)
{
    Console.WriteLine($"Transcription: {combinedPhrase.Text}");
}

// Print detailed phrase information
foreach (var channel in response.Value.PhrasesByChannel)
{
    Console.WriteLine("\nDetailed phrases:");
    foreach (var phrase in channel.Phrases)
    {
        Console.WriteLine($"  [{phrase.Offset}] ({phrase.Locale}): {phrase.Text}");
    }
}

Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio. O serviço suporta formatos de áudio WAV, MP3, FLAC, OGG e outros comuns.

Execute a aplicação:

dotnet run

Para mais informações, consulte as seguintes referências: TranscriptionClient e EnhancedModeProperties.

Traduzir áudio com fala LLM

Também pode usar o LLM Speech para traduzir áudio para a língua-alvo. Defina o Task para translate, e especifique o TargetLanguage:

using System;
using System.ClientModel;
using System.Linq;
using System.Threading.Tasks;
using Azure.AI.Speech.Transcription;
using Azure.Identity;

Uri endpoint = new Uri(Environment.GetEnvironmentVariable("AZURE_SPEECH_ENDPOINT")
    ?? throw new InvalidOperationException("Set the AZURE_SPEECH_ENDPOINT environment variable."));

var credential = new DefaultAzureCredential();
TranscriptionClient client = new TranscriptionClient(endpoint, credential);

string audioFilePath = "<path-to-your-audio-file.wav>";
using FileStream audioStream = File.OpenRead(audioFilePath);

// Create enhanced mode properties for LLM Speech translation
TranscriptionOptions options = new TranscriptionOptions(audioStream)
{
    EnhancedMode = new EnhancedModeProperties
    {
        Task = "translate",
        TargetLanguage = "de"
    }
};

ClientResult<TranscriptionResult> response = await client.TranscribeAsync(options);

// Print translation result
foreach (var combinedPhrase in response.Value.CombinedPhrases)
{
    Console.WriteLine($"Translation: {combinedPhrase.Text}");
}

Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio.

Para mais informações, consulte a seguinte referência: EnhancedModeProperties.

Usar afinamento de prompts

Pode fornecer um prompt opcional para orientar o estilo de saída para tarefas de transcrição ou tradução:

TranscriptionOptions options = new TranscriptionOptions(audioStream)
{
    EnhancedMode = new EnhancedModeProperties
    {
        Task = "transcribe",
        Prompt = { "Output must be in lexical format." }
    }
};

ClientResult<TranscriptionResult> response = await client.TranscribeAsync(options);

foreach (var combinedPhrase in response.Value.CombinedPhrases)
{
    Console.WriteLine($"Transcription: {combinedPhrase.Text}");
}

Boas práticas para prompts

  • Os prompts têm um comprimento máximo de 4.096 caracteres.

  • Os prompts devem ser preferencialmente escritos em inglês.

  • Use Output must be in lexical format. para impor a formatação lexical em vez do formato de exibição padrão.

  • Use Pay attention to *phrase1*, *phrase2*, … para melhorar o reconhecimento de expressões ou siglas específicas.

Para mais informações, consulte a seguinte referência: EnhancedModeProperties.

Recursos de limpeza

Quando terminares o quickstart, elimina a pasta do projeto:

Remove-Item -Recurse -Force llm-speech-quickstart

Documentação de referência | Package (npm) | GitHub samples

Pré-requisitos

Pré-requisitos do Microsoft Entra ID

Para a autenticação sem chave recomendada com o Microsoft Entra ID, precisa:

  1. Instale o CLI do Azure usado para autenticação sem chave com Microsoft Entra ID.

  2. Inicia sessão com o CLI do Azure executando az login.

  3. Atribua o papel de Utilizador de Serviços Cognitivos à sua conta de utilizador. Pode atribuir funções no portal Azure em Controlo de Acesso (IAM)>Adicionar atribuição de funções.

Preparar o projeto

  1. Crie uma nova pasta chamada llm-speech-quickstart, e depois vá à pasta:

    mkdir llm-speech-quickstart && cd llm-speech-quickstart
    
  2. Inicialize um projeto Node.js e instale os pacotes necessários:

    npm init -y
    npm install @azure/ai-speech-transcription @azure/identity
    

Recuperar informação de recursos

Precisas de recuperar o teu endpoint de recursos para autenticação.

  1. Inicie sessão no portal da Foundry.

  2. Selecione Centro de Gestão no menu esquerdo. Em Recursos Conectados, selecione o seu recurso de Voz ou multiserviços.

  3. Selecione Chaves e Endpoint.

  4. Copie o valor Endpoint e defina-o como variável de ambiente:

    $env:AZURE_SPEECH_ENDPOINT="<your-speech-endpoint>"
    

Transcrever áudio com LLM Speech

O LLM Speech utiliza a opção enhancedMode para permitir uma transcrição melhorada por um grande modelo de linguagem. O modelo deteta automaticamente a língua no seu áudio.

Crie um ficheiro chamado index.js com o seguinte código:

const {
  TranscriptionClient,
} = require("@azure/ai-speech-transcription");
const { DefaultAzureCredential } = require("@azure/identity");
const fs = require("fs");

async function main() {
  const endpoint = process.env.AZURE_SPEECH_ENDPOINT;
  if (!endpoint) {
    throw new Error(
      "Set the AZURE_SPEECH_ENDPOINT environment variable."
    );
  }

  // Use DefaultAzureCredential for keyless authentication
  // (recommended). To use an API key instead, replace with:
  // const { AzureKeyCredential } = require("@azure/core-auth");
  // const credential = new AzureKeyCredential("<your-api-key>");
  const credential = new DefaultAzureCredential();
  const client = new TranscriptionClient(endpoint, credential);

  const audioFilePath = "<path-to-your-audio-file.wav>";
  const audioFile = fs.readFileSync(audioFilePath);

  // Use enhancedMode for LLM speech transcription
  const result = await client.transcribe(audioFile, {
    enhancedMode: {
      task: "transcribe",
    },
  });

  // Print the combined transcription text
  console.log("Transcription:", result.combinedPhrases[0]?.text);

  // Print detailed phrase information
  for (const phrase of result.phrases) {
    console.log(
      `  [${phrase.offsetMilliseconds}ms]`
        + ` (${phrase.locale}): ${phrase.text}`
    );
  }
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
  process.exit(1);
});

Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio. O serviço suporta formatos de áudio WAV, MP3, FLAC, OGG e outros comuns.

Execute a aplicação:

node index.js

Dica

Se obtiveres o resultado Enhanced mode is currently not supported yet, verifica se o teu endpoint está numa região que suporta LLM Speech.

Para mais informações, consulte a seguinte referência: TranscriptionClient.

Saída de transcrição

A aplicação imprime o resultado da transcrição na consola:

Transcription: Hi there. This is a sample voice recording created for speech synthesis testing. The quick brown fox jumps over the lazy dog. Just a fun way to include every letter of the alphabet. Numbers, like one, two, three, are spoken clearly. Let's see how well this voice captures tone, timing, and natural rhythm. This audio is provided by samplefiles.com.
  [40ms] (en-US): Hi there.
  [800ms] (en-US): This is a sample voice recording created for speech synthesis testing.
  [5440ms] (en-US): The quick brown fox jumps over the lazy dog.
  [9040ms] (en-US): Just a fun way to include every letter of the alphabet.
  [12720ms] (en-US): Numbers, like one, two, three, are spoken clearly.
  [17200ms] (en-US): Let's see how well this voice captures tone, timing, and natural rhythm.
  [22480ms] (en-US): This audio is provided by samplefiles.com.

Traduzir áudio com fala LLM

Também pode usar o LLM Speech para traduzir áudio para a língua-alvo. Defina task para translate, e depois especifique o targetLanguage:

const {
  TranscriptionClient,
} = require("@azure/ai-speech-transcription");
const { DefaultAzureCredential } = require("@azure/identity");
const fs = require("fs");

async function main() {
  const endpoint = process.env.AZURE_SPEECH_ENDPOINT;
  if (!endpoint) {
    throw new Error(
      "Set the AZURE_SPEECH_ENDPOINT environment variable."
    );
  }

  const credential = new DefaultAzureCredential();
  const client = new TranscriptionClient(endpoint, credential);

  const audioFilePath = "<path-to-your-audio-file.wav>";
  const audioFile = fs.readFileSync(audioFilePath);

  // Translate audio using enhanced mode
  const result = await client.transcribe(audioFile, {
    enhancedMode: {
      task: "translate",
      targetLanguage: "de", // Translate to German
    },
  });

  console.log("Translation:", result.combinedPhrases[0]?.text);
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
  process.exit(1);
});

Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio.

Para mais informações, consulte a seguinte referência: TranscriptionClient.

Usar afinamento de prompts

Pode fornecer um prompt opcional para orientar o estilo de saída para tarefas de transcrição ou tradução:

const result = await client.transcribe(audioFile, {
  enhancedMode: {
    task: "transcribe",
    prompt: ["Output must be in lexical format."],
  },
});

console.log("Transcription:", result.combinedPhrases[0]?.text);

Boas práticas para prompts

  • Os prompts têm um comprimento máximo de 4.096 caracteres.

  • Os prompts devem ser preferencialmente escritos em inglês.

  • Use Output must be in lexical format. para impor a formatação lexical em vez do formato de exibição padrão.

  • Use Pay attention to *phrase1*, *phrase2*, … para melhorar o reconhecimento de expressões ou siglas específicas.

Produção

A aplicação imprime o resultado da transcrição na consola:

Transcription: Hello this is a test of the LLM speech transcription service.

Para mais informações, consulte a seguinte referência: TranscriptionClient.

Documentação de referência | Package (Maven) | GitHub samples

Pré-requisitos

Preparar o ambiente

  1. Crie uma nova pasta chamada llm-speech-quickstart, e depois vá a ela:

    mkdir llm-speech-quickstart && cd llm-speech-quickstart
    
  2. Crie um pom.xml ficheiro na raiz do diretório do seu projeto com o seguinte conteúdo:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>com.example</groupId>
        <artifactId>transcription-quickstart</artifactId>
        <version>1.0.0</version>
        <packaging>jar</packaging>
    
        <name>Speech Transcription Quickstart</name>
        <description>Quickstart sample for Azure Speech Transcription client library.</description>
        <url>https://github.com/Azure/azure-sdk-for-java</url>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>com.azure</groupId>
                <artifactId>azure-ai-speech-transcription</artifactId>
                <version>1.0.0-beta.2</version>
            </dependency>
            <dependency>
                <groupId>com.azure</groupId>
                <artifactId>azure-identity</artifactId>
                <version>1.18.1</version>
            </dependency>
        </dependencies>
    
        <build>
            <sourceDirectory>.</sourceDirectory>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.11.0</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>3.1.0</version>
                    <configuration>
                        <mainClass>TranscriptionQuickstart</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    

    Nota

    A configuração <sourceDirectory>.</sourceDirectory> instrui o Maven a procurar ficheiros de código-fonte de Java no diretório atual em vez da estrutura padrão src/main/java. Esta alteração de configuração permite uma estrutura de projeto mais simples e plana.

  3. Instale as dependências:

    mvn clean install
    

Definir variáveis ambientais

A sua candidatura deve ser autenticada para aceder ao Azure Speech. O SDK suporta tanto a chave API como a autenticação do Microsoft Entra ID. Deteta automaticamente qual método usar com base nas variáveis de ambiente que definiste.

Primeiro, defina o endpoint para o seu recurso de Fala. Substitui <your-speech-endpoint> pelo nome real do teu recurso.

$env:AZURE_SPEECH_ENDPOINT="<your-speech-endpoint>"

Depois, escolha um dos seguintes métodos de autenticação.

Defina a variável de ambiente da chave API:

setx AZURE_SPEECH_API_KEY <your-speech-key>

Em vez de definir AZURE_SPEECH_API_KEY, configure uma das seguintes fontes de credencial:

  • CLI do Azure: Executa az login na tua máquina de desenvolvimento.

  • Managed identity: Para aplicações a correr em Azure (Serviço de Aplicações do Azure, Funções do Azure, máquinas virtuais).

  • Variáveis de ambiente: Definam AZURE_TENANT_ID, AZURE_CLIENT_ID, e AZURE_CLIENT_SECRET.

  • Visual Studio Code ou IntelliJ: Inicia sessão através do teu IDE.

Também precisa de atribuir a função de Utilizador de Serviços Cognitivos à sua identidade:

az role assignment create --assignee <your-identity> \
    --role "Cognitive Services User" \
    --scope /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.CognitiveServices/accounts/<speech-resource-name>

Nota

Depois de definires variáveis de ambiente no Windows, reinicia todos os programas em execução que precisam de as ler, incluindo a janela da consola. No Linux ou macOS, executa source ~/.bashrc (ou o teu ficheiro de configuração equivalente na shell) para tornar as alterações eficazes.

Transcrever áudio com LLM Speech

O LLM Speech utiliza a EnhancedModeOptions classe para permitir a transcrição que é enriquecida por um grande modelo de linguagem. Quando crias uma EnhancedModeOptions instância, ativas automaticamente o modo melhorado. O modelo deteta automaticamente a língua no seu áudio.

Crie um ficheiro nomeado LlmSpeechQuickstart.java no diretório do seu projeto com o seguinte código:

import com.azure.ai.speech.transcription.TranscriptionClient;
import com.azure.ai.speech.transcription.TranscriptionClientBuilder;
import com.azure.ai.speech.transcription.models.AudioFileDetails;
import com.azure.ai.speech.transcription.models.EnhancedModeOptions;
import com.azure.ai.speech.transcription.models.TranscriptionOptions;
import com.azure.ai.speech.transcription.models.TranscriptionResult;
import com.azure.core.credential.KeyCredential;
import com.azure.core.util.BinaryData;
import com.azure.identity.DefaultAzureCredentialBuilder;

import java.nio.file.Files;
import java.nio.file.Paths;

public class LlmSpeechQuickstart {
    public static void main(String[] args) {
        try {
            // Get credentials from environment variables
            String endpoint = System.getenv("AZURE_SPEECH_ENDPOINT");
            String apiKey = System.getenv("AZURE_SPEECH_API_KEY");

            // Create client with API key or Entra ID authentication
            TranscriptionClientBuilder builder = new TranscriptionClientBuilder()
                .endpoint(endpoint);

            TranscriptionClient client;
            if (apiKey != null && !apiKey.isEmpty()) {
                // Use API key authentication
                client = builder.credential(new KeyCredential(apiKey)).buildClient();
            } else {
                // Use Entra ID authentication
                client = builder.credential(new DefaultAzureCredentialBuilder().build()).buildClient();
            }

            // Load audio file
            String audioFilePath = "<path-to-your-audio-file.wav>";
            byte[] audioData = Files.readAllBytes(Paths.get(audioFilePath));

            // Create audio file details
            AudioFileDetails audioFileDetails = new AudioFileDetails(BinaryData.fromBytes(audioData));

            // Create enhanced mode options for LLM speech transcription
            // Enhanced mode is automatically enabled when you create EnhancedModeOptions
            EnhancedModeOptions enhancedModeOptions = new EnhancedModeOptions()
                .setTask("transcribe");

            // Create transcription options with enhanced mode
            TranscriptionOptions options = new TranscriptionOptions(audioFileDetails)
                .setEnhancedModeOptions(enhancedModeOptions);

            // Transcribe the audio
            TranscriptionResult result = client.transcribe(options);

            // Print result
            System.out.println("Transcription:");
            result.getCombinedPhrases().forEach(phrase ->
                System.out.println(phrase.getText())
            );

            // Print detailed phrase information
            if (result.getPhrases() != null) {
                System.out.println("\nDetailed phrases:");
                result.getPhrases().forEach(phrase ->
                    System.out.println(String.format("  [%dms] (%s): %s",
                        phrase.getOffset(),
                        phrase.getLocale(),
                        phrase.getText()))
                );
            }

        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio. O serviço suporta formatos de áudio WAV, MP3, FLAC, OGG e outros comuns.

Executar a aplicação

Execute a aplicação usando o Maven:

mvn compile exec:java

Traduz áudio usando LLM Speech

Também pode usar o LLM Speech para traduzir áudio para a língua-alvo. Modifique a EnhancedModeOptions configuração para definir a tarefa para translate, e depois especifique a língua de destino.

Crie um ficheiro chamado LlmSpeechTranslate.java com o seguinte código:

import com.azure.ai.speech.transcription.TranscriptionClient;
import com.azure.ai.speech.transcription.TranscriptionClientBuilder;
import com.azure.ai.speech.transcription.models.AudioFileDetails;
import com.azure.ai.speech.transcription.models.EnhancedModeOptions;
import com.azure.ai.speech.transcription.models.TranscriptionOptions;
import com.azure.ai.speech.transcription.models.TranscriptionResult;
import com.azure.core.credential.KeyCredential;
import com.azure.core.util.BinaryData;

import java.nio.file.Files;
import java.nio.file.Paths;

public class LlmSpeechTranslate {
    public static void main(String[] args) {
        try {
            // Get credentials from environment variables
            String endpoint = System.getenv("AZURE_SPEECH_ENDPOINT");
            String apiKey = System.getenv("AZURE_SPEECH_API_KEY");

            // Create client
            TranscriptionClient client = new TranscriptionClientBuilder()
                .endpoint(endpoint)
                .credential(new KeyCredential(apiKey))
                .buildClient();

            // Load audio file
            String audioFilePath = "<path-to-your-audio-file.wav>";
            byte[] audioData = Files.readAllBytes(Paths.get(audioFilePath));

            // Create audio file details
            AudioFileDetails audioFileDetails = new AudioFileDetails(BinaryData.fromBytes(audioData));

            // Create enhanced mode options for LLM speech translation
            // Translate to Korean (supported languages: en, zh, de, fr, it, ja, es, pt, ko)
            EnhancedModeOptions enhancedModeOptions = new EnhancedModeOptions()
                .setTask("translate")
                .setTargetLanguage("ko");

            // Create transcription options with enhanced mode
            TranscriptionOptions options = new TranscriptionOptions(audioFileDetails)
                .setEnhancedModeOptions(enhancedModeOptions);

            // Translate the audio
            TranscriptionResult result = client.transcribe(options);

            // Print translation result
            System.out.println("Translation:");
            result.getCombinedPhrases().forEach(phrase ->
                System.out.println(phrase.getText())
            );

        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Substitui <path-to-your-audio-file.wav> pelo caminho para o teu ficheiro de áudio.

Para executar o exemplo de tradução, atualize a configuração da pom.xml classe principal ou execute:

mvn exec:java -Dexec.mainClass="LlmSpeechTranslate"

Usar afinamento de prompts

Pode fornecer um prompt opcional para orientar o estilo de saída para tarefas de transcrição ou tradução.

import java.util.Arrays;

// Create enhanced mode options with prompt-tuning
EnhancedModeOptions enhancedModeOptions = new EnhancedModeOptions()
    .setTask("transcribe")
    .setPrompts(Arrays.asList("Output must be in lexical format."));

// Create transcription options with enhanced mode
TranscriptionOptions options = new TranscriptionOptions(audioFileDetails)
    .setEnhancedModeOptions(enhancedModeOptions);

Boas práticas para prompts

  • Os prompts têm um comprimento máximo de 4.096 caracteres.

  • Os prompts devem ser preferencialmente escritos em inglês.

  • Use Output must be in lexical format. para impor a formatação lexical em vez do formato de exibição padrão.

  • Use Pay attention to *phrase1*, *phrase2*, … para melhorar o reconhecimento de expressões ou siglas específicas.

Recursos de limpeza

Quando terminares o quickstart, elimina a pasta do projeto:

rm -rf llm-speech-quickstart

Gestão de erros de transcrição

Quando ligares à API de transcrição rápida, implementa lógica de retentativas para lidar com erros transitórios e limitação de taxa. A API aplica limites de taxa, o que pode resultar em erro durante operações de alta concorrência.

  • Repetir até cinco vezes em caso de erros transitórios.

  • Usa recuo exponencial: 2 segundos, 4 segundos, 8 segundos, 16 segundos, 32 segundos.

  • Tempo total de recuo: 62 seg.

Esta configuração proporciona tempo suficiente para a API recuperar durante janelas de limitação de taxa, especialmente quando executa operações em lote com múltiplos trabalhadores em simultâneo.

Quando usar a lógica de retentativa

Implemente lógica de tentativa novamente para as seguintes categorias de erro:

  • Erros HTTP - Tentar novamente a:

    • HTTP 429 (limite de requisições)
    • HTTP 500, 502, 503, 504 (erros de servidor)
    • status_code=None (resposta incompleta a descarregar)
  • SDK do Azure erros de rede - Retentar em:

    • ServiceRequestError
    • ServiceResponseError

    Estes erros envolvem exceções de rede de baixo nível, como urllib3.exceptions.ReadTimeoutError, redefinições de conexão e falhas de TLS.

  • Python exceções de rede - Tentar novamente em:

    • ConnectionError
    • TimeoutError
    • OSError

Não tente novamente os seguintes erros, pois indicam problemas do lado do cliente que requerem correção:

  • HTTP 400 (pedido mau)
  • HTTP 401 (não autorizado)
  • HTTP 422 (entidade não processável)
  • Outros erros do cliente (códigos de estado 4xx)

Notas de implementação

  • Reinicie o fluxo de dados de áudio (seek(0)) antes de cada nova tentativa.

  • Quando se usam trabalhadores concorrentes, o tempo de espera padrão de leitura HTTP (300 segundos) pode ser ultrapassado devido a uma limitação de taxa elevada.

  • A API pode aceitar um pedido mas expirar ao gerar a resposta. Esta condição pode aparecer como um erro de rede enrolado em SDK em vez de um erro HTTP padrão.