Вернулся к тематике использования ROS, но, с несколько необычной стороны - оказалось, что сетевая архитектура, которую предлагает ROS, хорошо подходит для независимой разработки / генерации узлов. Это свойство (в числе прочих) оказалось очень полезным в рамках разработки AI-агента, способного создавать и поддерживать программный код по запросу пользователя. Этой теме посвящен мой тг-канал - AI code developer.
Проект Codestral ROS2 Generator представляет собой решение, использующее специализированную модель для разработки кода - Codestral для автоматизации создания различных элементов ROS2 - узлов (nodes), сервисов (services), действий (actions) и других компонентов.
Структура проекта
Проект организован в модульную структуру с разделением ответственности между основными классами.
1. BaseGenerator (base_generator.py)
Абстрактный базовый класс, реализующий шаблонный метод (Template Method) для генерации кода.
Ключевые характеристики:
- Три основные фазы: инициализация, генерация, отчёт.
- Позволяет настраивать зависимости (generation_attempt_class, metrics_handler_class, model_client_class).
- Управляет конфигурацией, загружаемой из YAML-файла.
- Применяет валидацию конфигурации перед использованием.
- Обрабатывает исключения и логирует события.
2. GenerationAttempt (generation_attempt.py)
Класс, отвечающий за жизненный цикл одной попытки генерации кода. Реализован как машина состояний, включающая следующие стадии:
- INITIALIZE - подготовка к генерации.
- GENERATE - отправка запроса к модели AI.
- PARSE - извлечение и форматирование кода.
- SAVE - сохранение кода в файл.
- TEST - запуск и проверка тестов.
- SUCCESS - успешное завершение.
- FAILURE - обработка ошибок.
В процессе генерации собираются метрики, для хранения которых используется датакласс AttemptMetrics:
- attempt_time - время выполнения попытки,
- success - статус успешности,
- tests_passed/failed/skipped - статистика тестов,
- prompt_tokens/completion_tokens/total_tokens - использование токенов,
- error - описание ошибки (если есть).
3. MistralClient (mistral_client.py)
Класс для взаимодействия с API Mistral AI с помощью библиотеки mistralai для Python. Его задачи:
- Поддержка различных моделей Mistral (codestral, mistral-large).
- Настройка параметров запроса (температура, максимальное количество токенов и прочие).
- Отслеживание использования токенов через класс ModelUsage.
- Обработка ошибок API и тайм-аутов.
4. ROS2CodeParser (code_parser.py)
Класс для анализа и форматирования сгенерированного кода. Возможности:
- Извлечение блоков кода из markdown-разметки.
- Форматирование кода согласно стандартам ROS2.
- Поддержка специфичных конвенций именования ROS2.
- Проверка наличия необходимых импортов и классов.
5. ROS2Runner (ros2_runner.py)
Класс для выполнения команд ROS2 и запуска тестов. Функциональность:
- Запуск тестов с использованием pytest.
- Анализ результатов тестирования.
- Выполнение команд ROS2 в отдельных процессах.
- Настройка переменных окружения для корректной работы ROS2.
Класс для сбора и анализа метрик процесса генерации. Ключевые метрики:
- Процент успешных генераций.
- Среднее количество попыток до успеха.
- Среднее время генерации.
- Статистика прохождения тестов.
- Использование токенов (промпт/завершение/всего).
Процесс генерации в деталях
Фаза инициализации
- Загрузка конфигурации из YAML.
- Валидация параметров конфигурации.
- Инициализация клиента Mistral AI.
- Создание обработчика метрик.
- Подготовка промпта на основе файлов интерфейса и тестов.
Фаза генерации
- Инициализация таймера и счётчика попыток.
- Запуск попытки генерации:
- Отправка промпта к модели Mistral AI.
- Извлечение и форматирование Python-кода.
- Сохранение в целевой файл.
- Запуск тестов и анализ результатов.
- Если тесты не проходят, повторение с шага 2 (до max_attempts).
- Сохранение результатов итерации.
- Повторение шагов 1-4 для каждой итерации (до evaluation_iterations).
Фаза отчётности
- Обработка собранных метрик.
- Генерация табличного отчёта.
- Логирование результатов.
- Формирование финального статуса генерации.
Полная документация по коду доступна на GitHub Pages, а исходный код - на GitHub. Также всех приглашаю в мой канал AI code developer.
Комментарии
Отправить комментарий