Я создал генератор сообщений для git-коммитов на базе ИИ
Раньше я писал плохие сообщения к коммитам, вроде «fixed bug» или «updated stuff». Из-за этого мои pull requests выглядели неопрятно. Я решил автоматизировать этот процесс с помощью ИИ. Я хотел генерировать чистые сообщения в стиле conventional commits на основе diff-файлов моего кода.
Это оказалось сложнее, чем я думал. Простой промпт не сработал.
Первые попытки провалились по многим причинам:
- ИИ писал длинные абзацы вместо коротких строк.
- Он игнорировал обязательные префиксы «feat:» или «fix:».
- Он галлюцинировал функциями, которых не было в коде.
- Локальные модели работали слишком медленно и писали в поэтичном, бесполезном стиле.
В итоге я построил гибридную систему, которая работает. Вот структура, которую я использую:
- Классификация типа (Type Classification): я прошу модель выбрать тип, например feat, fix или chore, прежде чем писать сообщение.
- Усечение контекста (Context Truncation): я отправляю только первые 250 строк diff-файла. Это экономит деньги и позволяет сохранять фокус.
- Валидация (Validation): я использую regex для проверки результата. Если сообщение некорректно, скрипт пробует еще раз.
- Низкая температура (Low Temperature): я устанавливаю температуру на 0.2. Это делает вывод последовательным и скучным. А скука — это хорошо для логов.
Я не использую автоматические git-хуки. ИИ ошибается. Я запускаю скрипт как git alias. Он предлагает сообщение, а я проверяю его перед коммитом. Ручная проверка — лучшая страховка от плохой истории git.
Три урока, которые я усвоил:
- Лимиты токенов — ваш враг. Большие diff-файлы либо разорят ваш бюджет, либо сломают промпт.
- Валидация обязательна. Без неё вы будете получать бессмыслицу.
- Скорость имеет значение. Я использую GPT-4o-mini, потому что это быстро и дешево.
Если вы работаете с конфиденциальным кодом, не отправляйте свои diff-файлы во внешние API. Вместо этого используйте локальную модель.
А как вы работаете с сообщениями к коммитам? Используете ИИ или пишете их вручную?
