Salesforce Einstein AI: un tutorial de API

Publicado: 2022-03-11

Es posible que los desarrolladores de aplicaciones que no sean de Salesforce se estén perdiendo una joya oculta en el mundo de la IA.

Cuando los desarrolladores piensan en usar la nube para IA, pueden pensar en IBM Watson, Microsoft Azure Cognitive Services, Google Cloud o Amazon AI. Cuando oyen hablar de Salesforce Einstein, pueden suponer automáticamente que se limita a la especialización de desarrollador de Salesforce.

¡No tan! Cualquier aplicación, ya sea relacionada con Salesforce o no, puede aprovechar las sofisticadas tecnologías de nube de IA que ha adquirido Salesforce. Ingresaron al mercado de IA con Salesforce Einstein, su propia orquestación de servicios en la nube de IA. En particular, esto incluye ofertas de servicios de reconocimiento de idiomas e imágenes.

Al igual que con otras soluciones de nube de IA, no es necesario tener un doctorado para usar las tecnologías de peso pesado subyacentes. En este tutorial de la API de Salesforce Einstein, le mostraré cómo configurar una cuenta y realizar sus primeras llamadas a la API de la nube de IA. Para las llamadas en sí, jugaremos con cURL y Postman, pero también podrías tener tu propio prototipo de back-end o cualquier otra tecnología con la que te sientas más cómodo.

A partir de ahí, el cielo es el límite.

Creación de una cuenta de la API de Salesforce Einstein

Para realizar llamadas a la API de la plataforma Einstein, primero debe crear una cuenta de la API de Einstein, descargar la clave y generar un token OAuth de Salesforce con esa clave. El proceso solo debe realizarse una vez para poder utilizar tanto Einstein Vision como Einstein Language.

Salesforce Einstein le permite registrarse directamente, mediante autenticación social o mediante Heroku.

Puede iniciar sesión con sus credenciales de Salesforce o Heroku. Al seleccionar cualquiera de las opciones anteriores, será redirigido a sus respectivas páginas de inicio de sesión. Si inicia sesión con Heroku, requieren que configure una tarjeta de crédito con ellos y adjunte el servicio a una instancia específica de Heroku suya.

La página de integración de Heroku Einstein

Si es nuevo en Salesforce y no tiene una cuenta de Heroku, configurar una cuenta con ellos es bastante rápido, incluso más rápido si desea registrarse a través de una cuenta social preexistente como una con Google.

Supondremos desde aquí que está utilizando Salesforce (a través de una cuenta social o no) en lugar de Heroku. El proceso implica un poco de retroceso, por lo que querrá prestar mucha atención a estos pasos.

La página de inicio de sesión de Salesforce.

Una vez que haya iniciado sesión en Salesforce, verá una pantalla de recorrido que no tiene mucho que ver con Einstein. En este punto, debe revisar su correo electrónico y hacer clic en su enlace de verificación; de lo contrario, el siguiente paso dará como resultado un error.

Obtener un token de la API de Einstein

El siguiente paso es regresar al enlace inicial de registro de la API de Einstein e intentar el botón de inicio de sesión de Salesforce nuevamente. Después de eso, establecerá una nueva contraseña, incluso si creó su cuenta con la ayuda de un socio de autorización externo como Google, y será redirigido, nuevamente, a la página del recorrido.

Ahora, regrese por tercera vez a la página de registro de la API y haga clic nuevamente en el botón de inicio de sesión de Salesforce. Esta vez obtendrá una página como se muestra a continuación. ¡No abandone esta página antes de descargar su clave privada , aunque puede decir que necesita verificar su correo electrónico! Si lo hace, no habrá forma de obtener su clave privada sin la ayuda manual de su equipo de soporte.

Solo tiene una oportunidad de descargar su clave privada de la API de Einstein durante el proceso de registro.

Puede descargar el archivo a su máquina local o copiar y pegar la clave en un editor de texto y guardar el archivo como einstein_platform.pem .

Mientras tanto, como se mencionó, tendrá otro correo electrónico de verificación esperándolo, este es específico de Einstein. Haga clic en ese enlace de verificación también.

Ahora que tiene una clave privada, puede generar tokens de tiempo limitado. Cada llamada a la API que realice, desde la creación de conjuntos de datos hasta el entrenamiento de modelos y la predicción de modelos, necesita un token de OAuth válido en el encabezado de la solicitud. Para obtener el token, debe ir a su generador de tokens y usar la misma dirección de correo electrónico que usó para iniciar sesión. Pegue o cargue el archivo de clave privada que recibió anteriormente.

Generar un token de OAuth de Servicios de plataforma Einstein utilizando su clave privada.

Práctica con la API de Salesforce Einstein

El uso de la nube de IA a través de Salesforce Einstein implica algunos conceptos básicos sobre cómo entrenar su red de inteligencia artificial mediante la carga de datos de muestra. Si eso no le resulta familiar, mi tutorial anterior brinda algunos ejemplos de cómo trabajar con Salesforce Einstein, tanto para Einstein Language como para Einstein Vision.

Suponiendo que se sienta cómodo con eso, ahora usaremos la API REST de clasificación de imágenes de Einstein a través de cURL o Postman. Si está usando Postman, donde sea que tengamos una llamada cURL, puede usar la función de importación de Postman:

Importación de instrucciones cURL en Postman.

Supongamos que se encuentra con un requisito comercial útil en el que desea distinguir entre el teléfono inteligente y el teléfono fijo en función de las imágenes y, con esa predicación, desea actualizar su puntaje de prospecto o procesar su caso de uso.

El siguiente paso es crear nuestro propio conjunto de datos. Tenga en cuenta que necesita al menos 40 ejemplos que ya se hayan categorizado. (Si es más tiempo del que desea invertir en este momento, puede pasar a la sección de predicción a continuación. Simplemente use un ID de FoodImageClassifier modelId GeneralImageClassifier , SceneClassifier o MultiLabelImageClassifier ).

En nuestro caso, tenemos dos categorías: smartphones y teléfonos fijos. Creamos dos carpetas, las etiquetamos como teléfonos inteligentes y teléfonos fijos, y agregamos imágenes en cada carpeta. Luego creamos un archivo zip (solo zip: 7z no funciona, por ejemplo) que contiene estas carpetas.

Este punto final de la API de Einstein, que se utiliza para crear conjuntos de datos, es el siguiente:

 curl -X POST \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data" \ -F "type=image" \ -F "<ZIP_LOCATION>" \ https://api.einstein.ai/v2/vision/datasets/upload/sync

Aquí, <ZIP_LOCATION> puede ser como cualquiera de estos ejemplos:

  1. data=@/path/to/your/local/file.zip
  2. path=http://somedomain/file.zip

En Postman, sin importar, deberá completar las pestañas del encabezado y el cuerpo como se muestra a continuación:

Llenando los encabezados en Postman.

Rellenando el cuerpo en Postman.

Tomará tiempo hasta que se carguen todas las imágenes. Suponiendo que todas las imágenes se carguen correctamente, la respuesta tendrá un datasetId de conjunto de datos (repetido como el id principal y una vez por categoría), que se usará en llamadas futuras.

Una vez que se carga su conjunto de datos, debe entrenar el modelo utilizando los datos que acaba de cargar. Para entrenar el modelo, use la siguiente llamada:

 curl -X POST \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data" \ -F "name=Landline and SmartPhone Model" \ -F "datasetId=<DATASET_ID>" \ https://api.einstein.ai/v2/vision/train 

Entrenamiento de su modelo de Einstein Vision a través de Postman.

El entrenamiento del conjunto de datos normalmente se coloca en su cola y, en respuesta, obtendremos el modelId . Después de eso, podemos verificar otro punto final para saber si el modelo ha sido entrenado o aún no:

 curl -X GET \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ https://api.einstein.ai/v2/vision/train/<YOUR_MODEL_ID>

Cuando el modelo esté entrenado, obtendrá una respuesta como esta:

Comprobación del progreso de entrenamiento de su modelo a través de Postman.

Uso de Einstein Vision para la predicción de imágenes

Aquí está el corazón de esto. Una vez que el modelo está entrenado, ahora puede enviar una imagen y el modelo devolverá valores de probabilidad para cada categoría que hemos definido. Para el modelo actual, elegimos una imagen estándar de iPhone X para la predicción.

Para la predicción en sí, usamos el siguiente punto final:

 curl -X POST \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data" \ -F "<IMAGE_LOCATION>" \ -F "modelId=<YOUR_MODEL_ID>" \ https://api.einstein.ai/v2/vision/predict

Esta vez, <IMAGE_LOCATION> es similar a <ZIP_LOCATION> , pero se usan diferentes claves y hay una tercera opción:

  1. sampleContent=@/path/to/your/local/file.zip
  2. sampleLocation=http://somedomain/file.zip
  3. sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0... (En otras palabras, no necesita ningún prefijo, solo la parte base 64 sin procesar, si desea utilizar este método de carga).

Obtener una predicción de Einstein Vision a través de Postman.

Mirando la captura de pantalla y los valores de probabilidad, el modelo predijo con éxito que la imagen del iPhone X se clasifica en la categoría de teléfono inteligente. ¡Éxito!

Cualquiera que sea su caso de uso, querrá explorar si Einstein Vision asume que está proporcionando una imagen que cae en una de las categorías en las que la entrenó. En las pruebas, descubrimos que cuando le enviamos al modelo anterior una imagen de un velero, hizo una mejor suposición entre teléfonos inteligentes y teléfonos fijos, en lugar de indicar que tampoco parece serlo. En otras palabras, las calificaciones que otorga a la imagen de su velero siendo un teléfono fijo o un teléfono inteligente aún suman 1, tal como lo harían con una entrada legítima.

Sin embargo, algunos modelos preconstruidos tienen categorías como Other (para el modelo SceneClassifier ) ​​y UNKNOWN (para FoodImageClassifier ). Por lo tanto, vale la pena experimentar con su contexto particular para que pueda saber qué esperar si desea alimentarlo con imágenes que no se ajustan a las categorías asignadas.

También existe el tipo de modelo de "etiqueta múltiple", que devuelve todas las categorías, ordenadas por probabilidad, con el supuesto de que se aplican varias categorías, es decir, las probabilidades no suman 1. Si eso suena más como lo que está haciendo , valdría la pena investigar la Detección de objetos de Einstein recientemente lanzada. En lugar de simplemente decirle lo que podría haber en una imagen, en general, en realidad le brinda cuadros delimitadores junto con las predicciones. Esto es similar a lo que podría haber visto con el etiquetado automático en Facebook, excepto que no se limita a las caras.

Lenguaje de Salesforce Einstein: intención y sentimiento

Si desea entrenar su propio modelo, Salesforce Einstein teóricamente le permite entrenar tanto la Intención como el Sentimiento, pero es mucho más común molestarse solo en entrenar la Intención. Entrenar un modelo de intención es similar a lo que vimos anteriormente, pero en lugar de carpetas de imágenes, proporciona un archivo CSV de dos columnas, con textos en la columna A y sus categorías correspondientes en la columna B. (También son compatibles con TSV o JSON. )

Debido a que los pasos de entrenamiento son básicamente los mismos, supondremos en este punto que ya ha entrenado un modelo de Einstein Intent con los datos de entrenamiento que proporcionan en case_routing_intent.csv y que está bien usando el modelo preconstruido estándar para Einstein Sentiment.

Las llamadas de predicción de Einstein Intent son tan fáciles como:

 curl -X POST \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data" \ -F "modelId=<MODEL_ID>" \ -F "document=<TEXT_TO_PREDICT>" \ https://api.einstein.ai/v2/language/intent

Aquí, <TEXT_TO_PREDICT> podría ser algo así como "¿Cómo puedo obtener un número de seguimiento para mi envío?"

La llamada a la API es la misma con Einstein Sentiment, excepto que puede usar el CommunitySentiment modelId preconstruido (y tenga en cuenta el punto final diferente):

 curl -X POST \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ -H "Content-Type: multipart/form-data" \ -F "modelId=CommunitySentiment" \ -F "document=How can I get a tracking number for my shipment?" \ https://api.einstein.ai/v2/language/sentiment

La salida JSON en ambos casos se ve exactamente como el formato de respuesta de predicción para la clasificación de imágenes de Einstein: la sustancia principal está en una matriz asociada con las probabilities clave, y cada elemento de la matriz le proporciona una etiqueta y una probabilidad. ¡Eso es todo al respecto!

IA sencilla con Salesforce Einstein

Ahora ha visto lo sencillo que es usar Einstein Vision y Einstein Language, y cómo las API de Einstein no tienen nada que ver con el resto de las API para desarrolladores de Salesforce, excepto en el nombre. ¿Qué vas a crear con ellos?