LLM для транскрипции и перевода речи

LlM Speech — это API в Microsoft Foundry. Большая языковая модель (LLM) улучшает модель речи, обеспечивая улучшенное качество, глубокое контекстное понимание, многоязычную поддержку и возможности настройки запросов. Он использует ускорение GPU для ультра-быстрого вывода, что делает его идеальным для широкого спектра сценариев. Например, используйте llM Speech для создания подписей и субтитров из аудиофайлов, суммирования заметок собрания, помощи агентам центра вызовов и транскрибирования голосовых сообщений.

Доступность компонентов

В этой таблице показаны функции транскрибирования, поддерживаемые API быстрой транскрибирования, с речью LLM и без нее:

Функция Быстрое транскрибирование (по умолчанию) Речь LLM (расширенная) MAI-transcribe
Транскрипция ✅ (модели транскрибирования речи) ✅ (многомодальная модель) ✅ (многомодальная модель)
Перевод ✅ (многомодальная модель)
Диаризация
Канал (стерео)
Фильтрация ненормативной лексики
Указать региональные настройки
Пользовательский запрос
Список фраз
Временные метки на уровне сегментов
Метки времени на уровне Word

Поддерживаемые языки

Для задач транскрибирования и перевода поддерживаются следующие языки ввода: Arabic, ChineseCzechDanishDutchEnglishFinnishFrenchGermanGreekHebrewHindiHungarianIndonesianItalianJapaneseKoreanNorwegian BokmålPolishPortugueseRussianSpanishSwedishThaiTurkish

Сервис по умолчанию работает в многоязычном режиме, поэтому вам не нужно указывать локаль языка ввода. При необходимости, чтобы ориентировать распознавание на определенный языковой стандарт, можно задать параметр locales с помощью поддерживаемого кода языкового стандарта (например, en-us). Дополнительные сведения о поддерживаемых языковых параметрах см. в разделе Поддерживаемые языки.

Вы можете попробовать распознавание речи LLM в Microsoft Foundry без написания кода.

Необходимые условия

Попробуйте распознавание речи LLM

  1. Перейдите на страницу функции "Речь в текст " и нажмите кнопку "Открыть на детской площадке".

  2. В верхнем раскрывающемся списке выберите LLM-говорение.

  3. При необходимости используйте раздел "Параметры " для изменения языка, политики ненормативной лексики и других параметров. Вы также можете добавить специальные инструкции для LLM.

  4. Используйте раздел "Отправить файлы ", чтобы выбрать звуковой файл. Затем нажмите кнопку "Пуск".

  5. Просмотрите выходные данные транскрибирования на вкладке "Расшифровка ". При необходимости просмотрите выходные данные необработанного ответа API на вкладке JSON .

  6. Перейдите на вкладку "Код" , чтобы получить пример кода для использования речи LLM в приложении.

Необходимые условия

  • Ресурс Azure speech in Foundry Tools в одном из регионов, где доступен API распознавания речи LLM. Для актуального списка поддерживаемых регионов см. в разделе "Регионы службы речевых технологий".

  • Размер звукового файла меньше пяти часов и меньше 500 МБ. Звуковой файл должен находиться в одном из форматов и кодеков, поддерживаемых API пакетной транскрибирования: WAV, MP3, OPUS/OGG, FLAC, WMA, AAC, ALAW в контейнере WAV, MULAW в контейнере WAV, AMR, WebM или SPEEX. Дополнительные сведения о поддерживаемых аудиоформатах см. в поддерживаемых аудиоформатах.

Использование API распознавания речи LLM

В следующих нескольких разделах содержатся сведения об использовании этого API.

Отправка звука

Звуковые данные можно предоставлять следующим образом:

  • Передайте встроенные звуковые данные.

      --form 'audio=@"YourAudioFile"'
    
  • Загрузите аудиофайл из общедоступного audioUrl.

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

Совет

Для длинных звуковых файлов рекомендуется отправлять из общедоступного URL-адреса.

В этой статье мы используем загрузку аудио непосредственно в интерфейсе в качестве примера.

Вызов API распознавания речи LLM

В запросе POST к конечной точке transcriptions используйте тип содержимого с несколькими частями и формами данных с звуковым файлом и свойствами текста запроса.

В следующем примере показано, как транскрибировать аудиофайл с указанной локалью. Если вы знаете локаль аудиофайла, вы можете указать её, чтобы повысить точность транскрипции и свести к минимуму задержку.

  • Замените YourSpeechResoureKey ключом ресурса "Речь".
  • замените YourResourceName на имя ресурса службы "Речь".
  • Замените YourAudioFile путь к звуковому файлу.

Важно

Для рекомендуемой проверки подлинности без ключа с помощью Microsoft Entra ID замените --header 'Ocp-Apim-Subscription-Key: YourSpeechResoureKey' на --header "Authorization: Bearer YourAccessToken". Дополнительные сведения о проверке подлинности без ключа см. в руководстве по управлению доступом на основе ролей .

Использование функции распознавания речи LLM для транскрибирования звукового файла

Вы можете транскрибировать звук на языке ввода, не указывая языковой код. Модель автоматически обнаруживает и выбирает соответствующий язык на основе звукового содержимого.

curl --location 'https://YourResourceName.cognitiveservices.azure.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"
  }
}'

Используйте LLM Speech для перевода аудиофайла

Вы можете перевести звук на указанный целевой язык. Чтобы включить перевод, необходимо указать целевой языковой код в запросе.

curl --location 'https://YourResourceName.cognitiveservices.azure.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"
  }
}'

Поддержка следующих целевых языков осуществляется в targetLanguage через указание соответствующего языкового кода:

Языковой код Язык
de Немецкий
en Английский
es Испанский
fr Французский
it Итальянский
ko Корейский
ja Японский
pt Португальский
zh Китайский

Использование подстройки подсказок для изменения производительности

Вы можете указать необязательный текст для указания стиля вывода для transcribe задачи или translate задачи.

curl --location 'https://YourResourceName.cognitiveservices.azure.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."]
  }
}'

Вот некоторые лучшие практики для работы с подсказками:

  • Запросы имеют максимальную длину 20 000 символов.

  • Запросы должны быть написаны на английском языке.

  • Запросы могут направлять форматирование выходных данных. По умолчанию ответы используют формат отображения, оптимизированный для удобства чтения. Чтобы применить лексическое форматирование, включите: Output must be in lexical format.

  • Запросы, которые не связаны с задачами речи (например, Tell me a story.обычно игнорируются).

Дополнительные параметры конфигурации

Вы можете использовать дополнительные параметры конфигурации вместе с быстрой транскрибацией, чтобы использовать расширенные функции, такие как diarization, phraseList, locales, profanityFilterMode и channels.

curl --location 'https://YourResourceName.cognitiveservices.azure.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
  },
  "phraseList":{
    "phrases":["Kenichi Kumatani","John McDonough"]
  },
  "locales":[],
  "profanityFilterMode": "Masked"
}'

Пример ответа

В ответе JSON свойство combinedPhrases содержит полностью транскрибированный или переведенный текст, а свойство phrases содержит информацию о сегментном и словном уровне.

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

Формат отклика согласуется с другими существующими выходными данными речи в текст, такими как быстрое транскрибирование и пакетное транскрибирование. Помните о следующих различиях:

  • Word уровня durationMilliseconds и offsetMilliseconds не поддерживаются для задачи translate.

  • Диаризация для задачи translate не поддерживается. Только метка speaker1 возвращается.

  • confidence недоступен и всегда 0.

Справочная документация | Пакет (PyPi) | Примеры на GitHub

Необходимые условия

предварительные требования Microsoft Entra ID

Для рекомендуемой проверки подлинности без ключа с помощью Microsoft Entra ID необходимо:

  • Установите Azure CLI, используемый для бесключевой аутентификации с Microsoft Entra ID.

  • Назначьте роль пользователя службы Cognitive Services вашей учетной записи. Роли можно назначить на портале Azure в разделе Access control (IAM)>Add role assignment.

Настройка среды

  1. Создайте новую папку с именем llm-speech-quickstart и перейдите в папку с помощью следующей команды:

    mkdir llm-speech-quickstart && cd llm-speech-quickstart
    
  2. Чтобы установить пакеты, необходимые для этой статьи, создайте и активируйте виртуальную среду Python. Мы рекомендуем всегда использовать виртуальную или конда-среду при установке пакетов Python. В противном случае можно разорвать глобальную установку Python. Если вы уже установили Python 3.9 или более поздней версии, создайте виртуальную среду с помощью следующих команд:

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

    При активации среды Python выполнение python или pip из командной строки использует интерпретатор Python в папке .venv приложения. Используйте команду deactivate для выхода из виртуальной среды Python. При необходимости его можно повторно активировать.

  3. Создайте файл с именемrequirements.txt. Добавьте в файл следующие пакеты:

    azure-ai-transcription
    azure-identity
    
  4. Установите пакеты:

    pip install -r requirements.txt
    

Установка переменных среды

Для проверки подлинности необходимо получить конечную точку ресурса и ключ API.

  1. Войдите на портал Foundry (классический).

  2. Выберите центр управления в меню слева.

  3. Выберите Соединяемые ресурсы и найдите ресурс Microsoft Foundry (или добавьте подключение, если он отсутствует). Затем скопируйте значения ключа API и целевой (конечной точки). Используйте эти значения для задания переменных среды.

  4. Задайте следующие переменные среды:

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

Примечание

Для проверки подлинности Microsoft Entra ID (рекомендуется для использования в рабочей среде), установите azure-identity. Настройте аутентификацию, как описано в разделе предварительных требований Microsoft Entra ID.

Транскрибируйте аудио с помощью LLM Speech

Функция "LLM Речь" использует EnhancedModeProperties класс для осуществления транскрибирования, которое улучшено с использованием одной большой языковой модели. Модель автоматически обнаруживает язык в звуке.

  1. Создайте файл с именем llm_speech_transcribe.py со следующим кодом:

    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}")
    

    Дополнительные сведения см. в следующих ссылках: TranscriptionClient, TranscriptionContent, TranscriptionOptions и EnhancedModeProperties.

  2. Замените <path-to-your-audio-file.wav> путь к звуковому файлу. Служба поддерживает WAV, MP3, FLAC, OGG и другие распространенные звуковые форматы.

  3. Запустите скрипт Python.

    python llm_speech_transcribe.py
    

Выходные данные транскрибирования

Скрипт выводит результат транскрибирования в консоль:

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.

Перевод аудио с помощью LLM Speech

Вы также можете использовать распознавание речи LLM для перевода звука на целевой язык. Установите task на translate, и укажите target_language.

  1. Используйте приведенный выше код, но укажите task как translate и добавьте его target_language в 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)
    

    Дополнительные сведения см. в следующих ссылках: TranscriptionClient и EnhancedModeProperties.

  2. Замените <path-to-your-audio-file.wav> путь к звуковому файлу.

  3. Запустите скрипт Python.

    python llm_speech_translate.py
    

Используйте prompt-тюнинг

Вы можете указать необязательный запрос, чтобы указать стиль вывода для задач транскрибирования или перевода. Замените значение prompt в объекте 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.")
    )


Рекомендации по лучшим практикам для подсказок

  • Запросы имеют максимальную длину 4096 символов.

  • Запросы должны быть написаны на английском языке.

  • Используется Output must be in lexical format. для применения лексического форматирования вместо формата отображения по умолчанию.

  • Используйте Pay attention to *phrase1*, *phrase2*, … для улучшения распознавания определенных фраз или акронимов.

Дополнительные сведения см. в следующей ссылке: EnhancedModeProperties.

Выход

Скрипт выводит результат транскрибирования в консоль:

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.

Справочная документация | Пакет (NuGet) | Примеры GitHub

Необходимые условия

предварительные требования Microsoft Entra ID

Для рекомендуемой проверки подлинности без ключа с помощью Microsoft Entra ID необходимо:

  • Установите Azure CLI, используемый для бесключевой аутентификации с Microsoft Entra ID.

  • Войдите с помощью Azure CLI, выполнив az login.

  • Назначьте роль пользователя службы Cognitive Services вашей учетной записи. Роли можно назначить на портале Azure в разделе Access control (IAM)>Add role assignment.

Настройка проекта

  1. Создайте консольное приложение с помощью интерфейса командной строки .NET:

    dotnet new console -n llm-speech-quickstart
    cd llm-speech-quickstart
    
  2. Установите необходимые пакеты:

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

Получение сведений о ресурсе

Для аутентификации необходимо получить конечную точку вашего ресурса.

  1. Войдите на портал Foundry.

  2. Выберите центр управления в меню слева. В разделе Подключенные ресурсы выберите ресурс "Речь" или "Мультисервис".

  3. Выберите ключи и конечную точку.

  4. Скопируйте значение конечной точки и задайте его в качестве переменной среды:

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

Транскрибирование звука с помощью речи LLM

Функция "LLM Речь" использует EnhancedModeProperties класс для осуществления транскрибирования, которое улучшено с использованием одной большой языковой модели. При создании экземпляра EnhancedModeProperties расширенный режим включается автоматически. Модель автоматически обнаруживает язык в звуке.

Замените содержимое Program.cs следующим кодом:

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
Console.WriteLine("\nDetailed phrases:");
foreach (var phrase in response.Value.Phrases)
{
    Console.WriteLine($"  [{phrase.Offset}] ({phrase.Locale}): {phrase.Text}");
}

Замените <path-to-your-audio-file.wav> путь к звуковому файлу. Служба поддерживает WAV, MP3, FLAC, OGG и другие распространенные звуковые форматы.

Запустите приложение:

dotnet run

Дополнительные сведения см. в следующих ссылках: TranscriptionClient и EnhancedModeProperties.

Перевод аудио с помощью LLM Speech

Вы также можете использовать распознавание речи LLM для перевода звука на целевой язык. Задайте для Tasktranslateпараметра значение , а затем укажите 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}");
}

Замените <path-to-your-audio-file.wav> путь к звуковому файлу.

Дополнительные сведения см. в следующей ссылке: EnhancedModeProperties

Используйте prompt-тюнинг

Вы можете указать необязательный запрос, чтобы указать стиль вывода для задач транскрибирования или перевода:

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}");
}

Рекомендации по лучшим практикам для подсказок

  • Запросы имеют максимальную длину 4096 символов.

  • Запросы должны быть написаны на английском языке.

  • Используется Output must be in lexical format. для применения лексического форматирования вместо формата отображения по умолчанию.

  • Используйте Pay attention to *phrase1*, *phrase2*, … для улучшения распознавания определенных фраз или акронимов.

Дополнительные сведения см. в следующей ссылке: EnhancedModeProperties

Очистка ресурсов

После завершения быстрого старта удалите папку проекта.

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

Справочная документация | Пакет (npm) | Примеры на GitHub

Необходимые условия

предварительные требования Microsoft Entra ID

Для рекомендуемой проверки подлинности без ключа с помощью Microsoft Entra ID необходимо:

  1. Установите Azure CLI, используемый для бесключевой аутентификации с Microsoft Entra ID.

  2. Войдите с помощью Azure CLI, выполнив az login.

  3. Назначьте роль пользователя службы Cognitive Services вашей учетной записи. Роли можно назначить на портале Azure в разделе Access control (IAM)>Add role assignment.

Настройка проекта

  1. Создайте новую папку с именем llm-speech-quickstart, а затем перейдите в папку:

    mkdir llm-speech-quickstart && cd llm-speech-quickstart
    
  2. Инициализировать проект Node.js и установить необходимые пакеты:

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

Получение сведений о ресурсе

Для аутентификации необходимо получить конечную точку вашего ресурса.

  1. Войдите на портал Foundry.

  2. Выберите центр управления в меню слева. В разделе Подключенные ресурсы выберите ресурс "Речь" или "Мультисервис".

  3. Выберите ключи и конечную точку.

  4. Скопируйте значение конечной точки и задайте его в качестве переменной среды:

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

Транскрибируйте аудио с помощью LLM Speech

Функция "Речь LLM" использует enhancedMode для активации транскрибирования, которое улучшается крупной языковой моделью. Модель автоматически обнаруживает язык в звуке.

Создайте файл с именем index.js со следующим кодом:

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);
});

Замените <path-to-your-audio-file.wav> путь к звуковому файлу. Служба поддерживает WAV, MP3, FLAC, OGG и другие распространенные звуковые форматы.

Запустите приложение:

node index.js

Совет

Если вы получите результат Enhanced mode is currently not supported yet, убедитесь, что конечная точка находится в регионе, поддерживающем технологии распознавания и синтеза речи с помощью LLM.

Дополнительные сведения см. в следующей ссылке: TranscriptionClient

Выходные данные транскрибирования

Приложение выводит результат транскрибирования в консоль:

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.

Перевод аудио с помощью LLM Speech

Вы также можете использовать распознавание речи LLM для перевода звука на целевой язык. Установите task на translate, а затем укажите 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);
});

Замените <path-to-your-audio-file.wav> путь к звуковому файлу.

Дополнительные сведения см. в следующей ссылке: TranscriptionClient

Используйте prompt-тюнинг

Вы можете указать необязательный запрос, чтобы указать стиль вывода для задач транскрибирования или перевода:

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

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

Рекомендации по лучшим практикам для подсказок

  • Запросы имеют максимальную длину 4096 символов.

  • Запросы должны быть написаны на английском языке.

  • Используется Output must be in lexical format. для применения лексического форматирования вместо формата отображения по умолчанию.

  • Используйте Pay attention to *phrase1*, *phrase2*, … для улучшения распознавания определенных фраз или акронимов.

Выход

Приложение выводит результат транскрибирования в консоль:

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

Дополнительные сведения см. в следующей ссылке: TranscriptionClient

Справочная документация | Пакет (Maven) | Примеры GitHub

Необходимые условия

Настройка среды

  1. Создайте новую папку с именем llm-speech-quickstart, а затем перейдите к ней:

    mkdir llm-speech-quickstart && cd llm-speech-quickstart
    
  2. pom.xml Создайте файл в корневом каталоге проекта со следующим содержимым:

    <?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</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>
    

    Примечание

    Конфигурация <sourceDirectory>.</sourceDirectory> указывает Maven искать Java исходные файлы в текущем каталоге вместо структуры src/main/java по умолчанию. Это изменение конфигурации позволяет упростить структуру проекта.

  3. Установите зависимости:

    mvn clean install
    

Установка переменных среды

Приложение должно пройти проверку подлинности, чтобы получить доступ к Azure Speech. Пакет SDK поддерживает как аутентификацию по ключу API, так и по идентификатору Microsoft Entra. Он автоматически определяет метод, используемый на основе заданных переменных среды.

Сначала задайте конечную точку для ресурса "Речь". Замените <your-speech-endpoint> фактическим именем ресурса.

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

Затем выберите один из следующих методов проверки подлинности.

Задайте переменную среды ключа API:

setx AZURE_SPEECH_API_KEY <your-speech-key>

Вместо параметра AZURE_SPEECH_API_KEYнастройте один из следующих источников учетных данных:

  • Azure CLI: запустите az login на компьютере разработки.

  • Managed identity: для приложений, работающих в Azure (Служба приложений Azure, Функции Azure, виртуальных машинах).

  • Переменные среды: установите AZURE_TENANT_ID, AZURE_CLIENT_ID, и AZURE_CLIENT_SECRET.

  • Visual Studio Code или IntelliJ: войдите через интегрированную среду разработки.

Вам также необходимо назначить роль пользователя Cognitive Services вашему идентификатору.

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>

Примечание

После установки переменных среды в Windows перезапустите все запущенные программы, которые должны читать их, включая окно консоли. В Linux или macOS запустите source ~/.bashrc (или эквивалентный файл конфигурации оболочки), чтобы внести изменения в силу.

Транскрибируйте аудио с помощью LLM Speech

Функция "LLM Речь" использует EnhancedModeOptions класс для осуществления транскрибирования, которое улучшено с использованием одной большой языковой модели. При создании экземпляра EnhancedModeOptions расширенный режим включается автоматически. Модель автоматически обнаруживает язык в звуке.

Создайте файл с именем LlmSpeechQuickstart.java в каталоге проекта с помощью следующего кода:

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();
        }
    }
}

Замените <path-to-your-audio-file.wav> путь к звуковому файлу. Служба поддерживает WAV, MP3, FLAC, OGG и другие распространенные звуковые форматы.

Запуск приложения

Запустите приложение с помощью Maven:

mvn compile exec:java

Перевод звука с помощью функции "Речь LLM"

Вы также можете использовать распознавание речи LLM для перевода звука на целевой язык. Измените EnhancedModeOptions конфигурацию, чтобы задать для задачи translateзначение, а затем укажите целевой язык.

Создайте файл с именем LlmSpeechTranslate.java со следующим кодом:

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();
        }
    }
}

Замените <path-to-your-audio-file.wav> путь к звуковому файлу.

Чтобы запустить пример перевода, обновите конфигурацию основного класса или выполните следующую pom.xml команду:

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

Используйте prompt-тюнинг

Вы можете указать необязательный запрос, чтобы указать стиль вывода для задач транскрибирования или перевода.

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);

Рекомендации по лучшим практикам для подсказок

  • Запросы имеют максимальную длину 4096 символов.

  • Запросы должны быть написаны на английском языке.

  • Используется Output must be in lexical format. для применения лексического форматирования вместо формата отображения по умолчанию.

  • Используйте Pay attention to *phrase1*, *phrase2*, … для улучшения распознавания определенных фраз или акронимов.

Очистка ресурсов

После завершения быстрого старта удалите папку проекта.

rm -rf llm-speech-quickstart

Обработка ошибок транскрибирования

При вызове API быстрого транскрибирования реализуйте логику повторных попыток для обработки временных ошибок и ограничения скорости. API применяет ограничения скорости, что может привести к ошибке во время операций с высоким параллелизмом.

  • Повторите попытку до пяти раз при временных ошибках.

  • Используйте экспоненциальный отступ: 2 секунды, 4 с, 8 с, 16 с, 32 с.

  • Общее время отката: 62 с.

Эта конфигурация обеспечивает достаточно времени для восстановления API во время окна ограничения скорости, особенно при выполнении пакетных операций с несколькими параллельными рабочими.

Когда следует использовать логику повторных попыток

Реализуйте логику повторных попыток для следующих категорий ошибок:

  • Ошибки HTTP — повторите попытку в:

    • HTTP 429 (ограничение скорости)
    • HTTP 500, 502, 503, 504 (ошибки сервера)
    • status_code=None (неполные загрузки ответов)
  • Azure SDK сетевые ошибки — повторите попытку:

    • ServiceRequestError
    • ServiceResponseError

    Эти ошибки обрабатывают исключения сети низкого уровня, такие как urllib3.exceptions.ReadTimeoutError, сбросы подключений и сбои TLS.

  • Python сетевые исключения — повторите попытку:

    • ConnectionError
    • TimeoutError
    • OSError

Не повторяйте следующие ошибки, так как они указывают на проблемы на стороне клиента, требующие исправления:

  • HTTP 400 (недопустимый запрос)
  • HTTP 401 (несанкционированный)
  • HTTP 422 (необрабатываемая сущность)
  • Другие ошибки клиента (коды состояния 4xx)

Заметки о реализации

  • Сбросить поток аудиофайла (seek(0)) перед каждой попыткой повтора.

  • При использовании параллельных рабочих ролей время ожидания чтения HTTP по умолчанию (300 секунд) может быть превышено при ограничении высокой скорости.

  • API может принять запрос, но может истечь время ожидания при создании ответа. Это условие может отображаться как ошибка, упаковаемая в пакет SDK, а не стандартная ошибка HTTP.