Salesforce Einstein AI : un didacticiel d'API

Publié: 2022-03-11

Les développeurs d'applications non Salesforce peuvent passer à côté d'un joyau caché dans le monde de l'IA.

Lorsque les développeurs pensent à utiliser le cloud pour l'IA, ils peuvent penser à IBM Watson, Microsoft Azure Cognitive Services, Google Cloud ou Amazon AI. Lorsqu'ils entendent parler de Salesforce Einstein, ils peuvent automatiquement supposer que cela se limite à la spécialisation de développeur Salesforce.

Pas si! Toute application, qu'elle soit liée à Salesforce ou non, peut tirer parti des technologies cloud d'IA sophistiquées acquises par Salesforce. Ils sont entrés sur le marché de l'IA avec Salesforce Einstein, leur propre orchestration de services cloud d'IA. Cela inclut notamment les offres de services de reconnaissance de la langue et des images.

Comme pour les autres solutions cloud d'IA, vous n'avez pas besoin d'avoir un doctorat pour utiliser les technologies lourdes en dessous. Dans ce didacticiel de l'API Salesforce Einstein, je vais vous montrer comment configurer un compte et effectuer vos premiers appels d'API cloud AI. Pour les appels eux-mêmes, nous jouerons avec cURL et Postman, mais vous pouvez également créer votre propre prototype back-end ou toute autre technologie avec laquelle vous êtes le plus à l'aise.

À partir de là, le ciel est la limite.

Création d'un compte d'API Salesforce Einstein

Pour effectuer des appels d'API Einstein Platform, vous devez d'abord créer un compte d'API Einstein, télécharger la clé et générer un jeton Salesforce OAuth à l'aide de cette clé. Le processus ne doit être effectué qu'une seule fois pour pouvoir utiliser à la fois Einstein Vision et Einstein Language.

Salesforce Einstein vous permet de vous inscrire directement, via l'authentification sociale ou via Heroku.

Vous pouvez vous connecter en utilisant vos identifiants Salesforce ou Heroku. En sélectionnant l'une des options ci-dessus, vous serez redirigé vers leurs pages de connexion respectives. Si vous vous connectez avec Heroku, ils vous demandent de configurer une carte de crédit avec eux et d'attacher le service à une instance spécifique de Heroku.

La page d'intégration Heroku Einstein

Si vous êtes nouveau sur Salesforce et que vous n'avez pas de compte Heroku, la configuration d'un compte avec eux est assez rapide, encore plus rapide si vous souhaitez vous inscrire via un compte social préexistant comme celui de Google.

Nous supposerons à partir de là que vous utilisez Salesforce (via un compte social ou non) au lieu de Heroku. Le processus implique un peu de retour en arrière, vous devrez donc porter une attention particulière à ces étapes.

La page de connexion Salesforce.

Une fois connecté à Salesforce, vous serez confronté à un écran de visite qui n'a pas grand-chose à voir avec Einstein. À ce stade, vous devez vérifier votre courrier électronique et cliquer sur leur lien de vérification ; sinon, l'étape suivante entraînera une erreur.

Obtenir un jeton d'API Einstein

L'étape suivante consiste à revenir à ce lien d'inscription initial à l'API Einstein et à réessayer le bouton de connexion Salesforce. Après cela, vous définirez un nouveau mot de passe - même si vous avez créé votre compte avec l'aide d'un partenaire d'autorisation externe comme Google - et serez redirigé, à nouveau, vers la page de la visite.

Maintenant, revenez une troisième fois à la page d'inscription à l'API, puis cliquez à nouveau sur le bouton de connexion Salesforce. Cette fois, vous obtiendrez une page comme indiqué ci-dessous. Ne quittez pas cette page avant d'avoir téléchargé votre clé privée , même si elle peut indiquer que vous devez vérifier votre adresse e-mail ! Si vous le faites, il n'y aura aucun moyen d'obtenir votre clé privée sans l'aide manuelle de leur équipe d'assistance.

Vous n'avez qu'une seule chance de télécharger votre clé privée d'API Einstein pendant le processus d'inscription.

Vous pouvez soit télécharger le fichier sur votre ordinateur local, soit copier et coller la clé dans un éditeur de texte et enregistrer le fichier sous einstein_platform.pem .

En attendant, comme mentionné, vous aurez un autre e-mail de vérification qui vous attend, celui-ci étant spécifique à Einstein. Cliquez également sur ce lien de vérification.

Maintenant que vous avez une clé privée, vous pouvez générer des jetons limités dans le temps. Chaque appel d'API que vous effectuez, de la création d'ensembles de données à la formation de modèles, en passant par la prédiction de modèle, nécessite un jeton OAuth valide dans l'en-tête de la requête. Pour obtenir le jeton, vous devez vous rendre sur leur générateur de jetons et utiliser la même adresse e-mail que celle que vous avez utilisée pour vous connecter. Collez ou téléchargez le fichier de clé privée que vous avez reçu ci-dessus.

Génération d'un jeton OAuth Einstein Platform Services à l'aide de votre clé privée.

Pratique avec l'API Salesforce Einstein

L'utilisation du cloud AI via Salesforce Einstein implique quelques concepts de base sur la façon de former leur réseau d'intelligence artificielle en téléchargeant des exemples de données. Si cela ne vous semble pas familier, mon didacticiel précédent donne quelques exemples d'utilisation de Salesforce Einstein, à la fois pour Einstein Language et Einstein Vision.

En supposant que cela vous convienne, nous allons maintenant utiliser l'API REST Einstein Image Classification via cURL ou Postman. Si vous utilisez Postman, partout où nous avons un appel cURL, vous pouvez utiliser la fonction d'importation de Postman :

Importation d'instructions cURL dans Postman.

Supposons que vous rencontriez une exigence commerciale utile dans laquelle vous souhaitez faire la distinction entre le smartphone et le téléphone fixe en fonction des images et, à l'aide de cette prédiction, vous souhaitez mettre à jour votre score de prospect ou traiter votre cas d'utilisation.

La prochaine étape consiste à créer notre propre ensemble de données. Veuillez noter que vous avez besoin d'au moins 40 exemples qui ont déjà été classés. (Si cela dépasse le temps que vous souhaitez investir pour le moment, vous pouvez passer à la section de prédiction ci-dessous. Utilisez simplement un modelId de FoodImageClassifier , GeneralImageClassifier , SceneClassifier ou MultiLabelImageClassifier .)

Dans notre cas, nous avons deux catégories : les smartphones et les téléphones fixes. Nous créons deux dossiers, les étiquetant comme smartphones et téléphones fixes, et ajoutons des images dans chaque dossier. Nous créons ensuite un fichier zip (zip uniquement : 7z ne fonctionne pas par exemple) contenant ces dossiers.

Ce point de terminaison de l'API Einstein, qui est utilisé pour créer des ensembles de données, est le suivant :

 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

Ici, <ZIP_LOCATION> peut ressembler à l'un de ces exemples :

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

Dans Postman, sans importer, vous devrez remplir les onglets d'en-tête et de corps comme indiqué ci-dessous :

Remplir les en-têtes dans Postman.

Remplir le corps dans Postman.

Il faudra du temps pour que toutes les images soient téléchargées. En supposant que toutes les images sont téléchargées avec succès, la réponse aura un datasetId (répété comme id principal et une fois par catégorie), qui sera utilisé dans les prochains appels.

Une fois votre ensemble de données téléchargé, vous devez entraîner le modèle à l'aide des données que vous venez de télécharger. Pour entraîner le modèle, utilisez l'appel suivant :

 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 

Formation de votre modèle Einstein Vision via Postman.

La formation de l'ensemble de données est normalement placée dans leur file d'attente, et en réponse, nous obtiendrons le modelId . Après cela, nous pouvons vérifier un autre point de terminaison pour savoir si le modèle a été formé ou pas encore :

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

Lorsque le modèle est entraîné, vous obtenez une réponse comme celle-ci :

Vérification de la progression de l'entraînement de votre modèle via Postman.

Utilisation d'Einstein Vision pour la prédiction d'images

Voici le cœur de celui-ci. Une fois le modèle formé, vous pouvez maintenant envoyer une image et le modèle renverra des valeurs de probabilité pour chaque catégorie que nous avons définie. Pour le modèle actuel, nous avons choisi une image stock iPhone X pour la prédiction.

Pour la prédiction elle-même, nous utilisons le point de terminaison suivant :

 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

Cette fois, <IMAGE_LOCATION> est similaire à <ZIP_LOCATION> , mais différentes clés sont utilisées, et il existe une troisième option :

  1. sampleContent=@/path/to/your/local/file.zip
  2. sampleLocation=http://somedomain/file.zip
  3. sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0... (En d'autres termes, vous n'avez besoin d'aucun préfixe, juste la partie brute de base 64, si vous souhaitez utiliser cette méthode de téléchargement.)

Obtenir une prédiction Einstein Vision via Postman.

En regardant la capture d'écran et les valeurs de probabilité, le modèle a prédit avec succès que l'image de l'iPhone X est classée dans la catégorie des smartphones. Succès!

Quel que soit votre cas d'utilisation, vous souhaiterez déterminer si Einstein Vision suppose que vous fournissez une image qui appartient à l'une des catégories sur lesquelles vous l'avez formée. Lors des tests, nous avons découvert que lorsque nous avons envoyé au modèle ci-dessus une photo d'un voilier, il a fait une meilleure estimation entre les smartphones et les téléphones fixes, plutôt que d'indiquer qu'il ne semble pas l'être non plus. En d'autres termes, les notes qu'il attribue à votre photo de voilier étant une ligne fixe ou un smartphone totalisent toujours 1, tout comme ils le feraient avec une entrée légitime.

Cependant, certains modèles prédéfinis ont des catégories telles que Other (pour le modèle SceneClassifier ) ​​et UNKNOWN (pour FoodImageClassifier ). Il vaut donc la peine d'expérimenter pour votre contexte particulier afin que vous sachiez à quoi vous attendre si vous souhaitez lui donner des images qui ne correspondent pas aux catégories qui lui sont attribuées.

Il existe également le type de modèle "multi-étiquettes", qui renvoie toutes les catégories, triées par probabilité, en supposant que plusieurs catégories s'appliquent, c'est-à-dire que les probabilités ne totalisent pas 1. Si cela ressemble plus à ce que vous faites , il serait intéressant de se pencher sur la nouvelle détection d'objets Einstein. Au lieu de simplement vous dire ce qui pourrait être dans une image - dans l'ensemble - cela vous donne en fait des cadres de délimitation avec les prédictions. Ceci est similaire à ce que vous auriez pu voir avec le marquage automatique sur Facebook, sauf que cela ne se limite pas aux visages.

Langage Salesforce Einstein : intention et sentiment

Si vous souhaitez former votre propre modèle, Salesforce Einstein vous permet théoriquement de former à la fois l'intention et le sentiment, mais il est beaucoup plus courant de ne se préoccuper que de la formation de l'intention. La formation d'un modèle d'intention est similaire à ce que nous avons vu ci-dessus, mais au lieu de dossiers d'images, vous fournissez un fichier CSV à deux colonnes, avec des textes dans la colonne A et leurs catégories correspondantes dans la colonne B. (Ils prennent également en charge TSV ou JSON. )

Étant donné que les étapes de formation sont en grande partie les mêmes, nous supposerons à ce stade que vous avez déjà formé un modèle d'intention Einstein avec les données de formation qu'ils fournissent dans case_routing_intent.csv et que vous pouvez utiliser le modèle prédéfini standard pour Einstein Sentiment.

Les appels de prédiction Einstein Intent sont aussi simples que :

 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

Ici, <TEXT_TO_PREDICT> pourrait être quelque chose comme "Comment puis-je obtenir un numéro de suivi pour mon envoi ?"

L'appel d'API est le même avec Einstein Sentiment, sauf que vous pouvez utiliser le modelId CommunitySentiment pré-construit (et notez le point de terminaison différent) :

 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 sortie JSON dans les deux cas ressemble exactement au format de réponse de prédiction pour Einstein Image Classification : la substance principale se trouve dans un tableau associé aux probabilities clés, et chaque élément du tableau vous donne une étiquette et une probabilité. C'est tout ce qu'on peut en dire!

IA simplifiée avec Salesforce Einstein

Vous avez maintenant vu à quel point il est simple d'utiliser Einstein Vision et Einstein Language, et comment les API Einstein n'ont rien à voir avec le reste des API de développeur Salesforce, à l'exception du nom. Qu'allez- vous créer avec eux ?