ГлавнаяБлогBabyChain: визуальный конструктор цепочек AI-моделей с durable API
AI / Нейросети

BabyChain: визуальный конструктор цепочек AI-моделей с durable API

BabyChain — self-hosted канвас-студия для цепочек AI-моделей. Проектируйте workflow визуально, вызывайте через API. Установка за час. Apache-2.0.

Al
Редакция Algolitalgolit.ru
9 мин чтения13 июня 2026 г.

Зачем нужен BabyChain?

Если вы когда-нибудь собирали цепочку из нескольких AI-моделей (например, генерация изображения → image-to-video → рефайн), то знаете: визуальные тулы вроде ComfyUI отлично подходят для экспериментов, но превратить такой workflow в продакшен-API — отдельная боль. BabyChain решает эту проблему: вы рисуете цепочку на канвасе, а затем вызываете её из бэкенда одним POST-запросом. Всё состояние сохраняется в AWS Aurora, функции Vercel остаются stateless. И да, это open-source под Apache-2.0.

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

Основная идея: каждый выход становится следующим входом. Вы проектируете граф на канвасе, сохраняете его, а затем любой клиент с API-ключом может запустить выполнение цепочки. Сервер сам ходит к провайдерам моделей (Black Forest Labs, Runway, Alibaba Cloud, Google, OpenAI, BytePlus), передаёт ключи из окружения (BYOK) и сохраняет каждый шаг в Aurora. Никакого состояния в браузере или в лямбде — только база данных.

Архитектура: Aurora помнит, Vercel исполняет

Наивный подход — держать всю цепочку в одной функции — умирает при первых же минутах ожидания в очереди провайдера. BabyChain делает иначе: база данных — единственное место, где живёт состояние. Каждая Vercel-функция продвигает ровно один шаг и завершается. Любой инстанс может подхватить любой запуск с середины.

# Пример: создание запуска цепочки через API
POST /api/v1/chains/runs
{
  "chain_id": "clx...",
  "inputs": {
    "prompt": "a cat in space"
  },
  "webhook_url": "https://myapp.com/callback"
}

Созданный запуск сразу сохраняется в Aurora вместе со всеми шагами. Первый готовый шаг может быть выполнен немедленно, но ответ возвращается без ожидания всей цепочки. Клиент опрашивает статус через GET /api/v1/chains/get/{runId}, и каждый опрос продвигает ровно один шаг.

Что внутри: семь таблиц, один источник правды

Схема базы данных содержит семь таблиц в схеме babychain_private. Ключевые — chain_run (жизненный цикл запуска), chain_step (упорядоченные шаги с параметрами и результатами), canvas (сохранённые графы в jsonb), api_key (хеши ключей с правами).

Две важные детали реализации:

  • Сохранение порядка ключей: PostgreSQL jsonb не гарантирует порядок, но в ответе API важно вернуть входные данные в том же порядке, что и в запросе. При создании запуска сохраняется массив оригинальных ключей, и presenter восстанавливает порядок на выходе.
  • Безопасные переходы состояний: Шаги покидают статус queued только через UPDATE с условием WHERE status = 'queued'. Это гарантирует, что при сбое одного шага все downstream-шаги будут помечены как skipped без конфликтов с параллельными вызовами.

Идемпотентность от начала до конца

Генеративный медиа-контент дорог, поэтому повторные вызовы не должны умножать расходы. BabyChain обеспечивает идемпотентность на трёх уровнях:

  • Создание запуска: хеш заголовка Idempotency-Key сохраняется в таблице chain_run с уникальным ограничением. Повторный запрос возвращает тот же запуск без новых вызовов провайдеров.
  • Отправка шага: для каждого шага вычисляется детерминированный ключ идемпотентности. Если инстанс функции умирает между отправкой провайдеру и сохранением результата, повторная отправка использует тот же ключ — провайдеры, поддерживающие идемпотентность, дедуплицируют запрос.
  • Вебхуки: терминальный callback захватывается на строке запуска, каждая попытка доставки записывается в callback_delivery, чтобы два инстанса не отправили один и тот же callback.

Канвас, который не теряет вашу работу

Редактор на React Flow с автсохранением прошёл три итерации, чтобы стать надёжным:

  • Debounce-автосохранение заменено на dirty-флаг + steady flush loop — теперь сохранение отстаёт от последнего нажатия не более чем на 1.5 секунды.
  • При закрытии вкладки срабатывает sendBeacon — финальный сброс через аутентифицированный эндпоинт.
  • Гидратация канваса происходит ровно один раз при монтировании, так что обновление роутера не сбрасывает состояние.

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

Где была настоящая боль: нормализация провайдеров

Шесть провайдеров, 57 моделей, 78 948 валидных комбинаций. И ни один провайдер не согласен на то, что значит «дай мне картинку 16:9». Самая глубокая кроличья нора — Alibaba DashScope: у каждой модели свои правила размеров, нигде не документированные.

# Пример: вычисление размера для модели с бюджетом пикселей
import math

def fit_to_budget(w, h, budget):
    """Масштабирует изображение под бюджет пикселей, сохраняя соотношение сторон"""
    scale = math.sqrt(budget / (w * h))
    W = math.floor(scale * w / 16) * 16
    H = math.floor(scale * h / 16) * 16
    return W, H

Для моделей с фиксированными размерами используется таблица соответствия — неправильные размеры физически не могут быть отправлены. Такой же эмпирический подход применён к Runway (попиксельные соотношения на эндпоинт), OpenAI (перманентные 429 как скрытые лимиты квоты) и BFL (URL изображений истекают через 10 минут — UI честно показывает статусы загрузки).

Структурное решение: карточки узлов на канвасе генерируются из схем Semantic Lady — полей, enum-опций, диапазонов, дефолтов. UI не может предложить параметр, который API отвергнет, потому что оба являются проекциями одного источника правды.

Что держит систему честной

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

# Проверенные сценарии
# 1. Шаг падает -> запуск завершается, downstream шаги помечаются skipped
# 2. Инстанс функции умирает -> следующий опрос возобновляет запуск из Aurora
# 3. Клиент повторяет create -> тот же запуск, нулевой дополнительный расход
# 4. Закрытие вкладки -> sendBeacon, канвас цел после перелогина
# 5. Пробуждение Aurora -> 30-секундный бюджет соединения поглощает задержку

Текущий проект включает 237 тестов, покрывающих runner, адаптеры провайдеров, шаблоны, поведение API, миграции, идемпотентность, callback и правила схемы.

Практический вывод

Если вы хотите превратить визуальный workflow AI-моделей в продакшен-инфраструктуру — не пишите клей. Установите BabyChain за час, нарисуйте цепочку на канвасе и вызывайте её через API. Репозиторий на GitHub, лицензия Apache-2.0, всё готово к деплою на Vercel + Aurora.

Прямо сейчас: git clone https://github.com/babysea-community/babychain.git, следуйте README и запустите свою первую цепочку. Через час у вас будет работающий durable API для генерации медиа.

#цепочки AI-моделей#durable API#визуальный конструктор#self-hosted#Aurora
Al
Редакция Algolit

Пишем про алгоритмы, подготовку к собеседованиям и карьеру в IT — так, чтобы было понятно и полезно.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →
BabyChain: визуальный конструктор цепочек AI-моделей с durable API | Algolit