Costruire un agente AI locale per OSM
Ho trascorso 21 giorni a costruire un agente AI locale. Trasforma il linguaggio naturale in JSON per i filtri OSM.
Volevo che girasse interamente su una GPU locale. Nessuna chiamata API. Nessun rischio per la privacy. Nessun limite di frequenza.
Ecco come l'ho costruito e cosa ho imparato.
L'architettura
Ho utilizzato una pipeline RAG per fornire contesto al modello.
• Embeddings: Ho usato bge-small-en-v1.5 per trasformare le descrizioni dei tag OSM in vettori. • Database: Ho memorizzato questi embedding in SQLite. • Retrieval: Quando poni una domanda, il sistema trova i tag OSM e gli esempi di filtro più rilevanti. • Generazione: L'LLM riceve la tua query insieme agli esempi recuperati per creare il JSON.
I fallimenti
Costruire questo progetto non è stato facile. Mi sono scontrato con diversi ostacoli.
• Il bug del token di stop: Le mie prime esecuzioni restituivano risultati vuoti. Il modello aggiungeva una riga vuota prima del JSON. Questo attivava il mio stop token e interrompeva l'output prematuramente. Ho dovuto rimuovere lo stop token per risolvere il problema. • Copia cieca: L'LLM spesso copiava gli esempi esattamente così come erano, invece di adattarli. Ho riscritto i prompt per costringere il modello a sintetizzare nuovi filtri. • Confusione di dominio: Il modello confondeva i tag marittimi con quelli terrestri. Ho aggiunto un passaggio di validazione per filtrare i tag candidati in base alla rilevanza.
Le lezioni imparate
• Evita i token di stop: A meno che tu non ne sia certo, non usarli. Spesso interrompono l'output. • La qualità dei dati è fondamentale: l'embedding di frasi in linguaggio naturale funziona meglio dell'embedding di stringhe JSON grezze. • Il loop è la magia: Ho aggiunto un semplice ciclo. Se un filtro restituisce zero risultati, l'agente amplia la richiesta e riprova. Questo trasforma uno strumento statico in un sistema adattivo.
Il risultato
Il sistema gira su una singola GPU con meno di 8 GB di VRAM. Gestisce la maggior parte delle query semplici e si adatta quando fallisce. Deve ancora fare progressi sulla negazione complessa e sulla sintesi dei tag, ma il nucleo funziona.
Come gestite l'ambiguità dei tag nei vostri flussi di lavoro geospaziali?
Fonte: https://dev.to/gisfromscratch/building-a-local-ai-agent-for-osm-21-days-of-iteration-2fc4
Community di apprendimento opzionale: https://t.me/GyaanSetuAi
