நான் உலாவியிலேயே (Browser) ஒரு CAD Editor-ஐ உருவாக்கினேன், பிறகு ஒரு LLM-க்கு அதை பயன்படுத்தக் கற்றுக்கொடுத்தேன்
எனது செயலியிடம் (app) நான் கேட்டேன்: "அங்கே எத்தனை கதவுகள் மற்றும் ஜன்னல்கள் உள்ளன?"
AI எண்ணிக்கையைச் சொன்னது. பிறகு, நான் கேட்காமலேயே ஒன்றைச் சேர்த்தது:
"குறிப்பு: D3 வெறும் 300 mm அகலம் மட்டுமே உள்ளது. இது தவறாகக் கண்டறியப்பட்ட கதவாக இருக்கலாம். நான் இதைச் சரிபார்க்க வேண்டுமா?"
அது சரியாக இருந்தது. எனது அமைப்பு ஒரு வடிவியலை (geometry) 30 செமீ கதவாக மாற்றியிருந்தது. எந்த மனிதனும் அதை கவனிக்கவில்லை. அந்த மாடல் தரவுகளைப் படித்து, ஒரு காலணிப் பெட்டியை விடக் குறுகிய கதவைக் கண்டு, அதைச் சுட்டிக்காட்டியது.
அந்தத் தருணம் ஒரு மிகப்பெரிய பொறியியல் சவாலுக்கான பலனாக அமைந்தது. நான் AutoCAD DWG கோப்புகளைப் பகுப்பாய்வு (parse) செய்ய வேண்டும், ஆயிரக்கணக்கான சீரற்ற கோடுகளிலிருந்து கட்டிட மாதிரிகளை (building models) மீண்டும் உருவாக்க வேண்டும், ஒரு 2D editor-ஐ ஆரம்பத்திலிருந்து உருவாக்க வேண்டும் மற்றும் அதை Claude உடன் இணைக்க வேண்டும்.
நான் அதை எப்படி உருவாக்கினேன் என்பது இதோ.
தரவுப் பிரச்சனை (The Data Problem)
ஒரு DWG கோப்பில் சுவர்கள் இருப்பதில்லை. அதில் கோடுகள் மட்டுமே உள்ளன. இந்தத் திட்டத்தில் சுவாரஸ்யமான அனைத்தும் அந்த இரண்டு வாக்கியங்களுக்கு இடைப்பட்ட இடைவெளியில் நிகழ்கின்றன.
இந்தக் கோப்புகளைக் கையாள நான் இரண்டு விதிகளைப் பின்பற்றினேன்:
- parser-ஐ ஒரு subprocess ஆக இயக்கவும். 30 ஆண்டுகள் பழமையான அந்த parser செயலிழந்தால், அது எனது சேவையகத்தை (server) முடக்காது.
- கோப்பை ஒருபோதும் நம்ப வேண்டாம். DWG headers பெரும்பாலும் அலகுகள் (units) குறித்துத் தவறான தகவல்களைத் தரும். நான் header-ஐப் புறக்கணித்துவிட்டு, உண்மையான அளவைக் கண்டறிய உண்மையான எண்களைப் பார்க்கிறேன்.
தரவுப் பிரித்தெடுக்கும் வழிமுறை (The Extraction Pipeline)
கோடுகளின் கூட்டத்தை ஒரு கட்டமைக்கப்பட்ட மாதிரியாக (structured model) மாற்றினேன்:
- சுவர்கள் மையக்கோடுகள் (centerlines) ஆகும்.
- கதவுகள் மற்றும் ஜன்னல்கள் அவை அமைந்துள்ள சுவர்களுடன் இணைந்துவிடும் (snap).
- அறைகள் பெயர்கள் மற்றும் பரப்பளவைக் கொண்ட பலகோணங்கள் (polygons) ஆகும்.
வகைப்படுத்துதலுக்கு (classification) நான் ஒரு எளிய தந்திரத்தைப் பயன்படுத்தினேன். Layer பெயர்களுக்காக substring matching முறையைப் பயன்படுத்தினேன். ஒரு layer "WAND" அல்லது "MAUER" என்று இருந்தால், அது ஒரு சுவர் என்பதை அமைப்பு அறிந்து கொள்ளும். ஒரு layer-க்கு பெயர் இல்லையென்றால், அமைப்பு வடிவியலைப் (geometry) பயன்படுத்தி ஊகிக்கும்.
எடிட்டர் (The Editor)
ஒரு நேரடி Canvas 2D context மூலம் நான் எடிட்டரை உருவாக்கினேன். அதை வேகமாக வைத்திருக்க, நான் மூன்று அடுக்குகளைப் (layers) பயன்படுத்தினேன்:
- Layer 1: நிலையான கட்டம் (static grid) மற்றும் அசல் கோடுகள்.
- Layer 2: மாதிரி (சுவர்கள், அறைகள், கதவுகள்).
- Layer 3: செயல்பாட்டில் உள்ள கர்சர் (active cursor) மற்றும் முன்னோட்டங்கள் (previews).
இது கிட்டத்தட்ட 1,000 சுவர்கள் இருந்தாலும், frame rate-ஐ 60 FPS-இல் வைத்திருந்தது.
AI துணை உதவியாளர் (The AI Copilot)
வெறும் பேசும் சாட்பாட் (chatbot) எனக்குத் தேவையில்லை. வேலை செய்யும் ஒரு ஏஜென்ட் (agent) எனக்குத் தேவைப்பட்டது. மாதிரியைப் படிக்கவும் திருத்தவும் நான் Claude-க்கு பதிமூன்று கருவிகளைக் கொடுத்தேன்.
பாதுகாப்பாக வைத்திருக்க, நான் மூன்று விதிகளைப் பின்பற்றினேன்:
- ஒரே எழுதும் வழி (One write path): கைமுறை UI-இல் பயன்படுத்தப்படும் அதே சரிபார்க்கப்பட்ட குறியீட்டைத்தான் AI-யும் பயன்படுத்துகிறது. UI-ஆல் அதைச் சேமிக்க முடியாவிட்டால், AI-யாலும் சேமிக்க முடியாது.
- மீட்டெடுக்கக்கூடிய பிழைகள் (Recoverable errors): ஒரு கதவு பொருந்தாத இடத்தில் AI அதை வைக்க முயன்றால், அந்த கருவி ஒரு பிழையைத் தரும். AI அந்தப் பிழையைப் படித்துவிட்டு வேறு இடத்தில் முயற்சிக்கும்.
- ஒரு 'undo' வசதி: ஒவ்வொரு AI செயலும் ஒரு ஒற்றை பரிவர்த்தனையாக (transaction) இணைக்கப்படுகிறது. AI ஏதேனும் தவறு செய்தால், ஒருமுறை Ctrl+Z அழுத்தினால் அனைத்தும் சரியாகிவிடும்.
பாடங்கள் (The Lessons)
- நீங்கள் சோதனை செய்யாத வடிவங்களில் வடிவியல் பிழைகள் (geometry bugs) ஒளிந்துள்ளன. செவ்வக வடிவக் கட்டிடங்கள் எளிதானவை. L-வடிவக் கட்டிடங்கள் அனைத்தையும் குழப்பமடையச் செய்யும்.
- உங்கள் கருவிகளைச் சோதிக்கவும் (Fuzz). LLM என்பது ஒரு fuzzer ஆகும். அதைத் தெளிவான குறியீடு எல்லைகளுடன் (strict code boundaries) எதிர்கொள்ளுங்கள்.
- கடினமான பகுதி AI அல்ல. அது தரவு அடிப்படை (data foundation). வடிவியல் வலுவாக இருந்ததால், AI ஒருங்கிணைப்பு வாரக்கணக்கில் நடக்காமல் சில நாட்களிலேயே முடிந்தது.
Source: https://dev.to/arif/i-built-a-cad-editor-in-the-browser-then-taught-an-llm-to-use-it-1l92
