4 points par GN⁺ 2024-10-25 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • Dans un environnement technologique en évolution rapide, maintenir des opérations d’astreinte robustes est essentiel pour garantir le bon fonctionnement des services
  • L’équipe de platform engineering rencontre des difficultés pour gérer efficacement les plannings d’astreinte, la réponse aux incidents, la communication dans les moments critiques et un support client solide dans les canaux Slack®
  • Présentation de Genie, un copilot d’astreinte qui utilise l’IA générative pour optimiser la communication avec les ingénieurs d’astreinte et la réponse aux questions

Regard plus détaillé : problème et motivation

  • Chez Uber, différentes équipes comme l’équipe Michelangelo disposent de canaux de support Slack où les utilisateurs internes peuvent demander de l’aide
  • En moyenne, 45 000 questions y sont posées chaque mois
  • Le volume élevé de questions et les longs délais de réponse réduisent la productivité des utilisateurs comme des ingénieurs d’astreinte

Un processus fastidieux

  • En général, lorsqu’un utilisateur pose une question dans un canal Slack, il doit attendre la réponse d’un ingénieur d’astreinte
  • L’ingénieur d’astreinte répond à la question initiale de l’utilisateur ou demande plus de détails
  • L’utilisateur peut alors poser des questions de suivi, demander davantage de précisions ou fournir des informations supplémentaires
  • Une nouvelle attente de la réponse de l’ingénieur d’astreinte s’ensuit
  • Après plusieurs allers-retours, la question de l’utilisateur est résolue

Difficulté à trouver l’information

  • De nombreuses questions pourraient être résolues en consultant la documentation existante, mais comme l’information est dispersée entre le wiki interne d’Uber appelé Engwiki, son Stack Overflow interne et d’autres emplacements, il est difficile de trouver une réponse précise
  • En conséquence, les utilisateurs reposent souvent les mêmes questions, ce qui entraîne une forte demande de support d’astreinte sur des centaines de canaux Slack

Défis d’architecture

  • Pour construire ce copilot d’astreinte, le choix s’est posé entre affiner un modèle LLM ou utiliser la Retrieval-Augmented Generation (RAG)
  • Le fine-tuning nécessite des données sélectionnées avec soin, contenant des exemples variés et de haute qualité à partir desquels le LLM peut apprendre
  • Il faut aussi des ressources de calcul pour maintenir le modèle à jour avec de nouveaux exemples
  • À l’inverse, le RAG n’exige pas une grande variété d’exemples dès le départ
  • Cette approche a permis de réduire le délai de lancement du copilot, c’est donc celle qui a été retenue

La création du copilot d’astreinte a posé plusieurs défis, notamment la gestion des hallucinations, la protection des sources de données et l’amélioration de l’expérience utilisateur. Voici un aperçu de la manière dont chacun a été traité.

Concernant les hallucinations, l’accent a été mis sur les points suivants :

  • Exactitude des réponses : récupérer les connaissances pertinentes pour une question afin d’éviter que le moteur LLM ne génère des informations erronées ou trompeuses
  • Mécanismes de vérification : mettre en place des moyens de valider les réponses du copilot par rapport à des sources faisant autorité afin de réduire les risques d’hallucination
  • Apprentissage continu : permettre au copilot d’accéder aux données les plus récentes pour améliorer sa précision

Pour la sécurité des données, comme de nombreuses sources ne peuvent pas être exposées dans des canaux Slack, les sources collectées ont été choisies avec soin

Pour améliorer l’expérience utilisateur, le système a été conçu avec :

  • Une interface intuitive : une interface simple d’usage permettant aux utilisateurs d’interagir efficacement avec le copilot
  • Une boucle de feedback : un système permettant aux utilisateurs de donner leur avis sur les réponses afin d’améliorer en continu les performances du copilot

Ces défis ont été relevés pour développer un copilot d’astreinte fiable, convivial et sûr

Analyse approfondie de la structure

  • Regardons l’architecture de Genie, le copilot d’astreinte
  • En résumé, des sources de données internes comme le wiki interne d’Uber, son Stack Overflow interne et les documents d’exigences d’ingénierie sont scrapées, puis des vecteurs sont créés à partir de ces sources avec le modèle d’embedding d’OpenAI
  • Ces embeddings sont stockés dans une base de données vectorielle
  • Ensuite, lorsqu’un utilisateur publie une question dans un canal Slack, cette question est transformée en embedding
  • Le service recherche dans la base de données vectorielle les embeddings pertinents liés à la question
  • Les résultats indexés par embeddings servent ensuite de prompt pour le LLM afin d’obtenir une réponse

L’étape de préparation des données, d’embedding et de publication des artefacts pour le serving peut être généralisée en une application RAG utilisant Apache Spark™. Ces étapes communes constituent la base d’une application RAG

ETL

Préparation des données

  • L’application Spark récupère le contenu de chaque source de données via l’API Engwiki d’Uber ou l’API Uber Stack Overflow
  • Cette étape de préparation des données produit un DataFrame Spark
  • Le schéma contient une colonne avec les liens Engwiki et une autre avec le contenu d’Engwiki, les deux au format chaîne de caractères

Génération des embeddings

  • Une fois les données scrapées, les embeddings sont générés à l’aide du modèle d’embedding d’OpenAI puis envoyés vers Terrablob, le stockage Blob d’Uber
  • Les embeddings générés ne sont accessibles qu’à travers les canaux Slack spécifiques associés à l’espace Engwiki concerné
  • Le format de sortie est un DataFrame dont le schéma associe le contenu des chunks au vecteur correspondant pour chaque chunk
  • Le contenu du wiki interne d’Uber est découpé en chunks avec langchain et les embeddings sont générés par OpenAI via des UDF PySpark

Pusher

  • Illustration de la manière dont les vecteurs sont envoyés vers Terrablob
  • Présentation du mode de publication des vecteurs
  • Un job de bootstrap est déclenché pour collecter les données depuis les sources vers Sia
  • Sia est la solution interne de base de données vectorielle d’Uber
  • Deux jobs Spark sont ensuite déclenchés pour la construction et la fusion des index, puis collectent les données vers Terrablob
  • Toutes les feuilles synchronisent et téléchargent l’index de base et les snapshots stockés dans Terrablob
  • Lors de la recherche, les requêtes sont envoyées directement à chaque feuille

Service de connaissance

  • Genie dispose d’un service backend appelé Knowledge Service
  • Il convertit d’abord les requêtes entrantes en embeddings, puis récupère les chunks les plus pertinents dans la base de données vectorielle afin de répondre à chaque requête entrante

Suivi des coûts

  • Pour le suivi des coûts, lorsqu’un client Slack ou une autre plateforme appelle le Knowledge Service, un UUID est transmis à ce service
  • Le Knowledge Service transmet ensuite cet UUID au Michelangelo Gateway via le header de contexte
  • Comme Michelangelo Gateway est un service passthrough vers le LLM, il peut l’ajouter aux logs d’audit utilisés pour suivre les coûts associés à cet UUID

Évaluation des performances de Genie

Méthode de mesure

  • Les utilisateurs peuvent donner un feedback immédiat dans Slack en cliquant sur les boutons appropriés dans la réponse de Genie

  • Les options proposées aux utilisateurs sont les suivantes :

    • Résolu : la réponse résout complètement le problème
    • Utile : la réponse a été partiellement utile, mais l’utilisateur a encore besoin d’aide
    • Pas utile : la réponse est incorrecte ou non pertinente
    • Non pertinent : l’utilisateur a besoin du support d’astreinte et Genie ne peut pas l’aider, par exemple pour une code review
  • Lorsqu’un utilisateur laisse un feedback, le plugin Slack le récupère et diffuse le feedback ainsi que les métadonnées associées vers une table Hive à l’aide d’un topic Kafka dédié

  • Ces métriques sont ensuite visualisées dans un tableau de bord

Évaluation des performances

  • Les utilisateurs de Genie disposent d’une option pour exécuter des évaluations personnalisées
  • Ils peuvent évaluer les hallucinations, la pertinence des réponses ou toute autre métrique jugée importante pour leur cas d’usage
  • Cette évaluation peut servir à mieux ajuster tous les composants RAG concernés, comme la recherche et la génération

Le processus d’évaluation est un pipeline ETL distinct qui utilise des composants Michelangelo déjà existants. Le contexte et les réponses de Genie sont récupérés depuis Hive, puis joints à d’autres données pertinentes comme les métadonnées Slack et le feedback utilisateur. L’ensemble est traité puis transmis à Evaluator. Evaluator prend le prompt spécifié et exécute le LLM comme Judge. Les métriques définies sont extraites et incluses dans un rapport d’évaluation, que les utilisateurs peuvent consulter dans l’UI

Évaluation de la documentation

  • La récupération d’informations exactes dépend de la clarté et de la précision des documents sources
  • Si la qualité de la documentation elle-même est faible, même un LLM très performant ne peut pas produire de bons résultats
  • La capacité à évaluer la documentation et à proposer des recommandations concrètes pour en améliorer la qualité est donc essentielle à un système RAG efficace et performant

Présentation du workflow de l’application d’évaluation de documents. Une fois les données scrapées, les documents de la base de connaissances sont convertis en DataFrames Spark. Chaque ligne du DataFrame représente un document de la base de connaissances. Le LLM est ensuite invoqué comme Judge pour traiter l’évaluation. Un prompt d’évaluation personnalisé est utilisé pour alimenter le LLM. Le LLM renvoie un score d’évaluation, ainsi qu’une explication du score et des recommandations concrètes pour améliorer la qualité de chaque document. Toutes ces métriques sont publiées dans un rapport d’évaluation accessible aux utilisateurs via l’UI Michelangelo

Solutions apportées aux défis

  • Pour réduire les hallucinations, la manière d’envoyer au LLM les prompts issus de la base de données vectorielle a été modifiée
    • Pour tous les résultats obtenus depuis la base vectorielle, l’URL source correspondante a été explicitement ajoutée avec un contexte partiel
    • Le LLM a reçu la consigne de répondre uniquement à partir des différents sous-contextes fournis et de renvoyer les URL sources citées dans la réponse
    • L’objectif est de fournir des URL sources pour toutes les réponses
  • Afin d’éviter que des sources de données ne soient divulguées via Slack à des personnes qui ne devraient pas y accéder, ou qu’elles soient utilisées pour générer des embeddings avec OpenAI, Uber a présélectionné des sources largement accessibles à la plupart de ses ingénieurs et n’a autorisé que celles-ci pour la génération des embeddings
  • Pour maximiser la capacité de Genie à répondre aux questions, un nouveau mode d’interaction a été développé
    • Dans ce mode, les utilisateurs peuvent poser plus facilement des questions de suivi et sont incités à lire plus attentivement les réponses de Genie
    • Si Genie ne peut pas répondre à une question, l’utilisateur peut facilement faire remonter le problème vers le support d’astreinte

Dans ce nouveau mode d’interaction, lorsqu’un utilisateur pose une question, Genie répond avec des boutons d’actions pour les prochaines étapes. Grâce à ces boutons, l’utilisateur peut facilement poser une question de suivi, marquer la question comme résolue ou contacter un support humain

Résultats

  • Depuis son lancement en septembre 2023, Genie s’est étendu à 154 canaux Slack et a répondu à plus de 70 000 questions
  • Genie affiche un taux d’utilité de 48,9 %, signe d’une efficacité en progression
  • Depuis son lancement jusqu’à aujourd’hui, il aurait permis d’économiser 13 000 heures de travail d’ingénierie

Avenir

  • Genie est un bot Slack de pointe conçu pour simplifier la gestion de l’astreinte, optimiser la réponse aux incidents et améliorer la collaboration entre équipes
  • Développé avec un fort accent sur la simplicité et l’efficacité, Genie joue le rôle d’assistant complet et aide les équipes d’ingénierie à gérer sans friction leurs responsabilités d’astreinte
  • Ce copilot assistant d’astreinte peut transformer l’expérience globale de la manière dont les utilisateurs et les ingénieurs d’astreinte interagissent et collaborent dans les canaux Slack de chaque plateforme
  • Il peut aussi transformer l’expérience au sein de chaque produit, comme Michelangelo ou un IDE, en permettant aux utilisateurs de trouver de l’aide spécifique à un produit dans les canaux Slack dédiés ou directement dans le produit, sans attendre le support d’astreinte

Conclusion

  • Genie, le copilot assistant d’astreinte, révolutionne la façon dont les équipes d’ingénierie gèrent le travail d’astreinte
  • En favorisant la résolution automatique et en fournissant des analyses pertinentes, Genie permet aux équipes de gérer leurs responsabilités d’astreinte de manière efficace et efficiente

L’avis de GN⁺

  • Genie est un copilot d’astreinte innovant qui fait gagner du temps aux ingénieurs et améliore l’expérience utilisateur en répondant aux questions des utilisateurs dans les nombreux canaux Slack d’Uber
  • Le succès de Genie montre la puissance de la combinaison entre technologies de machine learning et expertise humaine. Il s’appuie sur de grands volumes de données et sur des LLM pour fournir des réponses précises et utiles aux questions
  • Cependant, Genie présente encore des limites et des marges d’amélioration. Le problème des hallucinations n’est pas totalement résolu et il peut parfois fournir des informations inexactes ou trompeuses. Un suivi continu et les retours utilisateurs sont nécessaires pour améliorer le système
  • Un autre point à considérer est la sécurité des données et la protection de la vie privée. Les données traitées par Genie peuvent être sensibles et confidentielles, ce qui rend indispensables un traitement sécurisé et un contrôle d’accès rigoureux
  • À l’avenir, Genie pourrait évoluer pour améliorer la qualité des réponses, intégrer davantage de sources de données et renforcer la sécurité. Il serait aussi possible d’étendre des copilots similaires à d’autres domaines métier
  • Du support client automatisé à l’aide à la vente, voire à l’assistance au code, les assistants alimentés par l’IA peuvent s’appliquer à de nombreuses tâches. Ces outils peuvent accroître la productivité des employés et améliorer l’expérience utilisateur
  • Dans l’ensemble, Genie constitue un exemple intéressant de la manière dont l’IA et l’expertise humaine peuvent conduire à de meilleures méthodes de travail et à un meilleur service client. Ces technologies vont continuer à évoluer et devraient avoir un impact majeur sur notre manière de travailler et d’interagir

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.