Улучшение времени ожидания вызова инструмента и времени задержки (предварительная версия)

Замечание

Эта функция сейчас доступна в общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендуется для использования в рабочей среде. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в разделе Supplemental Terms of Use for Microsoft Azure Previews.

Когда агент голосовой связи вызывает внешние средства или занимает некоторое время для создания ответа, пользователи испытывают молчание. Промежуточные ответы перекрывают эти периоды ожидания короткими устными сообщениями, поддерживая беседу в естественном русле, пока работа происходит в фоновом режиме.

Voice Live предоставляет конфигурацию сеанса interim_response для автоматического создания этих соединительных сообщений. Эта функция поддерживает режим агента (служба агента Foundry) и режим модели.

Замечание

В режиме модели промежуточные ответы поддерживаются только текстовыми LLM в каскадном режиме вместе с azure-speech выходными данными голоса. Звуковые модели в режиме реального времени не поддерживают промежуточные ответы.

Voice Live предлагает два промежуточных режима отклика:

  • Промежуточный ответ с поддержкой LLM(llm_interim_response): использует упрощенный LLM для динамического создания текста с поддержкой контекста. Лучше всего подходит для адаптивных, естественно звучащих ответов.
  • Статический промежуточный ответ (static_interim_response): случайным образом выбирается из предопределенного списка предоставленных текстов. Лучше всего подходит для детерминированного или фирменного обмена сообщениями.

Оба режима могут активироваться следующими способами:

Триггер Description
latency Возникает, когда задержка отклика превышает настраиваемое пороговое значение (по умолчанию: 2000 мс).
tool Срабатывает при выполнении вызова инструмента.

Триггеры используют логику OR — любой соответствующий триггер активирует промежуточный ответ.

Предпосылки

Перед началом работы выполните следующие действия:

Это важно

Для промежуточных ответов требуется azure-ai-voicelive >= 1.0.0b5 и версия API 2026-01-01-preview. Установите пакет SDK предварительной версии с помощью:

pip install azure-ai-voicelive --pre

Этот пакет SDK в настоящее время находится в предварительной версии. Функции и API могут изменяться до общедоступной доступности.

Это важно

Для промежуточных ответов требуется Azure.AI.VoiceLive >= 1.1.0-beta.3 и версия API 2026-01-01-preview. Установите пакет SDK предварительной версии с помощью:

dotnet add package Azure.AI.VoiceLive --prerelease

Этот пакет SDK в настоящее время находится в предварительной версии. Функции и API могут изменяться до общедоступной доступности.

Это важно

Для промежуточных ответов требуется azure-ai-voicelive >= 1.0.0-beta.5 и версия API 2026-01-01-preview. Добавьте зависимость с помощью:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-voicelive</artifactId>
    <version>1.0.0-beta.5</version>
</dependency>

Этот пакет SDK в настоящее время находится в предварительной версии. Функции и API могут изменяться до общедоступной доступности.

Это важно

Для промежуточных ответов требуется @azure/ai-voicelive >= 1.0.0-beta.3 и версия API 2026-01-01-preview. Установите пакет SDK предварительной версии с помощью:

npm install @azure/ai-voicelive@1.0.0-beta.3

Этот пакет SDK в настоящее время находится в предварительной версии. Функции и API могут изменяться до общедоступной доступности.

Настройка промежуточных ответов, созданных с помощью LLM

Промежуточные ответы, созданные LLM, используют легковесную упрощенную модель (по умолчанию: gpt-4.1-mini) для создания контекстно-зависимого текста. Вы можете настроить инструкции и лимиты токенов.

Параметры конфигурации

Параметр Тип Description
type струна Это должно быть llm_interim_response (или эквивалентное перечисление SDK).
triggers массив Список триггеров: latency, toolили оба. По умолчанию: ["latency"].
latency_threshold_ms целое число Миллисекунда до срабатывания триггера задержки. Значение по умолчанию: 2000. Минимум: 0.
model струна Модель для создания промежуточного текста. По умолчанию: gpt-4.1-mini.
instructions струна Настраиваемый запрос на промежуточный ответ LLM.
max_completion_tokens целое число Максимальные токены для созданного ответа. Значение по умолчанию: 50. Минимум: 1.

Конфигурация пакета SDK

from azure.ai.voicelive.models import (
    LlmInterimResponseConfig,
    InterimResponseTrigger,
    RequestSession,
)

interim_response_config = LlmInterimResponseConfig(
    triggers=[InterimResponseTrigger.TOOL, InterimResponseTrigger.LATENCY],
    latency_threshold_ms=200,
    instructions="Create friendly interim responses indicating wait time "
                 "due to ongoing processing, if any. Do not include in "
                 "all responses!"
)

session_config = RequestSession(
    interim_response=interim_response_config,
    # ... other session options
)

await connection.session.update(session=session_config)

Конфигурация пакета SDK

var interimConfig = new LlmInterimResponseConfig
{
    Instructions = "Create friendly interim responses indicating "
        + "wait time due to ongoing processing, if any. "
        + "Do not include in all responses!",
};
interimConfig.Triggers.Add(InterimResponseTrigger.Tool);
interimConfig.Triggers.Add(InterimResponseTrigger.Latency);
interimConfig.LatencyThresholdMs = 200;

var options = new VoiceLiveSessionOptions
{
    InterimResponse = BinaryData.FromObjectAsJson(interimConfig),
    // ... other session options
};

await session.ConfigureSessionAsync(options, cancellationToken);

Конфигурация пакета SDK

LlmInterimResponseConfig interimResponseConfig = new LlmInterimResponseConfig()
        .setTriggers(Arrays.asList(
                InterimResponseTrigger.TOOL,
                InterimResponseTrigger.LATENCY))
        .setLatencyThresholdMs(200)
        .setInstructions("Create friendly interim responses indicating "
                + "wait time due to ongoing processing, if any. "
                + "Do not include in all responses!");

VoiceLiveSessionOptions sessionOptions = new VoiceLiveSessionOptions()
        .setInterimResponse(BinaryData.fromObject(interimResponseConfig));
        // ... other session options

session.sendEvent(new ClientEventSessionUpdate(sessionOptions)).block();

Конфигурация пакета SDK

await session.updateSession({
    interimResponse: {
        type: "llm_interim_response",
        triggers: ["tool", "latency"],
        latencyThresholdInMs: 200,
        instructions:
            "Create friendly interim responses indicating wait time " +
            "due to ongoing processing, if any. " +
            "Do not include in all responses!",
    },
    // ... other session options
});

Настройка статических промежуточных ответов

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

Параметры конфигурации

Параметр Тип Description
type струна Это должно быть static_interim_response (или эквивалентное перечисление SDK).
triggers массив Список триггеров: latency, toolили оба. По умолчанию: ["latency"].
latency_threshold_ms целое число Миллисекунда до срабатывания триггера задержки. Значение по умолчанию: 2000. Минимум: 0.
texts массив Список вариантов промежуточного текста для случайного выбора.

Необработанная конфигурация JSON

Статические промежуточные ответы можно отправлять в виде необработанной session.update команды:

import json

static_config = {
    "type": "session.update",
    "session": {
        "interim_response": {
            "type": "static_interim_response",
            "triggers": ["tool", "latency"],
            "latency_threshold_ms": 1500,
            "texts": [
                "Let me look that up for you.",
                "One moment while I check on that.",
                "Just a second, I'm working on it."
            ]
        }
    }
}
await connection.send(json.dumps(static_config))

Конфигурация пакета SDK

var staticConfig = new StaticInterimResponseConfig();
staticConfig.Texts.Add("Let me look that up for you.");
staticConfig.Texts.Add("One moment while I check on that.");
staticConfig.Texts.Add("Just a second, I'm working on it.");
staticConfig.Triggers.Add(InterimResponseTrigger.Tool);
staticConfig.Triggers.Add(InterimResponseTrigger.Latency);
staticConfig.LatencyThresholdMs = 1500;

var options = new VoiceLiveSessionOptions
{
    InterimResponse = BinaryData.FromObjectAsJson(staticConfig),
    // ... other session options
};

await session.ConfigureSessionAsync(options, cancellationToken);

Необработанная конфигурация JSON

String staticConfig = """
    {
        "type": "session.update",
        "session": {
            "interim_response": {
                "type": "static_interim_response",
                "triggers": ["tool", "latency"],
                "latency_threshold_ms": 1500,
                "texts": [
                    "Let me look that up for you.",
                    "One moment while I check on that.",
                    "Just a second, I'm working on it."
                ]
            }
        }
    }
    """;
session.sendEvent(BinaryData.fromString(staticConfig)).block();

Необработанная конфигурация JSON

await session.updateSession({
    interimResponse: {
        type: "static_interim_response",
        triggers: ["tool", "latency"],
        latencyThresholdInMs: 1500,
        texts: [
            "Let me look that up for you.",
            "One moment while I check on that.",
            "Just a second, I'm working on it.",
        ],
    },
});

Выберите правильный подход

Требование Сгенерированный LLM Статический
Адаптивные ответы с учетом контекста
Детерминированный, прогнозируемый текст
Язык, контролируемый брендом В зависимости от инструкций
Разнообразие бесед Ограничено предварительно настроенными текстами
Без дополнительных затрат на вывод модели
Минимальная конфигурация Требуется текстовый список

Дальнейшие шаги