Construindo um Agente de IA Local para OSM

Passei 21 dias construindo um agente de IA local. Ele transforma linguagem natural em JSON de filtro do OSM.

Eu queria que isso rodasse inteiramente em uma GPU local. Sem chamadas de API. Sem riscos de privacidade. Sem limites de taxa.

Aqui está como eu o construí e o que aprendi.

A Arquitetura

Usei um pipeline de RAG para fornecer contexto ao modelo.

• Embeddings: Usei o bge-small-en-v1.5 para transformar descrições de tags do OSM em vetores. • Banco de Dados: Armazenei esses embeddings no SQLite. • Recuperação (Retrieval): Quando você faz uma pergunta, o sistema encontra as tags do OSM e os exemplos de filtro mais relevantes. • Geração: O LLM recebe sua consulta mais os exemplos recuperados para criar o JSON.

As Falhas

Construir isso não foi tranquilo. Enfrentei vários obstáculos.

• O Bug do Stop Token: Minhas primeiras execuções retornaram resultados vazios. O modelo adicionava uma linha em branco antes do JSON. Isso acionava meu stop token e interrompia a saída prematuramente. Tive que remover o stop token para corrigir isso. • Cópia Cega: O LLM frequentemente copiava os exemplos exatamente, em vez de adaptá-los. Reescrevi os prompts para forçar o modelo a sintetizar novos filtros. • Confusão de Domínio: O modelo confundia tags marítimas com tags terrestres. Adicionei uma etapa de validação para filtrar as tags candidatas por relevância.

As Lições

• Evite stop tokens: A menos que você tenha certeza, não os use. Eles frequentemente quebram sua saída. • A qualidade dos dados é fundamental: Fazer o embedding de frases em linguagem natural funciona melhor do que fazer o embedding de strings JSON brutas. • O loop é a mágica: Adicionei um loop simples. Se um filtro retornar zero resultados, o agente amplia a solicitação e tenta novamente. Isso transforma uma ferramenta estática em um sistema adaptativo.

O Resultado

O sistema roda em uma única GPU com menos de 8 GB de VRAM. Ele lida com a maioria das consultas simples e se adapta quando falha. Ainda precisa de ajustes em negações complexas e síntese de tags, mas o núcleo funciona.

Como você lida com a ambiguidade de tags em seus fluxos de trabalho geoespaciais?

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

Comunidade de aprendizado opcional: https://t.me/GyaanSetuAi