Saya Membina Editor CAD dalam Pelayar, Kemudian Mengajar LLM Menggunakannya

Saya bertanya kepada aplikasi saya: "Berapakah bilangan pintu dan tingkap yang ada?"

AI menjawab dengan jumlah tersebut. Kemudian, ia menambah sesuatu tanpa diminta:

"Nota: D3 hanya selebar 300 mm. Ini berkemungkinan pintu yang dikesan secara salah. Mahu saya menyemaknya?"

Ia betul. Sistem saya telah menukarkan satu bahagian geometri menjadi pintu bersaiz 30 cm. Tiada manusia yang menyedarinya. Model tersebut membaca data, melihat pintu yang lebih sempit daripada kotak kasut, dan menandakannya.

Detik itu adalah ganjaran bagi cabaran kejuruteraan yang besar. Saya perlu mencerakin (parse) fail AutoCAD DWG, membina semula model bangunan daripada beribu-ribu garisan rawak, membina editor 2D dari awal, dan menyambungkannya kepada Claude.

Berikut adalah cara saya membinanya.

Masalah Data Fail DWG tidak mengandungi dinding. Ia mengandungi garisan. Segala perkara menarik dalam projek ini berlaku dalam ruang di antara dua ayat tersebut.

Saya mengikut dua peraturan untuk mengendalikan fail-fail ini:

  • Jalankan parser sebagai subproses. Jika parser berusia 30 tahun itu terhenti (crash), ia tidak akan mematikan pelayan saya.
  • Jangan sesekali percaya pada fail tersebut. Header DWG sering memberikan maklumat palsu tentang unit. Saya mengabaikan header dan melihat nombor sebenar untuk mencari skala yang tepat.

Saluran Pengekstrakan Saya menukarkan timbunan garisan yang tidak teratur kepada model berstruktur:

  • Dinding adalah garisan tengah (centerlines).
  • Pintu dan tingkap melekat (snap) pada dinding hos.
  • Bilik adalah poligon dengan nama dan keluasan.

Saya menggunakan helah mudah untuk klasifikasi. Saya menggunakan padanan substring untuk nama lapisan (layer). Jika sesuatu lapisan tertulis "WAND" atau "MAUER," sistem akan tahu ia adalah dinding. Jika sesuatu lapisan tiada nama, sistem akan menggunakan geometri untuk meneka.

Editor Saya membina editor menggunakan konteks Canvas 2D mentah. Untuk mengekalkannya pantas, saya menggunakan tiga lapisan:

  • Lapisan 1: Grid statik dan garisan asal.
  • Lapisan 2: Model (dinding, bilik, pintu).
  • Lapisan 3: Kursor aktif dan pratonton.

Ini mengekalkan kadar bingkai (frame rate) pada 60 FPS walaupun dengan hampir 1,000 dinding.

Pembantu AI (AI Copilot) Saya tidak mahukan chatbot yang sekadar bercakap. Saya mahukan ejen yang bekerja. Saya memberikan Claude tiga belas alatan untuk membaca dan menyunting model tersebut.

Untuk menjadikannya selamat, saya mengikut tiga peraturan:

  • Satu laluan penulisan: AI menggunakan kod yang disahkan yang sama tepat dengan UI manual. Jika UI tidak boleh menyimpannya, AI juga tidak boleh menyimpannya.
  • Ralat yang boleh dipulihkan: Jika AI cuba meletakkan pintu di tempat yang tidak sesuai, alatan tersebut akan mengembalikan ralat. AI akan membaca ralat itu dan mencuba tempat lain.
  • Sejarah 'undo': Setiap tindakan AI digabungkan ke dalam satu transaksi tunggal. Jika AI melakukan kesilapan, satu tekanan Ctrl+Z akan membetulkan segalanya.

Pengajaran

  • Pepijat (bug) geometri tersembunyi dalam bentuk yang tidak anda uji. Bangunan berbentuk segi empat adalah mudah. Bangunan berbentuk L merosakkan segalanya.
  • Lakukan 'fuzzing' pada alatan anda. LLM adalah satu 'fuzzer'. Hadapinya dengan sempadan kod yang ketat.
  • Bahagian yang sukar bukanlah AI. Ia adalah asas data. Oleh kerana geometrinya kukuh, integrasi AI hanya mengambil masa beberapa hari dan bukannya berminggu-minggu.

Sumber: https://dev.to/arif/i-built-a-cad-editor-in-the-browser-then-taught-an-llm-to-use-it-1l92