Saltar al contenido principal

Crear Asistente IA y conectarlo con z/OS a través de REST API de z/OSMF

Aprovechando que existe una prueba de 30 días (trial) de IBM watsonx Orchestrate , voy a crear un AI assistant y crear una skill/extesión conectada con mi z/OS. De esta manera, desde el chat del asistente podré ver la información del comando D IPLINFO.

info

El enlace a la versión trial de 30 días:
https://www.ibm.com/account/reg/es-es/signup?formid=urx-52753

Crear un asistente IA

Para registrarse, unicamente hay que seguir los pasos.
Una vez nos hayamos registrado, esperamos a que la versión de prueba esté preparada.

Emuframe image

Al acceder, hacer clic en el icono de la esquina superior izquierda para ver el menú.

Emuframe image

Desplegar el menú Build y clic en Assistant Builder

Emuframe image

Rellenamos los datos para crear nuestro primer asistente.

aviso

Si no hacemos la ventana lo suficientemente grande, puede que no veamos algunos campos del formulario.

Emuframe image

El asistente se puede integrar en: Web, SMS, Slack, Facebook, Whatsapp…
Para esta prueba, elegiré Web.

Emuframe image

Podremos personalizar la interfaz de usuario.

Emuframe image

Pulsamos en el botón Create y ya tendremos el asistente definido.

Emuframe image

Crear acciones del asistente IA

Ahora vamos a crear la primera acción. Clic en Custom-built --> Add

Emuframe image

La acción será para mostrar la información del último IPL.

info

Esto será lo que tendrá que escribir el usuario en el chat para mostrar la información.

Emuframe image

En el campo Assistant says escribiremos lo que queremos que responda el asistente.
En el campo And then elegiremos la acción que hará a continuación.
Voy a elegir Use an extension porque es la manera de llamar a una skill/extensión que ejecute el comando D IPLINFO en z/OS.

Emuframe image

Crear skill/extensión para el asistente

Como no tengo ninguna extensión creada, haré clic en integrations catalog

Emuframe image

Se abrirá una nueva ventana. Abajo, en la sección Extensions, clic en el botón Build custom extension

Emuframe image

En la versión trial, tenemos que importar el fichero de skill/extensión que queramos usar en formato JSON (basado en OpenAPI).

En mi caso, lo que hace es conectarse a z/OS usando REST API de z/OSMF, concretamente, Console Services.
De esta manera, le enviaremos un comando al sistema y mostraremos la respuesta.

Puede ser cualquier comando, por ejemplo, D IPLINFO

En API Explorer de z/OSMF, encontramos todos los datos que necesitamos para los parámetros del fichero JSON.

https://server:port/zosmf/api/explorer

Emuframe image

Si hacemos clic en Modelo, veremos más detalles del tipo de dato que es cada parámetro.

info

En la web de IBM, encontramos más información detallada:
https://www.ibm.com/docs/en/zos/3.1.0?topic=services-issue-command-from-system-console

Emuframe image

Este es el fichero que usaré.
Es necesario actualizar el parámetro url y el nombre de la consola (dato: IBMUSECN)

Ejemplo Skill IA / Extensión - IPL INFO

Skill IA / Extensión - IPL INFO
{
"openapi": "3.0.3",
"servers": [
{
"url": "https://server:port"
}
],
"info": {
"description": "z/OS IPL info",
"version": "1.0.0",
"title": "z/OS IPL info",
"x-ibm-annotations": "1.0.0",
"x-ibm-application-name": "z/OS data",
"x-ibm-application-icon": "",
"x-ibm-application-id": "zos-data",
"x-ibm-skill-subtype": "public",
"x-ibm-skill-type": "imported",
"x-ibm-disable-default-server-url": "true"
},
"tags": [
{
"name": "zOS data"
}
],
"paths": {
"/zosmf/restconsoles/consoles/{consoleName}": {
"put": {
"summary": "z/OS IPL Information",
"description": "z/OS IPL Information",
"operationId": "zosIplInfo",
"parameters": [
{
"name": "consoleName",
"in": "path",
"required": true,
"schema": {
"type": "string",
"default": "IBMUSECN"
},
"description": "EMCS console on z/OS"
}
],
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"cmd-response-key": {
"type": "string"
},
"cmd-response-url": {
"type": "string"
},
"cmd-response-uri": {
"type": "string"
},
"cmd-response": {
"type": "string"
},
"sol-key-detected": {
"type": "boolean"
},
"sol-key-timeout": {
"type": "boolean"
}
}
}
}
},
"description": "D IPLINFO - OK response"
},
"400": {
"content": {
"application/json": {}
},
"description": "Bad Request"
},
"403": {
"content": {
"application/json": {}
},
"description": "Forbidden"
},
"404": {
"content": {
"application/json": {}
},
"description": "Not Found"
}
},
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"required": ["cmd", "sol-key"],
"properties": {
"cmd": {
"type": "string",
"default": "d iplinfo"
},
"sol-key": {
"type": "string",
"default": "JES"
}
}
}
}
},
"description": "{\n \"cmd\": \"d iplinfo\",\n \"sol-key\": \"JES\"\n}"
},
"x-ibm-nl-intent-examples": ["Display IPL info", "IPL info"],
"x-ibm-next-actions": [],
"x-ibm-nl-entities": {
"entities": []
},
"x-ibm-conversational-skill": true
}
}
},
"components": {
"securitySchemes": {
"basicAuth": {
"type": "http",
"scheme": "basic"
}
}
},
"security": [
{
"basicAuth": []
}
]

Ahora, importamos el fichero. Clic en Next.

Emuframe image

Rellenar los datos.

Emuframe image

Buscar el fichero JSON.

Emuframe image

Revisamos los datos y, si todo está bien, clic en Finish.

Emuframe image

Emuframe image

Volvemos al menú Actions, para seguir editando el asistente. Entrar en IPL INFO.

Emuframe image

Vamos al primer paso y rellenamos la información. En And then, elegir Use an extension

Emuframe image

Volvemos a ir a integrations catalog.

Emuframe image

Ahora es posible añadir la Skill/Extensión que hemos importado.

Emuframe image

Emuframe image

Como uso el tipo de autenticación basic, tengo que indicar el usuario que usaremos para conectar por z/OSMF.
Debe ser un usuario que exista en z/OS y que tenga permisos en z/OSMF.

aviso

Cada vez que editemos la skill, tenemos que volver a actualizar la información de la autenticación.

Emuframe image

Emuframe image

Emuframe image

Editar skill/extensión

Si queremos editar una skill porque nos hemos equivocado y tenemos que subir un nuevo JSON, clic en Open.

Emuframe image

En mi caso, en Environment selecciono Draft.

Emuframe image

Clic en Replace para subir el nuevo fichero JSON.

aviso

Después debemos ir a la pestaña Authentication y volver a poner los datos del usuario de z/OS.

Emuframe image

Emuframe image

aviso

En el momento de estas pruebas, la web no funciona correctamente y no muestra los campos de usuario y password.
Debemos cambiar el campo Authentication type a No authentication y volver a cambiarlo a Basic auth para que muestre ambos campos.
Hay que volver a escribir la password.

Emuframe image

Asignar skill/extensión al asistente

Volver a Actions y seguir editando IPL INFO.

Emuframe image

En el campo And then, elegir Use an extension de nuevo.

Emuframe image

Ahora si podremos elegir la extensión.

Emuframe image

Ya hemos completado el primer paso que consiste en llamar a la extensión que lanza el comando contra el z/OS usando z/OSMF.

Ahora tenemos que hacer un segundo paso que muestre la información recibida.
Para ello, pulsar en New step.

Emuframe image

En este paso podemos poner una condición de entrada, por ejemplo, que el paso anterior se haya ejecutado bien. No lo voy a hacer para no complicar demasiado el ejemplo.

Para mostrar el resultado del paso anterior, hay que elegir el botón fx.
En mi caso, selecciono step 1.

Emuframe image

La variable que contiene el resultado del comando es cmd-response.

Emuframe image

aviso

Hay que modificar lo siguiente para mostrar bien el resultado porque el editor escribe el código de una manera que no es válida para esta API de z/OSMF.

info

Para saber qué debemos poner, podemos buscar en Google JSON path finder.
Por ejemplo: https://jsonpathfinder.com/

Debemos poner el resultado que devuelve la API (podemos cogerlo del API Explorer de z/OSMF) dentro de una etiqueta body, como en la imagen.

A la derecha, al desplegar la etiqueta body y seleccionar cmd-response, nos dirá el path y cómo debemos ponerlo.
En este caso:

body['cmd-response']

Emuframe image

Con el botón < / > cambiamos al modo editor de código.

Emuframe image

Debemos modificar body.cmd-response por body['cmd-response'].

Emuframe image

Emuframe image

Guardamos los cambios y pulsamos en Preview.

Emuframe image

Al poner ipl info en el chat, falla. En Inspect, podremos ver el error. En mi caso, es por usar certificados autofirmados en z/OS.

Emuframe image

Permitir certificados autofirmados (SSL/TLS)

Para permitir conexiones con certificados autofirmados, salimos del editor (x arriba a la derecha) y vamos a Assistant Settings.

Emuframe image

En el apartado Security certificates (SSL/TLS), hay varias opciones.

Como son certificados autofirmados, podríamos usar la primera o segunda opción y subir el certificado descargándolo de z/OS.
Haré una entrada específica de esto para no hacer muy extensa esta.

aviso

Yo ya tenía selecciona la tercera opción, pero cuando se hacen cambios en las skill, hay que volver a seleccionarla.
Al menos es lo que me ha pasado en las pruebas.

Como no funciona correctamente, seleccionaré la primera o segunda opción y volveré a seleccionar la tercera, porque así si guarda los cambios.

Emuframe image

Emuframe image

Probar Asistente IA

En el menú, vamos a Preview. Se abrirá el asistente y nos dará varias opciones predefinidas.
La que yo he configurado es IPL INFO, podemos hacer clic en el botón o escribirlo en el chat.

info

Alguna vez no responde en tiempo y hay que volver a probar.

Emuframe image

Aparecerá el resultado del comando.

Emuframe image

En z/OS, comprobamos que se ha ejecutado el comando.

Emuframe image