Я создал генератор сообщений для 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. Вместо этого используйте локальную модель.

А как вы работаете с сообщениями к коммитам? Используете ИИ или пишете их вручную?

Источник: https://dev.to/__c1b9e06dc90a7e0a676b/i-built-a-git-commit-message-generator-with-ai-heres-what-i-learned-2534