मी ब्राउझरमध्ये CAD एडिटर तयार केला, आणि नंतर LLM ला तो वापरण्याचे प्रशिक्षण दिले
मी माझ्या ॲपला विचारले: "तिथे किती दरवाजे आणि खिडक्या आहेत?"
AI ने त्यांची संख्या सांगितली. त्यानंतर त्याने विचारले नसतानाही काहीतरी जोडले:
"टीप: D3 ची रुंदी फक्त 300 mm आहे. हा बहुधा चुकीचा ओळखला गेलेला दरवाजा असू शकतो. मी तो तपासावा का?"
ते बरोबर होते. माझ्या सिस्टमने भूमितीचा (geometry) एक भाग ३० सेमीच्या दरवाजात रूपांतरित केला होता. कोणत्याही मानवी डोळ्याला ते लक्षात आले नव्हते. मॉडेलने डेटा वाचला, एका शूजच्या बॉक्सपेक्षाही अरुंद असलेला दरवाजा पाहिला आणि तो हायलाईट (flag) केला.
तो क्षण एका प्रचंड अभियांत्रिकी आव्हानाचे फळ होते. मला AutoCAD DWG फाइल्स पार्स (parse) कराव्या लागल्या, हजारो विखुरलेल्या रेषांपासून इमारतीचे मॉडेल्स पुन्हा तयार करावे लागले, शून्यापासून 2D एडिटर बनवावा लागला आणि तो Claude शी जोडावा लागला.
मी ते कसे बनवले ते खाली दिले आहे.
डेटाची समस्या (The Data Problem) DWG फाईलमध्ये भिंती नसतात. त्यात फक्त रेषा असतात. या प्रकल्पातील सर्व महत्त्वाच्या गोष्टी या दोन वाक्यांच्या मधल्या जागेत घडतात.
या फाइल्स हाताळण्यासाठी मी दोन नियम पाळले:
- पार्सर (parser) सबप्रोसेस (subprocess) म्हणून चालवा. जर ३० वर्षे जुना पार्सर क्रॅश झाला, तर त्यामुळे माझा सर्व्हर बंद पडणार नाही.
- फाईलवर कधीही विश्वास ठेवू नका. DWG हेडर्स अनेकदा युनिट्सबद्दल (units) चुकीची माहिती देतात. मी हेडरकडे दुर्लक्ष करतो आणि अचूक स्केल शोधण्यासाठी प्रत्यक्ष आकड्यांकडे पाहतो.
एक्सट्रॅक्शन पाइपलाइन (The Extraction Pipeline) मी रेषांच्या गोंधळातून एक स्ट्रक्चर्ड मॉडेल तयार केले:
- भिंती म्हणजे सेंटरलाईन्स (centerlines) आहेत.
- दरवाजे आणि खिडक्या मुख्य भिंतींना जोडल्या जातात (snap).
- खोल्या म्हणजे नावे आणि क्षेत्रफळ असलेले पॉलिगन्स (polygons) आहेत.
वर्गीकरणासाठी मी एक सोपी युक्ती वापरली. मी लेयरच्या नावासाठी सबस्ट्रिंग मॅचिंग (substring matching) वापरले. जर लेयरचे नाव "WAND" किंवा "MAUER" असेल, तर सिस्टमला समजते की ती भिंत आहे. जर लेयरला नाव नसेल, तर सिस्टम भूमितीचा (geometry) वापर करून अंदाज लावते.
एडिटर (The Editor) मी रॉ कॅनव्हास 2D कॉन्टेक्स्ट (raw Canvas 2D context) वापरून एडिटर तयार केला. तो वेगवान ठेवण्यासाठी, मी तीन लेयर्स वापरले:
- लेयर १: स्टॅटिक ग्रिड आणि मूळ रेषा.
- लेयर २: मॉडेल (भिंती, खोल्या, दरवाजे).
- लेयर ३: ॲक्टिव्ह कर्सर आणि प्रिव्ह्यू.
यामुळे जवळपास १,००० भिंती असूनही फ्रेम रेट ६० FPS वर राहिला.
AI कोपायलट (The AI Copilot) मला फक्त बोलणारा चॅटबॉट नको होता. मला काम करणारा एजंट हवा होता. मी मॉडेल वाचण्यासाठी आणि संपादित करण्यासाठी Claude ला तेरा टूल्स दिले.
सुरक्षिततेसाठी, मी तीन नियम पाळले:
- एकच 'राईट पाथ' (write path): AI अगदी तेच व्हॅलिडेटेड कोड वापरते जे मॅन्युअल UI वापरते. जर UI ते सेव्ह करू शकत नसेल, तर AI देखील ते सेव्ह करू शकत नाही.
- रिकव्हर करण्यायोग्य त्रुटी (Recoverable errors): जर AI अशा ठिकाणी दरवाजा लावण्याचा प्रयत्न करत असेल जिथे तो बसत नाही, तर टूल एरर (error) देते. AI तो एरर वाचते आणि दुसरी जागा शोधण्याचा प्रयत्न करते.
- अनडू (undo) सुविधा: AI ची प्रत्येक कृती एका सिंगल ट्रान्झॅक्शनमध्ये (transaction) समाविष्ट असते. जर AI कडून चूक झाली, तर Ctrl+Z दाबल्याने सर्व काही पूर्ववत होते.
धडे (The Lessons)
- भूमितीमधील त्रुटी (Geometry bugs) अशा आकारांमध्ये लपलेल्या असतात ज्यांची तुम्ही चाचणी घेत नाही. आयताकृती इमारती सोप्या असतात. L-आकाराच्या इमारती सर्व काही बिघडवू शकतात.
- तुमच्या टूल्सना 'फझ' (fuzz) करा. LLM हा एक 'फझर' (fuzzer) आहे. त्याला कडक कोड बाउंड्रीजसह (code boundaries) सामोरे जा.
- कठीण भाग AI नाहीये. तो डेटाचा पाया (data foundation) आहे. भूमिती भक्कम असल्यामुळे, AI इंटिग्रेशनसाठी आठवडे नाही तर फक्त काही दिवस लागले.
स्रोत: https://dev.to/arif/i-built-a-cad-editor-in-the-browser-then-taught-an-llm-to-use-it-1l92
