Tarayıcıda Bir CAD Editörü Oluşturdum, Sonra Bir LLM'e Onu Kullanmayı Öğrettim
Uygulamama sordum: "Kaç tane kapı ve pencere var?"
Yapay zeka sayıları vererek cevapladı. Sonra, kendiliğinden bir şey ekledi:
"Not: D3 sadece 300 mm genişliğinde. Bu muhtemelen yanlış tespit edilmiş bir kapı. Kontrol etmemi ister misin?"
Haklıydı. Sistemim, bir geometri parçasını 30 cm'lik bir kapıya dönüştürmüştü. Hiçbir insan bunu fark etmemişti. Model veriyi okudu, ayakkabı kutusundan daha dar bir kapı gördü ve bunu işaretledi.
O an, devasa bir mühendislik zorluğunun karşılığıydı. AutoCAD DWG dosyalarını ayrıştırmam, binlerce rastgele çizgiden bina modellerini yeniden oluşturmam, sıfırdan bir 2D editör inşa etmem ve bunu Claude'a bağlamam gerekiyordu.
İşte nasıl inşa ettiğim.
Veri Problemi
Bir DWG dosyası duvarlar içermez. Çizgiler içerir. Bu projedeki her ilginç şey, bu iki cümle arasındaki boşlukta gerçekleşiyor.
Bu dosyaları işlemek için iki kural izledim:
- Ayrıştırıcıyı (parser) bir alt süreç (subprocess) olarak çalıştırın. Eğer 30 yıllık ayrıştırıcı çökerse, sunucumu çökertmez.
- Dosyaya asla güvenmeyin. DWG başlıkları (headers) birimler konusunda genellikle yalan söyler. Başlığı görmezden geliyorum ve gerçek ölçeği bulmak için asıl sayılara bakıyorum.
Veri Çıkarma Hattı
Çizgi yığınını yapılandırılmış bir modele dönüştürdüm:
- Duvarlar merkez çizgileridir.
- Kapılar ve pencereler ana duvarlara kenetlenir (snap).
- Odalar, isimleri ve alanları olan poligonlardır.
Sınıflandırma için basit bir hile kullandım. Katman (layer) isimleri için alt dize eşleştirme (substring matching) kullandım. Eğer bir katman "WAND" veya "MAUER" diyorsa, sistem onun bir duvar olduğunu bilir. Eğer bir katmanın ismi yoksa, sistem tahmin yürütmek için geometriyi kullanır.
Editör
Editörü ham bir Canvas 2D bağlamı (context) kullanarak inşa ettim. Hızlı tutmak için üç katman kullandım:
- Katman 1: Statik ızgara ve orijinal çizgiler.
- Katman 2: Model (duvarlar, odalar, kapılar).
- Katman 3: Aktif imleç ve önizlemeler.
Bu, yaklaşık 1.000 duvar olsa bile kare hızını (frame rate) 60 FPS'de tuttu.
Yapay Zeka Yardımcısı (AI Copilot)
Sadece konuşan bir sohbet botu istemedim. Çalışan bir ajan istedim. Claude'a modeli okuması ve düzenlemesi için on üç araç verdim.
Güvenli tutmak için üç kural izledim:
- Tek bir yazma yolu: Yapay zeka, manuel kullanıcı arayüzü (UI) ile tamamen aynı doğrulanmış kodu kullanır. Eğer UI bunu kaydedemiyorsa, yapay zeka da kaydedemez.
- Kurtarılabilir hatalar: Eğer yapay zeka bir kapıyı sığmayacağı bir yere yerleştirmeye çalışırsa, araç bir hata döndürür. Yapay zeka bu hatayı okur ve farklı bir yer dener.
- Bir geri alma (undo) hikayesi: Her yapay zeka eylemi tek bir işleme (transaction) dahil edilir. Eğer yapay zeka bir hata yaparsa, bir Ctrl+Z tuşuna basmak her şeyi düzeltir.
Alınan Dersler
- Geometri hataları, test etmediğiniz şekillerde gizlenir. Dikdörtgen binalar kolaydır. L şeklindeki binalar her şeyi bozar.
- Araçlarınızı fuzz edin. LLM bir fuzzer'dır. Onu katı kod sınırlarıyla karşılayın.
- Zor olan kısım yapay zeka değil, veri temelidir. Geometri sağlam olduğu için yapay zeka entegrasyonu haftalar yerine günler sürdü.
Kaynak: https://dev.to/arif/i-built-a-cad-editor-in-the-browser-then-taught-an-llm-to-use-it-1l92
