Finalmente pude configurar y probar Copilot en el ERP. Mucho se lleva hablando de él (o ella según como se quiera identificar a nuestr@ ayudante) y ya tenía ganas de probarlo. Se que es trabajo en curso y que van a salir actualizaciones muy interesantes pero no quería dejar pasar la oportunidad de escribir un artículo con mi experiencia.
Lo primero es instalar la solución, aunque esto está sobradamente documentado va un resumen rápido:
- Preparar el entorno de Dynamics 365 SCM: Lo primero que hay que hacer es desplegar un entorno Tier 2 en versión 10.0.38, yo además opté por desplegarlo en USA para que no hubiera restricciones de zona. Una vez desplegado hay que integrarlo con un entorno de Dataverse (en USA también) Aquí lo bueno es que no hace falta configurar DualWrite, que ya sabemos lo pesado que se hace.
- Una vez desplegado y configurada la integración con Dataverse lo siguiente es activar en la configuración de licencias de FO la propiedad «Sql row version change tracking«
- En el entorno de Dataverse, configuramos la opción de «Finance and Operations in Dataverse«
- Ya podemos instalar la APP de Copilot, o bien directamente desde la APP Store o bien desde el propio entorno de Dataverse en Aplicaciones de Dynamics 365.
- Con la aplicación instalada se crearán 2 roles de seguridad en Dataverse (no en FO) que habrá que asignar al usuario que va a usar Copilot: AIB y Finance and Operations AI security
- Como último paso habilitamos la característica de Copilot en FO (en inglés: (Preview) User experience for Copilot in Finance and Operations.
Ahora que ya tenemos todo implantado correctamente podremos ver en nuestro gestor de soluciones las nuevas soluciones implantadas:

Luego volveremos a ellas para crearnos nuestro propio Copiloto tuneado, pero de momento vamos a verlo en acción:

La funcionalidad que nos ofrece es la de, mediante lenguaje natural, resolver dudas sobre el uso de FO que obtiene del sitio de Learn (https://learn.microsoft.com/en-us/dynamics365) de Dynamics 365:

Aunque la funcionalidad es útil, no está aprovechando la información de nuestro ERP que para mi sería lo realmente interesante.
La siguiente funcionalidad si que utiliza algo mas los datos existentes, se ha creado un nuevo Workspace denominado «Pedido de compras con cambios confirmados» y en él nos muestra el retraso en los pedidos de compra y como afecta al resto de la cadena de suministro, como añadido nos lo explica en lenguaje natural:
«Se ha realizado un cambio en una línea de orden de compra con alto impacto aguas abajo. Hay un total de 1 orden de compra cambiada y 1 línea de orden cambiada. La cantidad reducida afectó a 1 línea de orden y el artículo afectado es M0004. La entrega retrasada también afectó a 1 línea de orden y el artículo afectado es M0004. No hay más detalles disponibles.»

Además de poder navegar a los pedidos afectados podemos enviar automáticamente un mail o un mensaje de Teams al proveedor escrito también por la IA:


Hasta aquí esto es todo lo que ofrece la funcionalidad liberada, si bien es cierto que Microsoft ha anunciado la integración con los datos de FO que contaré mas adelante pero hasta que lo haga publico, de momento no hay mas funcionalidad de forma estándar, así que vamos a intentar tunear el Copilot con nuestros datos.
La primera opción que tenemos es añadirle ficheros planos al Copilot estándar.
Por ejemplo, he creado un fichero de texto que identifica como está organizado el almacén de forma hiper simple:
Ubicaciones de almacén:
- La materia prima se ubican en la zona de entrada, entre el pasillo 1 y el 5.
- Se ubica por pallets en las ubicaciones de la balda 2 a la 6 y por unidad en la zona de picking en la balda 1.
- El producto terminado se ubica en la zona de salida, entre el pasillo 6 y el 8.
Esto se traduce en que cuando preguntamos cosas como la siguiente, nuestro copiloto puede respondernos:

Así que si subimos un fichero con información sobre nuestros procesos Copilot no solo sabrá responder al funcionamiento estándar si no también a nuestros procesos.
Para poder configurar esto debemos irnos a Copilot Studio y abrir el Copilot de FO:

Dentro del menú de IA Generativa tenemos la opción de añadir los ficheros de texto:

Añadidos los ficheros podremos grabarlo e incluso publicarlo dentro de nuestro TEAMS para que no sea necesario abrirlo desde FO:

Mi Copilot
Mientras Microsoft libera funcionalidad que nos permita preguntar sobre información dentro del ERP, he intentado configurarlo por mi cuenta como prueba de concepto con el siguiente resultado:
Lo primero que hay que hacer es duplicar el Copilot de FO para tener un Copilot propio pero con los complementos de FO instalados:

Luego habrá que copiar los Temas para tener el mismo comportamiento que el Copilot original, pero con la capacidad de poder modificar la IA Generativa y para ello hay que ir al Tema de «conversational boosting»:

Y dentro de este tema en «Crear respuestas generativas» ya podremos editar las opciones:

Como veis en la imagen, he añadido la web de El Rincón Dynamics https://www.elrincondynamics.es/ dentro de la solución y lo mas importante, el origen de datos de AZURE OPEN AI, en donde están los datos de FO.
Esta ultima parte es la mas compleja con diferencia, y además tiene un coste en mi caso de unos 75€ al mes. Para poder acceder a datos de FO lo primero que hice fue publicar dichos datos en una BBDD de AZURE SQL, podría haber optado por un blob storage pero para esta PoC me era mucho mas cómodo el SQL.
Dentro de la solución de Copilot se instalan varias entidades virtuales en el dataverse que en el futuro serán las que se usen por el Copilot estándar, así que las aproveché yo para este ejemplo, pero podría haber usando cualquier entidad, incluso configurar el BYOD de FO para publicarlas directamente, la ventaja de usar estas entidades reside en los nombre de los campos que son nombre naturales que entiende la IA. Estas entidades son:

Para nuestro ejemplo seleccione la entidad de disponible (inventory on hand) a la que tuve que hacer algunos cambios para que no diera errores, por ejemplo, no se permite el uso de caracteres especiales excepto «-» en los campos de clave por lo que tuve que cambiar el campo clave. Tampoco se admiten campos con espacios en blanco y para añadirlos hay que hacerlo mediante Script, así que opté por simplificar los nombres. Pero finalmente, obtuve una entidad que se actualiza desde dataverse (o desde FO si se prefiere) con una estructura valida:

Lo siguiente es crear un servicio de AI Search con nuestro datos. Es importante recalcar que no funciona con el modelo Free, hay que ir al menos al básico con su coste correspondiente.

Luego añadí el origen de datos de nuestra BBDD de AZURE SQL y procedí a crear el índice mediante la opción de Importar:

Aparece un asistente en el que hay que elegir nuestro origen de datos y seleccionar los campos que queremos y su comportamiento:

Una vez configurados se crea el índice y el indexador, que procesará los datos, es aquí donde pueden aparecer los errores, normalmente por los caracteres especiales comentados:

Si todo ha funcionado bien, podremos probarlo dentro del propio índice:

Con esta parte funcionando ya pude pasar el siguiente nivel que es crear nuestra implementación en AZURE OpenAI Studio, usando el modelo gpt-35-turbo.

Una vez la implementación estuvo creada, desde la pantalla principal y usando la opción de «Traiga sus propios datos» configuré el acceso a los mismos:

Aquí tuve que configurar nuestro origen de datos y nuestro índice:

y rellenar los campos que quería usar:

Una vez creado, revisé los parámetros para asociarlos a la Implementación creada anteriormente y comprobé que funcionaba correctamente preguntándole sobre un producto concreto:

Lo último que me quedaba por hacer era añadir la conexión al entorno de dataverse correcto, para ello en la opción «implementar en» se debe usar «implementar en un Bot de PVA»

Esto lo que hace es crear el BOT y la conexión a nuestro servicio de datos en el entorno por defecto, lo que no suele ser el adecuado, para poder configurar la conexión sin crear un nuevo Bot, lo que hay que hacer, es una vez que sale la pantalla de creación del nuevo BOT en nuestro entorno por defecto, parar el explorador y cambiar en la URL el ID del entorno de dataverse por el nuestro:

Esto creará una conexión de AZURE OPEN AI en el entorno correcto:

Y con esto ya estamos en disposición de añadir la conexión a nuestro Copilot Tuneado:

Lo mas importante aquí, es configurar las propiedades de la conexión tal y como las tenemos en nuestro Open AI, ya que si no nos dará error y no responderá nada.

Algo curioso que me he encontrado es la versión de la API, si nos vamos al área de juegos de Azure OPENAI y le damos a ver código aparecerá lo siguiente:

En el código aparece la versión 2023-08-01-preview que es la que se elige en el índice cuando se crea, pero en el extremo aparece 2023-07-01-preview, bueno, pues después de dos días sin saber por que no funcionaba, puse la versión de julio y empezó a funcionar.
Y con esto tenemos nuestro Copilot que responde tanto preguntas sobre funcionamiento estándar como preguntas sobre el disponible de FO. Quedaría publicarlo en Teams y usarlo desde ahí.
Para concluir, debo decir, que a mi no siempre me funciona correctamente la lectura de datos externos, he tenido momentos donde preguntando lo mismo no ha devuelto nada y otras en las que ha respondido correctamente. Tengo que seguir investigando a ver si encuentro la tecla o es simplemente por que es una preview la parte de utilizar tus propios datos en IA, así que si lo probáis y os funciona bien contármelo por favor!!
¡Muchas gracias por leerme!


Deja un comentario