DNI Valencia (ONG)18 meses (v1.0 → v4.0)En producción

DNI Valencia v4.0.

Python, FastAPI, ChromaDB, Ollama, arquitectura hexagonal, multi-agent

ragollamachatbothexagonalong

Un chatbot RAG que responde con un 94% de precisión sin enviar un solo byte de datos a servicios externos.

Contexto

DNI Valencia es una ONG que coordina programas de solidaridad alimentaria en la ciudad. Su equipo de atención recibe a diario consultas repetitivas: requisitos para acceder a los programas, horarios, documentación necesaria, procesos de alta. La información existe en manuales, actas y protocolos internos, pero buscarla cada vez consume horas que deberían dedicarse al trabajo de campo.

Me acerqué a ellos dentro del marco de mis prácticas en la Cátedra ENIA de la UPV con una propuesta concreta: construir un sistema interno que permitiera consultar toda su documentación con lenguaje natural, sin coste mensual y sin que los datos de beneficiarios salieran nunca de sus servidores.

El problema

DNI tenía tres dolores claros. Primero, el coste: no podían permitirse pagar una suscripción mensual a ninguna API de pago. Segundo, la privacidad: su documentación incluye datos de personas en situación vulnerable, y subirlos a cualquier cloud americano era inviable por RGPD y por ética. Tercero, la mantenibilidad: no querían un sistema que necesitara un desarrollador dedicado para ajustar cada mes.

Habían probado antes a documentar todo en una wiki interna y usar el buscador de texto plano. Funcionaba mal: las consultas en lenguaje natural no se correspondían con las palabras exactas del documento, y los nuevos empleados seguían perdiéndose.

Restricciones

  • Cero coste mensual recurrente en APIs externas
  • Ni un byte de datos podía enviarse fuera del servidor de la organización
  • El sistema debía ser mantenible por alguien sin conocimientos profundos de IA
  • Presupuesto de tiempo real: seis semanas para la primera versión funcional
  • Equipo: una persona

El enfoque

La decisión fundamental fue usar varios modelos locales pequeños trabajando en conjunto, cada uno especializado en una tarea. Con modelos locales ejecutados con Ollama en el propio servidor de DNI, el coste marginal de cada consulta es literalmente cero.

Para la versión v4.0, refactoricé todo el sistema a una arquitectura hexagonal que separa el dominio de la infraestructura. Esto permite que DNI pueda, el día de mañana, cambiar de ChromaDB a otra base vectorial, o de Ollama a otro runtime, sin tocar la lógica central.

Encima de eso, un sistema multi-agente coordina cuatro LLMs especializados: recuperación, clasificación, generación y verificación, con un Context Tracker que mantiene el hilo de conversaciones multi-turno.

Resultados

94%

Precisión

0€

Coste mensual

18 meses

En producción

6 sem

Primera versión

4

Versiones iteradas

Aprendizajes

La arquitectura mal hecha cuesta más cara que el hardware. La v1.0 funcionaba, pero añadir un nuevo tipo de documento era una pesadilla. La v4.0 con hexagonal permite añadir un nuevo tipo de fuente en una tarde.

Los modelos locales pequeños, bien orquestados, pueden superar a un modelo grande genérico en tareas específicas. Este patrón — multi-agente local sobre un dominio acotado — es el que ahora aplico en todos los proyectos del pack Citadel.

Si tienes un caso parecido, el Pack Citadel está diseñado para replicar exactamente esta arquitectura en tu empresa.