- Дата публикации
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), которые автоматически масштабируются под нагрузку.
Как это работает
Общая архитектура
Решение разделено на четыре логических блока:
-
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-учётных данных.
- DynamoDB:
-
AgentCore Gateway (Section B)
- Разворачивается сервис AgentCore Gateway.
- Настраиваются IAM-права для доступа к backend.
- REST endpoint’ы API Gateway публикуются как MCP-инструменты, доступные агенту по имени.
-
AgentCore Runtime + ECR (Section C)
- Amazon ECR — хранение контейнерного образа агента.
- Amazon S3 — загрузка исходников.
- AWS CodeBuild — сборка образа.
- AgentCore Runtime — среда исполнения агента с WebSocket-протоколом.
- Каждый сеанс агента живёт в отдельном microVM.
-
Фронтенд на AWS Amplify (Section D)
- Сборка и деплой веб-приложения.
- Конфиг фронтенда автоматически генерируется из выходных параметров backend.
- Приложение доступно по URL вида
https://main.<app-id>.amplifyapp.com.
Поток запроса пользователя
- Пользователь открывает веб-приложение на Amplify.
- Логинится в Cognito User Pool по имени пользователя и паролю.
- Cognito выдаёт JWT-токены: Access Token и ID Token.
- Фронтенд отправляет ID Token в Cognito Identity Pool и получает временные AWS-ключи:
- Access Key;
- Secret Key;
- Session Token.
- Фронтенд открывает WebSocket-подключение к AgentCore Runtime, подписанное SigV4 этими ключами.
- Первым сообщением по WebSocket фронтенд отправляет Access Token для проверки личности.
- Агент в AgentCore Runtime вызывает Cognito
GetUser, валидирует токен и достаёт подтверждённые данные:- имя;
- email;
customerId.
- AgentCore Runtime инициализирует модель Nova 2 Sonic в Amazon Bedrock и формирует системный prompt с контекстом клиента.
- AgentCore Runtime подключается к AgentCore Gateway как MCP-клиент (SigV4-аутентификация) и получает список доступных инструментов.
- Пользователь говорит заказ в микрофон.
- Аудио (16 kHz PCM) в реальном времени уходит по WebSocket в AgentCore Runtime.
- Nova 2 Sonic:
- транскрибирует речь;
- агент определяет намерение и выбирает нужные инструменты;
- вызывает инструменты асинхронно через MCP.
- AgentCore Gateway превращает MCP-вызовы в REST-запросы на API Gateway.
- API Gateway отправляет запрос в нужную Lambda-функцию.
- Lambda обращается к DynamoDB и Amazon Location Service, возвращает результаты через API Gateway → AgentCore Gateway → агент.
- Агент формирует ответ с учётом всех данных.
- 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>"
Что делает скрипт:
-
Preflight-проверки
- наличие Node.js, Python, AWS CLI, CDK;
- наличие настроенных AWS-креденшелов;
- выполненный
cdk bootstrap; - доступ к Bedrock с моделью Nova 2 Sonic.
Если что-то не хватает, скрипт сообщает, что именно, и предлагает автоматически установить то, что возможно.
-
Пять шагов деплоя
- Шаги 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
Как протестировать заказ
- Откройте URL фронтенда в браузере.
- Залогиньтесь под пользователем AppUser (email и пароль из шага деплоя).
- Нажмите кнопку с микрофоном, чтобы начать голосовой диалог.
- Агент:
- поприветствует вас по имени;
- получит геолокацию из браузера (при вашем разрешении);
- в фоне подтянет прошлые заказы.
- Можно говорить естественными фразами:
- попросить повторить прошлый заказ;
- полистать меню голосом;
- найти точки самовывоза по маршруту;
- собрать новый заказ с нуля.
- Агент в реальном времени отвечает голосом, добавляет позиции в корзину и в конце подтверждает заказ с итоговой суммой и примерным временем готовности.
Весь диалог идёт по одному WebSocket-подключению, без дополнительных REST-запросов с фронтенда к вашему backend.
Удаление ресурсов
Если проект больше не нужен, ресурсы можно удалить тем же репозиторием:
./cleanup-all.sh
Скрипт удалит CDK-стеки и связанные ресурсы AWS.
Как запустить архитектуру в своих проектах
Если вы хотите не просто посмотреть демо, а перенести подход в продакшн:
-
Замените демо-бэкенд на свои API
- Опишите свои REST endpoint’ы в AgentCore Gateway как MCP-инструменты.
- Сохраните структуру: Cognito → API Gateway → Lambda/микросервисы.
-
Настройте собственную логику агента в Strands
- Перепишите системный prompt под ваш бренд и продукт.
- Опишите новые инструменты (поиск товаров, статус заказа, отмена и т.д.).
-
Проверьте UX под голос
- Сократите количество шагов в диалоге.
- Добавьте быстрые команды: «повтори прошлый заказ», «добавь ещё две штуки».
-
Продумайте мониторинг и лимиты
- Настройте CloudWatch для Lambda, API Gateway, AgentCore.
- Ограничьте максимальную длину сессии и количество параллельных вызовов инструментов.
-
Оцените стоимость
- Смоделируйте нагрузку: сколько голосовых сессий в час, средняя длительность, количество вызовов Lambda.
- Посчитайте бюджет на Bedrock, Lambda, DynamoDB, API Gateway и трафик.
Если вы уже на AWS и задумываетесь о голосовом интерфейсе для заказа, этот проект — хороший шаблон: он показывает, как связать аутентификацию, голосовой стриминг, LLM-агента, MCP-инструменты и серверлесс-бэкенд в одну рабочую систему.