Con la evolución continua de la inteligencia artificial (IA), los chatbots se han vuelto herramientas esenciales para las empresas, ya que ofrecen asistencia en tiempo real, personalizan recomendaciones y automatizan el servicio al cliente en diversas plataformas. A medida que estos chatbots manejan tareas cada vez más complejas, como responder preguntas, recuperar información específica y guiar a los usuarios a través de procesos de varios pasos, su rendimiento se vuelve crucial.
Si tu chatbot suele presentar errores o retrasos, puede generar frustración en los usuarios, lo que derivará en experiencias negativas y en una posible pérdida de clientes. Al usar una herramienta de observabilidad como Monitoreo de New Relic AI, podrás observar métricas clave como el tiempo de respuesta, el uso de tokens y las tasas de errores, lo que te ayudará a garantizar que tu chatbot funcione de manera óptima y brinde una experiencia fluida y eficiente para tus usuarios.
¡En esta guía aprenderás cómo hacer exactamente eso! Estos son los pasos que deberás seguir para monitorear y optimizar el rendimiento de un chatbot usando Monitoreo de New Relic AI:
- Configurar una aplicación de chatbot usando OpenAI
- Integrar New Relic para monitorizar en tiempo real tu chatbot
- Seguimiento de métricas de rendimiento clave
- Identificar y resolver problemas de rendimiento empleando New Relic
Configuración del entorno
Para este tutorial, utilizarás una aplicación de demostración llamada Relicstraurants, un chatbot de servicio al cliente que está diseñado específicamente para interactuar con un conjunto de datos proporcionado para que pueda brindar respuestas personalizadas en función de las consultas del usuario. El chatbot se desarrolló con Flask y el modelo GPT-4o de OpenAI.
Requisitos:
antes de comenzar, asegúrate de tener lo siguiente:
- Python 3.8+
- Clave API de OpenAI: puedes encontrar tu clave API secreta en la página de clave API. Si aún no tienes una cuenta, puedes registrarte aquí.
- Una cuenta [New Relic] gratis (https://newrelic.com/signup)
Con estos requisitos previos cumplidos, puedes proceder a configurar el chatbot Relicstraurants.
- Clona la aplicación de chatbot Relicstraurants en tu entorno local.
git clone https://github.com/mehreentahir16/relicstraurants_chatbot.git
cd relicstraurants_chatbot
- Configura un entorno virtual e instala los paquetes necesarios.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
- Antes de ejecutar la aplicación, deberás exportar tu clave de API de OpenAI como una variable de entorno.
export OPENAI_API_KEY= your-openai-api-key
- Inicia el chatbot ejecutando el siguiente comando.
python3 app.py
Una vez que la aplicación se esté ejecutando, deberías ver una salida similar a la siguiente en tu terminal:
* Serving Flask app 'app'
* Debug mode: on
ADVERTENCIA: este es un servidor de desarrollo. No lo utilices en un despliegue de producción. En su lugar, utiliza un servidor WSGI de producción.
* Ejecutando en http://127.0.0.1:5000
Presiona CTRL+C para salir
- ¡Accede a http://127.0.0.1:5000/ y comienza a chatear!
Con Relicstraurants en funcionamiento, puedes explorar su funcionalidad y ver cómo aprovecha los datos personalizados para ofrecer respuestas personalizadas a los usuarios.
Esta guía tiene un enfoque práctico y fue creada para guiarte paso a paso en la identificación y resolución de cualquier cuello de botella de rendimiento que pueda estar afectando el desempeño de tu chatbot. Por lo tanto, te recomendamos que dediques algún tiempo a explorar y comprender la base de código, ya que te resultará útil al seguir la guía.
Integración de New Relic para monitoreo en tiempo real
Una vez que tu chatbot Relicstraurants esté en funcionamiento, el siguiente paso es instalar un agente New Relic para monitoreo en tiempo real. Esto te permitirá observar métricas de rendimiento clave, identificar problemas potenciales y optimizar tu chatbot.
- Inicia sesión en tu cuenta de New Relic y haz clic en Integrations and Agents desde el menú de navegación de la izquierda.
- En las capacidades listadas, selecciona Python.
- En la siguiente pantalla, elige On a host (package manager) como método de instrumentación.
- A continuación, ingresa tus credenciales.
- Ahora, sigue las instrucciones en pantalla para instalar el agente.
- Si aún no lo has hecho, instala el paquete New Relic ejecutando el siguiente comando:
pip install newrelic
- Asegúrate de que la característica Analyze your AI application responses esté activada. Esto te permitirá monitorear el rendimiento de tu chatbot al manejar consultas relacionadas con IA.
- Descarga el archivo de configuración newrelic.ini y agrégalo al directorio raíz de tu proyecto.
- Una vez que tu archivo de configuración esté listo, agrega las siguientes líneas al principio de tu archivo app.py para inicializar el agente de New Relic:
import newrelic.agent
newrelic.agent.initialize('newrelic.ini')
- Ahora, resetea tu aplicación usando el siguiente comando:
NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python3 app.py
Para obtener instrucciones más detalladas sobre cómo configurar el agente Python, consulta la documentación de New Relic.
Una vez que tu aplicación se esté ejecutando, comienza a chatear con tu chatbot para generar tráfico. El siguiente paso es comprender las métricas de rendimiento que New Relic proporciona. Estas métricas te ayudarán a monitorear el estado de tu aplicación y a identificar posibles problemas de rendimiento.
Rastreo de métricas clave de rendimiento
Dado que la herramienta Monitoreo de New Relic IA está integrada dentro del agente APM de Python, obtienes lo mejor de ambos mundos: información valiosa tanto sobre tu aplicación como sobre las respuestas generadas por IA. Este monitoreo en dos capas te permite vigilar tanto la salud general de la aplicación como el rendimiento de la IA. Veamos las métricas clave que se muestran en New Relic.
- Ve a tu cuenta de New Relic y elige tu aplicación en la sección APM & Services.
- En la siguiente pantalla, verás un panel que presenta métricas de rendimiento esenciales relacionadas con tu aplicación, como tiempo de transacción web, puntuación Apdex y rendimiento.
- A medida que te desplazas hacia abajo en el dashboard, encontrarás la sección de resumen de respuestas de IA. Aquí, puedes encontrar métricas específicas de IA, como tiempo de respuesta, uso de tokens por respuesta y tasa de errores, que te brindan una vista general de qué tan bien está funcionando tu chatbot.
Estas métricas son esenciales para identificar cuellos de botella específicos de tu componente de IA. Al monitorearlas, puedes detectar rápidamente si tu chatbot tarda demasiado en responder, consume más tokens de lo esperado o presenta errores en ciertos tipos de interacciones.
Identificación y resolución de problemas de rendimiento
Es hora de profundizar en cuestiones específicas que afectan el rendimiento de tu chatbot. Por ejemplo, la captura de pantalla anterior muestra un tiempo de respuesta y errores significativamente altos. Son indicadores claros de que existen cuellos de botella en el rendimiento. Profundicemos.
Tiempo de respuesta: identificación de transacciones lentas
- En la página de resumen de la aplicación, verás las cinco transacciones más lentas (por tiempo total). Selecciona la transacción más lenta.
En la siguiente captura de pantalla, puedes ver la cascada de la transacción junto con un gráfico circular que muestra qué componentes consumieron más tiempo durante la transacción.
La duración de la traza es de 29,77 s, lo cual es bastante alto para una aplicación de chatbot. También puedes ver que la llamada API a OpenAI (api.openai.com - httpx/POST)
ocupó el 99,92 % del tiempo de respuesta total, lo que la convierte en la razón principal del tiempo de respuesta lento general.
También puedes elegir Focus on Slow spans como se muestra en la siguiente imagen:
En este caso, dado que la latencia es provocada por una llamada a una API externa, una solución para reducir la latencia es almacenar en caché las respuestas solicitadas con frecuencia. Si tu chatbot responde con frecuencia consultas similares (por ejemplo, recomendación de restaurantes), almacenar en caché estas respuestas evitará que el sistema realice llamadas repetidas a OpenAI para obtener los mismos datos y consumir tokens adicionales. Otra posible solución es acceder a OpenAI a través de la opción de unidad de rendimiento aprovisionada (PTU), según su caso de uso.
Rastreo y resolución de errores
Ninguna aplicación está libre de errores y, en los sistemas basados en IA, los errores pueden ocurrir por diversas razones, como entradas no válidas, fallas de API o sobrecargas del sistema. Sin embargo, los errores no siempre son fáciles de diagnosticar. Por ejemplo, es posible que hayas notado que el chatbot encuentra un error al buscar restaurantes cuando no se especifica una culinaria en particular.
Veamos más en detalle lo que está sucediendo.
Accede a la sección AI Responses desde el menú entidad de New Relic. Aquí, verás información detallada sobre cómo tu chatbot interactúa con los usuarios, su eficiencia de respuesta y cualquier problema o error que deba ser resuelto. Selecciona alguna de las respuestas en las que el usuario solicite recomendaciones de restaurantes.
Esto te llevará a la página Response Details, así como a la traza, logs y metadatos asociados.
Aquí, verás la Duración de la solicitud, los Tokens totales y la Entrada del usuario, entre otros. El panel Response Details tiene una gran importancia, ya que proporciona contexto sobre las acciones del chatbot. Especifica las herramientas, el formato y las preguntas del usuario para el chatbot, y solicita la respuesta. También puedes examinar la acción y la entrada de acción como respuesta a la consulta del usuario.
Los spans resaltados en rojo indican llamadas en las que se produjeron errores o cuellos de botella en el rendimiento; en este caso, podemos ver que las llamadas LangChain/invoke y LangChain/run encontraron un problema. Puede emplear estos detalles de traza para depurar el error. Haz clic en el span LangChain/invoke para abrir la página de detalles.
Haz clic en Error Details para ver los detalles del error.
En la captura de pantalla anterior, puedes ver el error exacto que ocurrió durante la solicitud. Específicamente, los detalles del error apuntan a un builtins:TypeError, donde a una función lambda se le pasó un argumento inesperado, con el mensaje: "() toma 0 argumentos posicionales, pero se dio 1". Este es un problema común cuando se trabaja con funciones que no tienen en cuenta los argumentos entrantes.
Ahora que identificaste el problema exacto utilizando los detalles de traza y error, el siguiente paso es volver a la base de código y ajustar la función lambda que maneja esta solicitud. En este caso, LangChain llama a la función search_top_restaurants
con la entrada adicional None. Modifica search_top_restaurants
para tener en cuenta este argumento adicional.
def search_top_restaurants(flattened_data, limit=5, _=None):
results = []
entries = flattened_data.split("\n\n")
for i in range(min(limit, len(entries))):
restaurant_info = format_restaurant_info(entries[i])
results.append(restaurant_info)
return "\n\n".join(results)
También necesitarás modificar las herramientas LangChain para tener en cuenta este argumento.
Tool(name="search_top_restaurants", func=lambda _: search_top_restaurants(flattened_data), description="Utiliza esta herramienta cuando el usuario quiera encontrar restaurantes sin especificar un tipo de culinaria en particular."),
Una vez que hayas corregido, reinicia tu aplicación y verifica si ahora funciona como se esperaba.
Monitoreo del uso y optimización de tokens
En la sección Summary (Resumen) de tu aplicación de chatbot, como se muestra en la siguiente imagen, también puedes ver el uso del token para la aplicación de chatbot Relicstraurants.
El p99 (percentil 99) de los tokens es de 1822, mientras que el uso promedio de tokens por solicitud es de aproximadamente 579 tokens para 28 solicitudes. Observa que hay una variación significativa en el consumo de tokens, donde los límites superiores superan los 1800 tokens, lo que sugiere que algunas solicitudes podrían ser muy complejas y que podrían estar consumiendo más tokens de lo necesario..
Para comprender mejor las métricas de consumo de tokens, ve a AI Responses y selecciona cualquier respuesta con un consumo significativo de tokens. En la siguiente imagen, la solicitud emplea alrededor de 1,74k tokens.
Observa el desglose del uso de tokens, que muestra que una parte significativa del uso total de tokens (1386 tokens) se consume durante la llamada a la herramienta search_restaurants_by_cuisine
. Esto indica que la mayoría de los tokens se utilizan para recuperar datos (en este caso, detalles de restaurantes de cocina india), con 284 tokens adicionales usados para generar la entrada y el contexto que condujeron a esta acción. Los 67 tokens restantes se destinan a gestionar otros elementos de la conversación, como procesar la entrada de la acción y formatear la respuesta final. Esto sugiere que la complejidad de generar la entrada y el contexto para la toma de decisiones de LangChain contribuye, en gran medida, al uso general del token, y no a la salida, que es mucho menor. Para un chatbot como Relicstraurants, este uso de token puede parecer elevado y podría resultar en una mayor latencia y costos operativos. A continuación, se muestran algunas de las formas en que puedes optimizar el uso de tokens en tu aplicación de chatbot.
- Optimizar el procesamiento de entrada de LangChain: en este caso, LangChain parece estar complicando demasiado la entrada que genera antes de pasarla a OpenAI. Simplificar la lógica para generar estas entradas o reducir la verbosidad de las consultas internas podría contribuir a reducir el consumo de tokens.
- Optar por un modelo más pequeño: considera cambiarte a un modelo menos costoso, como GPT-4o mini o GPT-3.5 Turbo. Si bien los modelos GPT-4 (como GPT-4o) son más capaces, también son caros y tienden a consumir más tokens. GPT-4o mini o GPT-3.5 Turbo pueden funcionar suficientemente bien para tareas relativamente sencillas como recomendaciones de restaurantes.
- Ajustar los símbolos: revisa la estructura de los símbolos de entrada que se están generando. ¿Hay información redundante? ¿Se incluyen detalles excesivos que no contribuyen significativamente al resultado? Reducir los detalles innecesarios en la solicitud de entrada disminuirá el consumo de tokens.
- Monitorear el uso de tokens: Monitorea continuamente el uso de tokens a través de la sección AI Responses en New Relic. Si el consumo de tokens en el percentil 99 sigue aumentando, podría ser un indicio de que las entradas se están volviendo demasiado complejas o verbosas. Puedes monitorear transacciones individuales (como se mostró anteriormente) para identificar qué consultas consumen más tokens.
Al adoptar estas técnicas de optimización, es posible que logres disminuir el consumo de tokens y reducir los costos operativos, sin afectar la calidad de las respuestas del chatbot.
Al configurar el monitoreo para los chatbots de IA, es importante tener en cuenta los datos confidenciales, como la información de identificación personal (PII). Para evitar la exposición de datos confidenciales, New Relic te permite configurar reglas para eliminar cualquier dato confidencial antes de que sea capturado o almacenado. Puedes:
- Deshabilitar
ai.monitoring.record_content.enabled
. Esto evita que los símbolos del usuario y las respuestas de la IA se envíen a las bases de datos de New Relic. Puedes leer más sobre las configuraciones de agentes en nuestro documento de configuración de monitoreo de IA. - También puedes usar filtros de eliminación para evitar que se almacenen datos confidenciales en New Relic. Puedes leer más sobre los filtros de eliminación y aprender cómo crearlos en nuestra documentación.
Conclusión
Monitorear y optimizar tu chatbot es crucial para una experiencia de usuario fluida y eficiente. Al integrar New Relic con tu chatbot de IA, obtendrás información valiosa sobre su rendimiento, lo que te permitirá detectar y resolver problemas rápidamente, optimizar el uso de recursos y garantizar que tu chatbot siga siendo reactivo y confiable. A medida que continúas desarrollando y perfeccionando tu chatbot, los datos recopilados a través de New Relic servirán como base para futuras optimizaciones, lo que te ayudará a mantener un alto nivel de calidad de servicio a medida que crecen las demandas de los usuarios.
Para comenzar, clona el repositorio de GitHub del chatbot Relicstraurants y sigue los pasos descritos en este blog. ¡Feliz codificación!
Próximos pasos
Ahora que aprendiste a configurar y monitorear un chatbot de IA con New Relic, el siguiente paso es comenzar a aplicar estas herramientas a tus propias aplicaciones.
- Si aún no lo has hecho, regístrate para obtener una cuenta gratis de New Relic.
- ¿Tu aplicación de IA no está en lenguaje Python? New Relic admite la monitorización de IA en una variedad de lenguajes como Go, Java y Node, entre otros. Obtén más información sobre los lenguajes admitidos en nuestra documentación.
- Una vez que instales el monitoreo de IA, puedes configurar el comportamiento predeterminado del agente o personalizarlo según tus necesidades.
- Explora tus datos de IA en profundidad en New Relic.
Las opiniones expresadas en este blog son las del autor y no reflejan necesariamente las opiniones de New Relic. Todas las soluciones ofrecidas por el autor son específicas del entorno y no forman parte de las soluciones comerciales o el soporte ofrecido por New Relic. Únase a nosotros exclusivamente en Explorers Hub ( discus.newrelic.com ) para preguntas y asistencia relacionada con esta publicación de blog. Este blog puede contener enlaces a contenido de sitios de terceros. Al proporcionar dichos enlaces, New Relic no adopta, garantiza, aprueba ni respalda la información, las vistas o los productos disponibles en dichos sitios.