Дата публикации
ai_products

Как тестировать голосового агента Amazon Nova Sonic без микрофона и ручного проговора

Что нового

Amazon выложила в open source Nova Sonic Test Harness — фреймворк для автоматизированного тестирования голосового агента Amazon Nova Sonic.

Ключевые возможности:

  • Полноценное тестирование голосового агента без микрофона. Разговоры гоняются программно, в текстовом или аудиорежиме.
  • Автоматические многоходовые диалоги. Фреймворк сам разыгрывает сценарии с несколькими репликами, учитывая контекст.
  • LLM-as-judge-оценка качества. Отдельная крупная модель (например, Claude Opus в Amazon Bedrock) разбирает лог диалога по рубрикам и ставит чёткий PASS/FAIL.
  • Поддержка инструментов (tools) в реальном времени. Тесты проверяют, как Nova Sonic вызывает внешние функции — например, проверку доступности слотов записи.
  • Обнаружение аудио‑галлюцинаций. Тесты сравнивают текстовый вывод Nova Sonic и фактически произнесённый аудио‑ответ.
  • Пакетные прогоны и параллельное выполнение. Можно запускать десятки и сотни сценариев одновременно, с агрегацией метрик.
  • Готовые наборы сценариев. В комплекте идут сценарии для здравоохранения (12), банков (8) и поддержки клиентов (5 вариантов поведения пользователей).
  • Несколько режимов входных данных. Текст, синтез через Amazon Polly, скриптованные диалоги и датасеты из JSONL/Hugging Face.

Фреймворк работает поверх AWS:

  • Amazon Bedrock — для Nova Sonic, симулятора пользователя и LLM‑судьи.
  • Amazon Polly — опционально, для генерации пользовательского аудио.
  • Amazon S3 и Amazon Transcribe — опционально, для проверки расхождений между текстом и аудио.

Как это работает

Архитектура Nova Sonic Test Harness строится вокруг четырёх шагов: описание сценария, запуск разговора, оценка качества и формирование отчёта.

1. Описание сценария в JSON

Каждый тест — это JSON‑файл с описанием роли агента, пользователя, инструментов и критериев успеха. Пример для записи к врачу:

{
  "test_name": "healthcare_appointment_booking",
  "sonic_system_prompt": "You are the receptionist at Dr. Smith's office...",
  "sonic_voice_id": "tiffany",
  "sonic_tool_config": {
    "tools": [{"toolSpec": {"name": "checkAvailability", "..."}}]
  },
  "user_model_id": "claude-haiku",
  "user_system_prompt": "You are a patient calling to book an appointment...",
  "max_turns": 8,
  "auto_evaluate": true,
  "evaluation_criteria": {
    "user_goal": "Book an appointment for next Tuesday",
    "evaluation_aspects": [
      "Goal Achievement",
      "Response Accuracy",
      "Tool Usage",
      "Conversation Flow"
    ],
    "rubrics": {
      "Goal Achievement": [
        "Did the agent confirm a specific date and time?",
        "Did the agent collect the patient name?"
      ]
    }
  }
}

Важный момент: в конфигурации задают цель и рубрики, а не ожидаемые фразы. Nova Sonic отвечает по‑разному на один и тот же запрос, поэтому проверка строится на ответах YES/NO по конкретным вопросам.

Список моделей хранится в models.yaml: короткие алиасы (claude-haiku) сопоставляются с полными ID в Amazon Bedrock. Это защищает от поломки конфигов при смене версий моделей.

2. Автоматический прогон разговора

После выбора конфигурации фреймворк сам разворачивает диалог между симулятором пользователя и Nova Sonic.

Каждый ход выглядит так:

  1. Симулятор пользователя генерирует реплику. LLM (например, Claude Haiku в Bedrock) смотрит на историю диалога и решает, что скажет пользователь дальше. Персонаж сохраняется: «нетерпеливый клиент» останется нетерпеливым.
  2. Сообщение отправляется в Nova Sonic. Либо как текст (быстро и удобно для большинства тестов), либо как аудио, сгенерированное через Amazon Polly (для проверки всей цепочки распознавания речи).
  3. Nova Sonic стримит ответ. Текст, аудио и вызовы инструментов приходят асинхронно, фреймворк обрабатывает их потоково.
  4. Фиксация конца хода. Nova Sonic выдаёт текст в два этапа — speculative и final. Ход считается завершённым, когда все speculative‑блоки финализированы. Это надёжнее, чем ждать паузы или ставить таймауты.
  5. Обработка tools. Если Nova Sonic запрашивает, например, checkAvailability, фреймворк вызывает зарегистрированный хендлер и возвращает результат в тот же стрим, не разрывая соединение.
  6. Логирование. Фреймворк сохраняет финальный текст, WAV‑аудио, вызовы инструментов и тайминги.

Цикл повторяется до достижения лимита по ходам или логического завершения сценария.

3. Работа с длинными сессиями

У Nova Sonic есть ограничение: соединение живёт около 8 минут. Для длинных разговоров фреймворк использует SessionContinuationManager:

  • отслеживает возраст соединения;
  • создаёт новое соединение до таймаута (по умолчанию через 6 минут);
  • реплеит историю диалога в новую сессию.

Сценарии не зависят от этой механики — они просто продолжают диалог.

4. Оценка качества через LLM‑судью

После завершения разговора фреймворк отправляет полный транскрипт отдельной модели‑судье (например, Claude Opus в Bedrock). Судья не знает о внутреннем устройстве теста и видит только диалог и критерии. Это снижает риск смещения оценки.

Встроенные метрики делятся на три уровня:

  • Критические:
    • Goal Achievement — достиг ли пользователь своей цели.
    • Response Accuracy — корректность фактов, чисел, утверждений.
  • Важные:
    • Tool Usage — корректность вызова инструментов и параметров.
    • Conversation Flow — естественность хода диалога.
    • System Prompt Compliance — соблюдение роли и инструкций.
  • Советующие:
    • Voice Formatting — насколько ответ звучит естественно вслух.

Логика PASS/FAIL:

  • Оба критических показателя должны пройти, чтобы тест получил общий PASS.
  • Важные метрики формируют процент успешных прогонов.
  • Советующие не влияют на итоговый вердикт, но попадают в отчёт.

Каждая метрика разбита на конкретные вопросы‑рубрики с ответами YES/NO. Метрика проходит только если все вопросы по ней получили YES. В отчёте можно увидеть, какой именно пункт провалился и как судья это объяснил.

Фреймворк поддерживает кастомные рубрики. Например:

  • для медицины: «Проверил ли агент информацию о страховке перед записью?»;
  • для банков: «Подтвердил ли агент сумму перевода перед выполнением?»

5. Форматы результатов

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

  • Интерактивный дашборд (Streamlit). Просмотр батчей, сравнение запусков, фильтрация по провалам, поиск по транскриптам.
  • JSON/CSV и файловая структура. Для каждой сессии сохраняются журналы взаимодействия, оценки и аудио. Сводные отчёты считают процент PASS по всем сессиям.
  • Вывод для CI/CD. Чёткий PASS/FAIL плюс числовой pass rate, который удобно встраивать в пайплайны.

6. Поиск аудио‑галлюцинаций

Nova Sonic генерирует текст и аудио одновременно. Иногда они расходятся: текст говорит «3:00 PM», а голос — «3:30 PM».

Фреймворк ловит такие случаи в три шага:

  1. Загружает аудио каждого хода в Amazon S3.
  2. Прогоняет через Amazon Transcribe, чтобы получить фактически произнесённый текст.
  3. Сравнивает исходный текст и транскрипт через LLM и классифицирует расхождение.

Каждый ход получает один из статусов:

  • CONSISTENT — либо нет отличий, либо только служебные слова вроде «эм», «ну».
  • MINOR_DIFFERENCES — перефразирование без изменения смысла («Я могу помочь» vs «Давайте я помогу»).
  • HALLUCINATION — фактическое расхождение: разные даты, суммы, имена, номера и т.п.

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

7. Тестирование в масштабе

Для уверенности перед релизом одного сценария мало. Нужны десятки вариантов, разные типы пользователей и краевые случаи. Плюс повторные прогоны, чтобы учесть недетерминизм.

За это отвечает batch‑runner:

# Запустить 12 сценариев здравоохранения параллельно
python -m cli.main --scenarios-dir scenarios/healthcare --parallel 4

# Прогнать один сценарий 10 раз, чтобы измерить разброс
python -m cli.main --config configs/order_status.json --repeat 10 --parallel 5

# Запустить датасет на 100 записей
python -m cli.main --dataset datasets/healthcare_eval.jsonl --parallel 8

После прогона дашборд показывает:

  • общий pass rate по всем сценариям;
  • разрез по метрикам;
  • какие метрики часто падают вместе;
  • сравнение разных запусков до и после изменений промпта или конфигурации tools.

Что это значит для вас

Для кого это вообще нужно

Nova Sonic Test Harness полезен, если вы:

  • строите голосовой колл‑центр: запись к врачу, статус заказа, техподдержка;
  • внедряете банковского голосового ассистента: переводы, балансы, споры по операциям;
  • делаете внутренних голосовых помощников: HR‑боты, IT‑поддержка, сервис‑деск;
  • отвечаете за качество и регрессионное тестирование голосовых продуктов.

Если у вас текстовый чат‑бот без голоса, этот фреймворк избыточен — проще использовать текстовые тест‑наборы и обычные HTTP‑тулы.

Чем это реально помогает

  1. Быстрая итерация промптов и конфигураций tools.

    • Меняете system prompt или описание инструмента.
    • Запускаете батч из десятков сценариев.
    • Через несколько минут видите, улучшились ли Goal Achievement и Response Accuracy или наоборот.
  2. Снижение ручного QA.

    • Вместо 150 ручных звонков (50 сценариев × 3 персоны) вы запускаете одну команду.
    • Фреймворк сам прогоняет многоходовые диалоги и собирает отчёты.
  3. Формализация качества.

    • Вместо субъективного «кажется, агент стал лучше» у вас есть рубрики и чёткие PASS/FAIL.
    • Можно строить SLO по доле успешных сценариев.
  4. Контроль регрессий.

    • Перед выкладкой новой версии промпта, инструмента или логики интеграции вы гоняете regression‑пак.
    • Если критические метрики падают, релиз стопорится.
  5. Безопасность для чувствительных доменов.

    • В медицине, банках и страховании ошибка в дате, сумме или диагнозе недопустима.
    • Аудио‑галлюцинации ловятся ещё на этапе теста, а не на звонке клиенту.

Где есть ограничения

  • Зависимость от AWS.

    • Nova Sonic, LLM‑симулятор и LLM‑судья работают через Amazon Bedrock.
    • Для аудио‑проверок нужны Amazon S3, Amazon Transcribe и, опционально, Amazon Polly.
    • Без доступа к AWS фреймворк в исходном виде бесполезен.
  • Доступность в России.

    • Доступ к Amazon Bedrock и ряду AWS‑сервисов из России может требовать VPN и юридическую проработку.
    • Если ваша инфраструктура полностью он‑прем или в другом облаке, придётся либо поднимать мост до AWS, либо адаптировать фреймворк под свои модели.
  • Стоимость.

    • Каждое обращение к Nova Sonic, симулятору пользователя и LLM‑судье в Amazon Bedrock оплачивается.
    • Плюс стоимость Amazon Polly, S3 и Transcribe при включённой проверке аудио.
    • Для массовых батчей нужно закладывать бюджет на тысячи вызовов моделей.
  • Нужна инженерная интеграция.

    • Это не SaaS‑панель «включил и всё работает», а фреймворк.
    • Придётся писать свои сценарии, описывать инструменты и, возможно, дорабатывать пайплайны CI/CD.

Практические сценарии применения

  • Разработка нового голосового агента.

    • Сначала используете текстовый режим для быстрой отладки промптов и логики tools.
    • Потом переключаетесь на режим с Amazon Polly, чтобы увидеть, как агент справляется с живым аудио.
  • Регресс‑тесты перед релизом.

    • Держите набор из десятков ключевых сценариев.
    • Любое изменение промптов, версий моделей или конфигурации запускает батч‑прогон в CI/CD.
  • А/Б‑сравнение промптов.

    • Два набора конфигураций с разными system prompts.
    • Параллельный прогон одного и того же датасета, сравнение pass rate и проваленных рубрик.
  • Аудит аудио‑качества.

    • Включаете S3 + Transcribe и анализ различий между текстом и аудио.
    • Фокусируетесь на сценариях, где цена ошибки максимальна: финансы, медицина, юридические консультации.

Место на рынке

Nova Sonic Test Harness закрывает нишу, где классические текстовые тест‑фреймворки бессильны: потоковый двунаправленный голосовой диалог с инструментами.

Прямых численных сравнений с другими решениями в материале нет. Но можно зафиксировать несколько отличий от типичных подходов к тестированию LLM‑агентов:

  • В отличие от текстовых тест‑раннеров на HTTP‑запросах, фреймворк из коробки работает с постоянным full‑duplex‑соединением Nova Sonic и стриминговыми событиями.
  • В отличие от обычных юнит‑тестов промптов, здесь нет проверки по точной строке. Оценка строится на рубриках и LLM‑судье, что лучше подходит к недетерминизму голосовых моделей.
  • В отличие от ручного QA через звонки, фреймворк масштабируется до сотен сценариев и повторных прогонов одной командой.

Сравнивать скорость или цену Nova Sonic и других голосовых агентов вроде GPT‑4o или аналогов от других вендоров здесь нечестно — в исходном материале нет ни одной конкретной цифры по латентности, стоимости токена или размеру контекста.

С точки зрения экосистемы, Nova Sonic Test Harness — это скорее инструмент для тех, кто уже выбрал Nova Sonic и Amazon Bedrock как платформу. Если вы строите голосовые сценарии вокруг других моделей, придётся либо ждать аналогичные фреймворки от своих провайдеров, либо портировать идею на свои стеки.

Как запустить

Фреймворк распространяется через GitHub‑репозиторий. Подробная инструкция по установке и настройке лежит там, но базовый сценарий запуска выглядит так:

  1. Настроить доступ к AWS и Amazon Bedrock.
  2. Указать модели в models.yaml (Nova Sonic, модель‑симулятор пользователя, модель‑судья).
  3. Описать сценарии в JSON или собрать датасет в JSONL.
  4. Запустить CLI‑команды.

Примеры запуска батчей из исходника:

# Запустить 12 сценариев здравоохранения параллельно
python -m cli.main --scenarios-dir scenarios/healthcare --parallel 4

# Прогнать один сценарий 10 раз, чтобы измерить разброс
python -m cli.main --config configs/order_status.json --repeat 10 --parallel 5

# Запустить датасет на 100 записей
python -m cli.main --dataset datasets/healthcare_eval.jsonl --parallel 8

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

Используемые AWS‑сервисы и зачистка ресурсов

Фреймворк опирается на несколько сервисов AWS:

  • Amazon Bedrock — Nova Sonic, LLM‑симулятор пользователя и LLM‑судья. Обязателен.
  • Amazon Polly — превращает текст пользователя в речь для аудио‑тестов. Опционален.
  • Amazon S3 — временное хранилище аудио для анализа галлюцинаций. Опционален.
  • Amazon Transcribe — переводит аудио в текст для сравнения с текстовым выводом Nova Sonic. Опционален.

Оплата идёт по факту вызовов моделей и сервисов. Отдельных «простоящих» ресурсов фреймворк не держит.

После экспериментов:

  • удалить S3‑бакеты, созданные для аудио (содержимое чистится автоматически, но сами бакеты остаются);
  • при необходимости удалить задания Amazon Transcribe через консоль.

Если вы не используете Polly, S3 и Transcribe, достаточно просто перестать вызывать Bedrock‑модели — дополнительных ресурсов не останется.


Читайте также