Код, который видит себя
Представьте, что вы попросили ИИ нарисовать кнопку. Он пишет HTML и CSS. Вы запускаете код. Получаете серый прямоугольник. Где обещанная анимация? Где тень? Традиционный ИИ-помощник просто извинится и предложит попробовать снова. JanusCoder поступает иначе. Он смотрит на результат своей работы. И исправляет ошибки.
Зачем ИИ вообще смотреть на код?
Текстовые LLM слепы. Они генерируют код по описанию, но не понимают, как этот код выглядит в браузере. Это как писать рецепт, никогда не пробуя блюдо. Результат предсказуем: многообещающие описания, разочаровывающая реализация.
JanusCoder ломает эту парадигму. Его пайплайн выглядит так:
- Принимает текстовый запрос («красная кнопка с анимацией при наведении»)
- Генерирует HTML/CSS/JavaScript
- Запускает код в изолированном окружении (headless браузер)
- Делает скриншот результата
- Анализирует скриншот через vision-модель
- Сравнивает визуальный результат с исходным запросом
- Если не совпадает — возвращается к шагу 2 с правками
Проблема со скриншотами: они слишком «тяжелые»
Первые версии JanusCoder использовали PNG-скриншоты. Работало, но медленно. Картинка — это тысячи пикселей, каждый со своим цветом. Vision-модели тратят кучу времени на обработку этих данных. И главное — модель видит только конечный результат, а не структуру интерфейса.
Здесь появляется SVG. Вместо растрового изображения JanusCoder теперь генерирует векторное представление интерфейса.
SVG (Scalable Vector Graphics) — это не картинка в привычном смысле. Это XML-документ, который описывает фигуры, текст, цвета. Браузер рисует его. Для ИИ это золотая жила: структурированные данные вместо пиксельного шума.
1 Как JanusCoder превращает код в SVG
Вот упрощенный пример того, что происходит под капотом. Допустим, ИИ сгенерировал такой код:
<!DOCTYPE html>
<html>
<head>
<style>
.button {
background: red;
padding: 12px 24px;
border-radius: 8px;
color: white;
border: none;
}
</style>
</head>
<body>
<button class="button">Click me</button>
</body>
</html>
Вместо скриншота система генерирует SVG примерно такого вида:
<svg width="800" height="600">
<rect x="350" y="250" width="100" height="40"
rx="8" fill="#ff0000" class="button-element"/>
<text x="400" y="275" text-anchor="middle"
fill="white" font-size="14">Click me</text>
</svg>
Видите разницу? В SVG явно указано: есть прямоугольник с закругленными углами (rx="8"), красной заливкой, внутри текст. Vision-модели не нужно гадать, где заканчивается кнопка и начинается фон. Данные уже структурированы.
Что ИИ видит в SVG, чего не видит в PNG?
| Аспект | PNG (старый подход) | SVG (новый подход) |
|---|---|---|
| Цвет кнопки | Модель анализирует пиксели, может ошибиться с оттенком | Явно указан fill="#ff0000" — точно красный |
| Закругленные углы | Нужно распознавать визуальную форму | Явно указано rx="8" — радиус закругления |
| Текст внутри | OCR может ошибиться с распознаванием | Текст прямо в теге <text> — «Click me» |
| Иерархия элементов | Плоское изображение, структуру нужно восстанавливать | DOM-подобная структура в XML |
Пример исправления: когда ИИ сам находит баг
Допустим, мы просим: «Кнопка, которая меняет цвет при наведении». JanusCoder генерирует код, но забывает про псевдокласс :hover. Он запускает код, получает SVG, анализирует его.
Vision-модель видит: есть кнопка, но в SVG нет описания состояний. Никакого изменения цвета. Модель понимает — запрос не выполнен. Она возвращается к коду и добавляет:
.button:hover {
background: blue;
}
Запускает снова. Теперь в SVG появляется описание интерактивного поведения (в расширенном формате). Модель видит — теперь есть hover-состояние. Цикл завершен.
Альтернативы? Их почти нет
На рынке полно ИИ-кодогенераторов. GitHub Copilot, ChatGPT, Claude. Все они слепы. Они могут написать идеальный с точки зрения синтаксиса код, который визуально будет полным провалом.
Есть исследовательские проекты вроде Multi-modal RAG, которые работают с визуальной информацией. Но они не заточены под цикл «сгенерировал-проверил-исправил».
JanusCoder уникален именно этой связкой: мультимодальность + автономное тестирование + итеративное улучшение. Это не просто помощник. Это автономный агент, который доводит задачу до конца.
Где эта технология взорвется в первую очередь?
- Прототипирование интерфейсов. Дизайнер описывает макет текстом, получает работающий прототип через 30 секунд. ИИ сам исправляет расхождения.
- Тестирование UI. Автоматическая проверка визуальной регрессии. ИИ видит, что кнопка «съехала» после обновления кода.
- Обучение фронтенду. Студент пишет код, ИИ сразу показывает, как он выглядит, и предлагает исправления.
- Генерация тем оформления. «Сделай темную тему для этого интерфейса» — ИИ меняет цвета, проверяет контрастность, исправляет недочеты.
Подводные камни (потому что без них не бывает)
SVG — не панацея. Динамические интерфейсы с анимациями, canvas, WebGL — все это плохо ложится в статичное векторное представление. JanusCoder пока специализируется на сравнительно простых UI-компонентах.
Еще проблема: SVG описывает то, что нарисовано, а не то, как это должно себя вести. Кнопка может выглядеть правильно, но не иметь обработчика клика. ИИ это не увидит.
Самый неприятный баг: ИИ может «обмануть» сам себя. Сгенерировал код, получил SVG, увидел, что все ок. Но в реальном браузере у пользователя сломается из-за разницы в рендеринге. SVG и реальный рендеринг — не всегда одно и то же.
Что дальше? ИИ, который видит как человек
Текущая реализация с SVG — промежуточный этап. Идеальный сценарий: ИИ запускает код в реальном браузере, взаимодействует с интерфейсом как пользователь (кликает, скроллит, вводит текст), и на основе этого опыта улучшает код.
Представьте: вы просите «форму входа с валидацией». ИИ не только рисует поля, но и тестирует их — вводит неправильный email, проверяет, появляется ли сообщение об ошибке, исправляет код, если валидация не работает.
Это уже не генерация кода. Это полноценная разработка с тестированием. И SVG здесь — лишь первый шаг к тому, чтобы ИИ по-настоящему понимал, что он создает.
Пока другие обсуждают, заменят ли ИИ программистов, JanusCoder тихо создает ИИ, который программирует, тестирует и исправляет сам себя. И это куда страшнее (или интереснее — смотря с какой стороны посмотреть).