Salesforce Einstein AI:API 教程

已发表: 2022-03-11

非 Salesforce 应用程序开发人员可能会错过 AI 世界中隐藏的宝石。

当开发人员想到将云用于 AI 时,他们可能会想到 IBM Watson、Microsoft Azure Cognitive Services、Google Cloud 或 Amazon AI。 当他们听说 Salesforce Einstein 时,他们可能会自动认为它仅限于 Salesforce 开发人员专业化。

不是这样! 任何应用程序,无论是否与 Salesforce 相关,都可以利用 Salesforce 获得的复杂人工智能云技术。 他们通过自己的人工智能云服务编排 Salesforce Einstein 进入了人工智能市场。 值得注意的是,这包括提供语言和图像识别服务。

与其他 AI 云解决方案一样,您无需拥有博士学位即可使用其下的重量级技术。 在这个 Salesforce Einstein API 教程中,我将向您展示如何设置一个帐户并进行您的第一个 AI 云 API 调用。 对于调用本身,我们将使用 cURL 和 Postman,但您也可以使用自己的后端原型或您最熟悉的任何其他技术。

从那里,天空是极限。

创建 Salesforce Einstein API 帐户

要进行 Einstein Platform API 调用,您首先需要创建 Einstein API 帐户、下载密钥并使用该密钥生成 Salesforce OAuth 令牌。 该过程只需执行一次即可同时使用 Einstein Vision 和 Einstein Language。

Salesforce Einstein 允许您通过社交身份验证或 Heroku 直接注册。

您可以使用 Salesforce 或 Heroku 凭据登录。 选择上述任何选项后,您将被重定向到各自的登录页面。 如果您使用 Heroku 登录,他们会要求您使用他们设置信用卡并将服务附加到您的特定 Heroku 实例。

Heroku Einstein 集成页面

如果您是 Salesforce 新手并且没有 Heroku 帐户,那么在他们那里设置一个帐户会相当快——如果您想通过一个预先存在的社交帐户(例如 Google 的帐户)进行注册,则速度会更快。

我们将从这里假设您使用的是 Salesforce(通过或不通过社交帐户)而不是 Heroku。 该过程涉及一些回溯,因此您需要密切注意这些步骤。

Salesforce 登录页面。

登录 Salesforce 后,您将看到与 Einstein 没有太大关系的导览屏幕。 此时,您应该检查您的电子邮件并单击他们的验证链接; 否则,下一步将导致错误。

获取 Einstein API 令牌

下一步是回到最初的 Einstein API 注册链接并再次尝试 Salesforce 登录按钮。 之后,您将设置一个新密码(即使您是在 Google 等外部授权合作伙伴的帮助下创建帐户的)并再次被重定向到游览页面。

现在,第三次返回 API 注册页面,然后再次单击 Salesforce 登录按钮。 这次你会得到一个如下所示的页面。 在下载您的私钥之前不要离开此页面,即使它可能会说您需要验证您的电子邮件! 如果这样做,如果没有他们的支持团队的手动帮助,将无法获得您的私钥。

在注册过程中,您只有一次机会下载您的 Einstein API 私钥。

您可以将文件下载到本地计算机,也可以将密钥复制并粘贴到文本编辑器中,然后将文件另存为einstein_platform.pem

同时,如前所述,您将收到另一封验证电子邮件,这是 Einstein 专用的。 也单击该验证链接。

现在您有了私钥,就可以生成限时令牌。 您进行的每个 API 调用(从创建数据集、训练模型到模型预测)都需要在请求标头中包含有效的 OAuth 令牌。 要获取令牌,您需要转到他们的令牌生成器并使用您登录时使用的相同电子邮件地址。粘贴或上传您在上面收到的私钥文件。

使用您的私钥生成 Einstein Platform Services OAuth 令牌。

亲身体验 Salesforce Einstein API

通过 Salesforce Einstein 使用 AI 云涉及如何通过上传样本数据来训练他们的人工智能网络的一些基本概念。 如果这听起来不熟悉,我之前的教程提供了一些使用 Salesforce Einstein 的示例,包括 Einstein Language 和 Einstein Vision。

假设您对此感到满意,我们现在将通过 cURL 或 Postman 使用 Einstein 图像分类 REST API。 如果您使用 Postman,无论我们在哪里调用 cURL,您都可以使用 Postman 的导入功能:

将 cURL 语句导入 Postman。

假设您遇到了一个有用的业务需求,您希望根据图像区分智能手机和固定电话,并且使用该预测来更新您的潜在客户分数或处理您的用例。

下一步是创建我们自己的数据集。 请注意,您至少需要 40 个已分类的示例。 (如果这比您目前想要投入的时间更多,您可以跳到下面的预测部分。只需使用modelIdGeneralImageClassifierSceneClassifierMultiLabelImageClassifierFoodImageClassifier 。)

在我们的例子中,我们有两类:智能手机和固定电话。 我们创建两个文件夹,将它们标记为智能手机和固定电话,并在每个文件夹中添加图像。 然后我们创建一个包含这些文件夹的 zip 文件(例如,仅 zip:7z 不起作用)。

接下来是用于创建数据集的 Einstein API 端点:

 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>可以像以下任何一个示例:

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

在 Postman 中,无需导入,您需要填写标题和正文选项卡,如下所示:

在 Postman 中填写标题。

在 Postman 中填写正文。

上传所有图像需要时间。 假设所有图像都成功上传,响应将有一个datasetId (作为主id重复,每个类别一次),将在以后的调用中使用。

上传数据集后,您必须使用刚刚上传的数据训练模型。 要训​​练模型,请使用以下调用:

 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 

通过 Postman 训练您的 Einstein Vision 模型。

数据集的训练通常放在他们的队列中,作为响应,我们将获得modelId 。 之后,我们可以检查另一个端点以了解模型是否已经过训练:

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

训练模型后,您会得到如下响应:

通过 Postman 检查模型的训练进度。

使用 Einstein Vision 进行图像预测

这是它的核心。 训练模型后,您现在可以发送图像,模型将返回我们定义的每个类别的概率值。 对于当前模型,我们选择了一张库存 iPhone X 图像进行预测。

对于预测本身,我们使用以下端点:

 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> ,但使用了不同的键,还有第三种选择:

  1. sampleContent=@/path/to/your/local/file.zip
  2. sampleLocation=http://somedomain/file.zip
  3. sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0... (换句话说,如果你想使用这种上传方法,你不需要任何前缀,只需要原始的 base 64 部分。)

通过 Postman 获得 Einstein Vision 预测。

查看截图和概率值,模型成功预测 iPhone X 图像被归类为智能手机类别。 成功!

无论您的用例是什么,您都需要探索 Einstein Vision 是否假设您提供的图像属于您训练它的类别之一。 在测试中,我们发现当我们向上述模型发送一张帆船的照片时,它在智能手机和固定电话之间做出了最好的猜测,而不是表明两者似乎都不是。 换句话说,它为您的帆船图片作为固定电话或智能手机给出的评分加起来仍然为 1,就像使用合法输入时一样。

但是,一些预建模型具有诸如Other (对于SceneClassifier模型)和UNKNOWN (对于FoodImageClassifier )等类别。 因此,值得针对您的特定上下文进行试验,这样您就可以知道如果您想要为其提供不符合给定类别的图像会发生什么。

还有“多标签”类型的模型,它返回所有类别,按概率排序,假设多个类别适用——即概率加起来不等于 1。如果这听起来更像你在做什么,值得研究新发布的爱因斯坦物体检测。 它不仅仅是告诉你图像中可能包含的内容——总体而言——它实际上为你提供了边界框和预测。 这类似于您可能在 Facebook 上看到的自动标记,但它不仅限于面孔。

Salesforce 爱因斯坦语言:意图和情感

如果你想训练自己的模型,Salesforce Einstein 理论上可以让你训练 Intent 和 Sentiment,但更常见的是只训练 Intent。 训练一个 Intent 模型与我们上面所经历的类似,但不是图像文件夹,而是提供一个两列 CSV 文件,A 列中包含文本,B 列中包含相应的类别。(它们还支持 TSV 或 JSON。 )

由于训练步骤基本相同,因此我们假设您已经使用case_routing_intent.csv中提供的训练数据训练了 Einstein Intent 模型,并且可以使用 Einstein Sentiment 的标准预构建模型。

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 调用与 Einstein Sentiment 相同,只是您可以使用预构建的 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相关联的数组中,每个数组元素都为您提供标签和概率。 这里的所有都是它的!

Salesforce Einstein 的简单 AI

您现在已经看到使用 Einstein Vision 和 Einstein Language 是多么简单,以及 Einstein API 如何与其他 Salesforce 开发人员 API 没有任何关系,除了名称。 会用他们创造什么?