Проект OpenGrall реализовал то, о чём роботехники говорили как о далёкой перспективе: робот, способный дописывать собственный код под новое железо. Архитектура делит интеллект машины на два независимых уровня с разными правами доступа и разными задачами.
Первый уровень — «Пилот». Это локальная языковая модель на 1,5–3 млрд параметров, работающая прямо на борту. Она принимает решения за доли секунды, управляет движением и может читать файлы проекта или делать заметки в отведённой «песочнице». Редактировать системный код Пилоту запрещено. Второй уровень — «Инженер». Это облачная модель: в проекте используются YandexGPT и DeepSeek. Инженер запускается только по необходимости, имеет полный доступ к коду, конфигурациям и документации. Переключение между режимами происходит автоматически по ключевым словам: «поверни налево» — Пилот, «настрой манипулятор» — Инженер.
| Роль | Тип модели | Где работает | Доступ к коду | Скорость реакции |
|---|---|---|---|---|
| Пилот | Локальная LLM, 1,5–3 млрд параметров | Бортовое железо | Только чтение + запись в песочницу | Доли секунды |
| Инженер | Облачная LLM (YandexGPT, DeepSeek) | Облако | Полный доступ к коду, конфигурациям, документации | Запускается по необходимости |
Инженер — не просто чат-бот с доступом к файловой системе. Он располагает набором специализированных инструментов: search_web и web_fetch для поиска документации и спецификаций, read_file и list_files для изучения структуры проекта, write_file и apply_patch для создания и точечного редактирования кода, execute_code для проверки написанного в изолированной среде, focus_on для визуальной верификации через камеру робота и ask_human для уточняющих вопросов владельцу. При работе с большими файлами Инженер может сгенерировать RAG-инструкцию — внутренний документ с целями и ограничениями — и опираться на неё в процессе потоковой генерации.
Инженер располагает набором инструментов: поиск в сети, чтение файлов, запись, выполнение кода в песочнице и визуальная верификация через камеру.
Безопасность автономного программирования обеспечивается тремя механизмами. Sandbox-окружение для execute_code ограничивает набор разрешённых модулей, запрещает системные вызовы и завершает процесс по таймауту при зависании. Перед каждым изменением файла автоматически создаётся резервная копия с временной меткой в имени — например, servo.py.20260429_153022.bak — что делает потерю рабочего кода практически невозможной. Наконец, YandexGPT поддерживает потоковую выдачу ответа: Инженер сначала формирует скелет класса с методами-заглушками, человек оценивает архитектуру, и только после утверждения методы заполняются последовательно. Такой подход позволяет работать с файлами в десятки тысяч строк без единовременной перегенерации.
Типичный сценарий — подключение нового устройства. Владелец устанавливает сервопривод для поворота камеры, подключает его к ESP32 через WebSocket и описывает доступные команды в файле GRALL_SELF.md. Дальше Инженер читает этот файл, анализирует структуру существующих плагинов, генерирует скелет нового класса, получает подтверждение человека и стримингово заполняет методы. Калибровка тоже частично автоматизирована: Инженер через ask_human просит поставить предмет перед камерой под нужным углом, фиксирует показания сервопривода в крайних положениях и записывает калибровочные значения в конфигурацию. Финальный шаг — интеграция плагина в основной цикл — остаётся за человеком: Инженер намеренно не делает этого самостоятельно.
У подхода есть чёткие архитектурные границы. Качество первично сгенерированного кода воспроизводит типичные проблемы генеративных моделей: устаревшие форматы API, избыточные зависимости, несовместимость с окружением. Автономная отладка возможна, но может занимать часы. Ещё существеннее другое ограничение: для управления походкой гексапода сгенерированный код окажется либо слишком медленным, либо недостаточно адаптивным. Такие задачи требуют обучения TinyML-моделей в симуляции, где нейросеть за миллионы итераций вырабатывает оптимальные паттерны движения — здесь Инженер не замена специализированным методам.
Стратегическая ценность архитектуры выходит за рамки подключения новых устройств. В OpenGrall уже реализован SLAM-навигатор: полторы тысячи строк ручного кода с алгоритмами A* и BFS, дискретным движением и угловатыми поворотами. Владелец может сформулировать задачу — «сделай движение плавным, убери рывки на поворотах» — и Инженер возьмётся за переработку фундаментальной подсистемы. Это и есть принципиальное отличие от обычного кодогенератора: модель работает не с чистым листом, а с живым проектом, понимая его структуру и историю изменений.



