New Relic Now Start training on Intelligent Observability February 25th.
Save your seat.

Alors que l'intelligence artificielle (IA) continue d'évoluer, les chatbots sont devenus des outils indispensables pour les entreprises, fournissant une assistance en temps réel, personnalisant les recommandations et automatisant le service client sur diverses plateformes. À mesure que ces chatbots gèrent des tâches de plus en plus complexes, telles que répondre à des questions, récupérer des informations spécifiques et guider les utilisateurs à travers des processus en plusieurs étapes, leurs performances deviennent cruciales.

Si votre chatbot est sujet à des erreurs ou à des retards, il peut frustrer vos utilisateurs, entraînant de mauvaises expériences et une perte potentielle d'activité. En utilisant un outil d'observabilité comme le monitoring de l'IA New Relic, vous pouvez observer des indicateurs clés tels que le temps de réponse, l'utilisation des jetons et les taux d'erreur pour garantir que votre chatbot fonctionne de manière optimale et offre une expérience fluide et efficace à vos utilisateurs.

Dans ce guide, vous apprendrez comment faire cela. Voici les étapes à suivre pour monitorer et optimiser les performances d'un chatbot à l'aide du monitoring de l'IA New Relic :

  • Mettre en place une application de chatbot avec OpenAI
  • Intégrer New Relic pour un monitoring de l'IA en temps réel de votre chatbot
  • Suivre les indicateurs de performance clés
  • Identifier et résoudre les problèmes de performances à l'aide de New Relic

Configuration de l'environnement

Pour ce didacticiel, vous utiliserez une application de démonstration appelée Relicstaurants, un chatbot de service client spécialement conçu pour interagir avec un ensemble de données spécifique afin de pouvoir donner des réponses personnalisées en fonction des requêtes des utilisateurs. Le chatbot est construit à l'aide de Flask et du modèle GPT-4o d'OpenAI.

Conditions :

Avant de commencer, assurez-vous de disposer des éléments suivants :

Une fois ces conditions préalables remplies, vous pouvez désormais procéder à la configuration du chatbot Relicstaurants.

  1. Clonez l'application de chatbot Relicstaurants dans votre environnement local.
git clone https://github.com/mehreentahir16/relicstaurants_chatbot.git
cd relicstaurants_chatbot
  1. Configurez un environnement virtuel et installez les packages requis.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  1. Avant d'exécuter l'application, vous devez exporter votre clé API OpenAI en tant que variable d'environnement.
export OPENAI_API_KEY= your-openai-api-key
  1. Démarrez le chatbot en exécutant la commande suivante.
python3 app.py

Une fois l'application en cours d'exécution, vous devriez voir une sortie similaire à celle ci-dessous sur votre terminal :

* Serving Flask app 'app'
* Mode débogage : on
AVERTISSEMENT : c'est un serveur de développement. Ne l'utilisez pas dans un déploiement de production. Utilisez plutôt un serveur WSGI de production.
* Running on http://127.0.0.1:5000
Appuyez sur CTRL+C pour quitter
  1. Accédez à l'adresse http://127.0.0.1:5000/ dans votre navigateur web et commencez à discuter.

Une fois Relicstaurants opérationnel, vous pouvez explorer ses fonctionnalités et voir comment il exploite des données personnalisées pour fournir des réponses personnalisées aux utilisateurs.

Intégration de New Relic pour le monitoring en temps réel

Une fois votre chatbot Relicstaurants opérationnel, l'étape suivante consiste à installer un agent New Relic pour le monitoring en temps réel. Cela vous permettra d'observer les indicateurs de performance clés, d'identifier les problèmes potentiels et d'optimiser votre chatbot.

  1. Connectez-vous à votre compte New Relic et cliquez sur Intégrations et agents dans le menu de navigation de gauche.
  2. Parmi les fonctionnalités répertoriées, sélectionnez Python.
  3. Sur l'écran suivant, choisissez Sur un hôte (gestionnaire de paquets) comme méthode d'instrumentation.
  4. Ensuite, entrez vos informations d'identification.
  5. Suivez maintenant les instructions à l'écran pour installer l'agent.
  • Si vous ne l'avez pas déjà fait, installez le package New 

Relic en exécutant la commande suivante :

pip install newrelic
  • Assurez-vous que la fonctionnalité Analyser les réponses de votre application d'IA est activée. Cela vous permettra de monitorer les performances de votre chatbot dans le traitement des requêtes liées à l'IA.
  • Téléchargez le fichier de configuration newrelic.ini et ajoutez-le au répertoire racine de votre projet. 
  1. Une fois votre fichier de configuration en place, ajoutez les lignes suivantes en haut de votre fichier app.py pour initialiser l'agent New Relic :
import newrelic.agent
newrelic.agent.initialize('newrelic.ini')
  1. Redémarrez maintenant votre application en utilisant la commande suivante :
NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program python3 app.py

Une fois votre application exécutée, commencez à discuter avec votre chatbot pour générer du trafic. L'étape suivante consiste à comprendre les métriques de performance fournies par New Relic. Ces métriques vous aideront à monitorer l'état de votre application et à identifier les problèmes de performances potentiels.

Suivi des indicateurs de performance clés

Étant donné que le monitoring de l'IA New Relic est intégrée à l'agent APM Python, vous profitez du meilleur des deux mondes : des informations détaillées sur votre application et sur les réponses pilotées par l'IA. Ce monitoring à double niveau garantit que, pendant que vous gardez un œil sur l'état général de l'application, vous faites également le suivi des performances de l'IA elle-même. Jetons un œil aux métriques clés affichées dans New Relic.

  1. Accédez à votre compte New Relic et choisissez votre application dans la section APM et services.
  2. Sur l'écran suivant, vous verrez un tableau de bord qui présente les mesures de performances essentielles liées à votre application telles que le temps de transaction web, le score Apdex et le débit.
  1. En faisant défiler le dashboard, vous trouverez la section récapitulative des réponses de l'IA. C'est ici que vous pouvez trouver les métriques spécifiques à l'IA, telles que le temps de réponse, l'utilisation de jetons par réponse et le taux d'erreur qui vous donnent une vue d'ensemble des performances de votre chatbot.

Ces mesures sont essentielles pour identifier les goulots d'étranglement spécifiques à votre composant IA. En les surveillant, vous pouvez rapidement détecter si votre chatbot prend trop de temps à répondre, consomme plus de jetons que prévu ou rencontre des erreurs dans certains types d'interactions.

Identifier et résoudre les problèmes de performances

Il est temps d'approfondir les problèmes spécifiques affectant les performances de votre chatbot. Par exemple, la capture d'écran ci-dessus montre un temps de réponse et des erreurs considérablement élevés. Il s'agit d'indicateurs clairs de l'existence de goulots d'étranglement en matière de performances. Regardons ça de plus près.

Temps de réponse : identifier les transactions lentes

  1. Sur la page récapitulative de l'application, vous voyez les 5 transactions les plus lentes (par temps total). Sélectionnez la transaction la plus lente.

Dans la capture d'écran suivante, vous pouvez voir le span en cascade de la transaction ainsi qu'un graphique à secteurs qui montre les composants qui ont consommé le plus de temps pendant la transaction.

La durée de la trace est de 29,77 s, ce qui est assez élevé pour une application de chatbot. Vous pouvez également voir que l'appel d'API à OpenAI (api.openai.com - httpx/POST) a occupé 99,92 % du temps de réponse total, ce qui en fait la principale raison du temps de réponse globalement lent.

Vous pouvez également choisir de vous concentrer sur les spans lents comme indiqué dans l'image suivante :

Dans ce cas, étant donné que la latence est introduite par un appel d'API externe, une solution pour réduire la latence consiste à mettre en cache les réponses fréquemment demandées. Si votre chatbot répond fréquemment à des questions similaires (par exemple, des suggestions de restaurant), la mise en cache de ces réponses empêchera le système d'effectuer des appels répétés à OpenAI pour les mêmes données et de consommer des jetons supplémentaires. Une autre solution possible consiste à accéder à OpenAI via l'option d'unité de débit provisionnée (PTU) en fonction de votre cas d'utilisation.

Suivi et résolution des erreurs

Aucune application n'est exempte d'erreurs et dans les systèmes basés sur l'IA, des erreurs peuvent survenir pour diverses raisons, telles que des entrées non valides, des défaillances d'API ou des surcharges du système. Cependant, les erreurs ne sont pas toujours faciles à diagnostiquer. Par exemple, vous avez peut-être remarqué que le chatbot rencontre une erreur lors de la recherche de restaurants lorsque aucune cuisine n'est spécifiée.

Regardons de plus près ce qui se passe.

Accédez à la section Réponses de l'IA depuis le menu de l'entité dans New Relic. Ici, vous verrez des informations détaillées sur la manière dont votre chatbot interagit avec les utilisateurs, son efficacité de réponse et tous les problèmes ou erreurs qui doivent être résolus. Sélectionnez l'une des réponses où l'utilisateur demande des suggestions de restaurants.

Cela vous amène à la page Détails de la réponse ainsi qu'aux traces, logs et métadonnées associés.

Dans cette vue, vous verrez la durée de la demande, le nombre total de jetons, la saisie utilisateur et bien plus encore. Le volet Détails de la réponse est particulièrement important, car il fournit un contexte sur les actions du chatbot. Il spécifie les outils, le format et les questions des utilisateurs pour le chatbot et demande la réponse. Vous pouvez également examiner l'action et l'entrée d'action en réponse à la requête de l'utilisateur.

Les intervalles surlignés en rouge indiquent les appels où des erreurs ou des goulots d'étranglement de performance se sont produits. Dans ce cas, nous pouvons voir que les appels LangChain/invoke et LangChain/run ont rencontré un problème. Vous pouvez utiliser ces détails de trace pour déboguer l'erreur. Cliquez sur le span LangChain/invoke pour ouvrir la page de détails.

Cliquez sur Détails de l'erreur pour afficher les détails de l'erreur.

Dans la capture d'écran précédente, vous voyez l'erreur exacte qui s'est produite lors de la requête. Plus précisément, les détails de l'erreur pointent vers une erreur builtins:TypeError, où une fonction lambda a reçu un argument qu'elle n'attendait pas avec le message :"() takes 0 positional arguments but 1 was given”. Il s'agit d'un problème courant lorsque l'on travaille avec des fonctions qui ne prennent pas en compte les arguments entrants.

Maintenant que vous avez identifié le problème exact à l'aide des détails des traces et des erreurs, l'étape suivante consiste à revenir dans la code base et à ajuster la fonction Lambda qui gère cette demande. Dans ce cas, LangChain appelle la fonction search_top_restaurants avec l'entrée None supplémentaire. Modifiez search_top_restaurants pour tenir compte de cet argument supplémentaire.

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)

Vous devrez également modifier les outils LangChain pour tenir compte de cet argument.

 Outil(name="search_top_restaurants", func=lambda _: search_top_restaurants(flattened_data), description="Utilisez cet outil lorsque l'utilisateur souhaite trouver des restaurants sans spécifier de cuisine particulière."),

Une fois le correctif appliqué, redémarrez votre application et vérifiez si votre application fonctionne désormais comme prévu.

Surveillance de l'utilisation des jetons et optimisation

Dans la section Résumé de votre application de chatbot, comme indiqué dans l'image suivante, vous pouvez également voir l'utilisation des jetons pour l'application de chatbot Relicstaurants.

Le p99 (99e percentile) pour les jetons est indiqué comme étant 1822, tandis que l'utilisation moyenne des jetons par demande est d'environ 579 jetons pour 28 demandes. Notez qu'il existe une variation significative dans la consommation de jetons, les limites supérieures atteignant plus de 1 800 jetons, ce qui suggère que certaines demandes peuvent être très complexes, consommant plus de jetons que nécessaire.

Pour mieux comprendre les métriques d'utilisation des jetons, accédez à Réponses IA et choisissez n'importe quelle réponse avec une utilisation significative des jetons. Dans l'image suivante, la demande utilise environ 1 740 jetons.

Notez la répartition de l'utilisation des jetons, qui montre qu'une partie importante de l'utilisation totale des jetons, 1 386 jetons, est consommée lors de l'appel de l'outil search_restaurants_by_cuisine. Cela indique que la plupart des jetons sont utilisés pour récupérer des données (dans ce cas, les détails du restaurant de cuisine indienne), avec 284 jetons supplémentaires utilisés pour générer l'entrée et le contexte menant à cette action. Les 67 jetons restants sont alloués à la gestion d'autres éléments de la conversation, tels que le traitement de la saisie de l'action et le formatage de la réponse finale. Cela suggère que la complexité de la génération des données d'entrée et du contexte pour la prise de décision de LangChain contribue fortement à l'utilisation globale des jetons, et non à la sortie, qui est bien plus petite. Pour un chatbot comme Relicstaurants, cette utilisation des jetons peut sembler élevée et pourrait entraîner une latence et des coûts opérationnels plus élevés. Voici quelques-unes des façons dont vous pouvez optimiser l'utilisation des jetons dans votre application de chatbot.

  • Optimiser le traitement des entrées de LangChain : dans ce cas, LangChain semble trop compliquer l'entrée qu'il génère avant de la transmettre à OpenAI. La rationalisation de la logique de création de ces entrées ou la réduction de la verbosité des requêtes internes pourraient contribuer à réduire l'utilisation des jetons.
  • Passez à un modèle plus petit : envisagez de passer à un modèle moins cher comme le GPT-4o mini ou le GPT-3.5 Turbo. Bien que les modèles GPT-4 (comme GPT-4o) soient plus performants, ils sont également chers et ont tendance à consommer plus de jetons. Le GPT-4o mini ou le GPT-3.5 Turbo peuvent être suffisamment performants pour des tâches relativement simples comme les recommandations de restaurants.
  • Réglage des prompts : examinez la structure des prompts d'entrée générées. Y a-t-il des informations redondantes ? Y a-t-il des détails excessifs qui ne contribuent pas de manière significative au résultat ? La réduction des détails inutiles de l'invite de saisie réduira la consommation de jetons.
  • Monitorer l'utilisation des jetons : surveillez en permanence l'utilisation des jetons via la section Réponses de l'IA dans New Relic. Si l'utilisation du jeton p99 continue d'augmenter, cela pourrait indiquer des problèmes de complexité ou de verbosité des entrées. Vous pouvez monitorer les transactions individuelles (comme indiqué précédemment) pour identifier les requêtes qui consomment le plus de jetons.

En adoptant ces techniques d'optimisation, vous pouvez potentiellement réduire votre consommation de jetons et économiser sur les coûts opérationnels sans compromettre la qualité des réponses du chatbot.

Conclusion

Le monitoring et l'optimisation de votre chatbot sont essentiels pour une expérience utilisateur fluide et efficace. En intégrant New Relic à votre chatbot IA, vous obtenez des informations détaillées précieuses sur ses performances qui vous permettent de détecter et de résoudre rapidement les problèmes, d'optimiser l'utilisation des ressources et de garantir que votre chatbot reste réactif et fiable. À mesure que vous continuez à développer et à affiner votre chatbot, les données collectées via New Relic serviront de base aux optimisations futures, vous aidant ainsi à maintenir un niveau élevé de qualité de service à mesure que les demandes des utilisateurs augmentent.

Pour commencer, clonez le référentiel GitHub du chatbot Relicstaurants et suivez les étapes décrites dans ce blog. Bon codage !