00:00:00— Привет, всем доброе утро.
00:00:02Большое спасибо, что присоединились к нам сегодня.
00:00:03Я в восторге от того, чем мы собираемся поделиться.
00:00:06Вот уже десять лет код, работающий на Vercel,
00:00:10предназначался в основном для мгновенных веб-запросов.
00:00:14Но самое интересное ПО, которое наши клиенты создают сегодня,
00:00:17больше не вписывается в эту модель.
00:00:20И количество таких новых проектов стремительно растет.
00:00:23Только за последние несколько месяцев
00:00:25еженедельное количество деплоев в Vercel удвоилось.
00:00:28И треть этих новых деплоев приходится на кодинг-агентов —
00:00:31число, которое выросло на тысячу процентов
00:00:34всего за шесть месяцев.
00:00:35Но самое интересное для меня
00:00:38не то, как много мы деплоим, а то, что именно.
00:00:41Эти агенты создают других агентов.
00:00:44И те агенты, которых строят наши клиенты,
00:00:48не просто отвечают один раз и ждут.
00:00:50Им нужно рассуждать, вызывать инструменты, ждать человека,
00:00:53а затем повторять всё это снова.
00:00:55И каждому такому рабочему процессу нужен бэкенд, который поспеет за ним.
00:00:58То, что я вижу в Vercel,
00:01:02показывает: команды, выпускающие продукт быстрее всех,
00:01:05не перестраивают инфраструктуру
00:01:07и не пишут очереди сообщений сами,
00:01:08не создают логику повторных попыток с нуля
00:01:11и даже не настраивают наблюдаемость вручную.
00:01:13Всё это уже сделано.
00:01:15Поэтому они используют наши инфраструктурные примитивы —
00:01:17то, что мы строили последнее десятилетие,
00:01:20чтобы они могли полностью сосредоточиться на своем продукте.
00:01:24И именно для решения этой проблемы мы создали Workflows.
00:01:27Мы запустили бета-версию шесть месяцев назад,
00:01:30и отклик был невероятным.
00:01:33И теперь, спустя сто миллионов запусков,
00:01:36мы рады объявить, что Workflows официально доступны (GA) уже сегодня.
00:01:41Позвольте мне показать, как это работает.
00:01:43Приложение, которое я вам покажу,
00:01:44это генератор поздравительных открыток, который я создал.
00:01:47Это могло бы быть что угодно,
00:01:49но этот пример затрагивает всё, о чем мы говорили.
00:01:51Он не укладывается в один запрос,
00:01:54он ждет действий человека, делает повторы при ошибках
00:01:57и транслирует прогресс пользователю в реальном времени.
00:02:00Итак, вот как это работает.
00:02:02Позвольте мне отправить открытку самому себе,
00:02:04и начну я с ввода своего адреса почты.
00:02:05Затем я выберу дату,
00:02:09и я выберу 23 апреля.
00:02:11Мне нравится жечь костры на свой день рождения,
00:02:14так что выберу костер на Оушен-Бич,
00:02:17и я отправляю это себе, так что для Перне.
00:02:21Я введу здесь свой email, просто чтобы упростить демо.
00:02:24Так что я сам подтвержу участие в собственном празднике.
00:02:27Отлично, теперь я нажимаю «Сгенерировать и отправить»,
00:02:30и мы увидим начало генерации открытки.
00:02:34Я перейду в панель управления Vercel,
00:02:35где видно, что этот запуск только что поступил.
00:02:37Давайте заглянем внутрь.
00:02:39Я могу наблюдать в реальном времени, как создаются промпты,
00:02:42затем генерируется сообщение,
00:02:43и также генерируется изображение.
00:02:45Это та самая наблюдаемость, о которой мы говорили.
00:02:48Каждый шаг виден прямо здесь.
00:02:50Вы можете точно видеть, что выполняется,
00:02:52что завершено, а что находится в ожидании.
00:02:54На стороне пользователя
00:02:57я вижу, что открытка сгенерирована,
00:02:58и письма для подтверждения (RSVP) отправлены.
00:03:01На данный момент рабочий процесс приостановлен.
00:03:04Никакие вычисления фактически не происходят.
00:03:07Он ждет ответа от человека,
00:03:09и я мог бы зайти в почту и ответить прямо сейчас,
00:03:12или подождать несколько часов или дней и ответить потом.
00:03:15Система продолжит отслеживать прогресс.
00:03:18Но прежде чем показать письмо,
00:03:20я на самом деле хочу показать CLI.
00:03:22Workflows с первого дня поставляется с CLI,
00:03:25который позволяет проверять всё то же самое,
00:03:27что доступно в панели наблюдаемости.
00:03:29Это означает, что у вас и ваших агентов
00:03:32есть доступ к полной картине,
00:03:35когда вы пытаетесь отладить то, что пошло не так.
00:03:37Хорошо, переходим к моей почте.
00:03:40Письмо должно прийти прямо сейчас.
00:03:43Вот оно.
00:03:44И здесь меня просто просят подтвердить участие.
00:03:46Я нажму «да», и готово.
00:03:49Вернемся к панели: я вижу, что хуки возобновились,
00:03:53и процесс должен перейти в режим ожидания (sleep).
00:03:55В пользовательской панели мы увидим то же самое.
00:03:58Мы больше не ждем подтверждений,
00:04:00теперь система просто ждет 23-го числа,
00:04:01чтобы отправить поздравление.
00:04:03Я не хочу заставлять вас ждать две недели,
00:04:05поэтому вернусь в панель управления
00:04:06и принудительно прерву ожидание прямо здесь.
00:04:09Это должно немедленно возобновить рабочий процесс,
00:04:12и мы увидим его завершение.
00:04:14Вернемся в панель пользователя.
00:04:17Открытка отправлена.
00:04:18И в моей почте я должен получить открытку
00:04:22вместе с данными о подтверждении.
00:04:23Круто.
00:04:24Теперь я хочу показать вам код,
00:04:26и вспомните то, о чем мы говорили раньше.
00:04:29Команды, которые сейчас лидируют, не возятся с очередями,
00:04:32управлением состоянием и инфраструктурой.
00:04:34Это старый подход.
00:04:35В Workflows всё, что мы сегодня видели, —
00:04:38это одна единственная функция,
00:04:40которая начинается с директивы useWorkflow.
00:04:43Именно эта директива позволяет функции работать днями,
00:04:48приостанавливаться между шагами и возобновляться с того же места.
00:04:52Когда рабочий процесс вызывает шаг,
00:04:53например, генерацию промптов или изображения,
00:04:56Workflows приостанавливает функцию
00:04:58и ставит задачу в очередь в фоновом режиме.
00:05:00Система даже повторит попытку в случае сбоя,
00:05:02а затем возобновит процесс, когда всё будет готово.
00:05:05Всё это время я получаю полную наблюдаемость
00:05:07в панели Vercel для каждого шага на пути.
00:05:11Я даже могу нажать на любой из них.
00:05:13По умолчанию в Vercel всё зашифровано,
00:05:16но я расшифрую данные, чтобы вы могли видеть входные параметры.
00:05:19Да, это доступно и в панели, и через CLI.
00:05:22Workflows также поддерживает встроенную потоковую передачу.
00:05:24Именно так я отправлял обновления клиенту
00:05:29для отслеживания прогресса в реальном времени.
00:05:31Мне не пришлось подключать какую-то базу данных,
00:05:33чтобы просто реализовать это.
00:05:34Клиент может даже отключаться и подключаться снова без проблем.
00:05:37Это устойчивый поток данных.
00:05:39Хорошо, а вот и хук.
00:05:42Для каждого подтверждения я создаю временный URL вебхука
00:05:46на лету, затем отправляю его в письме
00:05:50и просто жду его здесь, в коде.
00:05:52Рабочий процесс замирает в этой точке,
00:05:56пока каждый человек не нажмет на свою ссылку.
00:05:59Никакой базы данных не задействовано,
00:06:01а результаты просто живут в локальных переменных JavaScript.
00:06:05Рабочий процесс сам хранит всё свое состояние.
00:06:08Это те самые механизмы распределенных систем,
00:06:11о сложности которых, как мы и говорили, можно забыть.
00:06:12Вам больше не нужно об этом думать.
00:06:14И наконец, добавим ожидание в конце,
00:06:17чтобы дождаться моего дня рождения.
00:06:18Вот оно.
00:06:19Это ожидание может длиться пару секунд,
00:06:21несколько дней или даже недель, как в нашем примере.
00:06:24Пока процесс «спит», он просто приостановлен,
00:06:27и вычислительные ресурсы не потребляются.
00:06:29Когда он просыпается, то продолжает ровно с того же места,
00:06:33сохраняя состояние на протяжении всего времени.
00:06:34И это всё.
00:06:37Это одна функция, которую вы можете прочитать сверху вниз
00:06:40и проследить логику от начала до конца.
00:06:43Каждый шаг подкреплен очередью,
00:06:45автоматически повторяется при ошибках
00:06:47и запускается в собственной серверлесс-функции.
00:06:49Здесь нет ограничений по времени выполнения,
00:06:51так что процессы могут длиться столько, сколько нужно.
00:06:54Вот что мы имеем в виду,
00:06:56когда говорим, что Vercel берет на себя всё внутреннее устройство.
00:06:59Вы просто пишете логику, а остальное — наша забота.
00:07:02В этом демо я показал простой пример,
00:07:07но наши клиенты используют Workflows
00:07:09для запуска агентов в продакшене в огромных масштабах.
00:07:12Mux использует Workflows, чтобы гарантировать,
00:07:17что пайплайны генерации видео работают надежно каждый раз.
00:07:19А Flora управляет параллельными творческими агентами
00:07:23в 50 моделях генерации изображений — и всё через Workflows.
00:07:27Durable — это небольшая команда,
00:07:30которая хостит 3 миллиона сайтов клиентов,
00:07:33и они используют Workflows, чтобы выпускать новых
00:07:35агентов для своих пользователей каждый день.
00:07:38Я начал это выступление с фразы
00:07:40о том, что самое интересное программное обеспечение,
00:07:42которое создают клиенты, больше не укладывается в один запрос.
00:07:46И мы видим всё больше подобных приложений,
00:07:50разворачиваемых каждый божий день.
00:07:51Агенты создают агентов,
00:07:54и команды, строящие их, не думают об очередях,
00:07:58они сосредоточены на решении проблем клиентов.
00:08:01И этот сдвиг происходит не только внутри Vercel.
00:08:05Количество деплоев наших клиентов удваивается,
00:08:07и всё меньше инженеров настраивают инфраструктуру вручную.
00:08:11Какое бы приложение или агента вы ни хотели создать,
00:08:16Workflows сделает их надежными,
00:08:18долгоживущими, устойчивыми и наблюдаемыми.
00:08:22От вашего ноутбука до миллиона пользователей
00:08:25с одним и тем же кодом приложения.
00:08:27Workflows доступны всем уже сегодня,
00:08:31так что идите и создайте то, что действительно работает.
00:08:37[БЕЗ ЗВУКА]