A documentação para a experiência do classic Watson Assistant foi movida. Para a versão mais atualizada, consulte Construindo um diálogo complexo.
Construindo um diálogo complexo
Neste tutorial, você usará o serviço Watson Assistant para criar um diálogo para um assistente que ajuda os usuários com consultas sobre um restaurante fictício chamado Truck Stop Gourmand.
Objetivos do aprendizado
Quando terminar o tutorial, você entenderá como:
- Planejar um diálogo
- Definir intents customizados
- Incluir nós de diálogo que podem manipular suas intenções
- Incluir entidades para tornar suas respostas mais específicas
- Incluir uma entidade padrão e usá-la no diálogo para localizar padrões na entrada do usuário
- Configurar e referenciar variáveis de contexto
Duração
Este tutorial levará aproximadamente de 2 a 3 horas para ser concluído.
Pré-requisitos
Antes de iniciar, conclua o Tutorial de Introdução.
Você usará a qualificação de diálogo que criou e incluirá os nós no diálogo simples que construiu como parte do exercício de introdução.
Planejar o diálogo
Você está construindo um assistente para um restaurante denominado Truck Stop Gourmand que tem um local e um próspero negócio de bolinhos. Você deseja que o assistente simples responda perguntas do usuário sobre o restaurante, seu menu e cancele os pedidos de bolo do cliente. Portanto, é necessário criar intenções que manipulam consultas relacionadas aos assuntos a seguir:
- Informações de Restaurante
- Detalhes do Menu
- Cancelamentos de pedido
Você iniciará criando intenções que representam esses assuntos e, em seguida, construirá um diálogo que responda às perguntas do usuário sobre eles.
Responda às perguntas sobre o restaurante
Inclua uma intenção que reconheça quando os clientes perguntarem detalhes sobre o restaurante em si. Uma intenção é o propósito ou objetivo expresso em entrada do usuário. A intenção #General_About_You
que é fornecida com o catálogo
de conteúdo Geral atende a uma função semelhante, mas seus exemplos do usuário são projetados para focar as consultas sobre o assistente, em oposição ao negócio que está usando o assistente para ajudar seus clientes. Então, você incluirá
sua própria intenção.
Inclua a intenção #about_restaurante
-
Na guia Intenções, clique em Criar intenção.
-
Insira
about_restaurant
no campo Nome da intenção e, em seguida, clique em Criar intenção. -
Inclua os exemplos de usuário a seguir:
Tell me about the restaurant i want to know about you who are the restaurant owners and what is their philosophy? What's your story? Where do you source your produce from? Who is your head chef and what is the chef's background? How many locations do you have? do you cater or host functions on site? Do you deliver? Are you open for breakfast?
-
Clique no ícone Fechar para terminar de incluir a intenção
#about_restaurant
.
Você incluiu uma intenção e forneceu exemplos de elocuções que os usuários reais podem inserir para acionar essa intenção.
Incluir um nó de diálogo que é acionado pela intenção #about_restaurant
Inclua um nó de diálogo que reconheça quando a entrada do usuário for mapeada para a intenção criada na etapa anterior, fazendo com que sua condição verifique se seu assistente reconheceu a intenção #about_restaurant
na entrada
do usuário.
-
Clique na guia ** Diálogo ** .
-
Localize o nó
#General_Greetings
na árvore de diálogo.Você incluirá um nó que verifica perguntas sobre o restaurante depois que este nó de saudação inicial refletir o fluxo que você pode esperar encontrar em uma conversa normal. Por exemplo,
Hello.
entãoTell me about yourself.
-
Clique no ícone Mais no nó
#General_Greetings
e, em seguida, selecione Incluir nó abaixo. -
Comece a digitar
#about_restaurant
no campo Se o assistente reconhecer desse nó. Em seguida, selecione a opção#about_restaurant
. -
Inclua o texto a seguir como a resposta.
Para copiar o texto, clique no ícone de cópia que está associado ao bloco de texto:
Truck Stop Gourmand is the brainchild of Gloria and Fred Smith. What started out as a food truck in 2004 has expanded into a thriving restaurant. We now have one brick-and-mortar restaurant in downtown Portland. The bigger kitchen brought with it new chefs, but each one is faithful to the philosophy that made the Smith food truck so popular to begin with: deliver fresh, local produce in inventive and delicious ways. Join us for lunch or dinner seven days a week. Or order a cake from our bakery.
-
Vamos incluir uma imagem na resposta também.
Clique em ** Incluir tipo de resposta **. Selecione ** Imagem ** na lista suspensa. No campo Origem de imagem, inclua
https://www.ibmlearningcenter.com/wp-content/uploads/2018/02/IBM-Learning-Center-Food4.jpg
. -
Mova o tipo de resposta da imagem para cima, para que ele seja exibido na resposta antes que o texto seja exibido. Clique na seta para cima Mover para reordenar os dois tipos de resposta.
-
Clique em para fechar a visualização de edição.
Teste o nó de diálogo #about_restaurante
Teste a intenção verificando se as elocuções do usuário semelhantes, mas não exatamente iguais, aos exemplos incluídos nos dados de treinamento treinaram com sucesso seu assistente para reconhecer entradas com uma intenção #about_restaurant
.
-
Clique no ícone para abrir o painel "Experimentar".
-
Insira
I want to learn more about your restaurant.
Seu assistente indica que a intenção
#about_restaurant
foi reconhecida e retorna uma resposta com a imagem e o texto especificados para o nó de diálogo.
Parabéns! Você incluiu uma intenção customizada e um nó de diálogo que sabe como manipulá-lo.
A intenção #about_restaurant
foi projetada para reconhecer uma variedade de perguntas gerais sobre o restaurante. Você incluiu um único nó para capturar essas perguntas. A resposta é longa, mas é uma instrução única que pode potencialmente
responder perguntas sobre todos os tópicos a seguir:
- Os proprietários do restaurante
- A história do restaurante
- A filosofia
- O número de sites
- Os dias de operação
- As refeições servidas
- O fato de o restaurante fazer bolos por encomenda
Para tipos de perguntas gerais e mais fáceis, uma única resposta geral é adequada.
Gerenciar pedidos de bolo
Os clientes fazem pedidos pessoalmente, pelo telefone ou usando o formulário de pedido no website. Depois que o pedido é feito, os usuários podem cancelá-lo por meio do assistente virtual. Primeiro, defina uma entidade que possa reconhecer números de pedido. Em seguida, inclua uma intenção que reconheça quando os usuários desejam cancelar um pedido de bolo.
Incluindo uma entidade padrão de número de pedido
Você deseja que o assistente reconheça os números de pedido, portanto, criará uma entidade padrão para reconhecer o formato exclusivo que o restaurante usa para identificar seus pedidos. A sintaxe dos números de pedidos usada pela padaria
do restaurante tem duas letras maiúsculas, seguidas por cinco números. Por exemplo, YR34663
. Inclua uma entidade que possa reconhecer esse padrão de caractere.
-
Clique na guia ** Entidades ** .
-
Clique em ** Criar entidade **.
-
Insira
order_number
no campo de nome da entidade. -
Clique em ** Criar entidade **.
-
Inclua
order_syntax
no campo Nome do valor e, em seguida, clique na seta para baixo ao lado de Sinônimos para mudar o tipo para Padrões. -
Inclua a expressão regular a seguir no campo Padrão:
[A-Z]{2}\d{5}
-
Clique em Incluir valor.
-
Clique no ícone Fechar para finalizar a inclusão da entidade
@order_number
.
Incluir uma intenção de ordem de cancelamento
-
Clique na guia Intenções.
-
Clique em Criar intento.
-
Insira
cancel_order
no campo Nome da intenção e, em seguida, clique em Criar intenção. -
Inclua os exemplos de usuário a seguir:
I want to cancel my cake order I need to cancel an order I just placed Can I cancel my cake order? I'd like to cancel my order There's been a change. I need to cancel my bakery order. please cancel the birthday cake order I placed last week The party theme changed; we don't need a cake anymore that order i placed, i need to cancel it.
-
Clique no ícone Fechar para terminar de incluir a intenção
#cancel_order
.
Incluir uma intenção de yes
Antes de executar uma ação em nome do usuário, deve-se obter a confirmação de que você está tomando a ação adequada. Inclua uma intenção #yes no diálogo que possa reconhecer quando um usuário concordar com o que seu assistente estiver propondo.
-
Clique na guia Intenções.
-
Clique em Criar intento.
-
Insira
yes
no campo Nome da intenção e, em seguida, clique em Criar intenção. -
Inclua os exemplos de usuário a seguir:
Yes Correct Please do. You've got it right. Please do that. that is correct. That's right yeah Yup Yes, I'd like to go ahead with that.
-
Clique no ícone Fechar para terminar de incluir a intenção
#yes
.
Incluir nós de diálogo que podem gerenciar solicitações para cancelar um pedido
Agora, inclua um nó de diálogo que possa manipular solicitações para cancelar um pedido de bolo.
-
Clique na guia ** Diálogo ** .
-
Localize o nó
#menu
. Clique no ícone Mais no nó#menu
e, em seguida, selecione Incluir nó abaixo. -
Comece a digitar
#cancel_order
no campo Se o assistente reconhecer desse nó. Em seguida, selecione a opção#cancel_order
. -
Inclua a mensagem a seguir no campo de texto de resposta:
If the pickup time is more than 48 hours from now, you can cancel your order.
Antes de poder realmente cancelar o pedido, é necessário saber o número do pedido. O usuário pode especificar o número do pedido na solicitação original. Portanto, para evitar perguntar o número do pedido novamente, verifique um número com o padrão de número do pedido na entrada original. Para fazer isso, defina uma variável de contexto que salvará o número do pedido se ele for especificado.
-
Você define uma variável de contexto no editor de contexto. Na seção de resposta do nó, clique no ícone Mais e, em seguida, selecione Abrir editor de contexto.
-
Insira o par de valores e nome da variável de contexto a seguir:
Detalhes da Variável de Contexto do Variável Valor $ordernumber <? @order_number.literal ?>
O valor da variável de contexto (
<? @order_number.literal ?>
) é uma expressão SpEL que captura o número que o usuário especifica que corresponde ao padrão definido pela entidade padrão @order_number. O salvamento é feito na variável$ordernumber
. -
Clique em para fechar a visualização de edição.
Agora, inclua nós-filhos que perguntam o número do pedido ou obtêm confirmação do usuário de que deseja cancelar um pedido com o número do pedido detectado.
-
Clique no ícone Mais no nó
#cancel_order
e, em seguida, selecione Incluir nó filho. -
Inclua um rótulo no nó para distingui-lo de outros nós-filhos que você incluirá. No campo de nome, inclua
Ask for order number
. Digitetrue
no campo Se o assistente reconhecer desse nó. -
Inclua a mensagem a seguir no campo de texto de resposta:
What is the order number?
-
Clique em para fechar a visualização de edição.
Agora, inclua outro nó-filho que informa ao usuário que você está cancelando o pedido.
-
Clique no ícone Mais no nó
Ask for order number
e, em seguida, selecione Incluir nó filho. -
Digite
@order_number
no campo Se o assistente reconhecer desse nó. -
Abra o editor de contexto. Clique no ícone Mais e selecione Abrir editor de contexto.
-
Insira o par de valores e nome da variável de contexto a seguir:
Detalhes da Variável de Contexto do Variável Valor $ordernumber <? @order_number.literal ?>
O valor da variável de contexto (
<? @order_number.literal ?>
) é uma expressão SpEL que captura o número que o usuário especifica que corresponde ao padrão definido pela entidade padrão @order_number. O salvamento é feito na variável$ordernumber
. -
Inclua a mensagem a seguir no campo de texto de resposta:
OK. The order $ordernumber is canceled. We hope we get the opportunity to bake a cake for you sometime soon.
-
Clique em para fechar a visualização de edição.
-
Inclua outro nó para capturar o caso em que um usuário fornece um número, mas ele não é um número do pedido válido. Clique no ícone Mais no nó
@order_number
e, em seguida, selecione Incluir nó abaixo. -
Digite
true
no campo Se o assistente reconhecer desse nó. -
Inclua a mensagem a seguir no campo de texto de resposta:
I need the order number to cancel the order for you. If you don't know the order number, please call us at 958-234-3456 to cancel over the phone.
-
Clique em para fechar a visualização de edição.
-
Inclua um nó após o nó de solicitação de cancelamento do pedido inicial que responderá no caso em que o usuário fornecer o número do pedido na solicitação inicial, para não ter que pedir novamente. Clique no ícone Mais no nó
#cancel_order
e, em seguida, selecione Incluir nó filho. -
Inclua um rótulo no nó para distingui-lo de outros nós-filhos. No campo de nome, inclua
Number provided
. Digite@order_number
no campo Se o assistente reconhecer desse nó. -
Inclua a mensagem a seguir no campo de texto de resposta:
Just to confirm, you want to cancel order $ordernumber?
-
Clique em para fechar a visualização de edição.
Deve-se incluir nós-filhos que verificam a resposta do usuário para sua pergunta de confirmação.
-
Clique no ícone Mais no nó
Number provided
e, em seguida, selecione Incluir nó filho. -
Digite
#yes
no campo Se o assistente reconhecer desse nó. -
Inclua a mensagem a seguir no campo de texto de resposta:
OK. The order $ordernumber is canceled. We hope we get the opportunity to bake a cake for you sometime soon.
-
Clique em para fechar a visualização de edição.
-
Clique no ícone Mais no nó
#yes
e, em seguida, selecione Incluir nó abaixo. -
Digite
true
no campo Se o assistente reconhecer desse nó.Não inclua uma resposta. Em vez disso, você redirecionará os usuários para a ramificação que pergunta os detalhes do número do pedido criados anteriormente.
-
Na seção E finalmente, escolha Ir para.
-
Selecione a condição do nó Perguntar o número do pedido.
-
Clique em para fechar a visualização de edição.
-
Mova o nó Número fornecido antes do nó Perguntar o número do pedido. Clique no ícone Mais no nó
Number provided
e, em seguida, selecione Mover. Selecione o nó Perguntar o número do pedido e, em seguida, clique em Acima do nó. -
Force a conversa para avaliar os nós-filhos sob o nó
#cancel_order
no tempo de execução. Clique para abrir o nó#cancel_order
na visualização de edição e, em seguida, na seçãoAnd finally
, selecioneSkip user input
.
Testar cancelamentos de pedido
Teste a capacidade de seu assistente de reconhecer padrões de caracteres que correspondem ao padrão usado para números de pedido do produto na entrada do usuário.
-
Clique no ícone para abrir o painel "Experimentar".
-
Insira
i want to cancel my order number TW12345.
Seu assistente reconhece a intenção
#cancel_order
e a entidade@order_number
. Ele responde comIf the pickup time is more than 48 hours from now, you can cancel your order. Just to confirm, you want to cancel order TW12345?
-
Insira,
Yes
.O assistente reconhece a intenção
#yes
e responde comOK. The order TW12345 is canceled. We hope we get the opportunity to bake a cake for you sometime soon.
Agora, tente isso quando você não souber o número do pedido.
-
Clique em Limpar na área de janela "Experimente" para recomeçar. Insira
I want to cancel my order.
O assistente reconhece a intenção
#cancel_order
e responde comIf the pickup time is more than 48 hours from now, you can cancel your order. What is the order number?
-
Insira
I don't know.
O assistente responde com
I need the order number to cancel the order for you. If you don't know the order number, please call us at 958-234-3456 to cancel over the phone.
Incluir nós para esclarecer o formato do número do pedido
Se você fizer mais testes, poderá achar que o diálogo não é muito útil em cenários em que o usuário não se lembra do formato do número do pedido. O usuário pode incluir somente os números ou as letras também, mas esquecer que elas devem estar em maiúsculas. Então, seria uma boa ideia dar uma sugestão a eles nesses casos, certo? Se você desejar ser gentil, inclua outro nó na árvore de diálogo que verifica os números na entrada do usuário.
-
Localize o nó
@order_number
filho do nó Solicitar número do pedido. -
Clique no ícone Mais no nó
@order_number
e, em seguida, selecione Incluir nó abaixo. -
No campo de condição, inclua
input.text.find('\d')
, que é uma expressão SpEL que diz que se você localizar um ou mais números na entrada do usuário, essa resposta será acionada. -
No campo de resposta de texto, inclua a resposta a seguir:
The correct format for our order numbers is AAnnnnn. The A's represents 2 uppercase letters, and the n's represent 5 numbers. Do you have an order number in that format?
-
Clique em para fechar a visualização de edição.
-
Clique no ícone Mais no nó
input.text.find('\d')
e, em seguida, selecione Incluir nó filho. -
Digite
true
no campo Se o assistente reconhecer desse nó. -
Ative as respostas condicionais clicando em Customizar, rolando para baixo e, em seguida, configurando o comutador Várias respostas condicionadas para Ativado.
-
Clique em Aplicar.
-
No campo recém-incluído Se o assistente reconhecer, digite
@order_number
e, no campo, Responder com, digite:OK. The order $ordernumber is canceled. We hope we get the opportunity to bake a cake for you sometime soon.
-
Clique em ** Incluir resposta **.
-
No campo Se o assistente reconhecer, digite
true
e, no campo Responder com, digite:I need the order number to cancel the order for you. If you don't know the order number, please call us at 958-234-3456 to cancel over the phone.
-
Clique em para fechar a visualização de edição.
Agora, quando você testar, será possível fornecer um conjunto de números ou uma combinação de números e texto como entrada e o diálogo lembrará o formato do número do pedido correto. Você testou com êxito seu diálogo, localizou uma fragilidade nele e corrigiu-a.
Outra maneira possível de direcionar esse tipo de cenário é incluir um nó com intervalos. Consulte o tutorial Incluindo um nó com intervalos em um diálogo para saber mais sobre o uso de intervalos.
Inclua o toque pessoal
Se o usuário mostrar interesse no robô em si, você desejará que o assistente virtual reconheça essa curiosidade e se engaje com o usuário de uma maneira mais pessoal. Você pode se lembrar da intenção #General_About_You
, que é fornecida
com o catálogo de conteúdo Geral, que consideramos usar anteriormente, antes de ter incluído sua própria intenção #about_restaurant
customizada. Ela é construída para reconhecer apenas essas perguntas do usuário. Inclua
um nó com condições para essa intenção. Em sua resposta, é possível perguntar o nome do usuário e salvá-lo em uma variável $username que pode ser usada em outro lugar no diálogo, se disponível.
Incluir um nó que manipula perguntas sobre o robô
Inclua um nó de diálogo que possa reconhecer o interesse do usuário no robô e responder.
-
Clique na guia ** Diálogo ** .
-
Localize o nó
Welcome
na árvore de diálogo. -
Clique no ícone Mais no nó
Welcome
e, em seguida, selecione Incluir nó abaixo. -
Comece a digitar
#General_About_You
no campo Se o assistente reconhecer desse nó. Em seguida, selecione a opção#General_About_You
. -
Inclua a mensagem a seguir no campo de texto de resposta:
I am a virtual assistant that is designed to answer your questions about the Truck Stop Gourmand restaurant. What should I call you?
-
Clique em para fechar a visualização de edição.
-
Clique no ícone Mais no nó
#General_About_You
e, em seguida, selecione Incluir nó filho. -
No campo Se o assistente reconhecer desse nó, insira
true
. -
Inclua a mensagem a seguir no campo de texto de resposta:
Hello, <? input.text ?>! It's lovely to meet you. How can I help you today?
-
Para capturar o nome que o usuário fornece, inclua uma variável de contexto no nó. Clique no ícone Mais e selecione Abrir editor de contexto.
-
Insira o par de valores e nome da variável de contexto a seguir:
Detalhes da variável de contexto do nome do Variável Valor nome do usuário <? input.text ?>
O valor de variável de contexto (
<? input.text ?>
) é uma expressão SpEL que captura o nome de usuário como ele é especificado pelo usuário e, em seguida, o salva para a variável de contexto$username
. -
Clique em para fechar a visualização de edição.
Se, no tempo de execução, o usuário acionar esse nó e fornecer um nome, você saberá o nome do usuário. Se você o souber, deverá usá-lo. Inclua respostas condicionais no nó de diálogo de saudação que você incluiu anteriormente para incluir uma resposta condicional que use o nome do usuário, se ele for conhecido.
Incluir o nome do usuário na saudação
Se você souber o nome do usuário, deverá incluí-lo em sua mensagem de saudação. Para fazer isso, inclua respostas condicionais e inclua uma variação da saudação que inclui o nome do usuário.
-
Localize o nó
#General_Greetings
na árvore de diálogo e clique para abri-lo na visualização de edição. -
Clique em Customizar, role para baixo e, em seguida, configure o comutador Várias respostas condicionadas para Ativado.
-
Clique em Aplicar.
-
Clique em ** Incluir resposta **.
-
No campo Se o assistente reconhecer, digite
$username
e, no campo Responder com, inclua uma nova resposta:Good day to you, $username!
-
Clique na seta para cima para a resposta número dois para movê-la para que ela seja listada antes da resposta número um (
Good day to you!
). -
Clique em para fechar a visualização de edição.
Testar a personalização
Teste a capacidade de seu assistente de reconhecer e salvar o nome de um usuário e, posteriormente, referenciar o usuário com ele.
-
Clique no ícone para abrir o painel "Experimentar".
-
Clique em Limpar para reiniciar a sessão de conversa.
-
Insira
Who are you?
Seu assistente reconhece a intenção
#General_About_You
. Sua resposta termina com a pergunta,What should I call you?
-
Insira,
Jane
.Seu assistente salva
Jane
na variável$username
. -
Insira
Hello.
O assistente reconhece a intenção
#General_Greetings
e dizGood day to you, Jane!
. Ele usa a resposta condicional que inclui o nome do usuário, pois a variável de contexto$username
contém um valor no momento em que o nó de saudação é incluído.
É possível incluir uma resposta condicional que condiciona e inclui o nome do usuário para quaisquer outras respostas em que a personalização incluiria um valor na conversa.
Teste o assistente por meio da integração de página web
Agora que você construiu uma versão mais sofisticada do assistente, retorne para a página da web pública implementada como parte do tutorial anterior e, em seguida, teste os novos recursos incluídos.
-
Abra o assistente.
-
Clique em Visualizar.
-
Copie e cole a URL de Compartilhar este link em um navegador da web.
Uma página com a marca da IBM é exibida com o assistente integrado como uma janela de bate-papo.
-
Repita algumas das elocuções de teste enviadas à área de janela "Experimentar" para ver como o assistente se comporta em uma integração real.
Ao contrário de quando você envia elocuções de teste ao seu assistente na área de janela "Experimentar", encargos de uso padrão se aplicam a chamadas de API resultantes de elocuções enviadas ao widget de bate-papo.
Próximas etapas
Agora que você construiu e testou sua qualificação de diálogo, é possível compartilhá-la com os clientes. Implemente sua qualificação conectando-a primeiramente a um assistente e, em seguida, implementando o assistente. Há várias maneiras de fazer isso. Consulte Incluindo Integrações para obter mais detalhes.