Ho costruito un editor CAD nel browser, poi ho insegnato a un LLM come usarlo

Ho chiesto alla mia app: "Quante porte e finestre ci sono?"

L'IA ha risposto con i conteggi. Poi ha aggiunto qualcosa non richiesto:

"Nota: D3 è larga solo 300 mm. È probabile che sia una porta rilevata erroneamente. Vuoi che la controlli?"

Aveva ragione. Il mio sistema aveva trasformato un elemento geometrico in una porta da 30 cm. Nessun essere umano se n'era accorto. Il modello ha letto i dati, ha visto una porta più stretta di una scatola di scarpe e l'ha segnalata.

Quel momento è stato la ricompensa per una sfida ingegneristica enorme. Ho dovuto analizzare file AutoCAD DWG, ricostruire modelli edilizi da migliaia di linee casuali, costruire un editor 2D da zero e collegarlo a Claude.

Ecco come l'ho costruito.

Il problema dei dati

Un file DWG non contiene pareti. Contiene linee. Tutto ciò che è interessante in questo progetto accade nello spazio tra queste due frasi.

Ho seguito due regole per gestire questi file:

  • Eseguire il parser come sottoprocesso. Se il parser trentennale va in crash, non blocca il mio server.
  • Non fidarsi mai del file. Gli header DWG spesso mentono sulle unità di misura. Ignoro l'header e guardo i numeri effettivi per trovare la scala reale.

La pipeline di estrazione

Ho trasformato un ammasso di linee in un modello strutturato:

  • Le pareti sono linee di mezzeria.
  • Porte e finestre si agganciano alle pareti ospitanti.
  • Le stanze sono poligoni con nomi e aree.

Ho usato un trucco semplice per la classificazione. Ho utilizzato il matching di sottostringhe per i nomi dei layer. Se un layer riporta "WAND" o "MAUER", il sistema sa che si tratta di una parete. Se un layer non ha nome, il sistema usa la geometria per indovinare.

L'editor

Ho costruito l'editor utilizzando un contesto Canvas 2D grezzo. Per mantenerlo veloce, ho usato tre livelli:

  • Livello 1: La griglia statica e le linee originali.
  • Livello 2: Il modello (pareti, stanze, porte).
  • Livello 3: Il cursore attivo e le anteprime.

Questo ha mantenuto il frame rate a 60 FPS anche con quasi 1.000 pareti.

L'AI Copilot

Non volevo un chatbot che si limitasse a parlare. Volevo un agente che agisse. Ho dato a Claude tredici strumenti per leggere e modificare il modello.

Per garantire la sicurezza, ho seguito tre regole:

  • Un unico percorso di scrittura: L'IA utilizza lo stesso identico codice validato dell'interfaccia utente manuale. Se l'interfaccia non può salvarlo, l'IA non può salvarlo.
  • Errori recuperabili: Se l'IA prova a posizionare una porta dove non entra, lo strumento restituisce un errore. L'IA legge l'errore e prova un punto diverso.
  • Una cronologia di annullamento: Ogni azione dell'IA è racchiusa in un'unica transazione. Se l'IA commette un errore, un solo Ctrl+Z risolve tutto.

Le lezioni apprese

  • I bug geometrici si nascondono nelle forme che non testi. Gli edifici rettangolari sono facili. Gli edifici a forma di L rompono tutto.
  • Fuzza i tuoi strumenti. L'LLM è un fuzzer. Affrontalo con confini di codice rigorosi.
  • La parte difficile non è l'IA. È la base dei dati. Poiché la geometria era solida, l'integrazione dell'IA ha richiesto giorni invece di settimane.

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