Salesforce Einstein AI: руководство по API
Опубликовано: 2022-03-11Разработчики приложений, не связанные с Salesforce, могут упустить скрытую жемчужину в мире ИИ.
Когда разработчики думают об использовании облака для ИИ, они могут думать об IBM Watson, Microsoft Azure Cognitive Services, Google Cloud или Amazon AI. Когда они слышат о Salesforce Einstein, они могут автоматически предположить, что это ограничено специализацией разработчиков Salesforce.
Не так! Любое приложение, независимо от того, связано оно с Salesforce или нет, может использовать сложные облачные технологии искусственного интеллекта, приобретенные Salesforce. Они вышли на рынок ИИ с Salesforce Einstein, собственной организацией облачных сервисов ИИ. В частности, сюда входят предложения услуг по распознаванию языка и изображений.
Как и в случае с другими облачными решениями ИИ, вам не нужно иметь докторскую степень, чтобы использовать лежащие в их основе тяжеловесные технологии. В этом учебном пособии по API Salesforce Einstein я покажу вам, как настроить учетную запись и сделать первые вызовы облачного API ИИ. Что касается самих вызовов, мы поиграем с cURL и Postman, но вы также можете использовать свой собственный внутренний прототип или любую другую технологию, которая вам наиболее удобна.
Оттуда нет предела.
Создание учетной записи API Salesforce Einstein
Чтобы совершать вызовы API платформы Einstein, сначала необходимо создать учетную запись API Einstein, загрузить ключ и сгенерировать токен Salesforce OAuth с использованием этого ключа. Этот процесс нужно выполнить только один раз, чтобы иметь возможность использовать как Einstein Vision, так и Einstein Language.
Вы можете войти в систему, используя свои учетные данные Salesforce или Heroku. При выборе любого из вышеперечисленных вариантов вы будете перенаправлены на соответствующие страницы входа. Если вы входите в систему с помощью Heroku, они требуют, чтобы вы создали для них кредитную карту и привязали службу к конкретному вашему экземпляру Heroku.
Если вы новичок в Salesforce и у вас нет учетной записи Heroku, настроить учетную запись с ними довольно быстро — даже быстрее, если вы хотите зарегистрироваться через уже существующую социальную учетную запись, например, в Google.
Отсюда мы предполагаем, что вы используете Salesforce (через социальную учетную запись или нет) вместо Heroku. Процесс включает в себя небольшое отступление, поэтому вам следует уделить пристальное внимание этим шагам.
После того, как вы войдете в систему Salesforce, вы увидите экран тура, который не имеет ничего общего с Эйнштейном. На этом этапе вы должны проверить свою электронную почту и щелкнуть ссылку подтверждения; в противном случае следующий шаг приведет к ошибке.
Получение токена Einstein API
Следующий шаг — вернуться к исходной ссылке для регистрации в Einstein API и снова нажать кнопку входа в систему Salesforce. После этого вы установите новый пароль — даже если вы создали свою учетную запись с помощью внешнего партнера по авторизации, такого как Google, — и снова будете перенаправлены на страницу тура.
Теперь вернитесь в третий раз на страницу регистрации API и снова нажмите кнопку входа в систему Salesforce. На этот раз вы получите страницу, как показано ниже. Не покидайте эту страницу, пока не загрузите свой закрытый ключ , даже если там будет написано, что вам нужно подтвердить свой адрес электронной почты! Если вы это сделаете, у вас не будет возможности получить ваш закрытый ключ без ручной помощи их службы поддержки.
Вы можете либо загрузить файл на свой локальный компьютер, либо скопировать и вставить ключ в текстовый редактор и сохранить файл как einstein_platform.pem
.
Между тем, как уже упоминалось, вас будет ждать еще одно письмо с подтверждением, на этот раз конкретное для Эйнштейна. Нажмите на эту ссылку подтверждения тоже.
Теперь, когда у вас есть закрытый ключ, вы можете создавать токены с ограниченным сроком действия. Для каждого выполняемого вами вызова API — от создания наборов данных до моделей обучения и прогнозирования моделей — требуется действительный токен OAuth в заголовке запроса. Чтобы получить токен, вам нужно перейти к их генератору токенов и использовать тот же адрес электронной почты, который вы использовали для входа в систему. Вставьте или загрузите файл закрытого ключа, который вы получили выше.
Практический опыт работы с Salesforce Einstein API
Использование облака ИИ через Salesforce Einstein включает в себя некоторые базовые концепции обучения сети искусственного интеллекта путем загрузки образцов данных. Если вам это не кажется знакомым, мой предыдущий учебник содержит несколько примеров работы с Salesforce Einstein — как для Einstein Language, так и для Einstein Vision.
Предполагая, что вас это устраивает, теперь мы будем использовать REST API Einstein Image Classification через cURL или Postman. Если вы используете Postman, везде, где у нас есть вызов cURL, вы можете использовать функцию импорта Postman:
Предположим, вы столкнулись с полезным бизнес-требованием, в котором вы хотите отличить смартфон от стационарного телефона на основе изображений, и, используя это предсказание, вы хотите обновить оценку потенциального клиента или обработать свой вариант использования.
Следующий шаг — создание собственного набора данных. Обратите внимание, что вам нужно как минимум 40 примеров, которые уже были классифицированы. (Если это больше времени, чем вы хотите потратить на данный момент, вы можете перейти к разделу прогнозов ниже. Просто используйте modelId
FoodImageClassifier
, GeneralImageClassifier
, SceneClassifier
или MultiLabelImageClassifier
.)
В нашем случае у нас есть две категории: смартфоны и стационарные телефоны. Мы создаем две папки, обозначая их как смартфоны и стационарные телефоны, и добавляем изображения в каждую папку. Затем мы создаем 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>
может быть одним из следующих примеров:
-
data=@/path/to/your/local/file.zip
-
path=http://somedomain/file.zip
В 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
Обучение набора данных обычно помещается в их очередь, и в ответ мы получаем modelId
. После этого мы можем проверить другую конечную точку, чтобы узнать, обучена модель или нет:
curl -X GET \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ https://api.einstein.ai/v2/vision/train/<YOUR_MODEL_ID>
Когда модель обучена, вы получите такой ответ:
Использование 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>
, но используются другие ключи, и есть третий вариант:
-
sampleContent=@/path/to/your/local/file.zip
-
sampleLocation=http://somedomain/file.zip
-
sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0...
(Другими словами, вам не нужен никакой префикс, только необработанная часть base 64, если вы хотите использовать этот метод загрузки.)
Глядя на скриншот и значения вероятности, модель успешно предсказала, что изображение iPhone X относится к категории смартфонов. Успех!
Каким бы ни был ваш вариант использования, вы захотите выяснить, предполагает ли Einstein Vision, что вы предоставляете изображение, подпадающее под одну из категорий, на которых вы его обучали. В ходе тестирования мы обнаружили, что когда мы отправили вышеуказанной модели изображение парусной лодки, она сделала лучшее предположение между смартфонами и стационарными телефонами, а не указала, что это не так. Другими словами, оценки, которые он дает для вашего изображения парусника, являющегося стационарным телефоном или смартфоном, по-прежнему составляют в сумме 1, как и при правильном вводе.
Однако некоторые готовые модели имеют такие категории, как Other
(для модели SceneClassifier
) и UNKNOWN
(для FoodImageClassifier
). Так что стоит поэкспериментировать для вашего конкретного контекста, чтобы вы могли знать, чего ожидать, если вы захотите скармливать ему изображения, которые не соответствуют заданным для него категориям.
Существует также тип модели с несколькими метками, который возвращает все категории, отсортированные по вероятности, с предположением, что применяются несколько категорий, т. е. вероятности не составляют в сумме 1. Если это больше похоже на то, что вы делаете, , стоило бы изучить недавно выпущенную программу Einstein Object Detection. Вместо того, чтобы просто сказать вам, что может быть на изображении — в целом — он фактически дает вам ограничивающие рамки вместе с прогнозами. Это похоже на то, что вы могли видеть с автоматической пометкой на Facebook, за исключением того, что она не ограничивается лицами.
Salesforce Einstein Language: намерения и настроения
Если вы хотите обучить свою собственную модель, Salesforce Einstein теоретически позволяет обучать как Intent, так и Sentiment, но гораздо чаще тренируется только Intent. Обучение модели Intent похоже на то, что мы сделали выше, но вместо папок с изображениями вы предоставляете файл CSV с двумя столбцами, с текстами в столбце A и соответствующими категориями в столбце B. (Они также поддерживают TSV или JSON. )
Поскольку этапы обучения в основном одинаковы, на данном этапе мы будем считать, что вы уже обучили модель Einstein Intent с помощью обучающих данных, которые они предоставляют в case_routing_intent.csv
, и можете использовать стандартную предварительно созданную модель для Einstein Sentiment.
Вызовы Einstein Intent Prediction так же просты, как:
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 в обоих случаях выглядит точно так же, как формат ответа прогноза для классификации изображений Эйнштейна: основное содержание находится в массиве, связанном с ключевыми probabilities
, и каждый элемент массива дает вам метку и вероятность. Вот и все!
Простой ИИ с Salesforce Einstein
Теперь вы увидели, насколько просто использовать Einstein Vision и Einstein Language, и как API-интерфейсы Einstein не имеют ничего общего с остальными API-интерфейсами разработчиков Salesforce, кроме названия. Что вы с ними создадите?