Salesforce Einstein AI: Ein API-Lernprogramm

Veröffentlicht: 2022-03-11

Nicht-Salesforce-App-Entwicklern entgeht möglicherweise ein verstecktes Juwel in der KI-Welt.

Wenn Entwickler daran denken, die Cloud für KI zu nutzen, denken sie vielleicht an IBM Watson, Microsoft Azure Cognitive Services, Google Cloud oder Amazon AI. Wenn sie von Salesforce Einstein hören, gehen sie möglicherweise automatisch davon aus, dass es auf die Salesforce-Entwicklerspezialisierung beschränkt ist.

Nicht so! Jede Anwendung, ob Salesforce-bezogen oder nicht, kann die ausgeklügelten KI-Cloud-Technologien nutzen, die Salesforce erworben hat. Sie sind mit Salesforce Einstein, ihrer eigenen Orchestrierung von KI-Cloud-Services, in den KI-Markt eingetreten. Dazu gehören insbesondere Angebote von Sprach- und Bilderkennungsdiensten.

Wie bei anderen KI-Cloud-Lösungen müssen Sie keinen Doktortitel haben, um die Schwergewichtstechnologien darunter zu nutzen. In diesem Salesforce Einstein-API-Tutorial zeige ich Ihnen, wie Sie ein Konto einrichten und Ihre ersten KI-Cloud-API-Aufrufe tätigen. Für die Aufrufe selbst spielen wir mit cURL und Postman, aber Sie könnten auch Ihren eigenen Back-End-Prototypen oder eine andere Technologie verwenden, mit der Sie sich am wohlsten fühlen.

Von da an ist der Himmel die Grenze.

Erstellen eines Salesforce Einstein-API-Kontos

Um Einstein-Plattform-API-Aufrufe durchzuführen, müssen Sie zunächst ein Einstein-API-Konto erstellen, den Schlüssel herunterladen und mit diesem Schlüssel ein Salesforce-OAuth-Token generieren. Der Vorgang muss nur einmal durchgeführt werden, um sowohl Einstein Vision als auch Einstein Language verwenden zu können.

Mit Salesforce Einstein können Sie sich direkt, über soziale Authentifizierung oder über Heroku anmelden.

Sie können sich mit Ihren Salesforce- oder Heroku-Anmeldeinformationen anmelden. Wenn Sie eine der oben genannten Optionen auswählen, werden Sie zu den jeweiligen Anmeldeseiten weitergeleitet. Wenn Sie sich mit Heroku anmelden, müssen Sie dort eine Kreditkarte einrichten und den Dienst an eine bestimmte Heroku-Instanz von Ihnen anhängen.

Die Heroku Einstein-Integrationsseite

Wenn Sie neu bei Salesforce sind und kein Heroku-Konto haben, können Sie ziemlich schnell ein Konto bei ihnen einrichten – sogar noch schneller, wenn Sie sich über ein bereits vorhandenes soziales Konto wie eines bei Google anmelden möchten.

Wir gehen von hier aus davon aus, dass Sie Salesforce (über ein soziales Konto oder nicht) anstelle von Heroku verwenden. Der Prozess beinhaltet ein wenig Backtracking, also sollten Sie diesen Schritten genau Aufmerksamkeit schenken.

Die Salesforce-Anmeldeseite.

Sobald Sie sich bei Salesforce angemeldet haben, werden Sie mit einem Tour-Bildschirm konfrontiert, der nicht viel mit Einstein zu tun hat. An diesem Punkt sollten Sie Ihre E-Mails überprüfen und auf den Bestätigungslink klicken. Andernfalls führt der nächste Schritt zu einem Fehler.

Abrufen eines Einstein-API-Tokens

Der nächste Schritt besteht darin, zu diesem ursprünglichen Einstein-API-Anmeldelink zurückzukehren und die Salesforce-Anmeldeschaltfläche erneut zu versuchen. Danach legen Sie ein neues Passwort fest – auch wenn Sie Ihr Konto mit Hilfe eines externen Autorisierungspartners wie Google erstellt haben – und werden erneut auf die Tour-Seite weitergeleitet.

Gehen Sie nun ein drittes Mal zurück zur API-Anmeldeseite und klicken Sie erneut auf die Salesforce-Anmeldeschaltfläche. Dieses Mal erhalten Sie eine Seite wie unten gezeigt. Verlassen Sie diese Seite nicht, bevor Sie Ihren privaten Schlüssel heruntergeladen haben, auch wenn darauf hingewiesen wird, dass Sie Ihre E-Mail-Adresse bestätigen müssen! Wenn Sie dies tun, gibt es keine Möglichkeit, Ihren privaten Schlüssel ohne manuelle Hilfe des Support-Teams zu erhalten.

Sie haben nur eine Chance, Ihren privaten Einstein-API-Schlüssel während des Anmeldevorgangs herunterzuladen.

Sie können die Datei entweder auf Ihren lokalen Computer herunterladen oder den Schlüssel kopieren und in einen Texteditor einfügen und die Datei als einstein_platform.pem speichern.

In der Zwischenzeit wartet, wie bereits erwähnt, eine weitere Bestätigungs-E-Mail auf Sie, die Einstein-spezifisch ist. Klicken Sie auch auf diesen Bestätigungslink.

Da Sie nun einen privaten Schlüssel haben, können Sie zeitlich begrenzte Token generieren. Jeder von Ihnen getätigte API-Aufruf – vom Erstellen von Datasets über das Trainieren von Modellen bis hin zur Modellvorhersage – benötigt ein gültiges OAuth-Token im Anforderungsheader. Um das Token zu erhalten, müssen Sie zum Token-Generator gehen und dieselbe E-Mail-Adresse verwenden, mit der Sie sich angemeldet haben. Fügen Sie die oben erhaltene private Schlüsseldatei ein oder laden Sie sie hoch.

Generieren eines Einstein Platform Services-OAuth-Tokens mit Ihrem privaten Schlüssel.

Praktische Erfahrung mit der Salesforce-Einstein-API

Die Nutzung der KI-Cloud über Salesforce Einstein beinhaltet einige grundlegende Konzepte zum Trainieren ihres KI-Netzwerks durch Hochladen von Beispieldaten. Wenn Ihnen das nicht bekannt vorkommt, gibt mein vorheriges Tutorial einige Beispiele für die Arbeit mit Salesforce Einstein – sowohl für Einstein Language als auch für Einstein Vision.

Vorausgesetzt, Sie sind damit vertraut, verwenden wir jetzt die Einstein-Bildklassifizierungs-REST-API über cURL oder Postman. Wenn Sie Postman verwenden, können Sie überall dort, wo wir einen cURL-Aufruf haben, die Importfunktion von Postman verwenden:

Importieren von cURL-Anweisungen in Postman.

Angenommen, Sie stoßen auf eine nützliche Geschäftsanforderung, bei der Sie anhand von Bildern zwischen dem Smartphone und dem Festnetztelefon unterscheiden möchten, und anhand dieser Vorhersage Ihren Lead-Score aktualisieren oder Ihren Anwendungsfall bearbeiten möchten.

Der nächste Schritt ist die Erstellung unseres eigenen Datensatzes. Bitte beachten Sie, dass Sie mindestens 40 bereits kategorisierte Beispiele benötigen. (Wenn dies mehr Zeit ist, als Sie im Moment investieren möchten, können Sie zum Vorhersageabschnitt unten springen. Verwenden Sie einfach eine modelId von FoodImageClassifier , GeneralImageClassifier , SceneClassifier oder MultiLabelImageClassifier .)

In unserem Fall haben wir zwei Kategorien: Smartphones und Festnetztelefone. Wir erstellen zwei Ordner, bezeichnen sie als Smartphones und Festnetztelefone und fügen jedem Ordner Bilder hinzu. Wir erstellen dann eine ZIP-Datei (nur zip: 7z funktioniert beispielsweise nicht), die diese Ordner enthält.

Dieser Einstein-API-Endpunkt, der zum Erstellen von Datensätzen verwendet wird, ist der nächste:

 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

Hier kann <ZIP_LOCATION> wie eines dieser Beispiele aussehen:

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

In Postman müssten Sie ohne Import die Kopf- und Textregisterkarten wie unten gezeigt ausfüllen:

Ausfüllen der Kopfzeilen in Postman.

Füllen Sie den Körper in Postman aus.

Es wird einige Zeit dauern, bis alle Bilder hochgeladen sind. Unter der Annahme, dass alle Bilder erfolgreich hochgeladen wurden, enthält die Antwort eine datasetId (wiederholt als Haupt- id und einmal pro Kategorie), die in zukünftigen Aufrufen verwendet wird.

Nachdem Ihr Datensatz hochgeladen wurde, müssen Sie das Modell mit den soeben hochgeladenen Daten trainieren. Um das Modell zu trainieren, verwenden Sie den folgenden Aufruf:

 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 

Trainieren Sie Ihr Einstein Vision-Modell über Postman.

Das Training des Datensatzes wird normalerweise in ihre Warteschlange gestellt, und als Antwort erhalten wir die modelId . Danach können wir einen anderen Endpunkt überprüfen, um zu wissen, ob das Modell trainiert wurde oder noch nicht:

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

Wenn das Modell trainiert ist, erhalten Sie eine Antwort wie diese:

Überprüfung des Trainingsfortschritts Ihres Modells über Postman.

Verwenden von Einstein Vision für die Bildvorhersage

Hier ist das Herzstück. Sobald das Modell trainiert ist, können Sie nun ein Bild senden, und das Modell gibt Wahrscheinlichkeitswerte für jede von uns definierte Kategorie zurück. Für das aktuelle Modell haben wir ein Standard-iPhone X-Bild zur Vorhersage ausgewählt.

Für die Vorhersage selbst verwenden wir den folgenden Endpunkt:

 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

Dieses Mal ist <IMAGE_LOCATION> ähnlich wie <ZIP_LOCATION> , aber es werden andere Schlüssel verwendet und es gibt eine dritte Option:

  1. sampleContent=@/path/to/your/local/file.zip
  2. sampleLocation=http://somedomain/file.zip
  3. sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0... (Mit anderen Worten, Sie brauchen kein Präfix, nur den rohen Basis-64-Teil, wenn Sie diese Upload-Methode verwenden möchten.)

Abrufen einer Einstein Vision-Vorhersage über Postman.

Mit Blick auf den Screenshot und die Wahrscheinlichkeitswerte hat das Modell erfolgreich vorhergesagt, dass das iPhone X-Bild in die Smartphone-Kategorie eingeordnet wird. Erfolg!

Unabhängig von Ihrem Anwendungsfall sollten Sie untersuchen, ob Einstein Vision davon ausgeht, dass Sie ein Bild bereitstellen, das in eine der Kategorien fällt, für die Sie es trainiert haben. Beim Testen stellten wir fest, dass, als wir dem obigen Modell ein Bild eines Segelboots schickten, es eine bestmögliche Vermutung zwischen Smartphones und Festnetztelefonen anstellte, anstatt anzuzeigen, dass es beides nicht zu sein scheint. Mit anderen Worten, die Bewertungen, die es für Ihr Segelbootbild gibt, das ein Festnetzanschluss oder ein Smartphone ist, summieren sich immer noch zu 1, genau wie bei einer legitimen Eingabe.

Einige vorgefertigte Modelle haben jedoch Kategorien wie Other (für das SceneClassifier Modell) und UNKNOWN (für FoodImageClassifier ). Es lohnt sich also, für Ihren speziellen Kontext zu experimentieren, damit Sie wissen, was Sie erwartet, wenn Sie es mit Bildern füttern möchten, die nicht zu den ihm gegebenen Kategorien passen.

Es gibt auch den „Multi-Label“-Modelltyp, der alle Kategorien sortiert nach Wahrscheinlichkeit zurückgibt, mit der Annahme, dass mehrere Kategorien zutreffen – dh die Wahrscheinlichkeiten addieren sich nicht zu 1. Wenn das eher nach dem klingt, was Sie tun , lohnt sich ein Blick in die neu erschienene Einstein-Objekterkennung. Anstatt Ihnen nur zu sagen, was in einem Bild insgesamt enthalten sein könnte, gibt es Ihnen tatsächlich Begrenzungsrahmen zusammen mit den Vorhersagen. Dies ähnelt dem, was Sie vielleicht beim automatischen Tagging auf Facebook gesehen haben, außer dass es nicht auf Gesichter beschränkt ist.

Salesforce Einstein-Sprache: Absicht und Stimmung

Wenn Sie Ihr eigenes Modell trainieren möchten, können Sie mit Salesforce Einstein theoretisch sowohl Intent als auch Sentiment trainieren, aber es ist viel üblicher, nur Intent zu trainieren. Das Trainieren eines Intent-Modells ähnelt dem, was wir oben durchgegangen sind, aber anstelle von Ordnern mit Bildern liefern Sie eine zweispaltige CSV-Datei mit Texten in Spalte A und den entsprechenden Kategorien in Spalte B. (Sie unterstützen auch TSV oder JSON. )

Da die Trainingsschritte weitgehend gleich sind, gehen wir an dieser Stelle davon aus, dass Sie bereits ein Einstein Intent-Modell mit den in case_routing_intent.csv Trainingsdaten trainiert haben und mit dem vorgefertigten Standardmodell für Einstein Sentiment einverstanden sind.

Einstein Intent Prediction Calls sind so einfach wie:

 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

Hier könnte <TEXT_TO_PREDICT> so etwas wie „Wie erhalte ich eine Sendungsverfolgungsnummer für meine Sendung?“ lauten.

Der API-Aufruf ist derselbe wie bei Einstein Sentiment, außer dass Sie die vorgefertigte modelId CommunitySentiment verwenden können (und beachten Sie den anderen Endpunkt):

 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

Die JSON-Ausgabe sieht in beiden Fällen genauso aus wie das Vorhersageantwortformat für die Einstein-Bildklassifizierung: Die Hauptsubstanz befindet sich in einem Array, das den Schlüsselwahrscheinlichkeiten zugeordnet ist, und jedes Array-Element gibt Ihnen eine Bezeichnung und eine probabilities . Das ist alles dazu!

Einfache KI mit Salesforce Einstein

Sie haben jetzt gesehen, wie einfach es ist, Einstein Vision und Einstein Language zu verwenden, und dass die Einstein-APIs nichts mit den übrigen Salesforce-Entwickler-APIs zu tun haben, außer dem Namen. Was werden Sie mit ihnen erstellen?