Tôi đã xây dựng một công cụ tạo tin nhắn Git commit bằng AI
Tôi từng viết những tin nhắn commit rất tệ.
Những tin nhắn như "fixed bug" hay "updated stuff" rất phổ biến. Điều này khiến các pull request của tôi trở nên lộn xộn. Tôi quyết định xây dựng một công cụ AI để tự động hóa việc này. Tôi muốn tạo ra những tin nhắn rõ ràng, chuyên nghiệp từ các bản diff code của mình.
Nó khó hơn tôi tưởng. Bạn không thể chỉ sử dụng một prompt đơn giản.
Dưới đây là những gì tôi đã học được từ quá trình này:
Những thất bại
- Những lần thử đầu tiên quá dài dòng. AI viết thành các đoạn văn thay vì các dòng ngắn gọn.
- AI phớt lờ các định dạng tiêu chuẩn như Conventional Commits.
- Việc thêm nhiều hướng dẫn hơn khiến AI "ảo tưởng" (hallucinate) ra những thay đổi không hề tồn tại.
- Các mô hình chạy cục bộ (local models) quá chậm hoặc viết theo phong cách thơ ca kỳ lạ.
Giải pháp
Tôi đã xây dựng một hệ thống lai (hybrid system) bằng Node.js với ba bước:
- Phân loại loại (Type Classification): Tôi buộc AI phải chọn một loại trước (feat, fix, chore, v.v.).
- Cắt bớt ngữ cảnh (Context Truncation): Tôi chỉ gửi 250 dòng đầu tiên của bản diff. Việc này giúp tiết kiệm chi phí và giữ cho nội dung tập trung.
- Xác thực (Validation): Tôi sử dụng regex để kiểm tra đầu ra. Nếu thất bại, script sẽ thử lại.
Các thiết lập kỹ thuật của tôi
- Model: Tôi sử dụng GPT-4o-mini. Nó nhanh và rẻ.
- Temperature: Tôi đặt ở mức 0.2. Temperature thấp đảm bảo các tin nhắn ít biến hóa và nhất quán.
- Workflow: Tôi không tự động commit. Tôi dùng công cụ để gợi ý tin nhắn, sau đó tôi xem lại và dán nó vào một cách thủ công.
Bài học cho các nhà phát triển
- Giới hạn token là kẻ thù chính của bạn. Các bản diff lớn sẽ làm cạn kiệt ngân sách hoặc làm hỏng prompt.
- Cần phải có bước xác thực. Nếu không có kiểm tra bằng regex, bạn sẽ nhận được những đoạn văn bản vô dụng.
- Kiểm tra thủ công là sự an toàn. AI vẫn mắc lỗi. Đừng bao giờ để nó commit mà không có sự giám sát của bạn.
- Quyền riêng tư rất quan trọng. Đừng gửi mã nguồn nhạy cảm đến một API bên ngoài nếu công ty bạn cấm điều đó.
Nếu bạn muốn thử, hãy chạy nó như một Git alias. Nó giúp quy trình trở nên liền mạch.
Optional learning community: https://t.me/GyaanSetuAi
