VoiceBooker

Bot multi‑etapas / prompt

En este tutorial, construimos un asistente más complejo basado en varias stages.

Aquí aprenderás:

  1. la diferencia entre bots de etapa única y bots multi‑etapas/prompt
  2. transiciones de stage
  3. cómo acceder a los datos extraídos por la IA a través de la variable params

¿Por qué usar bots multi‑etapas?

En teoría, es posible crear flujos de llamada complejos con una sola stage, es decir, un solo prompt. Sin embargo, los LLM a veces alucinan y toman caminos inesperados. Pueden hacer afirmaciones o preguntas que no son ciertas, por ejemplo, sugiriendo horarios de citas que no existen. Para evitar esto, podemos usar múltiples stages, donde cada stage representa su propio diálogo en una sesión de llamada. Cada stage tiene su propio prompt que se inserta durante la conversación para que podamos instruir al LLM con precisión sobre qué hacer a continuación.

Un ejemplo basado en reserva de citas:

El asistente primero pregunta al usuario/llamante si desea reservar una cita o cancelar una reserva. Si el usuario quiere reservar una cita, el asistente pregunta el tipo de cita y el día deseado en la primera stage, mientras que la segunda stage recopila toda la información sobre la persona que reserva, por ejemplo, nombre, email, teléfono.

En el caso de cancelación, el bot primero pide el nombre del llamante para identificar al usuario, luego recupera las reservas existentes, las enumera y pregunta cuál reserva específica desea cancelar.

Estos dos flujos pueden expresarse con reglas if‑then en un solo prompt, pero las reglas pueden volverse muy complejas y anidadas, haciendo que el LLM se desvíe del camino. Este es exactamente el problema que los bots multi‑etapas/prompt evitan.

Bot de etapa única vs. bot multi‑etapas/prompt

Para ilustrar la diferencia entre bots de etapa única y bots multi‑etapas/prompt, primero creamos un bot de etapa única que recopila dos piezas de información y luego dividimos el flujo en dos stages.

Welcome‑Stage

Primero, definimos/usamos la stage Welcome con el siguiente prompt:

You are an AI phone assistant that collects some user/customer data.
You respond in Spanish.
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.
Definir parámetros

A continuación, en la pestaña Actions/Tools, definimos una función collectData con los siguientes parámetros: name como String y dob como Date. Los parámetros de la función deben configurarse de la siguiente manera:

Definir la respuesta

En la pestaña Functions, ahora podemos extender la función JavaScript vacía collectData(params) con el texto que el asistente debe decir cuando se llame a esta función. En nuestro ejemplo, el asistente simplemente responde con "¡Gracias!" y el nombre proporcionado por el usuario/llamante después de que el nombre haya sido capturado.

function collectData(params) {
    return { text: "¡Gracias! " + params.name };
}

El parámetro params contiene todas las entradas recopiladas previamente del llamante/usuario como una estructura de datos JSON.

{
    "name": "Max",
    "dob": "14.09.1989"
}

Probar el asistente de etapa única

Como muestra la conversación, el asistente saluda al llamante y pide su nombre y fecha de nacimiento. Una vez que el usuario/llamante proporciona la información requerida, el asistente responde con un agradecimiento y repite el nombre proporcionado.

También puedes ver la llamada a la función collectData() y los valores del parámetro params, que contienen los datos extraídos por la IA de la conversación.

Bonus

En el ejemplo anterior, el asistente simplemente dice lo que se devolvió como text en la función collectData(). Como se mostró, la conversación tuvo lugar en español. Si quieres que el LLM formule de forma independiente una respuesta en el idioma correcto, puedes devolver un campo data en su lugar.

function collectData(params) {
    return { data: "Thank the user and mention their name." };
}

Bot multi‑etapas/prompt

Esta vez dividimos el bot anterior para que la stage Welcome solo pida el nombre y la siguiente stage solo pida la fecha de nacimiento.

Prompt para Welcome‑Stage

Primero, definimos/usamos la stage Welcome y establecemos el siguiente prompt:

You are an AI assistant that collects some user/customer data.
You respond in Spanish.
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.

Ten en cuenta que acortamos la instrucción a solo la solicitud del nombre, pero no la fecha de nacimiento, porque esa información se recopila en la segunda stage después de reunir el nombre y hacer la transición a la siguiente stage.

Acción para Welcome‑Stage

Luego agregamos una segunda stage y la llamamos Stage DOB, pero la dejamos vacía por ahora. A continuación, en la pestaña Actions/Tools, definimos una función collectName con el parámetro name como string y proporcionamos una descripción adecuada.

Las herramientas deben configurarse de la siguiente manera:

Ten en cuenta que también definimos un key/path (ruta en el state) donde la información recopilada, es decir, el nombre, debe almacenarse en el state. Y definimos una transición a la stage Stage DOB creada anteriormente porque queremos recopilar la fecha de nacimiento a continuación.

Prompt para Stage DOB

Para esta stage, usamos un prompt muy corto porque el LLM solo debe preguntar la fecha de nacimiento en este punto.

Ask the caller for their date of birth.
Acción para Stage DOB

Finalmente, definimos las acciones/funciones para la stage DOB de la siguiente manera:

Luego implementamos la función collectDOB que definimos en la sección Actions/Tools. En nuestro ejemplo, simplemente respondemos con "¡Gracias!" y colgamos.

function collectDOB(params) {
    return { text: "¡Gracias!", action: "hangup" };
}

Probar el bot multi‑etapas

Como muestra la conversación, el asistente saluda al llamante y pide su nombre. Después de que el llamante proporciona su nombre, la función collectName se llama y desencadena la transición a Stage DOB. En esta stage, el LLM pide la fecha de nacimiento como se define en el prompt. Finalmente, la función collectDOB se llama con los datos proporcionados por el llamante.

En modo de depuración, puedes ver en qué stage está el asistente, así como el estado actual, el último prompt y los datos/variables extraídos, etc.

Orden de ejecución: prompt y llamadas de función

Durante la ejecución, los valores/datos devueltos por las llamadas de función y el prompt de la siguiente stage son combinados por el LLM en una sola respuesta seguida inmediatamente por la siguiente pregunta:

En esta página