Saya Membina Penjana Mesej Commit Git Berasaskan AI

Dahulu saya sering menulis mesej commit yang buruk seperti "fixed bug" atau "updated stuff." Ini menyebabkan pull request saya menjadi tidak teratur. Saya memutuskan untuk mengautomasikannya menggunakan AI. Saya mahu menjana mesej commit yang bersih dan konvensional daripada code diff saya.

Ia lebih sukar daripada yang saya sangkakan. Prompt yang ringkas tidak memadai.

Percubaan awal gagal kerana banyak sebab:

  • AI menulis perenggan yang panjang dan bukannya baris yang pendek.
  • Ia mengabaikan awalan "feat:" atau "fix:" yang diperlukan.
  • Ia melakukan halusinasi tentang ciri-ciri yang tidak wujud dalam kod.
  • Model tempatan (local models) terlalu lambat dan menulis dalam gaya puitis yang tidak berguna.

Akhirnya, saya membina satu sistem hibrid yang berfungsi. Berikut adalah struktur yang saya gunakan:

  • Klasifikasi Jenis (Type Classification): Saya meminta model untuk memilih jenis seperti feat, fix, atau chore sebelum menulis mesej.
  • Pemotongan Konteks (Context Truncation): Saya hanya menghantar 250 baris pertama diff tersebut. Ini menjimatkan kos dan mengekalkan fokus yang tajam.
  • Pengesahan (Validation): Saya menggunakan regex untuk menyemak output. Jika mesej itu salah, skrip akan mencuba lagi.
  • Suhu Rendah (Low Temperature): Saya menetapkan suhu (temperature) kepada 0.2. Ini menjadikan output konsisten dan membosankan. Sifat membosankan adalah bagus untuk log.

Saya tidak menggunakan commit hooks automatik. AI boleh melakukan kesilapan. Saya menjalankan skrip tersebut sebagai git alias. Ia akan mencadangkan mesej, dan saya menyemaknya sebelum melakukan commit. Semakan manual adalah insurans terbaik terhadap sejarah git yang buruk.

Tiga pengajaran yang saya pelajari:

  • Had token adalah musuh anda. Diff yang besar akan merosakkan bajet atau prompt anda.
  • Pengesahan adalah wajib. Tanpanya, anda akan mendapat hasil yang tidak masuk akal.
  • Kelajuan adalah penting. Saya menggunakan GPT-4o-mini kerana ia pantas dan murah.

Jika anda bekerja dengan kod yang sensitif, jangan hantar diff anda ke API luaran. Gunakan model tempatan sebagai ganti.

Bagaimana anda menguruskan mesej commit anda? Adakah anda menggunakan AI atau menulisnya secara manual?

Sumber: https://dev.to/__c1b9e06dc90a7e0a676b/i-built-a-git-commit-message-generator-with-ai-heres-what-i-learned-2534