میں نے کس طرح AI کو ہمارے کوڈ بیس پر غلط بیانی (hallucinating) کرنے سے روکا
AI کوڈنگ ٹولز حقیقی پروڈکشن پروجیکٹس پر ناکام ہو جاتے ہیں۔ وہ نئے کوڈ پر تو اچھا کام کرتے ہیں، لیکن تاریخ (history) والے پرانے کوڈ پر وہ کام نہیں کر پاتے۔
ہمارے فن ٹیک (fintech) پروجیکٹ کی تین سالہ تاریخ ہے۔ اس میں دو React فرنٹ اینڈز، ایک ایڈمن پینل، اور ایک FastAPI بیک اینڈ ہے۔ ڈیٹا بیس بہت پیچیدہ ہے جس میں بہت سے ٹیبلز اور بھاری جوائنز (joins) شامل ہیں۔
ہم نے تیزی سے کام کرنے کے لیے AI کا استعمال کرنے کی کوشش کی۔ یہ ناکام رہا۔
میں نے AI سے ایک contacts ٹیبل بنانے کو کہا۔ اس نے ناموں اور ای میلز کے لیے نئے کالم بنا دیے۔ اسے اس بات کا احساس نہیں ہوا کہ یہ معلومات پہلے سے ہی ہمارے users ٹیبل میں موجود ہیں۔ اس نے foreign key استعمال کرنے کے بجائے ڈیٹا کو ڈپلیکیٹ کر دیا۔
AI بیوقوف نہیں تھا۔ اس کے پاس سیاق و سباق (context) نہیں تھا۔ اس نے نامکمل معلومات کی بنیاد پر فیصلہ کیا۔
میں نے بہتر کوڈ حاصل کرنے کے بارے میں پوچھنا چھوڑ دیا۔ میں نے یہ پوچھنا شروع کر دیا کہ AI کو اچھے فیصلے کرنے کے لیے کس سیاق و سباق (context) کی ضرورت ہے۔
ہم نے ایک منظم ورک فلو (workflow) بنایا۔ AI صرف اتنا ہی اچھا ہے جتنا اچھا سیاق و سباق (context) آپ اسے فراہم کرتے ہیں۔ ہم نے اس سیاق و سباق کو واضح کر دیا۔
ہمارا سیٹ اپ یہ ہے:
- ADR Directory: ہم نے Architecture Decision Records کے لیے ایک فولڈر بنایا۔ یہ فائلیں وضاحت کرتی ہیں کہ ہم مخصوص انتخاب کیوں کرتے ہیں۔ ایک فائل AI کو بتاتی ہے کہ نئے ٹیبلز بنانے سے پہلے موجودہ ٹیبلز کو چیک کرے۔ یہ یوزر ڈیٹا کو ڈپلیکیٹ کرنے سے منع کرتی ہے۔
- context.md: یہ فائل ہماری مخصوص اصطلاحات کی وضاحت کرتی ہے۔ یہ AI کو بتاتی ہے کہ ہمارے منفرد الفاظ ایک دوسرے سے کیسے جڑے ہوئے ہیں۔
- plot.md: یہ پروجیکٹ کا ایک اعلیٰ سطح کا نقشہ (high-level map) فراہم کرتا ہے اور بتاتا ہے کہ مختلف حصے ایک دوسرے سے کیسے جڑے ہوئے ہیں۔
- Mandatory Tests: ہر نئے API روٹ کے لیے ٹیسٹ کیسز ضروری ہیں۔
اس سے سب کچھ بدل گیا۔ ایک بار، AI نے ایک مشترکہ utility function کو تبدیل کر دیا۔ اس تبدیلی سے سسٹم کے آٹھ دوسرے حصے خراب ہو گئے۔ ٹیسٹ سوٹ (test suite) نے اسے فوراً پکڑ لیا۔ AI نے اس خرابی کو دیکھا اور ایک ایسا ورژن بنا کر اپنی غلطی خود ٹھیک کر لی جو پرانی اور نئی دونوں ضروریات کو پورا کرتا تھا۔
ٹیسٹ کے بغیر، وہ بگ (bug) پروڈکشن تک پہنچ جاتا۔
AI کے ساتھ ایک نئے ڈویلپر کی طرح پیش آئیں۔ آپ کسی نئے ملازم کو آپ کے کوڈ بیس سے واقف نہ ہونے پر موردِ الزام نہیں ٹھہراتے۔ آپ اسے دستاویزات (documentation) اور آن بورڈنگ (onboarding) فراہم کرتے ہیں۔ ہم نے AI کے لیے بھی یہی کیا۔
ہمارا ڈھانچہ:
- docs/context.md: پروجیکٹ کی اصطلاحات اور تعلقات۔
- docs/plot.md: کوڈ بیس کا اعلیٰ سطح کا نقشہ۔
- docs/adr/: مخصوص قواعد جیسے ٹیبل کی تخلیق اور API کا ڈھانچہ۔
آپ کی ٹیم کے لیے تین قواعد:
- ADRs میں مخصوص رہیں۔ مبہم مشوروں کے بجائے واضح ہدایات استعمال کریں۔
- دستاویزات کو مستند بنائیں۔ AI کو بتائیں کہ یہ قواعد سب سے پہلے آتے ہیں۔
- غلطیوں کو قواعد میں بدل دیں۔ جب بھی AI ناکام ہو، ایک نیا ADR لکھیں۔
یہ سسٹم AI کو مکمل طور پر درست نہیں بناتا، بلکہ اسے قابلِ پیش گوئی (predictable) بناتا ہے۔ ہم ایک ایسا کوڈ بیس چاہتے ہیں جہاں AI مستقل مزاج ہو تاکہ ٹیم تیزی سے کام کر سکے۔
