Локальный LLM-агент: headless screenshot loops для raytraced FPS на C | AiManual
AiManual Logo Ai / Manual.
17 Июн 2026 Инструмент

Локальный LLM-агент пишет raytraced FPS на C: техника headless screenshot loops

Как 30B модель без API написала raytraced FPS-демку на C с помощью итеративного цикла headless screenshot loops. Разбор техники и примеры.

Реклама
cliv1

Представьте: вы даете задание локальной языковой модели написать шутер от первого лица с трассировкой лучей на чистом C. Модель не имеет доступа к интернету, не дергает API, не подсматривает в GitHub. Она просто принимает задачу, начинает кодить, компилирует, смотрит на результат — и так по кругу, пока не получится играбельная демка. Звучит как фантастика? В 2026 году это реальность.

Техника называется headless screenshot loops (HSSL). Это не очередной AI-ассистент в IDE, а полноценный автономный агент, который сам себе ревьюер, тестировщик и отладчик. И он работает без графического экрана — только compute, только хардкор.

Почему это не очередной хайп

Если вы следили за развитием локальных LLM на практике, то знаете: главная проблема агентов — обратная связь. Они не видят, что получилось. Можно генерировать код, но как понять, работает ли он корректно, если нет возможности запустить и проверить?

Обычный цикл разработки с LLM — это «напиши -> прочитай -> исправь». Агент видит только текст. Но для графики, физики, игр текст — это ложь. Настоящая проверка — глаза.

HSSL решает это радикально: агент рендерит кадр в буфер (без окна), сохраняет растровое изображение в память, а затем «смотрит» на него — тем же LLM, но уже как на картинку. Мультимодальность, да. Но не та, к которой мы привыкли в чатиках.

⚠️
Важный нюанс: модель должна быть достаточно большой, чтобы одновременно держать в контексте код на C, техническое описание трассировки лучей и анализировать изображение. 30B параметров — нижняя планка. Меньшие модели просто теряют нить после второй итерации.

Как это работает: матрешка циклов

Разберем на пальцах. Агент получает задание: «Напиши FPS с трассировкой лучей на C. Должен рендерить сферы с отражениями, управление WASD, головой — мышкой. Вывод в буфер 1024x768».

  1. Агент генерирует main.c и простой Makefile.
  2. Компилирует через системный gcc (или clang). Если ошибки — итерация исправления.
  3. Запускает бинарник в headless-режиме (без X11/GLX) с флагом -dump-frame frame.ppm.
  4. После рендера скриншот (всего один кадр) сохраняется.
  5. LLM-агент загружает этот PPM как мультимодальное входное изображение (через vision-encoder, например, LLaVA или CogVLM2).
  6. Модель оценивает: «Сферы артефактны, тени отсутствуют, FOV слишком узкий». Пишет новый код.
  7. Повторяем до удовлетворения критериям.

Этот подход радикально отличается от классического «дай промпт — получи код». Здесь модель учится на собственных ошибках, причем визуальных. Современные модульные агенты умеют делать такие циклы автоматически, без ручного вмешательства.

Конкретный результат: с чем пришел агент

В одном из тестов (модель NousResearch/Nous-Hermes-2-Yi-34B с визуальной адаптацией, запущенная через llama.cpp RPC-server на двух RTX 4090) агент за 14 итераций выдал:

  • Raytracing с 16 bounce, отражения, преломления (стеклянные сферы).
  • Управление WASD + мышь (с использованием SDL или чистого X11).
  • Тени от трех точечных источников.
  • Простая текстура пола (шахматная доска).

Да, без пост-эффектов, без gbuffer, без сложных шейдеров. Но это — полностью сгенерированный автономным агентом движок. На C. Работает в реальном времени (~45 FPS на одной RTX 3090).

Забавный момент: на 7-й итерации агент случайно сгенерировал код с бесконечным циклом. Но HSSL спасает: если кадр не сгенерирован за таймаут (5 секунд), цикл прерывается, агент получает сообщение об ошибке и переписывает код. Железобетонная отказоустойчивость.

Сравнение с альтернативами: почему это дешевле и быстрее

Метод Время (до играбельного билда) Стоимость Контроль
HSSL + local 30B ~3 часа (14 циклов) Только электричество Полный
GPT-4o API (текст + vision) ~1 час (но с перерывами из-за лимитов) ~150 USD (токены + vision) Нет (модель на сервере)
Claude 3.5 Sonnet (API) ~40 минут ~80 USD Нет
DeepSeek V3 (API) ~50 минут ~45 USD Ограниченный
LocalAgent v0.1.1 (без vision) Бесконечно (не видит картинку) - -

Как видите, локальный HSSL проигрывает только cloud-моделям в скорости (они быстрее генерируют код), но выигрывает в цене и приватности. А главное — LocalAgent без vision-loop бессилен: он не может оценить визуальный результат. HSSL добавляет агентству глаза.

Бутылочное горлышко: не железо, а логика

Самые толстые грабли в этой технике — не GPU или RAM. Проблема в точности оценки изображения. LLM с vision-модулем часто «халтурит»: видит артефакты там, где их нет, или пропускает реальные баги. Типичные ошибки локального запуска здесь проявляются в полный рост: неправильный квантизатор, низкое разрешение визуального энкодера (например, 224x224 вместо 1024x768), провалы семплирования.

Еще один сюрприз: модель может зациклиться на одной мелкой детали (например, неправильный цвет неба) и перестать улучшать остальное. Тут помогают эвристики — добавление в промпт чек-листа: «Проверь геометрию, освещение, управление». Оптимизированная сборка llama.cpp с повышенной скоростью инференса решает проблему времени: цикл оценки одного скриншота занимает ~8 секунд против 40 на стандартной сборке.

Кому это реально нужно?

Не стоит думать, что HSSL — это замена геймдеву. Пока нет. Но есть конкретные ниши:

  • Автономное прототипирование. Бросил задачу — через пару часов получил работающую демку. Идеально для геймджемов или хакатонов.
  • Тестирование графических алгоритмов. Агент может сам придумывать и проверять варианты тональной компрессии или сглаживания.
  • Обучение встроенных систем. Сгенерировать легковесный рендерер на C без OpenGL под ARM — уже реально.
  • Исследования в области ИИ-безопасности. Инструмент вроде локального AI-мониторинга экрана можно перепрофилировать: он отслеживает, что рендерит агент, и вмешивается, если результат опасен (например, мерцание, которое может вызвать эпилепсию).

Если у вас есть 3-4 свободных гигабайта видеопамяти и желание поэкспериментировать — берите локальную 34B модель с vision, ставьте правильные аргументы llama.cpp и пробуйте. Результат вас, скорее всего, удивит.

🔮
Мой прогноз: через год headless screenshot loops станут стандартным пайплайном для процедурной генерации 3D-контента. Агенты будут писать не демки, а целые уровни, тестируя их на ходу. И тогда вопрос «кто написал этот код» перестанет иметь значение — ответом будет «никто, он сам вырос».

Подписаться на канал