Bot multi‑etapas / prompt
Neste tutorial, construímos um assistente mais complexo baseado em várias stages.
Aqui você aprenderá:
- a diferença entre bots de etapa única e bots multi‑etapas/prompt
- transições de stage
- como acessar dados extraídos pela IA via a variável
params
Por que usar bots multi‑etapas?
Em teoria, é possível criar fluxos de chamada complexos com apenas uma stage, ou seja, um único prompt. No entanto, os LLMs às vezes alucinam e seguem caminhos inesperados. Eles podem fazer afirmações ou perguntas que não são verdadeiras, por exemplo, sugerindo horários de agendamento que não existem. Para evitar isso, podemos usar múltiplas stages, em que cada stage representa seu próprio diálogo em uma sessão de chamada. Cada stage tem seu próprio prompt que é inserido durante a conversa para que possamos instruir o LLM com precisão sobre o que fazer a seguir.
Um exemplo baseado em agendamento de consultas:
O assistente primeiro pergunta ao usuário/chamador se deseja agendar uma consulta ou cancelar um agendamento. Se o usuário quiser agendar uma consulta, o assistente pergunta o tipo de consulta e o dia desejado na primeira stage, enquanto a segunda stage coleta todas as informações sobre a pessoa que está agendando, por exemplo, nome, email, telefone.
No caso de cancelamento, o bot primeiro pede o nome do chamador para identificar o usuário, depois busca os agendamentos existentes, lista‑os e pergunta qual agendamento específico deseja cancelar.
Esses dois fluxos podem ser expressos com regras if‑then em um único prompt, mas as regras podem se tornar muito complexas e aninhadas, fazendo o LLM se desviar do caminho. Esse é exatamente o problema que bots multi‑etapas/prompt evitam.
Bot de etapa única vs. bot multi‑etapas/prompt
Para ilustrar a diferença entre bots de etapa única e bots multi‑etapas/prompt, primeiro criamos um bot de etapa única que coleta duas informações e depois dividimos o fluxo em duas stages.
Primeiro, definimos/usamos a stage Welcome com o seguinte prompt:
You are an AI phone assistant that collects some user/customer data.
You respond in Portuguese.
You respond briefly and in a very friendly, conversational style.
Answer any question that is outside the purpose of collecting the customer's name and date of birth with: I don't know.
Do not invent any answers.
Greet the user and ask for their name and date of birth including the year.Em seguida, na aba Actions/Tools, definimos uma função collectData com os seguintes parâmetros:
name como String e dob como Date. Os parâmetros da função devem então ser configurados da seguinte forma:

Na aba Functions, agora podemos estender a função JavaScript vazia collectData(params)
com o texto que o assistente deve dizer quando essa função for chamada.
No nosso exemplo, o assistente simplesmente responde com "Obrigado!" e o nome fornecido pelo usuário/chamador
depois que o nome foi capturado.
function collectData(params) {
return { text: "Obrigado! " + params.name };
}O parâmetro params contém todos os inputs coletados anteriormente do chamador/usuário como uma estrutura de dados JSON.
{
"name": "Max",
"dob": "14.09.1989"
}Testar o assistente de etapa única
Como a conversa mostra, o assistente cumprimenta o chamador e pede seu nome e data de nascimento. Depois que o usuário/chamador fornece as informações necessárias, o assistente responde com um agradecimento e repete o nome fornecido.
Você também pode ver a chamada da função collectData() e os valores do parâmetro params,
que contêm os dados extraídos pela IA da conversa.
Bônus
No exemplo acima, o assistente simplesmente diz o que foi retornado como text na função collectData().
Como mostrado, a conversa ocorreu em português. Se você quiser que o LLM formule uma resposta de forma independente na língua correta,
você pode retornar um campo data em vez disso.
function collectData(params) {
return { data: "Thank the user and mention their name." };
}
Bot multi‑etapas/prompt
Desta vez, dividimos o bot acima para que a stage Welcome apenas peça o nome e a próxima stage apenas peça a data de nascimento.
Primeiro, definimos/usamos a stage Welcome e configuramos o seguinte prompt:
You are an AI assistant that collects some user/customer data.
You respond in Portuguese.
You respond briefly and in a very friendly, conversational style.
Answer any question that is outside the purpose of collecting the customer's name and date of birth with: I don't know.
Do not invent any answers.
Greet the user and ask only for their name.Note que encurtamos a instrução para apenas solicitar o nome, e não a data de nascimento, porque essa informação é coletada na segunda stage após capturarmos o nome e fazermos a transição para a próxima stage.
Em seguida, adicionamos uma segunda stage e a chamamos de Stage DOB, mas a deixamos vazia por enquanto.
Depois, na aba Actions/Tools, definimos uma função collectName com o parâmetro name como string
e fornecemos uma descrição apropriada.
As ferramentas devem então ser configuradas da seguinte forma:

Observe que também definimos um key/path (caminho no state) onde as informações coletadas, ou seja, o nome, devem ser armazenadas no state.
E definimos uma transição para a stage Stage DOB criada anteriormente porque queremos coletar a data de nascimento em seguida.
Para esta stage, usamos um prompt bem curto porque o LLM deve apenas perguntar a data de nascimento neste ponto.
Ask the caller for their date of birth.Por fim, definimos as ações/funções para a stage DOB da seguinte forma:

Em seguida, implementamos a função collectDOB definida na seção Actions/Tools. No nosso exemplo, respondemos simplesmente com "Obrigado!" e desligamos.
function collectDOB(params) {
return { text: "Obrigado!", action: "hangup" };
}Testar o bot multi‑etapas
Como a conversa mostra, o assistente cumprimenta o chamador e pede seu nome.
Depois que o chamador fornece o nome, a função collectName é chamada e dispara a transição para Stage DOB.
Nessa stage, o LLM pede a data de nascimento conforme definido no prompt.
Por fim, a função collectDOB é chamada com os dados fornecidos pelo chamador.
Em modo de depuração, você pode ver em qual stage o assistente está, bem como o estado atual, o último prompt e os dados/variáveis extraídos, etc.

Ordem de execução: prompt e chamadas de função
Durante a execução, os valores/dados retornados pelas chamadas de função e o prompt da próxima stage são combinados pelo LLM em uma única resposta seguida imediatamente pela próxima pergunta: