«Опиши сайт — получи сайт» стало решённой потребительской фичей, и решила её крупнейшая компания отрасли. ChatGPT Sites генерирует сайт, хостит его, версионирует, даёт аналитику и направит на него ваш собственный домен. Это хорошо сделано, и этим будет пользоваться огромное число людей.
Но прочитайте документацию как строитель продукта, а не как конечный пользователь, — и картина окажется другой. Sites создаются и управляются разговором, в приложении ChatGPT или на chatgpt.com/sites; управляющего API в документации нет. Работает это на платном тарифе — Plus, Pro, Business, Enterprise или Edu, — а значит, каждому вашему заказчику нужна собственная подписка. Подключение своего домена означает, что владелец домена копирует DNS-записи из настроек сайта и вставляет их к своему DNS-провайдеру. Каждая выкатка — это выкатка в прод, если только кто-то явно не попросил сначала сохранить версию. А условия использования исключают применение для проведения финансовых операций.
Ничто из этого не недостаток. Это форма продукта. Форма фичи, сделанной для человека, который печатает в окне чата.
Если вы строите CRM, маркетплейс, онбординг или систему бронирования — вы не этот человек. Вам нужно выдать сайт вашему заказчику, из вашего интерфейса, в рамках ваших биллинговых отношений, не объясняя ему, что такое CNAME. Это другой продукт, и это тот, который выпустили мы.
Та половина, от которой зависит, поедет ли оно вообще
Большинство демо «сайт, собранный ИИ» заканчивается скриншотом. Интересное начинается после: должен появиться бакет, должен включиться хостинг, должны доехать файлы, должен выпуститься сертификат, DNS должен куда-то указать — и кто-то должен отвечать за отказ, когда третий шаг сработал, а четвёртый нет. Именно из-за этой возни фича так часто и заканчивается скачиваемым ZIP-архивом.
Мы сделали эту половину — а потом открыли её наружу.
В процессе два персонажа. Дизайнер превращает описание в сам сайт. Публикатор берёт на себя неблагодарную часть: создаёт бакет хранилища, включает хостинг статического сайта, заливает файлы, ставит перед этим CDN с сертификатом, чтобы результат был по HTTPS, а не по голому HTTP, и обновляет DNS-запись, чтобы поддомен резолвился.
Никто не вставляет DNS-записи руками. Ни вы, ни ваш заказчик — учётные данные держит публикатор, он и делает вызов. Эти облачные учётные данные разрешаются на сервере в момент вызова; они никогда не попадают в контекст модели, в транскрипт или в коммит — то же правило, по которому работает любой другой процесс Forge.
На выходе не макет. На выходе адрес, который можно открыть.
Повторная генерация, которая правит, а не бросает кости заново
Вторая итерация — то, что превратило демо в рабочий инструмент. Запрос на изменение читает манифест файлов текущей ревизии и контекст дизайнера до регенерации, так что «сделай блок с ценами короче» означает правку названных файлов, а не генерацию нового сайта с нуля в надежде, что на этот раз попадём точнее.
Это и есть разница между сайтом, который за пять запросов доводится до нужного, и сайтом, который мечется из стороны в сторону. И это важнее, когда запрос делает ваш заказчик, а не вы, — потому что к третьей попытке он не будет снисходительным.
Кнопка отмены — и кто вправе на неё нажать
Каждая опубликованная ревизия помечается и записывается, а хук завершения помечает каждый запуск как успешный или упавший. Отсюда два эндпоинта: получить список ревизий сайта и откатить его на конкретную. Есть и путь удаления.
Заметьте, что даёт слово «эндпоинт»: ваш продукт решает, кому и когда можно откатывать. Откат можно спрятать за инструмент поддержки, выдать конечному заказчику или запускать автоматически при провале проверки здоровья. Откат, существующий только как пункт меню в чужом приложении, — это откат, вокруг которого нельзя построить процесс поддержки.
Отрасль спорит о том, как присматривать за агентами: переписывание вызовов инструментов, барьеры на уровне системных вызовов , контуры с подтверждением. Всё это важно. Но добрая половина страха растёт из работы, которую нельзя забрать назад. Агенту, который публикует в версионируемую и обратимую среду, можно позволить работать быстро: худший исход здесь — один клик отмены.
Сам продукт: это можно встроить
Вся возможность доступна как HTTP API. Один POST запускает сборку, у запуска опрашивается результат, а дальше эндпоинты дают список ревизий, откат и удаление. Разделение по арендаторам держится на токене вызывающего, так что сайты одного клиента отделены от сайтов другого самим устройством системы, а не договорённостью.
Конкретно: продукт, который уже собирает описание со своих пользователей, может выдать этим пользователям живой сайт, не заводя у себя объектное хранилище, CDN, сертификаты, DNS и сборочный конвейер. Вы дёргаете эндпоинт; ваш заказчик получает адрес. Он никогда не узнаёт, что тут был замешан агент, нигде не регистрируется и не видит нашего имени, если вы сами этого не захотите.
Есть и настройка под каждого конечного заказчика: персонажей можно клонировать, так что один ваш пользователь получает дизайнера, настроенного под его голос бренда, а другой — иного, и вам не приходится вести два продукта.
Последний барьер тоже убран: привязка аккаунта и вход без учётки GitHub появились в те же две недели и сейчас раскатываются через стенд. Ваши заказчики всё равно не стали бы заводить аккаунт на GitHub ради лендинга — и не придётся.
Чему нас научила эксплуатация
Это молодая возможность, и мы предпочитаем описывать её точно, а не расплывчато.
Выпущено и проверено вживую: бриф → сгенерированный сайт → бакет и хостинг → заливка → CDN с HTTPS → DNS → работающий адрес, плюс ревизии, откат и удаление.
Живые прогоны поймали четыре дефекта, которые юнит-тесты поймать не могли: облачный API, потребовавший другой content type; инструмент, существовавший на одном пути исполнения и отсутствовавший на другом; три недостающих гранта IAM; и enum, который должен был быть в верхнем регистре. Зелёная сборка — не работающий конвейер. Поэтому мы всё прогоняем на настоящей системе, и поэтому же нам спокойно выставлять это наружу эндпоинтом.
Границы: выпущенный адаптер работает с объектным хранилищем, CDN и DNS одного облака. Сама форма процесса к нему не привязана. Распространение сертификата по краю облака на свежем домене может занимать часы — это физика и бюрократия, а не код, и текст онбординга стоит писать с учётом этого.
Что из этого следует
Сгенерировать страницу — простая половина, и у простой половины теперь есть самая щедро профинансированная реализация в мире. Опубликовать её, версионировать, уметь забрать назад и уметь делать всё это от имени чужого заказчика — та половина, которая решает, сможет ли это стать фичей вашего продукта.
Именно её мы и продаём. Сценарий использования описан здесь , или запустите процесс .