Construyendo un agente de IA local para OSM

Pasé 21 días construyendo un agente de IA local. Convierte lenguaje natural en JSON de filtros de OSM.

Quería que esto funcionara completamente en una GPU local. Sin llamadas a API. Sin riesgos de privacidad. Sin límites de peticiones.

Así es como lo construí y lo que aprendí.

La arquitectura

Utilicé un pipeline de RAG para darle contexto al modelo.

• Embeddings: Utilicé bge-small-en-v1.5 para convertir las descripciones de las etiquetas de OSM en vectores. • Base de datos: Almacené estos embeddings en SQLite. • Recuperación (Retrieval): Cuando haces una pregunta, el sistema encuentra las etiquetas de OSM y los ejemplos de filtros más relevantes. • Generación: El LLM recibe tu consulta más los ejemplos recuperados para crear el JSON.

Los fallos

Construir esto no fue sencillo. Me topé con varios obstáculos.

• El error del token de parada (Stop Token Bug): Mis primeras ejecuciones devolvían resultados vacíos. El modelo añadía una línea en blanco antes del JSON. Esto activaba mi token de parada y cortaba la salida prematuramente. Tuve que eliminar el token de parada para solucionarlo. • Copia ciega: El LLM a menudo copiaba los ejemplos exactamente en lugar de adaptarlos. Reescribí los prompts para obligar al modelo a sintetizar nuevos filtros. • Confusión de dominio: El modelo confundía etiquetas marítimas con etiquetas terrestres. Añadí un paso de validación para filtrar las etiquetas candidatas por relevancia.

Las lecciones

• Evita los tokens de parada: A menos que estés seguro, no los uses. A menudo rompen tu salida. • La calidad de los datos es fundamental: Generar embeddings de frases en lenguaje natural funciona mejor que generar embeddings de cadenas JSON sin procesar. • El bucle es la magia: Añadí un bucle simple. Si un filtro devuelve cero resultados, el agente amplía la solicitud e intenta de nuevo. Esto convierte una herramienta estática en un sistema adaptativo.

El resultado

El sistema se ejecuta en una sola GPU con menos de 8 GB de VRAM. Maneja la mayoría de las consultas sencillas y se adapta cuando falla. Aún necesita trabajo en la negación compleja y la síntesis de etiquetas, pero el núcleo funciona.

¿Cómo manejas la ambigüedad de las etiquetas en tus flujos de trabajo geoespaciales?

Fuente: https://dev.to/gisfromscratch/building-a-local-ai-agent-for-osm-21-days-of-iteration-2fc4

Comunidad de aprendizaje opcional: https://t.me/GyaanSetuAi