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

Omnichannel-голосовой заказ на AWS: как собрать систему на Bedrock AgentCore и Nova 2 Sonic

Что нового

AWS показала готовый референс-проект: как собрать омниканальную систему голосового заказа (веб, мобильный браузер, голосовой интерфейс) на Amazon Bedrock AgentCore и Amazon Nova 2 Sonic.

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

  • Полный стек под голосовой заказ:
    • фронтенд на AWS Amplify;
    • голосовой агент на Amazon Bedrock AgentCore Runtime;
    • подключение к backend через AgentCore Gateway по протоколу Model Context Protocol (MCP);
    • серверлесс-бэкэнд на API Gateway, Lambda, DynamoDB и Amazon Location Service;
    • аутентификация и авторизация через Amazon Cognito.
  • Real-time голос через Amazon Nova 2 Sonic в Amazon Bedrock:
    • двунаправленный стриминг аудио (16 kHz PCM) по WebSocket;
    • распознавание речи с разными акцентами и устойчивостью к шуму;
    • генерация голосового ответа в реальном времени;
    • поддержка прерываний и естественного диалога в несколько шагов.
  • AgentCore как оркестратор:
    • каждый пользовательский сеанс запускается в изолированном microVM;
    • автоматическое масштабирование под нагрузку;
    • WebSocket-подключение напрямую из браузера без промежуточного сервера;
    • встроенный мониторинг.
  • Интеграция с backend через MCP:
    • AgentCore Gateway «оборачивает» REST API бэкенда в MCP-инструменты;
    • агент вызывает инструменты по имени, а Gateway переводит это в REST-запросы на API Gateway;
    • добавление новых функциональных Lambda-функций не требует переписывать код агента — достаточно описать новый инструмент.
  • Готовый пример для ресторанов:
    • таблицы DynamoDB для клиентов, заказов, меню, корзин и локаций;
    • Location Service для поиска ближайших точек и маршрутов с учётом объезда (по умолчанию 10 минут);
    • демонстрационный веб-интерфейс с голосовым заказом и рекомендациями по маршруту.

Цифр по скорости в миллисекундах или стоимости запросов AWS не приводит, но вся архитектура построена на pay-per-use сервисах (Bedrock, Lambda, DynamoDB on-demand), которые автоматически масштабируются под нагрузку.

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

Общая архитектура

Решение разделено на четыре логических блока:

  1. Backend (Section A)

    • DynamoDB:
      • Customers: профиль клиента (имя, email, телефон, уровень лояльности, баллы);
      • Orders: история заказов с привязкой к локации и Global Secondary Index для запросов по локации;
      • Menu: меню по локациям с ценами и доступностью;
      • Carts: временные корзины с TTL 24 часа;
      • Locations: данные ресторанов (координаты, часы работы, налоговые ставки).
    • API Gateway: REST API с 8 endpoint’ами, защищёнными IAM.
    • Lambda-функции: бизнес-логика для работы с заказами, меню, корзиной, локациями.
    • Amazon Location Service:
      • Place Index (Esri) — поиск адресов и геокодирование;
      • Route Calculator (Esri) — расчёт маршрутов и времени объезда;
      • Map (VectorEsriNavigation) — карта для визуализации.
    • Amazon Cognito: user pool и identity pool для аутентификации и выдачи временных AWS-учётных данных.
  2. AgentCore Gateway (Section B)

    • Разворачивается сервис AgentCore Gateway.
    • Настраиваются IAM-права для доступа к backend.
    • REST endpoint’ы API Gateway публикуются как MCP-инструменты, доступные агенту по имени.
  3. AgentCore Runtime + ECR (Section C)

    • Amazon ECR — хранение контейнерного образа агента.
    • Amazon S3 — загрузка исходников.
    • AWS CodeBuild — сборка образа.
    • AgentCore Runtime — среда исполнения агента с WebSocket-протоколом.
    • Каждый сеанс агента живёт в отдельном microVM.
  4. Фронтенд на AWS Amplify (Section D)

    • Сборка и деплой веб-приложения.
    • Конфиг фронтенда автоматически генерируется из выходных параметров backend.
    • Приложение доступно по URL вида https://main.<app-id>.amplifyapp.com.

Поток запроса пользователя

  1. Пользователь открывает веб-приложение на Amplify.
  2. Логинится в Cognito User Pool по имени пользователя и паролю.
  3. Cognito выдаёт JWT-токены: Access Token и ID Token.
  4. Фронтенд отправляет ID Token в Cognito Identity Pool и получает временные AWS-ключи:
    • Access Key;
    • Secret Key;
    • Session Token.
  5. Фронтенд открывает WebSocket-подключение к AgentCore Runtime, подписанное SigV4 этими ключами.
  6. Первым сообщением по WebSocket фронтенд отправляет Access Token для проверки личности.
  7. Агент в AgentCore Runtime вызывает Cognito GetUser, валидирует токен и достаёт подтверждённые данные:
    • имя;
    • email;
    • customerId.
  8. AgentCore Runtime инициализирует модель Nova 2 Sonic в Amazon Bedrock и формирует системный prompt с контекстом клиента.
  9. AgentCore Runtime подключается к AgentCore Gateway как MCP-клиент (SigV4-аутентификация) и получает список доступных инструментов.
  10. Пользователь говорит заказ в микрофон.
  11. Аудио (16 kHz PCM) в реальном времени уходит по WebSocket в AgentCore Runtime.
  12. Nova 2 Sonic:
    • транскрибирует речь;
    • агент определяет намерение и выбирает нужные инструменты;
    • вызывает инструменты асинхронно через MCP.
  13. AgentCore Gateway превращает MCP-вызовы в REST-запросы на API Gateway.
  14. API Gateway отправляет запрос в нужную Lambda-функцию.
  15. Lambda обращается к DynamoDB и Amazon Location Service, возвращает результаты через API Gateway → AgentCore Gateway → агент.
  16. Агент формирует ответ с учётом всех данных.
  17. Nova 2 Sonic синтезирует голосовой ответ и стримит его обратно пользователю по тому же WebSocket.

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

Location Service и рекомендации по маршруту

Lambda-функции используют три сценария:

  • Nearest Location Search — поиск ближайших ресторанов по координатам с сортировкой по расстоянию. Используется формула гаверсина для расчёта расстояний.
  • Route-Based Search — поиск ресторанов в пределах заданного времени объезда от маршрута (по умолчанию 10 минут). Используются реальные времена в пути, а не прямая линия.
  • Address Geocoding — преобразование адреса в координаты, если GPS недоступен.

На этой базе агент может говорить фразы уровня: «Есть точка в 2 минутах от вашего маршрута» или «Ваш обычный ресторан в 5 милях отсюда».

Стек для голосового ИИ

  • Strands — фреймворк, в котором описываются системные промпты, инструменты и логика диалога.
  • Amazon Nova 2 Sonic даёт:
    • распознавание речи с шумом и разными акцентами;
    • голосовой ответ с учётом тона и настроения пользователя;
    • двунаправленный стриминг с низкой задержкой;
    • асинхронные вызовы инструментов;
    • поддержку прерываний (пользователь может перебить модель);
    • сохранение контекста на несколько ходов диалога.

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

Кому это полезно

  • Сетям ресторанов и кафе

    • Голосовой заказ в вебе и мобильном браузере без отдельного call-центра.
    • Повтор прошлых заказов и персональные рекомендации из истории.
    • Подбор оптимальной точки самовывоза по маршруту клиента.
  • Сетевому ритейлу

    • Голосовая корзина и поиск товаров по естественным запросам.
    • Интеграция с существующим backend через MCP, без жёсткой привязки к конкретному фреймворку.
  • Разработчикам, которые строят voice-first интерфейсы

    • Готовый пример полноценного стека: от WebSocket-аудио до Lambda и DynamoDB.
    • Понимание, как безопасно ходить в Bedrock из браузера без собственного backend-прокси.
  • Командам, которые уже на AWS

    • Лёгкая интеграция с текущими REST API через AgentCore Gateway и MCP.
    • Масштабирование за счёт serverless без сложной оркестрации контейнеров.

Где это имеет смысл

Используйте такую архитектуру, если:

  • вам нужен real-time голосовой интерфейс с низкой задержкой;
  • вы хотите единый агент для разных каналов (веб, мобильный веб, голосовые ассистенты);
  • у вас уже есть REST API, и вы готовы «поднять» поверх них MCP-инструменты;
  • вы цените pay-per-use: платить за фактические запросы к Bedrock, Lambda и DynamoDB, а не держать постоянный кластер.

Где решение может быть избыточным

  • Небольшой интернет-магазин с десятком заказов в день, где хватит простого чата на сайте без голоса.
  • Проекты, где нет строгих требований к задержке, и можно обойтись батчевыми запросами к LLM.
  • Сценарии без сложной интеграции с backend: например, статический FAQ.

Ограничения и нюансы

  • Доступность в России. Доступ к Amazon Bedrock, Nova 2 Sonic и большинству сервисов AWS из России может требовать зарубежный аккаунт и, в некоторых случаях, VPN. Юридические и комплаенс-аспекты каждая компания должна оценивать сама.
  • Зависимость от экосистемы AWS. Весь стек — Cognito, API Gateway, Lambda, DynamoDB, Location Service, Bedrock, Amplify. Если инфраструктура у вас в другом облаке, придётся либо мигрировать, либо адаптировать архитектуру.
  • Стоимость. Архитектура экономит на простое инфраструктуры, но голосовые модели и частые Lambda-вызовы при большом трафике могут стоить заметно. Придётся считать экономику под ваши сценарии.

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

AWS здесь предлагает не отдельную модель, а полный референс-стек для голосового заказа. Это конкурирует не столько с GPT-4o или Claude 3.5, сколько с готовыми voice-платформами и контакт-центрами.

По ключевым параметрам:

  • Интеграция с backend

    • Используется открытый протокол Model Context Protocol (MCP).
    • Backend-инструменты описываются как MCP tools и вызываются по имени.
    • Для команд, которые уже работают с MCP, это плюс: можно переиспользовать подход и инструменты.
  • Масштабирование

    • Каждому пользователю выделяется microVM в AgentCore Runtime.
    • Масштабирование автоматическое, без ручного управления кластерами.
    • Для пиковых нагрузок (акции, обеденное время) это удобнее, чем собственный кластер с WebSocket-серверами.
  • Безопасность и аутентификация

    • Нативная связка Cognito + SigV4 + временные AWS-ключи.
    • WebSocket идёт напрямую из браузера в AgentCore Runtime, без промежуточного backend-прокси.
    • Это снижает точку отказа и упрощает архитектуру, но жёстко привязывает к AWS.
  • Сравнение с другими LLM-платформами

    • В этом решении основной акцент не на сравнении качества распознавания речи с конкурентами, а на архитектуре.
    • На уровне UX: двунаправленный стриминг, прерывания, асинхронные инструменты — это то, чего часто не хватает в простых «чат с голосом» над текстовой LLM.

Конкретных цифр по сравнению с GPT-4o, Claude 3.5 или другими моделями AWS не приводит, поэтому оценивать качество распознавания и синтеза речи придётся в пилотных проектах.

Установка

Решение разворачивается через AWS Cloud Development Kit (CDK) и вспомогательный скрипт. Ниже — команды из исходного проекта.

Предварительные требования

Перед стартом нужно:

  • рабочий AWS-аккаунт и права на создание ресурсов (Cognito, Bedrock, Lambda, DynamoDB, API Gateway, Amplify и др.);
  • установленный Node.js;
  • установленный Python;
  • настроенный AWS CLI с валидными креденшелами;
  • установленный AWS CDK и выполненный cdk bootstrap в нужном регионе;
  • доступ к модели Amazon Bedrock Nova 2 Sonic в выбранном регионе.

Шаг 1. Клонировать репозиторий

git clone https://github.com/aws-samples/sample-omnichannel-ordering-with-amazon-bedrock-agentcore-and-nova-sonic
cd sample-omnichannel-ordering-with-amazon-bedrock-agentcore-and-nova-sonic

Шаг 2. Запустить деплой

Скрипт требует два параметра: email и имя пользователя. На указанный email придёт временный пароль для тестового пользователя Cognito.

./deploy-all.sh --user-email <your-email> --user-name "<Your Name>"

Что делает скрипт:

  1. Preflight-проверки

    • наличие Node.js, Python, AWS CLI, CDK;
    • наличие настроенных AWS-креденшелов;
    • выполненный cdk bootstrap;
    • доступ к Bedrock с моделью Nova 2 Sonic.

    Если что-то не хватает, скрипт сообщает, что именно, и предлагает автоматически установить то, что возможно.

  2. Пять шагов деплоя

    • Шаги 1–3 — полностью автоматизированы (инфраструктура backend, AgentCore Gateway, Runtime, Amplify).
    • Шаг 4: Synthetic Data
      • Скрипт спросит:
        • локацию (город, индекс или адрес) — центр поиска ресторанов;
        • тип кухни/еды (pizza, burgers, coffee shop, sandwich, tacos и т.п.);
        • использовать ли этот же адрес как домашний адрес клиента;
        • подтверждение перед записью сгенерированных данных в DynamoDB.
    • Шаг 5: Password Setup
      • Скрипт предложит сменить временный пароль Cognito, который пришёл на email.
      • Если согласитесь, нужно ввести временный пароль и новый постоянный, соответствующий политике Cognito:
        • минимум 8 символов;
        • заглавные и строчные буквы;
        • цифра;
        • символ.

По завершении скрипт выведет URL фронтенда, например:

https://main.<app-id>.amplifyapp.com

Как протестировать заказ

  1. Откройте URL фронтенда в браузере.
  2. Залогиньтесь под пользователем AppUser (email и пароль из шага деплоя).
  3. Нажмите кнопку с микрофоном, чтобы начать голосовой диалог.
  4. Агент:
    • поприветствует вас по имени;
    • получит геолокацию из браузера (при вашем разрешении);
    • в фоне подтянет прошлые заказы.
  5. Можно говорить естественными фразами:
    • попросить повторить прошлый заказ;
    • полистать меню голосом;
    • найти точки самовывоза по маршруту;
    • собрать новый заказ с нуля.
  6. Агент в реальном времени отвечает голосом, добавляет позиции в корзину и в конце подтверждает заказ с итоговой суммой и примерным временем готовности.

Весь диалог идёт по одному WebSocket-подключению, без дополнительных REST-запросов с фронтенда к вашему backend.

Удаление ресурсов

Если проект больше не нужен, ресурсы можно удалить тем же репозиторием:

./cleanup-all.sh

Скрипт удалит CDK-стеки и связанные ресурсы AWS.

Как запустить архитектуру в своих проектах

Если вы хотите не просто посмотреть демо, а перенести подход в продакшн:

  1. Замените демо-бэкенд на свои API

    • Опишите свои REST endpoint’ы в AgentCore Gateway как MCP-инструменты.
    • Сохраните структуру: Cognito → API Gateway → Lambda/микросервисы.
  2. Настройте собственную логику агента в Strands

    • Перепишите системный prompt под ваш бренд и продукт.
    • Опишите новые инструменты (поиск товаров, статус заказа, отмена и т.д.).
  3. Проверьте UX под голос

    • Сократите количество шагов в диалоге.
    • Добавьте быстрые команды: «повтори прошлый заказ», «добавь ещё две штуки».
  4. Продумайте мониторинг и лимиты

    • Настройте CloudWatch для Lambda, API Gateway, AgentCore.
    • Ограничьте максимальную длину сессии и количество параллельных вызовов инструментов.
  5. Оцените стоимость

    • Смоделируйте нагрузку: сколько голосовых сессий в час, средняя длительность, количество вызовов Lambda.
    • Посчитайте бюджет на Bedrock, Lambda, DynamoDB, API Gateway и трафик.

Если вы уже на AWS и задумываетесь о голосовом интерфейсе для заказа, этот проект — хороший шаблон: он показывает, как связать аутентификацию, голосовой стриминг, LLM-агента, MCP-инструменты и серверлесс-бэкенд в одну рабочую систему.


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