< Regresar al blog

Construyendo el chatbot oficial del #MexicoTechWeek

Todo lo que aprendimos conectando WhatsApp con ChatGPT, y cómo lo puedes hacer tú también 🚀

Construyendo el chatbot oficial del #MexicoTechWeek

Intro

Desde el año pasado que OpenAI presentó ChatGPT, la posibilidad de usarlo como asistente de ventas o de soporte para las empresas se volvió uno de los proyectos más interesantes que pueden hacerse. Dado que ChatGPT es conversacional (le preguntas y te responde), es un fit natural para aquellos canales de chat como WhatsApp. Si tu empresa ya tiene un WhatsApp, agregarlo como primera capa de ventas ó soporte debería ser fácil, ¿cierto? 🤔

En este artículo les contamos lo que vimos y aprendimos cuando lo hicimos así, como asistente para el evento del #MexicoTechWeek. En este caso, el objetivo de ChatGPT era poder contestar preguntas sobre los eventos, quién los organizaba, dónde se realizarían, etc. Era un proyecto bastante limitado en el sentido de que no esperábamos que pudiera contestar cualquier pregunta: sólo queremos que conteste sobre los eventos.

Ahora, ¿por qué en WhatsApp? Dado que en LATAM, y específicamente en México, cerca del 98% de personas tiene y usa WhatsApp a diario, era la mejor manera de distribuir nuestro chatbot. Siempre se puede consultar la página de MXTW, pero es mucho más fácil abrir WhatsApp y mandar una pregunta.

Hace unas semanas, Meta presentó en su evento Conversations algunos datos bastante interesantes sobre los resultados de una estrategia de comunicación basada en WhatsApp: Cora, un Neo-banco en Brasil, ha logrado unos resultados increíbles:

  • Pasaron de 40% de tasas de apertura de correos a un 70% usando WhatsApp. Lo mejor de todo es que no había que esperar varios días para que los clientes abrieran el correo (en 10 días llegaban a la tasa de 40%), sino que en WhatsApp el 70% los abría el mismo día!
  • Además, lograban un 2X de click-through rate: básicamente el doble de personas daba clic en el mensaje para llegar a su página por WhatsApp que por correo.
  • En términos generales, esto les permitió subir un 50% su tasa de conversión 😄.

Conectando WhatsApp con ChatGPT e Hilos

Ahora sí, aquí viene la parte interesante. Una vez registrado en el sitio de OpenAI, ChatGPT se puede acceder a través de un API, y fue así como lo conectamos con Hilos.

Captura de pantalla de lo fácil que fue conectar WhatsApp con ChatGPT con el editor de flujos de Hilos

Básicamente, el flujo consiste en darle la bienvenida al usuario cuando nos escribe al número de #MexicoTechWeek, y luego luego preguntarle qué es lo que le gustaría hacer.

Su respuesta la guardamos en una variable y la mandamos a ChatGPT via su API, acompañado de un prompt que desarrollamos que entre otras cosas, contiene instrucciones de cómo debe responder, la fecha actual, y la información de los eventos publicados en la página de https://www.mexicotechweek.mx/.

Luego, la respuesta que nos dé ChatGPT la mandamos de regreso y esperamos que nos conteste la persona. En este caso que el evento dura toda una semana, decidimos que no expiraríamos la conversación tan pronto, sino que nuestro bot mantendría el contexto por 30 días, para así dar oportunidad de poder continuar con una conversación fluida todo este tiempo.

Ahora, les contamos un poco más de detalle técnico de cómo fue construido este prompt:

Detalles técnicos

  • Modelo: decidimos usar el modelo gpt-3.5-turbo-16k debido a que el tamaño del contexto era mayor que el base de gpt-3.5-turbo. Esto significa que podíamos pasarle en el prompt y en el historial de mensajes muchos más datos para consultar su siguiente respuesta.Solamente con pasar el detalle de los eventos ya usábamos la mayor parte, por lo que era necesario tener todavía tokens disponibles para la respuesta.
  • Datos de eventos: estos datos los obtuvimos primero haciendo un scraping del sitio de https://www.mexicotechweek.mx/, posteriormente transformándolos en Markdown (para eliminar las cosas innecesarias como navegación, imágenes, etc) y después limpiando esta información para quitar todo lo que no fuera relevante al evento.Posteriormente, esta información limpia la pasamos por una etapa de resumen, también con ChatGPT. Dado que no teníamos tanto espacio en el prompt y (afortunadamente) hay muchos eventos registrados, teníamos que consolidar al máximo la información.
  • Prompt: Para diseñar uno que funcionara tan bien como queríamos, necesitábamos lograr varios objetivos:
  • Que tuviera idea de la fecha actual, para que no pensara que el evento a) no había ocurrido aún, ó b) ya ocurrió y no pudiera contestar preguntas como “¿qué eventos habrá mañana?”
  • Que al enviar el link de registro a un evento, que no usara Markdown (como venían estos datos) ni formateara los links de alguna manera especial, sino que solamente enviara el link directo. De otra forma al darle tap al link, WhatsApp tomaba como parte del link tooodo el texto Markdown: [Link de registro](<https://hilos.io>) . Dado que tomaba el link como todo este texto, la gente no llegaba al sitio correcto.
  • Todo esto lo trabajamos usando técnicas de https://www.promptingguide.ai/techniques/fewshot, puesto que no teníamos un paso previo de embeddings ni entrenamiento extra, era necesario indicarle muy precisamente cómo responder desde un inicio.

Aprendizajes

En este proceso de evaluación, nos dimos cuenta de varios detalles que impedían que la experiencia fuera buena del lado del usuario final, como los siguientes:

  • Instrucciones específicas: Aún teniendo las instrucciones de sólo usar texto plano, ignoraba esta instrucción al responder los links de los eventos. Al final, la solución fue ser mucho más específicos en el prompt: en vez de “usa sólo texto plano para tus respuestas”, agregamos “no uses markdown al enviar links”.
  • Alucionaciones: si después del scrapping y limpieza de la información de los eventos, el evento no tenía un liga incluida para hacer el registro, ChatGPT muy amablemente se inventaba una. ¡Lo peor es que se veía 100% realista! Esto lo resolvimos en la etapa de limpieza: si no venía una liga en la información de los eventos, nosotros le poníamos la liga de la página oficial del MXTW. Así ya no era necesario que ChatGPT se inventara algo.Otra cosa que nos ayudó a mejorar esto fue ajustar la temperatura del modelo: la bajamos lo más posible (casi a 0) para evitar alucinar.
  • Fecha y hora: Para que pudiera contestar preguntas relacionadas con los eventos del día, era necesario que ChatGPT tuviera noción del día y hora actual, y además que supiera que debía usar esa fecha como referente. Para esto, en Hilos existe una variable que da la fecha y hora actual, por lo que usamos eso junto con un mensaje en el prompt de “Usa esta fecha: {fecha} y hora {hora} para responder preguntas relativas de tiempo como qué eventos hay mañana”.
  • Limpieza de datos: aquí aprendimos la importancia de pre-procesar y limpiar los datos que usaremos para darle contexto al modelo. En particular:
  • Al hacer scraping, no puedes pasarles la página completa directamente porque trae mucha info innecesaria (como navbar, etc). Es necesario un primer paso de limpieza.
  • Costos: por lo mismo, es importante reducir la cantidad de tokens que necesitas usar. Si no se limpia y se condensa la información, se vuelve caro rápidamente cada una de las llamadas a ChatGPT
  • Historial de mensajes: para que la conversación se sienta más fluida, era 100% necesario pasarle a ChatGPT un historial de mensajes. No tantos, porque el costo sube, pero sí encontrar un balance es clave para que se sienta realmente natural y útil la interacción.
  • Prompt: esta es la parte más clave del proceso, puesto que sin un prompt bien hecho obtendrás resultados no tan malos en vez de respuestas casi perfectas. Para esto, conviene revisar técnicas para prompts como las de  https://www.promptingguide.ai/techniques/fewshot y tener una manera de iterar rápido sobre ellos, como trabajándolo y probándolo localmente y evaluando los resultados, por ejemplo con técnicas como https://towardsdatascience.com/llm-evals-setup-and-the-metrics-that-matter-2cc27e8e35f3.
  • Como siguiente paso, considerar los embeddings. Esta es una manera práctica para poder trabajar con más contexto del que podemos usar en el prompt: en una base de datos especial (de vectores como PostgreSQL, Pinecone, etc) se guardan todo el texto que queremos usar como contexto para el modelo, en un formato especial. Cuando se hace una pregunta específica al modelo, además del prompt hacemos una búsqueda en esta base de datos e incluimos los resultados relevantes, para que el modelo tenga un contexto mucho más específico con el cual contestar.

Por último

En Hilos vemos resultados como este con mucho optimismo: nuestra visión incluye el facilitarle a las empresas que quieren usar LLMs y chatbots que puedan crearlo y conectarlo con WhatsApp con mínimo conocimiento de código.

Y para aquellas empresas que están construyendo modelos especializados, ¡platiquen con nosotros! Una de las maneras más rápidas de iniciar es usando WhatsApp como forma de comunicación con el cliente final, cosa que ya resolvemos en Hilos.

Al trabajar juntos pueden exponer su modelo a muchas más personas sin preocuparse por conectar números ni demás temas operativos de WhatsApp. Además, con el resto de las herramientas de Hilos sus clientes tendrán muchas más capacidades para crecer, vender más y dar una mejor experiencia a sus clientes.

Historias relacionadas:

¿Listo para iniciar?

Automatiza tu WhatsApp hoy.

Agenda una demo
o
escríbenos por WhatsApp