Recuento de inventario con AI Builder

Este pasado fin de semana he participado en mi tercer 365 Saturday, esta vez en Barcelona, como speaker. Como podéis ver en el título mi charla ha tratado sobre la creación de diarios de recuento usando la IA y la Power Platform.

El evento ha sido (como siempre) genial, pero mi sesión me ha dejado con un sabor agridulce porque no he podido mostrar la funcionalidad completa de la app por culpa de problemas técnicos estúpidos (que eran estúpidos pero mi culpa) que solucioné en dos minutos después de la sesión.

Yo arreglando el problema DESPUÉS de la sesión

Pero bueno, gracias a todos los que asistieron a mi charla y lo siento por la cagada. Gracias también a la organización, así como a los demás speakers t al equipo de Axazure.

Contando con IA

¿De qué trataba mi sesión? Nada original. Si habéis visto la keynote de inauguración del pasado MBAS hubo una parte sobre un distribuidor de Pepsi que estaba usando AI Builder para escanear sus expositores y analizar cómo evolucionaban las ventas (más o menos). Mi PowerApp usa AI Builder para contar objetos (luego veréis cuáles) y con eso crea un diario de recuento en Dynamics 365 for Como-se-llame-pero-el-ERP.

Al final mi intención principal con esto es demostrar que podemos usar toda la Power Platform con MSDyn365FO, no solo Power BI, y que nos puede ayudar en los proyectos. Porque los que trabajamos con AX a veces estamos como:

Esto lo encontré en Twitter y añadí los logos, pero no recuerdo a quién se lo robé 🙁

AI Builder

AI Builder es una herramienta para la Power Platform que añade funcionalidad a PowerApps y Flow. Y es muy muy muy fácil de configurar y usar.

Ahora mismo AI Builder está formado por 4 modelos distintos:

  • Predicción: responde preguntas binarias como «¿Renovará mi cliente la suscripción?» o «¿Qué cliente no pagará a tiempo?».
  • Clasificación de texto: extracción de datos de texto. Devuelve un % como respuesta, 95% Bueno, 76% rápido, etc.
  • Procesamiento de formularios: extracción de datos en pares clave-valor. Por ejemplo, extraer datos de documentos (tiene que ser siempre el mismo documento).
  • Detección de objetos: detecta objetos en imágenes. Este es el modelo que usé yo.

De estos cuatro modelos solo el de predicción esta en GA, los otros siguen en preview. Además hay 5 modelos pre-entrenados disponibles:

Si quieres saber más sobre AI Builder hay unhands-on-lab con todos los recursos necesarios para crear tu App usando cualquiera de los 4 modelos.

Y si necesitas un entorno de PowerApps apúntate al PowerApps Community Plan para obtener un entorno gratis en el que podrás usar PowerApps y FLow (y el CDS). Si no te has apuntado todavía, ¡ya tardas!

IA 101

Para explicar cómo funciona esto primero tengo que explicar un poco de conceptos básicos de AI y ML. Pero muy básicos, del palo tan básicos que pueda salir yo delante de gente y explicarlo. Si quieres ver esto mejor explicado mira este video de Channel 9 sobre modelos, es de donde aprendí todo.

En el desarrollo clásico cuando solucionamos un problema lo que hacemos es pasar datos y una función que hemos creado por un proceso y obtenemos un resultado como salida. El equivalente a esto en machine learning es que introducimos datos y las soluciones a un problema y lo que obtenemos es una función que soluciona el problema al que responden las soluciones que hemos introducido. Esta función es tu modelo de ML.

¿Qué más tenemos que saber acerca de lo modelos? Bueno, básicamente que la cantidad de datos con la que alimentamos a nuestro modelo es directamente proporcional a la calidad de las respuestas/soluciones que obtendremos. AI Builder nos pide un mínimo de 15 imágenes para el modelo de detección de objetos. Con 15 imágenes lo que tendremos es un modelo mierdoso, que detectará lo que queremos, pero que también detectará casi como como lo que estamos intentando identificar, porque la muestra es demasiado pequeña.

La PatatApp

¿Por qué este nombre? Pues es que cuento patatas con la app. ¿Y por qué patatas? Porque me encantan, son muy versátiles (puedes hacer tortilla, freírlas, vodka, etc.) y porque contar palés es muy aburrido.

Lo que mi PowerApp hace es detectar las patatas, luego puedo elegir entre usar un diario existente o crear uno nuevo, selecciono un artículo con sus dimensiones de inventario y, finalmente, creo una línea en el diario en AX. He hecho un vídeo muy corto mostrándolo.

Fácil, ¿verdad? Detecto 3 patatas usando AI Builder, selecciono la empresa, creo un diario nuevo y completo el artículo y dimensiones. Finalmente se crea la línea y la tenemos en MSDyn365FO.

Ni brujería ni magia por ningún lado. (ODIO lo de «magia» cuando hablamos de desarrollo o lo que sea, porque parece que se ha hecho sin esfuerzo. Fin de la pataleta.) Para crear la cabecera y la línea del diario estoy usando dos Flows que obtienen los datos de la PowerApp y los crean en Dynamics 365:

¿Véis? No hay magia, sólo un Flow.

Mi compañero Hugo de Jesús me dijo de usarl la función Patch en el data source pero: 1) La app estaba terminada 2) Me lo dijo la semana antes. Pero seguramente hubiera funcionado bien también.

Como véis es una app muy sencilla, la primera versión la tuve lista en cuatro horas, con AI Builder y los Flows es muy rápido.

Modelo mierder vs Modelo no-tan-mierder

Quiero terminar con hechos reales y datos importantes. ¿Recordáis el mínimo de imágenes que pide AI Builder? 15 nada más. Esto es lo que pasa cuando tu modelo está formado por 20 imágenes de solitarias patatas:

Si tu modelo apesta seguirá detectando las patatas en una imagen, pero prácticamente todo será, literalmente, una patata.

Después entrené una segunda versión del modelo, con 40 imágenes de patatas con gatos, personas, otras verduras, etc. El resultado es mucho mejor y sigue detectando patatas:

Quiero agradecer a cazapelusas por hacerme todas las imágenes de las patatitas y por el rediseño de la PowerApp, deberíasi ver la V1. Por favor, adoptad un diseñador gráfico, hará vuestra vida más bonita.

Ninguna patata fue dañada en la creación de esta PowerApp.