ನಾನು ಬ್ರೌಸರ್ನಲ್ಲಿ CAD ಎಡಿಟರ್ ಅನ್ನು ನಿರ್ಮಿಸಿದೆ, ನಂತರ ಅದನ್ನು ಬಳಸಲು LLM ಗೆ ಕಲಿಸಿದೆ
ನಾನು ನನ್ನ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಕೇಳಿದೆ: "ಅಲ್ಲಿ ಎಷ್ಟು ಬಾಗಿಲುಗಳು ಮತ್ತು ಕಿಟಕಿಗಳಿವೆ?"
AI ಎಣಿಕೆಯನ್ನು ನೀಡಿತು. ನಂತರ ಅದು ಕೇಳದೆಯೇ ಒಂದು ವಿಷಯವನ್ನು ಸೇರಿಸಿತು:
"ಗಮನಿಸಿ: D3 ಕೇವಲ 300 mm ಅಗಲವಿದೆ. ಇದು ಬಹುಶಃ ತಪ್ಪಾಗಿ ಪತ್ತೆಹಚ್ಚಲಾದ ಬಾಗಿಲಾಗಿರಬಹುದು. ನಾನು ಇದನ್ನು ಪರಿಶೀಲಿಸಬೇಕೆ?"
ಅದು ಸರಿಯಾಗಿತ್ತು. ನನ್ನ ಸಿಸ್ಟಮ್ ಒಂದು ಜ್ಯಾಮಿತೀಯ ಭಾಗವನ್ನು (geometry piece) 30 ಸೆಂ.ಮೀ ಬಾಗಿಲನ್ನಾಗಿ ಬದಲಿಸಿತ್ತು. ಯಾವ ಮನುಷ್ಯನೂ ಅದನ್ನು ಗಮನಿಸಿರಲಿಲ್ಲ. ಮಾಡೆಲ್ ಡೇಟಾವನ್ನು ಓದಿತು, ಒಂದು ಶೂ ಬಾಕ್ಸ್ನಿಗಿಂತಲೂ ಕಿರಿದಾದ ಬಾಗಿಲನ್ನು ಕಂಡಿತು ಮತ್ತು ಅದನ್ನು ಗುರುತಿಸಿತು (flagged).
ಆ ಕ್ಷಣವು ಒಂದು ಬೃಹತ್ ಎಂಜಿನಿಯರಿಂಗ್ ಸವಾಲಿನ ಫಲವಾಗಿತ್ತು. ನಾನು AutoCAD DWG ಫೈಲ್ಗಳನ್ನು ಪಾರ್ಸ್ ಮಾಡಬೇಕಾಯಿತು, ಸಾವಿರಾರು ಯಾದೃಚ್ಛಿಕ ರೇಖೆಗಳಿಂದ ಕಟ್ಟಡದ ಮಾದರಿಗಳನ್ನು ಮರುನಿರ್ಮಿಸಬೇಕಾಯಿತು, ಮೊದಲಿನಿಂದම (from scratch) 2D ಎಡಿಟರ್ ಅನ್ನು ನಿರ್ಮಿಸಬೇಕಾಯಿತು ಮತ್ತು ಅದನ್ನು Claude ಗೆ ಸಂಪರ್ಕಿಸಬೇಕಾಯಿತು.
ನಾನು ಅದನ್ನು ಹೇಗೆ ನಿರ್ಮಿಸಿದೆ ಎಂಬುದು ಇಲ್ಲಿದೆ.
ಡೇಟಾ ಸಮಸ್ಯೆ (The Data Problem)
DWG ಫೈಲ್ನಲ್ಲಿ ಗೋಡೆಗಳಿರುವುದಿಲ್ಲ. ಅದರಲ್ಲಿ ರೇಖೆಗಳಿರುತ್ತವೆ. ಈ ಪ್ರಾಜೆಕ್ಟ್ನಲ್ಲಿನ ಪ್ರತಿಯೊಂದು ಆಸಕ್ತಿದಾಯಕ ವಿಷಯವು ಈ ಎರಡು ವಾಕ್ಯಗಳ ನಡುವಿನ ಜಾಗದಲ್ಲಿ ನಡೆಯುತ್ತದೆ.
ಈ ಫೈಲ್ಗಳನ್ನು ನಿರ್ವಹಿಸಲು ನಾನು ಎರಡು ನಿಯಮಗಳನ್ನು ಅನುಸರಿಸಿದೆ:
- ಪಾರ್ಸರ್ ಅನ್ನು ಸಬ್ಪ್ರೊಸೆಸ್ (subprocess) ಆಗಿ ಚಲಾಯಿಸಿ. ಒಂದು ವೇಳೆ 30 ವರ್ಷ ಹಳೆಯ ಪಾರ್ಸರ್ ಕ್ರ್ಯಾಶ್ ಆಗ slightest, ಅದು ನನ್ನ ಸರ್ವರ್ ಅನ್ನು ನಿಲ್ಲಿಸುವುದಿಲ್ಲ.
- ಫೈಲ್ ಅನ್ನು ಎಂದಿಗೂ ನಂಬಬೇಡಿ. DWG ಹೆಡರ್ಗಳು (headers) ಹೆಚ್ಚಾಗಿ ಯೂನಿಟ್ಗಳ ಬಗ್ಗೆ ಸುಳ್ಳು ಹೇಳುತ್ತವೆ. ನಾನು ಹೆಡರ್ ಅನ್ನು ನಿರ್ಲಕ್ಷಿಸಿ, ನಿಜವಾದ ಸ್ಕೇಲ್ ಅನ್ನು ಕಂಡುಹಿಡಿಯಲು ನೈಜ ಸಂಖ್ಯೆಗಳನ್ನು ನೋಡುತ್ತೇನೆ.
ಎಕ್ಸ್ಟ್ರಾಕ್ಷನ್ ಪೈಪ್ಲೈನ್ (The Extraction Pipeline)
ನಾನು ರೇಖೆಗಳ ಸಮೂಹವನ್ನು ಒಂದು ರಚನಾತ್ಮಕ ಮಾದರಿಯನ್ನಾಗಿ (structured model) ಬದಲಾಯಿಸಿದೆ:
- ಗೋಡೆಗಳು ಸೆಂಟರ್ಲೈನ್ಗಳಾಗಿವೆ (centerlines).
- ಬಾಗಿಲುಗಳು ಮತ್ತು ಕಿಟಕಿಗಳು ಅವುಗಳ ಗೋಡೆಗಳಿಗೆ ಅಂಟಿಕೊಳ್ಳುತ್ತವೆ (snap).
- ಕೋಣೆಗಳು ಹೆಸರು ಮತ್ತು ವಿಸ್ತೀರ್ಣವನ್ನು ಹೊಂದಿರುವ ಪಾಲಿಗನ್ಗಳಾಗಿವೆ (polygons).
ವರ್ಗೀಕರಣಕ್ಕಾಗಿ ನಾನು ಒಂದು ಸರಳ ತಂತ್ರವನ್ನು ಬಳಸಿದೆ. ಲೇಯರ್ ಹೆಸರುಗಳಿಗಾಗಿ ನಾನು ಸಬ್ಸ್ಟ್ರಿಂಗ್ ಮ್ಯಾಚಿಂಗ್ (substring matching) ಬಳಸಿದೆ. ಒಂದು ಲೇಯರ್ "WAND" ಅಥವಾ "MAUER" ಎಂದು ಹೇಳಿದರೆ, ಅದು ಗೋಡೆ ಎಂದು ಸಿಸ್ಟಮ್ ತಿಳಿಯುತ್ತದೆ. ಲೇಯರ್ಗೆ ಯಾವುದೇ ಹೆಸರಿಲ್ಲದಿದ್ದರೆ, ಸಿಸ್ಟಮ್ ಜ್ಯಾಮಿತೀಯತೆಯನ್ನು (geometry) ಬಳಸಿ ಊಹಿಸುತ್ತದೆ.
ಎಡಿಟರ್ (The Editor)
ನಾನು ರೊ (raw) Canvas 2D context ಬಳಸಿ ಎಡಿಟರ್ ಅನ್ನು ನಿರ್ಮಿಸಿದೆ. ವೇಗವಾಗಿ ಇರಿಸಲು, ನಾನು ಮೂರು ಲೇಯರ್ಗಳನ್ನು ಬಳಸಿದೆ:
- ಲೇಯರ್ 1: ಸ್ಥಿರ ಗ್ರಿಡ್ ಮತ್ತು ಮೂಲ ರೇಖೆಗಳು.
- ಲೇಯರ್ 2: ಮಾದರಿ (ಗೋಡೆಗಳು, ಕೋಣೆಗಳು, ಬಾಗಿಲುಗಳು).
- ಲೇಯರ್ 3: ಸಕ್ರಿಯ ಕರ್ಸರ್ ಮತ್ತು ಪ್ರಿವ್ಯೂಗಳು.
ಇದು ಸುಮಾರು 1,000 ಗೋಡೆಗಳಿದ್ದರೂ ಸಹ ಫ್ರೇಮ್ ರೇಟ್ ಅನ್ನು 60 FPS ನಲ್ಲಿ ಇರಿಸಿತು.
AI ಕೋಪೈಲಟ್ (The AI Copilot)
ನನಗೆ ಕೇವಲ ಮಾತನಾಡುವ ಚಾಟ್ಬಾಟ್ ಬೇಕಿರಲಿಲ್ಲ. ನನಗೆ ಕೆಲಸ ಮಾಡುವ ಏಜೆಂಟ್ ಬೇಕಿತ್ತು. ಮಾದರಿಯನ್ನು ಓದಲು ಮತ್ತು ಎಡಿಟ್ ಮಾಡಲು ನಾನು Claude ಗೆ ಹದಿಮೂರು ಉಪಕರಣಗಳನ್ನು (tools) ನೀಡಿದೆ.
ಸುರಕ್ಷಿತವಾಗಿರಿಸಲು, ನಾನು ಮೂರು ನಿಯಮಗಳನ್ನು ಅನುಸರಿಸಿದೆ:
- ಒಂದೇ ಬರವಣಿಗೆಯ ಮಾರ್ಗ (One 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). ಅದನ್ನು ಕಟ್ಟುನಿಟ್ಟಾದ ಕೋಡ್ ಮಿತಿಗಳೊಂದಿಗೆ ಎದುರಿಸಿ.
- ಕಷ್ಟದ ಭಾಗ 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
