ਮੈਂ ਇੱਕ AI Git Commit Message Generator ਬਣਾਇਆ
ਮੈਂ ਪਹਿਲਾਂ "fixed bug" ਜਾਂ "updated stuff" ਵਰਗੇ ਮਾੜੇ commit messages ਲਿਖਦਾ ਸੀ। ਇਸ ਨਾਲ ਮੇਰੀਆਂ pull requests ਖਿਲਾਰੀਆਂ ਹੋਈਆਂ ਲੱਗਦੀਆਂ ਸਨ। ਮੈਂ AI ਦੀ ਵਰਤੋਂ ਕਰਕੇ ਇਸਨੂੰ ਆਟੋਮੇਟ ਕਰਨ ਦਾ ਫੈਸਲਾ ਕੀਤਾ। ਮੈਂ ਆਪਣੇ code diffs ਤੋਂ ਸਾਫ਼ ਅਤੇ conventional commit messages ਤਿਆਰ ਕਰਨਾ ਚਾਹੁੰਦਾ ਸੀ।
ਇਹ ਮੇਰੀ ਸੋਚ ਨਾਲੋਂ ਕਿਤੇ ਜ਼ਿਆਦਾ ਮੁਸ਼ਕਲ ਸੀ। ਇੱਕ ਸਧਾਰਨ prompt ਕੰਮ ਨਹੀਂ ਕਰ ਰਿਹਾ ਸੀ।
ਸ਼ੁਰੂਆਤੀ ਕੋਸ਼ਿਸ਼ਾਂ ਕਈ ਕਾਰਨਾਂ ਕਰਕੇ ਅਸਫਲ ਰਹੀਆਂ:
- AI ਛੋਟੀਆਂ ਲਾਈਨਾਂ ਦੀ ਬਜਾਏ ਲੰਬੇ ਪੈਰੇ ਲਿਖ ਰਿਹਾ ਸੀ।
- ਇਹ ਲੋੜੀਂਦੇ "feat:" ਜਾਂ "fix:" prefixes ਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਕਰ ਰਿਹਾ ਸੀ।
- ਇਹ ਅਜਿਹੀਆਂ features ਬਾਰੇ ਗੱਲ ਕਰ ਰਿਹਾ ਸੀ ਜੋ code ਵਿੱਚ ਮੌਜੂਦ ਹੀ ਨਹੀਂ ਸਨ।
- Local models ਬਹੁਤ ਹੌਲੀ ਸਨ ਅਤੇ ਕਾਵਿਕ (poetic), ਬੇਕਾਰ ਸ਼ੈਲੀ ਵਿੱਚ ਲਿਖਦੇ ਸਨ।
ਅੰਤ ਵਿੱਚ ਮੈਂ ਇੱਕ ਹਾਈਬ੍ਰਿਡ ਸਿਸਟਮ ਬਣਾਇਆ ਜੋ ਕੰਮ ਕਰਦਾ ਹੈ। ਇੱਥੇ ਉਹ structure ਹੈ ਜੋ ਮੈਂ ਵਰਤਦਾ ਹਾਂ:
- Type Classification: ਮੈਂ message ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ model ਨੂੰ feat, fix, ਜਾਂ chore ਵਰਗਾ ਕੋਈ type ਚੁਣਨ ਲਈ ਕਹਿੰਦਾ ਹਾਂ।
- Context Truncation: ਮੈਂ diff ਦੀਆਂ ਸਿਰਫ਼ ਪਹਿਲੀਆਂ 250 ਲਾਈਨਾਂ ਭੇਜਦਾ ਹਾਂ। ਇਸ ਨਾਲ ਪੈਸੇ ਬਚਦੇ ਹਨ ਅਤੇ ਫੋਕਸ ਸਹੀ ਰਹਿੰਦਾ ਹੈ।
- Validation: ਮੈਂ output ਦੀ ਜਾਂਚ ਕਰਨ ਲਈ ਇੱਕ regex ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ। ਜੇਕਰ message ਗਲਤ ਹੈ, ਤਾਂ script ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਦੀ ਹੈ।
- Low Temperature: ਮੈਂ temperature ਨੂੰ 0.2 'ਤੇ ਸੈੱਟ ਕਰਦਾ ਹਾਂ। ਇਹ output ਨੂੰ ਇਕਸਾਰ (consistent) ਅਤੇ ਬੋਰਿੰਗ ਬਣਾਉਂਦਾ ਹੈ। Logs ਲਈ ਬੋਰਿੰਗ ਹੋਣਾ ਚੰਗਾ ਹੈ।
ਮੈਂ automatic commit hooks ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰਦਾ। AI ਗਲਤੀਆਂ ਕਰਦਾ ਹੈ। ਮੈਂ script ਨੂੰ git alias ਵਜੋਂ ਚਲਾਉਂਦਾ ਹਾਂ। ਇਹ ਇੱਕ message ਸੁਝਾਉਂਦਾ ਹੈ, ਅਤੇ ਮੈਂ commit ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਸਦੀ ਸਮੀਖਿਆ (review) ਕਰਦਾ ਹਾਂ। ਇੱਕ ਮਾੜੀ git history ਤੋਂ ਬਚਣ ਲਈ manual review ਸਭ ਤੋਂ ਵਧੀਆ ਬੀਮਾ ਹੈ।
ਤਿੰਨ ਸਬਕ ਜੋ ਮੈਂ ਸਿੱਖੇ:
- Token limits ਤੁਹਾਡੇ ਦੁਸ਼ਮਣ ਹਨ। ਵੱਡੇ diffs ਤੁਹਾਡੇ ਬਜਟ ਜਾਂ prompt ਨੂੰ ਖਰਾਬ ਕਰ ਸਕਦੇ ਹਨ।
- Validation ਲਾਜ਼ਮੀ ਹੈ। ਇਸ ਤੋਂ ਬਿਨਾਂ, ਤੁਹਾਨੂੰ ਬੇਤੁਕੀਆਂ ਗੱਲਾਂ ਮਿਲਣਗੀਆਂ।
- Speed ਮਾਇਨੇ ਰੱਖਦੀ ਹੈ। ਮੈਂ GPT-4o-mini ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹਾਂ ਕਿਉਂਕਿ ਇਹ ਤੇਜ਼ ਅਤੇ ਸਸਤਾ ਹੈ।
ਜੇਕਰ ਤੁਸੀਂ ਸੰਵੇਦਨਸ਼ੀਲ (sensitive) code 'ਤੇ ਕੰਮ ਕਰਦੇ ਹੋ, ਤਾਂ ਆਪਣੇ diffs ਕਿਸੇ ਬਾਹਰੀ API ਨੂੰ ਨਾ ਭੇਜੋ। ਇਸ ਦੀ ਬਜਾਏ ਇੱਕ local model ਦੀ ਵਰਤੋਂ ਕਰੋ।
ਤੁਸੀਂ ਆਪਣੇ commit messages ਨੂੰ ਕਿਵੇਂ ਸੰਭਾਲਦੇ ਹੋ? ਕੀ ਤੁਸੀਂ AI ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹੋ ਜਾਂ ਉਹਨਾਂ ਨੂੰ ਹੱਥ ਨਾਲ ਲਿਖਦੇ ਹੋ?
