Salesforce Einstein AI: um tutorial de API
Publicados: 2022-03-11Os desenvolvedores de aplicativos que não são da Salesforce podem estar perdendo uma joia escondida no mundo da IA.
Quando os desenvolvedores pensam em usar a nuvem para IA, eles podem pensar em IBM Watson, Microsoft Azure Cognitive Services, Google Cloud ou Amazon AI. Quando ouvem falar do Salesforce Einstein, podem presumir automaticamente que ele está limitado à especialização de desenvolvedor do Salesforce.
Não tão! Qualquer aplicativo, relacionado ou não ao Salesforce, pode aproveitar as sofisticadas tecnologias de nuvem de IA que o Salesforce adquiriu. Eles entraram no mercado de IA com o Salesforce Einstein, sua própria orquestração de serviços em nuvem de IA. Notavelmente, isso inclui ofertas de serviços de reconhecimento de linguagem e imagem.
Assim como em outras soluções de nuvem de IA, você não precisa ter um doutorado para usar as tecnologias pesadas subjacentes. Neste tutorial da API do Salesforce Einstein, mostrarei como configurar uma conta e fazer suas primeiras chamadas de API na nuvem de IA. Para as chamadas em si, vamos brincar com cURL e Postman, mas você também pode usar seu próprio protótipo de back-end ou qualquer outra tecnologia com a qual se sinta mais confortável.
A partir daí, o céu é o limite.
Criando uma conta de API do Salesforce Einstein
Para fazer chamadas à API da Plataforma Einstein, primeiro você precisa criar uma conta da API Einstein, fazer download da chave e gerar um token OAuth do Salesforce usando essa chave. O processo só precisa ser feito uma vez para poder usar o Einstein Vision e o Einstein Language.
Você pode fazer login usando suas credenciais do Salesforce ou Heroku. Ao selecionar qualquer uma das opções acima, você será redirecionado para suas respectivas páginas de login. Se você fizer login com o Heroku, eles exigirão que você configure um cartão de crédito com eles e anexe o serviço a uma instância específica do Heroku sua.
Se você é novo no Salesforce e não tem uma conta Heroku, configurar uma conta com eles é bastante rápido – ainda mais rápido se você quiser se inscrever por meio de uma conta social preexistente como a do Google.
Partimos do pressuposto de que você está usando o Salesforce (por meio de uma conta social ou não) em vez do Heroku. O processo envolve um pouco de retrocesso, então você deve prestar muita atenção a essas etapas.
Depois de fazer login no Salesforce, você se deparará com uma tela de tour que não tem muito a ver com o Einstein. Neste ponto, você deve verificar seu e-mail e clicar no link de verificação; caso contrário, a próxima etapa resultará em um erro.
Obtendo um token de API do Einstein
A próxima etapa é retornar ao link de inscrição inicial da API do Einstein e tentar o botão de login do Salesforce novamente. Depois disso, você definirá uma nova senha - mesmo que tenha criado sua conta com a ajuda de um parceiro de autorização externo como o Google - e será redirecionado, novamente, para a página do tour.
Agora, volte uma terceira vez para a página de inscrição da API e clique no botão de login do Salesforce novamente. Desta vez, você obterá uma página como mostrado abaixo. Não saia desta página antes de baixar sua chave privada , mesmo que ela diga que você precisa verificar seu e-mail! Se você fizer isso, não haverá como obter sua chave privada sem a ajuda manual da equipe de suporte.
Você pode baixar o arquivo para sua máquina local ou copiar e colar a chave em um editor de texto e salvar o arquivo como einstein_platform.pem
.
Enquanto isso, como mencionado, você terá outro e-mail de verificação esperando por você, sendo este específico do Einstein. Clique nesse link de verificação também.
Agora que você tem uma chave privada, pode gerar tokens de tempo limitado. Cada chamada de API que você faz, desde a criação de conjuntos de dados até o treinamento de modelos e a previsão de modelos, precisa de um token OAuth válido no cabeçalho da solicitação. Para obter o token, você precisa acessar o gerador de token e usar o mesmo endereço de e-mail usado para fazer login. Cole ou carregue o arquivo de chave privada que você recebeu acima.
Prático com a API do Salesforce Einstein
O uso da nuvem de IA por meio do Salesforce Einstein envolve alguns conceitos básicos sobre como treinar sua rede de inteligência artificial por meio do upload de dados de amostra. Se isso não soa familiar, meu tutorial anterior fornece alguns exemplos de como trabalhar com o Salesforce Einstein — tanto para Einstein Language quanto Einstein Vision.
Supondo que você esteja confortável com isso, agora usaremos a API REST do Einstein Image Classification via cURL ou Postman. Se você estiver usando o Postman, onde quer que tenhamos uma chamada cURL, você pode usar o recurso de importação do Postman:
Suponha que você tenha encontrado um requisito comercial útil em que deseja distinguir entre o smartphone e o telefone fixo com base em imagens e, usando essa predicação, deseja atualizar sua pontuação de lead ou processar seu caso de uso.
O próximo passo é criar nosso próprio conjunto de dados. Observe que você precisa de pelo menos 40 exemplos que já foram categorizados. (Se for mais tempo do que você deseja investir no momento, pule para a seção de previsão abaixo. Basta usar um modelId
de FoodImageClassifier
, GeneralImageClassifier
, SceneClassifier
ou MultiLabelImageClassifier
.)
No nosso caso, temos duas categorias: smartphones e telefones fixos. Criamos duas pastas, rotulando-as como smartphones e telefones fixos, e adicionamos imagens em cada pasta. Em seguida, criamos um arquivo zip (somente zip: 7z não funciona, por exemplo) contendo essas pastas.
Este endpoint da API do Einstein, que é usado para criar conjuntos de dados, é o seguinte:
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
Aqui, <ZIP_LOCATION>
pode ser como qualquer um destes exemplos:
-
data=@/path/to/your/local/file.zip
-
path=http://somedomain/file.zip
No Postman, sem importar, você precisaria preencher as abas header e body conforme mostrado abaixo:

Levará algum tempo até que todas as imagens sejam carregadas. Supondo que todas as imagens sejam carregadas com sucesso, a resposta terá um datasetId
(repetido como o id
principal e uma vez por categoria), que será usado em chamadas futuras.
Depois que seu conjunto de dados é carregado, você precisa treinar o modelo usando os dados que acabou de carregar. Para treinar o modelo, use a seguinte chamada:
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
O treinamento do conjunto de dados normalmente é colocado em sua fila e, em resposta, obteremos o modelId
. Depois disso, podemos verificar outro endpoint para saber se o modelo foi treinado ou ainda não:
curl -X GET \ -H "Authorization: Bearer <TOKEN>" \ -H "Cache-Control: no-cache" \ https://api.einstein.ai/v2/vision/train/<YOUR_MODEL_ID>
Quando o modelo for treinado, você receberá uma resposta como esta:
Usando o Einstein Vision para previsão de imagens
Aqui está o coração disso. Depois que o modelo for treinado, você poderá enviar uma imagem e o modelo retornará valores de probabilidade para cada categoria que definimos. Para o modelo atual, escolhemos uma imagem de estoque do iPhone X para previsão.
Para a previsão em si, usamos o seguinte endpoint:
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
Desta vez, <IMAGE_LOCATION>
é semelhante a <ZIP_LOCATION>
, mas são usadas chaves diferentes e há uma terceira opção:
-
sampleContent=@/path/to/your/local/file.zip
-
sampleLocation=http://somedomain/file.zip
-
sampleBase64Content=iVBORw0KGgoAAAANSUhEUgAAAC0...
(Em outras palavras, você não precisa de nenhum prefixo, apenas a parte bruta de base 64, se quiser usar este método de upload.)
Observando a captura de tela e os valores de probabilidade, o modelo previu com sucesso que a imagem do iPhone X é classificada na categoria de smartphone. Sucesso!
Seja qual for o seu caso de uso, você desejará explorar se o Einstein Vision assume que você está fornecendo uma imagem que se enquadra em uma das categorias nas quais você a treinou. Nos testes, descobrimos que quando enviamos ao modelo acima uma foto de um veleiro, ele fez uma melhor suposição entre smartphones e telefones fixos, em vez de indicar que também não parece ser. Em outras palavras, as classificações que ele dá para sua foto de veleiro sendo um telefone fixo ou smartphone ainda somam 1, assim como fariam com entrada legítima.
No entanto, alguns modelos pré-construídos têm categorias como Other
(para o modelo SceneClassifier
) e UNKNOWN
(para o FoodImageClassifier
). Portanto, vale a pena experimentar para o seu contexto específico para que você possa saber o que esperar se desejar alimentá-lo com imagens que não se encaixam nas categorias dadas a ele.
Há também o tipo de modelo "multi-rótulo", que retorna todas as categorias, classificadas por probabilidade, com a suposição de que várias categorias se aplicam, ou seja, as probabilidades não somam 1. Se isso soa mais como o que você está fazendo , valeria a pena dar uma olhada no recém-lançado Einstein Object Detection. Em vez de apenas dizer o que pode estar em uma imagem – em geral – na verdade, ele fornece caixas delimitadoras junto com as previsões. Isso é semelhante ao que você pode ter visto com a marcação automática no Facebook, exceto que não se limita a rostos.
Linguagem do Salesforce Einstein: intenção e sentimento
Se você deseja treinar seu próprio modelo, o Salesforce Einstein teoricamente permite treinar Intenção e Sentimento, mas é muito mais comum se preocupar apenas em treinar Intenção. Treinar um modelo de Intent é semelhante ao que passamos acima, mas em vez de pastas de imagens, você fornece um arquivo CSV de duas colunas, com textos na coluna A e suas categorias correspondentes na coluna B. (Eles também suportam TSV ou JSON. )
Como as etapas de treinamento são basicamente as mesmas, vamos supor neste ponto que você já treinou um modelo Einstein Intent com os dados de treinamento fornecidos em case_routing_intent.csv
e está bem usando o modelo pré-criado padrão para o Einstein Sentiment.
As chamadas de previsão do Einstein Intent são tão fáceis quanto:
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
Aqui, <TEXT_TO_PREDICT>
pode ser algo como "Como posso obter um número de rastreamento para minha remessa?"
A chamada da API é a mesma com o Einstein Sentiment, exceto que você pode usar o modelId CommunitySentiment
pré-criado (e observe o endpoint diferente):
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
A saída JSON em ambos os casos se parece exatamente com o formato de resposta de previsão para a Classificação de imagem do Einstein: a substância principal está em uma matriz associada às probabilities
-chave e cada elemento da matriz fornece um rótulo e uma probabilidade. Isso é tudo o que há para isso!
IA fácil com o Salesforce Einstein
Agora você viu como é simples usar o Einstein Vision e o Einstein Language e como as APIs do Einstein não têm nada a ver com o restante das APIs de desenvolvedor do Salesforce, exceto no nome. O que você vai criar com eles?