curso
Amazon Lex Tutorial: Um guia para iniciantes sobre chatbots de IA
Os chatbots com reconhecimento de contexto acompanham as entradas anteriores do usuário e as relacionam às interações recentes. Isso permite que eles interajam com os usuários em um estilo de conversação e aprimorem a experiência do usuário. O Amazon Lex é um chatbot com reconhecimento de contexto do pacote Amazon Web Services (AWS). Ele foi lançado em 2017 e uma versão aprimorada, Lex V2, foi lançada em 2021.
Neste tutorial, apresento os conceitos básicos do AWS Lex V2 e demonstro como você pode usá-lo. Falarei sobre como instalar e configurar o Lex, criar seu primeiro chatbot Lex e interagir com back-ends externos. Também apresentarei uma visão geral da integração do Lex com plataformas de terceiros, como sites e aplicativos de mensagens.
O que é o Amazon Lex?
O Amazon Lex é um mecanismo de conversação baseado em IA oferecido pela AWS. O Lex aceita entradas do usuário na forma de voz e texto. O desenvolvedor especifica o fluxo da conversa. Com base nisso, o Lex gerencia o diálogo respondendo às entradas do usuário. A interface de conversação pode ser implantada como um bot de voz, aplicativo da Web, plataforma de bate-papo (como o Slack ou o Facebook Messenger), etc. O Lex também é usado para criar o Amazon Alexa.
O Lex combina duas funcionalidades básicas: compreensão de linguagem natural (NLU) e reconhecimento automático de fala (ASR). Ele permite que os desenvolvedores sem experiência em aprendizagem profunda criem interfaces de conversação para chatbots, assistentes virtuais e similares.
Por ser uma oferta da Amazon, ele se integra a outros serviços da AWS, como:
- Amazon Cognito (para gerenciamento de identidade)
- Amazon CloudWatch (para monitorar o serviço)
- DynamoDB (para o back-end do banco de dados)
- Amazon Lambda (para se conectar a fontes de dados externas, como Salesforce e HubSpot), etc.
Essas integrações facilitam a implantação e o dimensionamento do serviço de IA conversacional.
Configurando o Amazon Lex
Nesta seção, mostrarei como configurar o Amazon Lex.
Observe que a interface de usuário do AWS muda com frequência. Portanto, o layout e o texto de várias seções e títulos nas instruções e capturas de tela podem mudar com o tempo ou de região para região.
Etapa 1: Faça login no console do AWS
Presumo que você já tenha uma conta do AWS. Caso contrário, siga as instruções na páginae AWS Signup e registre uma nova conta.
Neste guia, usaremos o console do AWS para configurar e usar o Lex. Insira suas credenciais do AWS para fazer login no console do AWS Lex e acesse a página inicial do Lex.
Etapa 2: Criar um novo bot
- Para criar um novo bot, visite o console do Amazon Lex.
- Selecione Comece a usar.
A tela acima leva você à página inicial do Bots (mostrada abaixo). Essa página mostra a lista de bots que você já criou.
Página inicial do Amazon Lex Bots.
- Nessa página, selecione Criar bot.
Isso levará você à página de configuração de um novo bot. Ele mostra dois métodos de criação de bots: Tradicional e Gerativa IA.
Crie um novo bot.
Queremos aprender o processo de instalação e configuração de bots. Portanto, escolha ométodo Traditional e comece com um bot em branco .
- Nome do bot: Dê um nome e uma descrição ao bot. Neste artigo, criamos um bot simples chamado "CabBookBot" para reservar um táxi .
- Permissões de IAM: Escolha a função correta para gerenciar a autorização e a autenticação do bot.
- Se você já tiver criado bots antes, escolha uma das funções existentes no menu suspenso.
- Se este for seu primeiro bot, escolha "Criar uma função com permissões básicas do Amazon Lex".
- COPPA: Se esse bot for projetado para atender crianças e menores, especifique que ele está sujeito à COPPA (Children's Online Privacy Protection Act). Nós escolhemos "Não".
- Tempo limite da sessão ociosa: Os bots devem se lembrar das mensagens anteriores do usuário para manter o "contexto" durante a conversa. Se um usuário não responder há algum tempo, presumimos que ele não usa mais o bot e redefinimos o contexto para um novo usuário. Deixe esse valor como padrão.
Você não precisa atualizar as configurações avançadas opcionais; basta ir para a próxima seção.
Você também deve configurar o(s) idioma(s) do bot porque os bots da Lex são baseadosno processamento de linguagem natural (NLP).
- Neste exemplo, usamos o padrão Inglês (EUA) idioma.
- Mantenha as configurações padrão e selecione Concluído.
Em seguida, você será direcionado para a seção Intents que configuraremos na próxima seção.
Depois de criar um bot básico, vou explicar como configurá-lo para o caso de uso desejado: reservar um táxi.
Etapa 3: Configurar intenções
Como o nome sugere, as intenções representam a intenção do usuário ou o objetivo da conversa. Por exemplo, o usuário pode querer reservar um hotel ou um voo. Cada bot pode atender a vários objetivos.
Com o fornecimento de alguns textos de exemplo (chamados de exemplos de enunciados) para cada intenção, o Lex usa a NLP para reconhecer e combinar a entrada do usuário com a intenção correta com base nesses enunciados. Por exemplo, um bot de reserva de táxi pode ter exemplos de expressões como "Quero reservar um táxi", "Reserve um táxi para mim de X a Y nesta data" etc.
Depois de selecionar Concluído na página de criação do bot na etapa anterior, você será levado à página onde poderá criar uma nova intenção chamada NewIntent
.
Na página Intent:
- Encontre o Fluxo de Conversação na parte superior. Isso ilustra o fluxo e os exemplos de mensagens de texto para cada etapa da conversa.
- Atualize o nome da intenção para algo significativo, como "CabBookIntent", e forneça uma descrição relevante.
Etapa 4: Adicionar exemplos de enunciados
O Lex precisa de alguns exemplos de enunciados para cada intenção para reconhecer se a necessidade do usuário corresponde à intenção atual.
- Na página Intent, role para baixo até a seção Sample utterances (Exemplos de expressões ).
- Altere a janela do editor para Plain Text.
- Adicione alguns exemplos de enunciados, um em cada linha, por exemplo:
- Quero reservar um táxi
- Reserve um táxi para mim
- Preciso fazer uma reserva de táxi
Exemplos de expressões.
- Adicione uma resposta inicial, como, por exemplo, "Ok, vou ajudar você a reservar um táxi", para confirmar a solicitação do usuário.
Criando um fluxo de conversação
Os bots Lex seguem uma estrutura de conversa predefinida. O fluxo da conversa descreve e fornece as especificações para os componentes da conversa. Nesta seção, explico como projetar a conversa para se comunicar com o usuário e obter as informações necessárias para atender à sua solicitação.
Etapa 1: Adicione slots para capturar a entrada do usuário
O bot precisa solicitar informações relevantes ao usuário. Os slots contêm informações que o bot precisa para atender à solicitação do usuário. Por exemplo, o bot de reserva de táxi recebe as cidades de partida e de destino e a data da viagem como valores de slot.
Adicione espaços às intenções.
Para cada slot, você precisa especificar esses parâmetros:
- Nome do slot: O bot usa esse nome como um espaço reservado para o valor do slot. Por exemplo, você pode configurar a resposta do bot como "You want to travel from {SourceCity}" e ele substitui automaticamente o valor do slot
SourceCity
inserido pelo usuário. - Tipo de slot: Assim como as variáveis de programação, os slots Lex podem ser de vários tipos. Existem muitos tipos de slots pré-construídos, como
AMAZON.City
,AMAZON.Date
, etc. Você também pode adicionar tipos de slots personalizados (discutidos posteriormente). - Sugestão: Forneça um modelo de texto que o bot possa usar para perguntar (solicitar) ao usuário o valor de cada slot.
- Selecione Add Slot e adicione os seguintes slots, marcando-os conforme necessário:
Nome do slot |
Tipo de slot |
Prompt |
Cidade de origem |
AMAZON.City |
De qual cidade você estará viajando? |
DestinationCity |
AMAZON.City |
Para qual cidade você vai viajar? |
Data da viagem |
AMAZON.Date |
Em que data você vai viajar? |
- Acrescente alguns enunciados adicionais que capturam diretamente os valores dos slots. Por exemplo:
- Reserve um táxi em {TravelDate} de {SourceCity} para {DestinationCity}
- Reserve um táxi de {SourceCity} para {DestinationCity} para {TravelDate}
Slots personalizados
Os tipos de slots embutidos nem sempre são suficientes para todos os casos de uso. Por exemplo, um serviço de reserva de táxi pode ter um tipo de vaga para o tipo de carro (compacto, hatchback, sedã, SUV etc.) que o usuário deseja.
Para adicionar um slot personalizado:
- Ir para Tipos de slot no menu da coluna da esquerda:
- CabBookBot > Versões do bot > Versão de rascunho > Todos os idiomas > Inglês (EUA) > Tipos de caça-níqueis).
- Adicione um nome (como
CabType
) e uma descrição para o novo tipo de slot. - Escolha um dos dois tipos de valores de slot:
- Expandir: Você fornece alguns valores de amostra para o slot, e o Lex os usa como exemplos para aprender novos valores possíveis. Por exemplo, com uma lista de sobrenomes, o Lex adapta o tipo de slot para aceitar sobrenomes semelhantes que você não listou explicitamente.
- Restringir: O slot só aceita valores da lista que você fornecer. Ele não aprenderá novos valores.
Nesse caso, temos alguns tipos de cabine predeterminados. Portanto, restringimos nossos valores de slot a esses tipos.
- Você também pode fornecer valores alternativos para cada valor. Por exemplo, para o tipo de táxi,
Limo
é um valor aceitável paraLimousine
.
Slots personalizados.
- Selecione Salvar tipo de slot. O novo tipo de slot fica disponível quando você adiciona um slot à intenção.
Etapa 2: Configurar a solicitação e o tratamento de erros
Quando o usuário fornece uma resposta inválida a um prompt que solicita um valor de slot, o Lex repete o prompt. A sessão é encerrada quando o usuário falha repetidamente em dar uma resposta adequada (como um nome de cidade válido).
Configure o Lex para lançar uma mensagem de erro (antes de encerrar a sessão) se o usuário não conseguir fornecer repetidamente um valor de slot válido:
- Selecione um slot individual e selecione Opções avançadas para esse slot.
- Role a janela de opções avançadas para baixo até a seção Captura de slot: resposta a falhas.
- Forneça uma resposta apropriada para entradas inválidas. Por exemplo, se o usuário inserir repetidamente uma cidade que não é reconhecida, o bot pode responder: "Desculpe, mas não atendemos a essa cidade".
Tratamento de erros e resposta a falhas.
Todos os bots têm um FallbackIntent
, que é invocado quando a entrada do usuário não corresponde às intenções existentes. Como essa intenção é invocada como padrão, seus enunciados não podem ser personalizados.
- Especifique uma resposta final significativa com o
FallbackIntent
e encerre a conversa.
Resposta de encerramento.
Etapa 3: Confirmação, cumprimento e fechamento
Confirme a intenção do usuário após obter os valores apropriados para os slots e antes de atender à solicitação.
- Use a seção Confirmação para fornecer um prompt de confirmação.
- Observe que há um pequeno botão de alternância para a caixa de diálogo Confirmação. Ative-o.
É comum incluir os valores de slot no prompt de confirmação. Por exemplo: "Por favor, confirme (sim ou não) que você deseja fazer uma reserva de {SourceCity} para {DestinationCity} em {TravelDate}".
- Forneça uma resposta Decline caso o usuário responda negativamente ao prompt de confirmação. Por exemplo, "Ok, não faremos essa reserva".
Prompt de confirmação.
A resposta de atendimento indica ao usuário que o bot está começando a atender à sua solicitação (reservar o táxi).
- Na seção Fulfillment (Atendimento), forneça outra mensagem após o atendimento bem-sucedido da solicitação. Por exemplo, "Ok, fizemos essa reserva".
A resposta de fechamento é a mensagem final enviada ao usuário. Por exemplo, "Obrigado por viajar conosco. Faça uma boa viagem!".
- Atualize as respostas e selecione Salvar intenção.
Respostas de cumprimento e fechamento.
Testando seu Amazon Lex Bot
Agora que criamos o bot e sua estrutura de conversação, podemos testá-lo!
Etapa 1: Teste no console do Lex
- Encontre os botões Build e Test na parte superior da página Intents.
- Crie o bot. Você deve reconstruir o bot após cada alteração.
- Selecione Testar para testar o bot no console Lex.
- Digite mensagens relevantes na janela de bate-papo pop-up e responda às solicitações do bot.
Testando o bot do Amazon Lex.
Erros comuns de configuração
Algumas das seções, como Confirmação, Cumprimento e Resposta de encerramento, são, em princípio, opcionais. Para ativar uma seção, ative a chave de alternância.
Em alguns casos, a ativação de uma seção ou resposta ativa automaticamente uma função Lambda para essa seção. Se uma seção específica tiver o botão de alternância da função Lambda definido como "ligado", mas não houver nenhuma função Lambda associada, você receberá um erro como o mostrado abaixo:
Cannot call FulfillmentCodeHook for Intent CabBookIntent. BotAlias/LocaleId TestBotAlias/en_US doesn't have an associated Lambda Function.
O erro acima vem da seção Fulfillment (Cumprimento ). Para resolver isso, vá para as configurações avançadas na seção relevante e desmarque a opção de usar uma função Lambda.
Outro erro semelhante ocorre quando o fluxo está mal configurado. Por exemplo, considere esta mensagem de erro no estágio de compilação:
'ElicitSlot' next step at 'InitialResponse:CodeHook:Success' in intent 'CabBookIntent' contains invalid slotToElicit setting. slotToElicit must be a required Slot within the intent. Change the slot name in slotToElicit and try your request again.
Para solucionar esse erro, acesse as opções avançadas em para obter a resposta inicial. Observe que a opção Dialog Code hook está ativa. No entanto, nesta etapa, ainda não ativamos as funções Lamba nem as configuramos para inicializar a conversa. Desative o gancho de código e atualize o bot; ele deverá ser criado normalmente.
Opções avançadas para resposta inicial.
Etapa 2: Teste com voz (opcional)
Os bots Lex funcionam por padrão com texto e voz.
- Pressione o ícone do microfone na janela de bate-papo para se comunicar por voz.
- O texto do espaço reservado no campo de entrada muda para "Listening...".
- Diga sua intenção, por exemplo, "Quero reservar um táxi".
- Pressione a marca de seleção à direita do campo de entrada de texto.
- O Lex transcreverá brevemente a entrada de voz e responderá com áudio.
O Amazon Polly converte texto em fala natural. Ele é usado em aplicativos baseados em fala, como leitores de notícias, jogos, bots etc., para gerar fala semelhante à humana a partir de texto. Desde 2021, o Amazon Lex oferece suporte ao Amazon Polly Neural Text-to-Speech (NTTS). Assim, o bot Lex pode gerar diretamente respostas de voz com som natural.
Para configurar a voz do bot:
- Na página inicial do bot, selecione Exibir idiomas.
- Escolha o idioma apropriado.
- Você também pode selecionar o idioma relevante na seção Todos os idiomas no menu à esquerda.
- No Detalhes do idioma selecione Editar.
- Isso leva você ao Idioma página.
- Sob o Voz você pode ouvir várias amostras de voz e selecionar a voz de conversão de texto em fala preferida.
Definindo um Fulfillment com o AWS Lambda
Na prática, um bot precisa se comunicar com outros serviços de back-end. Por exemplo, um bot de reserva de táxi precisa enviar as informações da viagem para um endpoint de API e receber uma resposta bem-sucedida. As funções lambda ajudam você a fazer isso.
As funções do AWS Lambda são uma maneira de escrever a lógica do lado do servidor e executá-la sem precisar alugar explicitamente um VPS ou instâncias de computação.
Para começar com as funções Lambda:
- Vá para a página inicial do AWS Lambda.
- Selecionar Criar função.
- Para este exemplo, escolha a opção de criar uma função do zero.
- Escolha
Python 3.x
(3.13 no momento da redação) como a linguagem ex86_64
como o processador para executar a função. - Se esta for sua primeira função Lambda, crie uma nova função. Você também pode usar uma das funções existentes se souber que ela tem as permissões corretas.
- Selecionar Criar função.
- Digite o código da função no campo Código na página da Web da função Lambda específica.
Abaixo, mostramos uma função Lambda curta que envia uma mensagem de sucesso para o Cumprimento seção:
import json
import urllib.request
def lambda_handler(event, context):
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
if event['invocationSource'] == 'FulfillmentCodeHook':
message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Configure o bot para chamar essa função Lambda:
- Vá para a página inicial do bot. No menu à esquerda, selecione a opção Aliases (Deployment > Aliases) .
- Por padrão, ele já deve ter um alias com o nome TestBotAlias.
- Selecione o alias.
- Na página do alias, em idiomas, encontre o idioma do bot. Este exemplo está em English(US).
- Selecione o idioma.
- Na página da linguagem, localize a seção Função Lambda.
- Em fonte, selecione o nome da sua função Lambda.
- A opção padrão para a versão é
$LATEST
. Deixe-o inalterado. - Salve as alterações.
Neste exemplo, queremos usar a função Lambda no estágio de atendimento:
- Na página Intent, vá para Opções avançadas na seção Cumprimento seção.
- Na seção Gancho de código Lambda de atendimentomarque a caixa de seleção com o rótulo Usar uma função Lambda para atendimento.
- Salve as alterações (selecione Atualizar opções) para as opções de Fulfillment.
- Salve a intenção.
- Vá para a página Intent do bot, crie-o e teste-o. Você pode usar o bot para criar um novo bot.
Agora, a resposta vem da função Lambda:
Testando a função Lambda integrada ao bot Lex.
Implementação do Amazon Lex Bot
Depois de criar e testar o bot Lex, você está pronto para implantá-lo. A implementação é um tópico complexo cujas especificidades dependem do caso de uso individual. Nesta seção, apresento uma visão geral de vários métodos comuns de implantação.
Etapa 1: Implementação em um aplicativo da Web ou móvel
O Lex pode ser integrado a aplicativos da Web e aplicativos móveis usando a API, o SDK ou bibliotecas pré-construídas:
- CloudFormation: O AWS CloudFormation é uma solução de infraestrutura como código. Ele permite que você use arquivos YAML para agrupar, provisionar, implantar e gerenciar vários recursos do AWS como um produto completo. O CloudFormation tem modelos para integrar vários produtos da AWS, como buckets S3, funções Lambda, bots Lex e muito mais. Use o arquivo de modelo Lex YAML para configurar o bot Lex como parte de um projeto CloudFormation.
- Integração do site: A AWS disponibilizou um conjunto de arquivos de carregador Javascript e o AWS SDK para carregar um bot em um site. Isso inclui os arquivos pré-construídos da interface do usuário do Lex e uma biblioteca de carregamento para carregar o bot do Lex. O bot pode ser integrado a um site como uma página da Web independente ou um iframe.
- Aplicativos nativos móveis: O AWS Amplify inclui as ferramentas para integração com vários front-ends móveis e da Web, como ReactJS/React Native, NextJS, Angular, Android, iOS e muito mais. A documentação do Amplify explica como você pode configurar um bot Lex para trabalhar com esses SDKs.
- Lex API: Para ter controle total sobre as interações e a interface, você pode usar a API Lex. Usando a API, você pode passar as mensagens do usuário e do bot (entre si) e, ao mesmo tempo, manter o controle da experiência do usuário por meio do seu aplicativo. O Lex oferece duas APIs:
- A API de tempo de execução é usada para interação com o usuário, conforme explicado acima.
- A API Build é usada para criar e configurar o bot Lex programaticamente em vez de usar a GUI.
As etapas a seguir apresentam um esboço de como você pode implantar o chatbot como uma página da Web:
- Use a biblioteca Lex Web UI Loader. Essa biblioteca cria um objeto
ChatBotUiLoader
, que inclui os construtoresFullPageLoader()
eIframeLoader
. A funçãoload()
desses construtores carrega o bot na página ou no iFrame, respectivamente. - Para carregar o bot na página da Web, especifique a configuração do chatbot:
- A ID do pool do Cognito. Observe que você precisa de um pool de identidade do AWS Cognito para se conectar ao bot. Você pode criar um pool de identidades no console do AWS Cognito. Você deve vincular o pool de identidade do Cognito ao bot do Lex.
- O nome e os detalhes do bot Lex.
- Carregue o bot usando a função
.load()
.
O snippet abaixo mostra o esboço de uma função JavaScript que implementa um bot Lex em uma página da Web:
<!-- LexWebUi loader -->
<script src="./lex-web-ui-loader.js"></script>
<script>
// instantiate the loader
var lexWebUiLoader = new ChatBotUiLoader.FullPageLoader();
var chatbotUiconfig = {
cognito: {
poolId:
},
lex: {
initialText: 'How can I help you?',
botName: 'CabBookBot'
},
ui: {
toolbarTitle: 'Cab Booking Lex Bot',
toolbarLogo: ''
},
};
lexWebUiLoader.load(chatbotUiConfig)
.then(function () {
console.log('chatbot UI loaded');
})
.catch(function (error) {
console.error('chatbot UI failed to load', error);
});
</script>
Etapa 2: Integração com plataformas de mensagens
Você pode integrar o bot Lex com serviços de mensagens de terceiros, como Facebook Messenger, Slack e Twilio SMS.
Nesta seção, discutiremos como integrar o Lex ao Facebook Messenger. Antes de começar, você precisa:
- Uma conta de desenvolvedor do Facebook
- Uma página de negócios no Facebook. Observe que o aplicativo do Facebook precisa de permissão para usar a API de mensagens com o Lex. Somente aplicativos revisados e aprovados pelo Facebook como aplicativos comerciais verificados recebem essas permissões.
Abaixo, descrevo as etapas para integrar o bot Lex ao Facebook Messenger para que os usuários que enviarem mensagens para a sua página do Facebook possam receber respostas do bot.
- Crie um novo aplicativo Business se você ainda não tiver um.
- Nos casos de uso do aplicativo, escolha Outros.
- Selecione Negócios como o tipo de aplicativo.
- Você pode adicionar vários produtos do Facebook a cada aplicativo, como Messenger, Instagram, etc. Adicione o Messenger ao aplicativo e escolha Set up.
- Na seção Configuração da API do Messenger seção:
- Conecte sua página comercial do Facebook a esse aplicativo.
- Gere um novo token (com o botãoGenerate ) para esse aplicativo. Copie esse token em um editor de texto.
- Observe a mensagem, "Para enviar e receber mensagens, solicite a permissão pages_messaging". Selecione Request Permission para solicitar as permissões necessárias .
- Se o seu aplicativo ainda não tiver sido analisado e aprovado pelo Facebook, envie-o para análise.
- De Configurações do aplicativo nas opções do menu à esquerda, escolha Básico.
- Selecione Mostrar em Segredo do aplicativo e copie o código secreto em um arquivo de texto.
Agora, vá para o console Lex e escolha o bot que você deseja integrar ao Messenger.
- Na árvore do menu à esquerda, localize Integrações de canal em Implantação.
- Selecionar Adicionar canal em Criar canal:
- Selecione Facebook em Plataforma.
- Escolha Chave KMS em Políticas de identidade.
- Em Configuração de integração:
- Dê um nome à integração
- Escolha um alias (do bot Lex) que você deseja integrar ao Messenger
- Escolha o idioma.
- Em Configuração adicional:
- Em Alias, digite uma cadeia de caracteres para identificar o aplicativo que está chamando o Lex. Você precisará desse fio mais tarde.
- Em Token de acesso à páginadigite o token de acesso que você copiou no Facebook.
- Em Chave secreta do aplicativodigite a chave secreta que você copiou no Facebook.
- Use o botão Adicionar para criar o novo canal.
- Retorne à página Integrações de canal e selecione o canal que você criou.
- Copie o URL em Ponto final na seção URL de retorno de chamada na seção Callback URL.
Volte para o console do desenvolvedor do Facebook e abra o aplicativo que você criou anteriormente.
- No menu à esquerda, em Messengerselecione Configurações da API do Messenger.
- Sob URL de retorno de chamadadigite o URL de retorno de chamada que você copiou no console Lex.
- Em Verificar tokeninsira a string de alias que você inseriu no console Lex.
- Verifique e salve as alterações.
- Em Webhooks, selecione Adicionar assinaturas. Selecione messages na janela pop-up, seguido de Save (Salvar).
Agora você pode enviar mensagens para a página do Facebook com os exemplos de expressões do bot Lex e obter respostas relevantes.
Etapa 3: Conectar o Lex ao AWS Lambda para aumentar a interatividade
Escrevemos uma função Lambda simples para a seção de atendimento na seção anterior. Ele só retornou uma mensagem de texto: "A Lambda fez a reserva para você." Na prática, enviaríamos a mensagem de sucesso depois de atender à solicitação.
Por exemplo, a função Lambda envia uma solicitação com os detalhes da reserva do usuário para a API de backend, que faz a reserva e, em seguida, responde ao usuário com base na resposta da API.
Veja como você faria o procedimento acima:
- O objeto JSON
slots
na função Lambda contém os valores de slot. Estude sua estrutura usando um embelezador de código para extrair os valores apropriados. - O trecho de código abaixo mostra como você pode obter o valor do slot para
SourceCity
e passar esse valor para uma API de back-end que lida com as reservas. Adicione este código dentro da funçãolambda_handler()
:
slots = event['sessionState']['intent']['slots']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
Agora, mostrarei como você pode fazer solicitações de API a partir da função Lambda. Para este exemplo, usamos o endpoint de API fictício em ASDFast. Esse serviço permite que você envie solicitações HTTP(S) para um endpoint de API e receba uma resposta realista.
- Com o código abaixo, enviamos uma solicitação
GET
para esse endpoint. Em seguida, personalizamos a mensagem que o bot envia ao usuário, dependendo do código de status da resposta da solicitaçãoGET
:
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
A função Lambda completa é mostrada abaixo:
import json
import urllib.request
def lambda_handler(event, context):
print("event - ", event)
slots = event['sessionState']['intent']['slots']
intent = event['sessionState']['intent']['name']
print("slots - ", slots)
source_city = slots['SourceCity']['value']['interpretedValue']
print("source city - ", source_city)
print("intent - ", intent)
if event['invocationSource'] == 'FulfillmentCodeHook':
print("FulfillmentCodeHook")
res = urllib.request.urlopen(urllib.request.Request(
url='http://asdfast.beobit.net/api/',
headers={'Accept': 'application/json'},
method='GET'),
timeout=5)
message_success = "Lambda has placed your reservation"
message_failure = "Lambda could not place your reservation. Please retry."
message = message_success if res.status == 200 else message_failure
#message = "Lambda has placed your reservation"
response = {
"sessionState": {
"dialogAction": {
"type": "Close"
},
"intent": {
'name':intent,
'slots': slots,
'state':'Fulfilled'
}
},
"messages": [
{
"contentType": "PlainText",
"content": message
}
]
}
return response
Práticas recomendadas para criar bots do Amazon Lex
Depois de discutir os princípios básicos dos bots Lex e seus usos práticos, apresento nesta seção algumas práticas recomendadas para projetar bots.
Crie conversas claras e concisas
Certifique-se de que seus caminhos e espaços de conversação sejam precisos:
- Cada intenção deve se concentrar em uma única tarefa, e cada slot deve capturar o valor correspondente a uma única variável.
- Não faça com que os textos do prompt sejam muito prolixos ou detalhados. Mantenha os diálogos breves e chegue rapidamente ao resultado desejado.
Essa abordagem evita a confusão do usuário e possíveis mal-entendidos por parte da Lex.
Utilizar tipos de slots e validação
O bot e seus serviços de back-end associados precisam de informações precisas sobre os requisitos do usuário. O uso dos tipos de slot corretos garante isso.
- Em geral, aconselho que você use os slots internos para tipos de dados comuns, como
AMAZON.Date
para datas,AMAZON.City
para cidades e assim por diante. Esses tipos de slots foram amplamente testados e são conhecidos por serem compatíveis com vários aplicativos. - Você pode criar tipos de slots personalizados em casos excepcionais. Certifique-se de que eles estejam configurados e testados corretamente.
- Além de usar os tipos de slots corretos, valide se o usuário forneceu as informações correspondentes a todos os slots obrigatórios. Isso permite que a API de backend atenda à solicitação do usuário e garante uma experiência tranquila para o usuário.
Permitir conversas com vários turnos
Os usuários podem achar difícil inserir todas as informações necessárias em uma única mensagem, como "Reserve uma viagem para N pessoas na data/hora Z, de X a Y, em um táxi tipo T".
- Use conversas de várias voltas para garantir uma melhor experiência do usuário. Como muitas ferramentas modernas baseadas em modelos de linguagem, o Lex pode manter o contexto por meio de uma conversa com várias voltas. Isso permite que ele relacione solicitações e respostas anteriores a interações recentes.
- Dividir um prompt complexo em uma série de perguntas curtas melhora o fluxo da conversa.
Monitorar e otimizar o desempenho
Para um bot em produção, é fundamental monitorar seu desempenho em várias métricas, como:
- Número total de conversas.
- Duração média da conversa.
- Média de turnos por conversa.
- Número (e proporção) de enunciados detectados e perdidos.
- Erros de lambda e muito mais.
Use essas métricas para avaliar as interações do usuário e o desempenho do bot:
- No menu à esquerda, na página Bot selecione a seção Analytics opção.
- Acesse o Painel de conversasacessar o Painel de desempenhoe métricas do CloudWatch para você estudar o desempenho do bot.
O AWS CloudWatch é uma ferramenta de monitoramento para serviços do AWS. Ele consolida várias métricas de desempenho em tempo real em uma única página. Use essas métricas para melhorar e ajustar o desempenho do bot.
Conclusão
Neste artigo, exploramos o Amazon Lex V2, o serviço de chatbot com reconhecimento de contexto da AWS. Percorremos o processo de criação de um bot básico, configurando-o para interagir com os usuários e integrando-o a uma API de back-end usando o AWS Lambda. Além disso, discutimosas práticas recomendadas e as opções de implementação, incluindo a incorporação do bot em um site ou em uma página do Facebook.
À medida que você continuar aprendendo sobre os serviços da AWS, considere expandir seu conhecimento com estes cursos:
- Obtenha uma base sólida em serviços de nuvem da AWS com o curso AWS Cloud Technology and Services.
- Saiba como gerenciar a segurança e os custos da AWS de forma eficaz no curso AWS Security and Cost Management.
- Explore as interações programáticas do AWS com o Boto3, o SDK do AWS para Python, no curso Introdução ao AWS Boto em Python.
Ao aproveitar esses recursos, você estará bem equipado para criar, proteger e otimizar aplicativos baseados no AWS, incluindo chatbots com tecnologia Amazon Lex!
Perguntas frequentes
O Lex se integra a outros serviços da AWS?
Sim, o Lex se integra a serviços como Lambda, S3, CloudWatch e outros. Isso permite que você aprimore a funcionalidade do bot, integre-o a outros produtos e monitore seu desempenho.
O Lex lida com voz e texto?
Sim, o Lex pode, por padrão, lidar com entradas de voz e texto. O Lex suporta várias vozes para interações faladas. Você também pode usar o AWS Polly para sintetizar a fala e enviar o arquivo de áudio para o Lex.
Posso usar uma interface de usuário personalizada para um bot da Lex?
Sim, o Lex vem com uma API de tempo de execução que pode transmitir a entrada do usuário para o bot e receber suas respostas (do bot). Assim, o bot Lex serve como backend para a interface do usuário personalizada.
Posso usar o Lex sem as funções Lambda?
Em princípio, sim. Você pode criar a conversa inteiramente dentro do Lex. Na prática, um bot precisa fazer interface com outros serviços de API de back-end que atendam à solicitação do usuário (como reservar um bilhete). Você precisa do AWS Lambda para interagir com serviços externos.
É possível treinar o AWS Lex?
Até certo ponto, sim. O mecanismo de NLU do Lex pode reconhecer entradas de usuário semelhantes aos enunciados de amostra. Ele também pode estender os valores válidos de um tipo de slot com base em algumas amostras. No entanto, você não deve esperar o mesmo nível de capacitação de um LLM. O Lex foi projetado para interações limitadas específicas do trabalho e não para conversas prolongadas.
Arun é um ex-fundador de startup que gosta de criar coisas novas. Atualmente, ele está explorando os fundamentos técnicos e matemáticos da Inteligência Artificial. Ele adora compartilhar o que aprendeu, por isso escreve sobre isso.
Além do DataCamp, você pode ler as publicações dele no Medium, Airbyte e Vultr.
Saiba mais sobre a AWS com estes cursos!
curso
AWS Cloud Technology and Services Concepts
curso
AWS Security and Cost Management Concepts
blog
ChatGPT vs Google Bard: Um guia comparativo para chatbots de IA

blog
Como aprender IA do zero em 2024: Um guia completo dos especialistas
tutorial
Tutorial da API de assistentes da OpenAI
tutorial
Guia para iniciantes no uso da API do ChatGPT
tutorial
O guia completo para machine learning na AWS com o Amazon SageMaker
tutorial