Construire un agent IA local pour OSM
J'ai passé 21 jours à construire un agent IA local. Il transforme le langage naturel en JSON de filtrage OSM.
Je voulais qu'il s'exécute entièrement sur un GPU local. Aucun appel API. Aucun risque pour la confidentialité. Aucune limite de débit.
Voici comment je l'ai construit et ce que j'ai appris.
L'architecture
J'ai utilisé un pipeline RAG pour donner du contexte au modèle.
• Embeddings : J'ai utilisé bge-small-en-v1.5 pour transformer les descriptions de tags OSM en vecteurs. • Base de données : J'ai stocké ces embeddings dans SQLite. • Récupération (Retrieval) : Lorsque vous posez une question, le système trouve les tags OSM et les exemples de filtres les plus pertinents. • Génération : Le LLM reçoit votre requête ainsi que les exemples récupérés pour créer le JSON.
Les échecs
La construction n'a pas été de tout repos. J'ai rencontré plusieurs obstacles.
• Le bug du "stop token" : Mes premiers essais renvoyaient des résultats vides. Le modèle ajoutait une ligne vide avant le JSON. Cela déclenchait mon stop token et coupait la sortie prématurément. J'ai dû supprimer le stop token pour corriger cela. • Copie aveugle : Le LLM copiait souvent les exemples tels quels au lieu de les adapter. J'ai réécrit les prompts pour forcer le modèle à synthétiser de nouveaux filtres. • Confusion de domaine : Le modèle confondait les tags maritimes avec les tags terrestres. J'ai ajouté une étape de validation pour filtrer les tags candidats par pertinence.
Les leçons apprises
• Évitez les stop tokens : À moins d'en être certain, ne les utilisez pas. Ils cassent souvent vos résultats. • La qualité des données est primordiale : l'embedding de phrases en langage naturel fonctionne mieux que l'embedding de chaînes JSON brutes. • La boucle est la clé : J'ai ajouté une boucle simple. Si un filtre ne renvoie aucun résultat, l'agent élargit la requête et réessaie. Cela transforme un outil statique en un système adaptatif.
Le résultat
Le système fonctionne sur un seul GPU avec moins de 8 Go de VRAM. Il gère la plupart des requêtes simples et s'adapte en cas d'échec. Il nécessite encore du travail sur la négation complexe et la synthèse de tags, mais le cœur du système fonctionne.
Comment gérez-vous l'ambiguïté des tags dans vos flux de travail géospatiaux ?
Source : https://dev.to/gisfromscratch/building-a-local-ai-agent-for-osm-21-days-of-iteration-2fc4
Communauté d'apprentissage optionnelle : https://t.me/GyaanSetuAi
