Технологии

Автономный цикл пополнения: Databricks MMF, Genie Agent и Amazon Quick

AWS описала замкнутый цикл пополнения запасов, в котором прогноз спроса и заказ поставщику связаны без человека в цепочке: Databricks Many Model Forecasting считает 7-дневный спрос по всему каталогу с помощью Chronos-2, Databricks Genie Agent отбирает SKU со всплеском, а Amazon Quick сверяет их с живой доступностью поставщиков в Amazon S3 Tables и сам размещает заказ. Chronos-2 при этом работает как фундаментальная модель прогнозирования, рассчитанная на произвольные задачи без дообучения.

Автономный цикл пополнения: Databricks MMF, Genie Agent и Amazon Quick

Узкое место сместилось от прогноза к действию

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

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

Решение AWS замыкает этот разрыв в цикл из четырёх стадий — прогноз (Forecast), детект (Detect), решение (Decide) и действие (Act): Databricks отвечает за прогноз, а Amazon Quick повторяет последние три стадии по расписанию.

Авторы подчёркивают, что закрытый цикл сам по себе важнее отдельной модели прогнозирования: прогноз может улучшаться, а контур «предсказание — действие» остаётся рабочим активом.

Прогноз на Databricks

Прогноз строит Databricks Many Model Forecasting (MMF), который отдаёт Chronos-2 для предсказания 7-дневного спроса по каждому SKU.

Chronos-2 — фундаментальная модель прогнозирования Amazon, спроектированная под произвольные задачи: одиночные ряды, множественные совместно меняющиеся ряды и ряды с внешними факторами, причём в режиме zero-shot, без дополнительного обучения.

Блог опирается на пример fresh_retail_net из акселератора MMF, где Chronos-2 даёт zero-shot прогноз по всему каталогу.

Ноутбуки 01 и 02 берутся из этого акселератора, причём второй считается на serverless GPU с ускорителем A10, который ноутбук настраивает сам; именно они формируют таблицы прогноза.

Детект всплеска через Databricks Genie Agent

Стадию детекта выполняет Databricks Genie Agent: он возвращает SKU, у которых среднее за следующие 7 дней не меньше чем в 1,5 раза превышает среднее за предыдущие 14 дней.

Чтобы в выборку не попадала низкообъёмная мелочь, задан явный числовой порог: средние продажи за предыдущие 14 дней должны быть не меньше 1.

Агент описывается файлом genie/genie_space.json, где перечислены шесть таблиц, инструкции по детекту всплесков и закреплённый пример запроса, который делает ответ про всплески детерминированным.

После прогона ноутбуков каталог mmf содержит шесть объектов, к которым обращается агент: daily_sales_raw и demand_train из ноутбука 01, представления scoring_output_mv и evaluation_metrics_mv из ноутбука 04, а также product_dim и location_dim из ноутбука 03.

Порядок запуска важен: ноутбук 04 создаёт представление, к которому обращается проверочная ячейка ноутбука 03.

Решение и заказ в Amazon Quick

Amazon Quick стоит в середине схемы и остаётся единственным компонентом, который касается обеих сторон сразу.

Прогноз Quick получает от Databricks Genie Agent по Model Context Protocol, фид поставщиков читает из Amazon S3 Tables, а заказы отправляет через коннектор OpenAPI, соединяя данные по общему ключу товара в момент решения, а не копируя всё в одно хранилище.

Правило выбора поставщика сформулировано буквально: берётся самый дешёвый поставщик, чьей 7-дневной мощности хватает на 7-дневный прогноз, а если такого нет, позиция помечается как исключение.

Рутинный заказ уходит через Supplier Order API методом POST /orders, а исключение превращается в тикет на ручной разбор через POST /tickets.

Под капотом Supplier Order API — Amazon API Gateway перед AWS Lambda и Amazon DynamoDB, а ключ API хранится в AWS Secrets Manager.

Поток собран из шага Detect Demand Surges, цикла SKU Processing со шагами Lookup Suppliers, Select Best Supplier, Submit Order, Raise Ticket и Generate SKU Summary, а завершает его шаг Generate Consolidated Report.

Фид поставщиков живёт отдельно от прогнозов в Amazon S3 Tables на Apache Iceberg: загрузчик строит синтетический каталог поставщиков по публичным ключам товаров FreshRetailNet-50K и создаёт по три поставщика на товар и город в пределах 7-дневного окна.

Вывод загрузчика детерминирован: каждый прогон даёт один и тот же фид из 63 861 строки.

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

Amazon Quick Sight читает фид поставщиков в режиме Direct Query, поэтому каждый прогон видит последние данные, а не кэшированную копию SPICE.

Что нужно для развёртывания

Весь набор инструментов укладывается в локальный терминал: Databricks CLI 0.299.0+, AWS CLI 2.36.2+, jq 1.7 и uv либо Python 3.11 для загрузчика фида поставщиков.

Решение использует подкоманды create-flow, create-data-source и create-space в aws quicksight.

Два требования уровня аккаунта проверяются до начала работ: пользователю Amazon Quick нужна роль Author или Author Pro, иначе потоки и коннекторы не создать, а учётной записи Databricks нужно право CREATE CATALOG на metastore либо администратор, который заранее создаст каталог mmf.

Все команды и скрипты читают параметры аккаунта из одного файла.supply-chain-automation-env, который создаётся один раз и подгружается в оболочку.

CLI-часть закрывают два скрипта: setup_databricks.sh отвечает за ноутбуки, Genie Agent и OAuth-приложение, setup_aws.sh — за Supplier Order API, фид в S3, аккаунт Quick, источник данных, пространство и поток.

Оба скрипта останавливаются на четырёх шагах, доступных только в консоли: два экшн-коннектора, выдача доступа к S3 Tables и создание датасета.

Для связи Quick с Genie Agent регистрируется конфиденциальное OAuth-приложение Databricks на уровне аккаунта, и его client secret показывается только один раз.

Демонстрационный эндпоинт Supplier Order API по умолчанию принимает записи без аутентификации, поэтому для чего-то большего, чем контролируемая демонстрация, стек разворачивают с параметром RequireApiKey=true.

Основная регулярная статья расходов — редакция Amazon Quick Enterprise с помесячной оплатой за пользователя, тогда как остальные ресурсы тарифицируются по использованию и для демонстрационных объёмов стоят немного.

Что показал прогон

На приложенных демонстрационных данных один прогон даёт шесть SKU со всплеском, пять рутинных заказов и один тикет-исключение, причём авторы отдельно оговаривают, что это счётчики конкретного датасета, а не показатель производительности.

Исключением стал товар 122 в регионе Northeast — тот самый SKU, который фид намеренно снабжает недостаточно: ни один поставщик не покрывает его 7-дневный спрос, поэтому поток поднимает тикет вместо заказа.

Рутинные заказы ушли по товарам 261, 191, 299_300, 450_300 и 4.

Результат проверяется чтением таблиц DynamoDB с заказами и тикетами, а повторяющееся расписание добавляет новую партию на каждом интервале — после проверки его следует отключить, чтобы заказы не продолжали размещаться.

Почему цикл можно оставить включённым

Первое решение авторов — координировать независимые источники, а не консолидировать их: прогноз, фид поставщиков и Supplier Order API остаются в своих системах и соединяются по общему ключу товара только в момент решения, поэтому в схеме нет ни ETL-конвейера, ни задания синхронизации, ни ошибок из-за устаревших данных.

Второе — закрепить запрос всплеска: Genie пересобирает SQL под каждый вопрос, что удобно человеку, но неприемлемо для задания по расписанию, поэтому определение агента фиксирует запрос и числовой порог, и шесть SKU возвращаются как шесть при каждом запуске.

Третье — дозировать автономность по типу решения: предсказуемое большинство заказывается само, а нерешаемые позиции уходят человеку по одному и тому же правилу для каждой позиции.

Четвёртое — не привязывать конструкцию к одной модели: Chronos-2 даёт нужный вероятностный прогноз сегодня, но дальше по потоку ничего под него не завязано, поэтому схема стареет вместе с улучшением моделей, а не устаревает вместе с ними.

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

Ограничения и уборка

Воспроизводимость обеспечивает сопровождающий репозиторий aws-samples: в нём лежат конфигурация Genie Agent, определение потока и скрипт удаления.

Разбор опирается на синтетический фид поставщиков и демонстрационный Supplier Order API, а не на промышленные интеграции: сам блог описывает рабочий стенд, в котором значения аккаунта нужно подставить свои.

Для удаления служит cleanup.sh, который в безопасном порядке снимает поток, пространство, датасет, источник данных и коннекторы Quick, Genie Agent, SQL-хранилище и каталог mmf в Databricks, стек Supplier Order API вместе с Lambda, таблицами DynamoDB и секретом, а также бакет S3 Tables.

Ресурсы уровня аккаунта — подписку Quick и OAuth-приложение Databricks — скрипт оставляет на месте, потому что они могут использоваться другой работой, и их удаление требует отдельного подтверждения.

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

Первоисточники

  1. AWS Machine Learning Blog — Automate replenishment with MMF, Databricks Genie, and Amazon Quick (14 сентября 2026)
  2. Amazon Science — Introducing Chronos-2: From univariate to universal forecasting
  3. GitHub (aws-samples) — autonomous-retail-replenishment-genie-quick-mmf