Salesforce Einstein AI:APIチュートリアル
公開: 2022-03-11Salesforce以外のアプリ開発者は、AIの世界に隠された宝石を見逃している可能性があります。
開発者がAIにクラウドを使用することを考えるとき、IBM Watson、Microsoft Azure Cognitive Services、Google Cloud、またはAmazonAIを思い浮かべるかもしれません。 彼らがSalesforceEinsteinについて聞いたとき、彼らはそれがSalesforce開発者の専門分野に限定されていると自動的に想定するかもしれません。
そうではありません! Salesforceに関連するかどうかに関係なく、どのアプリでも、Salesforceが取得した高度なAIクラウドテクノロジーを活用できます。 彼らは、独自のAIクラウドサービスのオーケストレーションであるSalesforceEinsteinでAI市場に参入しました。 特に、これには言語および画像認識サービスの提供が含まれます。
他のAIクラウドソリューションと同様に、その下にあるヘビーウェイトテクノロジーを使用するために博士号を取得する必要はありません。 このSalesforceEinsteinAPIチュートリアルでは、アカウントを設定して最初のAIクラウドAPI呼び出しを行う方法を説明します。 通話自体については、cURLとPostmanを使用しますが、独自のバックエンドプロトタイプや、最も使いやすいその他のテクノロジーを使用することもできます。
そこから、空が限界です。
SalesforceEinsteinAPIアカウントの作成
Einstein Platform API呼び出しを行うには、最初にEinstein APIアカウントを作成し、キーをダウンロードして、そのキーを使用してSalesforceOAuthトークンを生成する必要があります。 EinsteinVisionとEinsteinLanguageの両方を使用できるようにするには、このプロセスを1回だけ実行する必要があります。
SalesforceまたはHerokuのクレデンシャルを使用してログインできます。 上記のオプションのいずれかを選択すると、それぞれのログインページにリダイレクトされます。 Herokuでログインする場合は、クレジットカードを設定し、サービスを特定のHerokuインスタンスにアタッチする必要があります。
Salesforceを初めて使用し、Herokuアカウントを持っていない場合、Herokuアカウントの設定はかなり迅速です。たとえば、Googleのような既存のソーシャルアカウントを介してサインアップする場合はさらに迅速です。
ここからは、Herokuの代わりにSalesforceを(ソーシャルアカウント経由かどうかに関係なく)使用していると想定します。 このプロセスには少し後戻りが含まれるため、これらの手順に細心の注意を払う必要があります。
Salesforceにログインすると、Einsteinとはあまり関係のないツアー画面が表示されます。 この時点で、電子メールを確認し、確認リンクをクリックする必要があります。 そうしないと、次の手順でエラーが発生します。
EinsteinAPIトークンの取得
次のステップは、最初のEinstein APIサインアップリンクに戻って、Salesforceログインボタンを再試行することです。 その後、Googleなどの外部認証パートナーを使用してアカウントを作成した場合でも、新しいパスワードを設定し、ツアーページにリダイレクトされます。
ここで、もう一度APIサインアップページに戻り、Salesforceログインボタンをもう一度クリックします。 今回は以下のようなページが表示されます。 メールを確認する必要があると表示されている場合でも、秘密鍵をダウンロードする前にこのページを離れないでください。 そうした場合、サポートチームの手動による支援なしに秘密鍵を取得する方法はありません。
ファイルをローカルマシンにダウンロードするか、キーをコピーしてテキストエディタに貼り付け、ファイルをeinstein_platform.pem
として保存することができます。
その間、前述のように、別の確認メールがあなたを待っています。これはアインシュタイン固有のものです。 その確認リンクもクリックしてください。
秘密鍵を入手したので、時間制限のあるトークンを生成できます。 データセットの作成からモデルのトレーニング、モデルの予測まで、行うすべてのAPI呼び出しには、リクエストヘッダーに有効なOAuthトークンが必要です。 トークンを取得するには、トークンジェネレータに移動し、ログインに使用したのと同じメールアドレスを使用する必要があります。上記で受け取った秘密鍵ファイルを貼り付けるかアップロードします。
SalesforceEinsteinAPIを実際に使用する
Salesforce Einsteinを介してAIクラウドを使用するには、サンプルデータをアップロードして人工知能ネットワークをトレーニングする方法に関するいくつかの基本的な概念が含まれます。 それがなじみのないように思える場合は、前のチュートリアルで、SalesforceEinsteinを使用した例をいくつか示します。EinsteinLanguageとEinsteinVisionの両方です。
これに慣れていると仮定して、cURLまたはPostmanを介してEinstein画像分類RESTAPIを使用します。 Postmanを使用している場合は、cURL呼び出しがある場所であればどこでも、Postmanのインポート機能を使用できます。
画像に基づいてスマートフォンと固定電話を区別し、その予測を使用してリードスコアを更新したり、ユースケースを処理したりするという便利なビジネス要件に遭遇したとします。
次のステップは、独自のデータセットを作成することです。 すでに分類されている例が少なくとも40個必要であることに注意してください。 (現時点で投資したい時間よりも長い場合は、以下の予測セクションにスキップできますFoodImageClassifier
、 GeneralImageClassifier
、 SceneClassifier
、またはMultiLabelImageClassifier
のmodelId
を使用するだけです。)
私たちの場合、スマートフォンと固定電話の2つのカテゴリがあります。 2つのフォルダーを作成し、スマートフォンと固定電話のラベルを付けて、各フォルダーに画像を追加します。 次に、これらのフォルダーを含むzipファイル(zipのみ:7zは機能しません)を作成します。
データセットの作成に使用されるこのEinsteinAPIエンドポイントは次のとおりです。
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
ここで、 <ZIP_LOCATION>
は次のいずれかの例のようになります。
-
data=@/path/to/your/local/file.zip
-
path=http://somedomain/file.zip
Postmanでは、インポートせずに、以下に示すようにヘッダータブと本文タブに入力する必要があります。

すべての画像がアップロードされるまで時間がかかります。 すべての画像が正常にアップロードされたと仮定すると、応答にはdatasetId
(メインid
として繰り返され、カテゴリごとに1回)が含まれます。これは、今後の呼び出しで使用されます。
データセットがアップロードされたら、アップロードしたばかりのデータを使用してモデルをトレーニングする必要があります。 モデルをトレーニングするには、次の呼び出しを使用します。
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
データセットのトレーニングは通常、キューに配置され、それに応じてmodelId
を取得します。 その後、別のエンドポイントをチェックして、モデルがまだトレーニングされているかどうかを確認できます。
curl -X GET \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ https://api.einstein.ai/v2/vision/train/<YOUR_MODEL_ID>
モデルがトレーニングされると、次のような応答が返されます。
画像予測のためのEinsteinVisionの使用
これがその核心です。 モデルがトレーニングされると、画像を送信できるようになります。モデルは、定義した各カテゴリの確率値を返します。 現在のモデルでは、予測用にストックのiPhoneX画像を選択しました。
予測自体には、次のエンドポイントを使用します。
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
今回は、 <IMAGE_LOCATION>
は<ZIP_LOCATION>
ZIP_LOCATION>に似ていますが、異なるキーが使用され、3番目のオプションがあります。
-
sampleContent=@/path/to/your/local/file.zip
-
sampleLocation=http://somedomain/file.zip
-
sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0...
(つまり、このアップロード方法を使用する場合は、プレフィックスは必要ありません。生のbase 64部分だけが必要です。)
スクリーンショットと確率の値を見ると、モデルはiPhoneXの画像がスマートフォンのカテゴリに分類されることを予測することに成功しました。 成功!
ユースケースが何であれ、Einstein Visionが、トレーニングしたカテゴリの1つに該当する画像を提供していると想定しているかどうかを調べたいと思うでしょう。 テストの結果、上記のモデルにヨットの写真を送信したところ、スマートフォンと固定電話のどちらでもないように見えるのではなく、スマートフォンと固定電話のどちらかを推測するのが最適であることがわかりました。 言い換えれば、それがあなたのヨットの写真が固定電話またはスマートフォンである場合に与える評価は、正当な入力の場合と同じように、合計で1になります。
ただし、一部のビルド済みモデルには、 Other
( SceneClassifier
モデルの場合)やUNKNOWN
( FoodImageClassifier
の場合)などのカテゴリがあります。 したがって、特定のコンテキストで実験する価値があります。そうすれば、与えられたカテゴリに適合しない画像をフィードしたい場合に何を期待できるかを知ることができます。
「マルチラベル」タイプのモデルもあります。これは、複数のカテゴリが適用されることを前提として、確率で並べ替えられたすべてのカテゴリを返します。つまり、確率の合計が1にならないことを前提としています。 、新しくリリースされたEinsteinObjectDetectionを調べる価値があります。 画像に何が含まれているのか(全体として)を伝えるだけでなく、実際には予測とともにバウンディングボックスを提供します。 これは、顔に限定されないことを除けば、Facebookの自動タグ付けで見たものと似ています。
Salesforce Einstein言語:意図と感情
独自のモデルをトレーニングする場合、Salesforce Einsteinでは理論的にはインテントとセンチメントの両方をトレーニングできますが、わざわざインテントをトレーニングするだけの方がはるかに一般的です。 インテントモデルのトレーニングは上記で行ったものと似ていますが、画像のフォルダーの代わりに、A列にテキストを、B列に対応するカテゴリを含む2列のCSVファイルを提供します(TSVまたはJSONもサポートしています。 )。
トレーニング手順はほぼ同じであるため、この時点で、 case_routing_intent.csv
で提供されるトレーニングデータを使用してEinstein Intentモデルをすでにトレーニングしており、EinsteinSentimentの標準のビルド済みモデルを使用して問題がないことを前提としています。
Einstein Intent予測呼び出しは、次のように簡単です。
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
ここで、 <TEXT_TO_PREDICT>
は、「貨物の追跡番号を取得するにはどうすればよいですか?」のようになります。
API呼び出しはEinsteinSentimentと同じですが、事前に構築されたmodelId CommunitySentiment
を使用できる点が異なります(異なるエンドポイントに注意してください)。
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
どちらの場合も、JSON出力はEinstein画像分類の予測応答形式とまったく同じように見えます。主要な実体は主要なprobabilities
に関連付けられた配列にあり、各配列要素はラベルと確率を提供します。 これですべてです。
SalesforceEinsteinを使用した簡単なAI
これで、EinsteinVisionとEinsteinLanguageを使用することがいかに簡単であるか、およびEinsteinAPIが名前を除いて他のSalesforce開発者APIとは何の関係もないことを確認しました。 それらを使って何を作成しますか?