میں نے براؤزر میں ایک CAD ایڈیٹر بنایا، پھر ایک LLM کو اسے استعمال کرنا سکھایا
میں نے اپنی ایپ سے پوچھا: "کتنے دروازے اور کھڑکیاں ہیں؟"
AI نے تعداد بتا دی۔ پھر اس نے بغیر کہے کچھ مزید اضافہ کیا:
"نوٹ: D3 کی چوڑائی صرف 300 ملی میٹر ہے۔ یہ غالباً غلط طریقے سے پہچانا گیا دروازہ ہے۔ کیا آپ چاہتے ہیں کہ میں اسے چیک کروں؟"
وہ درست تھا۔ میرے سسٹم نے جیومیٹری کے ایک ٹکڑے کو 30 سینٹی میٹر کے دروازے میں بدل دیا تھا۔ کسی انسان نے اس پر غور نہیں کیا تھا۔ ماڈل نے ڈیٹا پڑھا، ایک جوتے کے ڈبے سے بھی زیادہ تنگ دروازہ دیکھا، اور اسے نشان زد (flag) کر دیا۔
وہ لمحہ ایک بہت بڑے انجینئرنگ چیلنج کا صلہ تھا۔ مجھے AutoCAD DWG فائلوں کو پارس کرنا تھا، ہزاروں بے ترتیب لائنوں سے عمارت کے ماڈلز کو دوبارہ ترتیب دینا تھا، شروع سے ایک 2D ایڈیٹر بنانا تھا، اور اسے Claude سے جوڑنا تھا۔
میں نے اسے اس طرح بنایا۔
ڈیٹا کا مسئلہ
ایک DWG فائل میں دیواریں نہیں ہوتیں۔ اس میں لائنیں ہوتی ہیں۔ اس پروجیکٹ میں تمام دلچسپ چیزیں ان دو جملوں کے درمیان کے خلا میں رونما ہوتی ہیں۔
میں نے ان فائلوں کو سنبھالنے کے لیے دو اصول اپنائے:
- پارسر کو ایک subprocess کے طور پر چلائیں۔ اگر 30 سال پرانا پارسر کریش ہو جائے، تو یہ میرے سرور کو بند نہیں کرے گا۔
- فائل پر کبھی بھروسہ نہ کریں۔ DWG ہیڈرز اکثر یونٹس (units) کے بارے میں غلط معلومات دیتے ہیں۔ میں ہیڈر کو نظر انداز کرتا ہوں اور اصل پیمائش معلوم کرنے کے لیے حقیقی نمبروں کو دیکھتا ہوں۔
ایکسٹریکشن پائپ لائن
میں نے لائنوں کے ڈھیر کو ایک منظم ماڈل میں تبدیل کر دیا:
- دیواریں سینٹر لائنز (centerlines) ہیں۔
- دروازے اور کھڑکیاں متعلقہ دیواروں کے ساتھ جڑ جاتے ہیں۔
- کمرے ناموں اور رقبے کے ساتھ کثیر الاضلاع (polygons) ہیں۔
میں نے درجہ بندی (classification) کے لیے ایک سادہ سا طریقہ استعمال کیا۔ میں نے لیئر کے ناموں کے لیے substring matching کا استعمال کیا۔ اگر کسی لیئر کا نام "WAND" یا "MAUER" ہے، تو سسٹم جان جاتا ہے کہ یہ ایک دیوار ہے۔ اگر کسی لیئر کا کوئی نام نہیں ہے، تو سسٹم اندازہ لگانے کے لیے جیومیٹری کا استعمال کرتا ہے۔
ایڈیٹر
میں نے ایڈیٹر کو ایک سادہ Canvas 2D context کا استعمال کرتے ہوئے بنایا۔ اسے تیز رکھنے کے لیے، میں نے تین لیئرز استعمال کیں:
- لیئر 1: اسٹیٹک گرڈ اور اصل لائنیں۔
- لیئر 2: ماڈل (دیواریں، کمرے، دروازے)۔
- لیئر 3: ایکٹو کرسر اور پری ویوز (previews)۔
اس سے تقریباً 1,000 دیواروں کے ساتھ بھی فریم ریٹ 60 FPS پر برقرار رہا۔
AI کو پائلٹ (AI Copilot)
میں ایسا چیٹ بوٹ نہیں چاہتا تھا جو صرف باتیں کرے۔ میں ایک ایسا ایجنٹ چاہتا تھا جو کام کرے۔ میں نے Claude کو ماڈل کو پڑھنے اور ایڈٹ کرنے کے لیے تیرہ ٹولز دیے۔
اسے محفوظ رکھنے کے لیے، میں نے تین اصولوں پر عمل کیا:
- ایک ہی رائٹ پاتھ (write path): AI بالکل وہی ویلیڈیٹڈ کوڈ استعمال کرتا ہے جو مینوئل UI استعمال کرتا ہے۔ اگر UI اسے محفوظ نہیں کر سکتا، تو AI بھی اسے محفوظ نہیں کر سکتا۔
- قابلِ بحالی غلطیاں (Recoverable errors): اگر AI کسی ایسی جگہ دروازہ لگانے کی کوشش کرتا ہے جہاں وہ فٹ نہیں بیٹھتا، تو ٹول ایک ایرر (error) واپس کرتا ہے۔ AI اس ایرر کو پڑھتا ہے اور کسی دوسری جگہ کوشش کرتا ہے۔
- ان ڈو (undo) کی سہولت: AI کے ہر عمل کو ایک ہی ٹرانزیکشن (transaction) میں رکھا جاتا ہے۔ اگر AI سے کوئی غلطی ہو جائے، تو Ctrl+Z کا ایک بٹن سب کچھ ٹھیک کر دیتا ہے۔
اسباق
- جیومیٹری کے بگ (bugs) ان اشکال میں چھپے ہوتے ہیں جن کا آپ ٹیسٹ نہیں کرتے۔ مستطیل عمارتیں آسان ہوتی ہیں۔ L-شکل کی عمارتیں سب کچھ خراب کر دیتی ہیں۔
- اپنے ٹولز کو فز (fuzz) کریں۔ LLM ایک فزر (fuzzer) ہے۔ اس کا مقابلہ سخت کوڈ کی حدود کے ساتھ کریں۔
- مشکل حصہ AI نہیں ہے۔ یہ ڈیٹا کی بنیاد ہے۔ چونکہ جیومیٹری مضبوط تھی، اس لیے AI انٹیگریشن میں ہفتوں کے بجائے صرف چند دن لگے۔
ماخذ: https://dev.to/arif/i-built-a-cad-editor-in-the-browser-then-taught-an-llm-to-use-it-1l92
