4 Punkte von GN⁺ 2024-10-25 | Noch keine Kommentare. | Auf WhatsApp teilen
  • In einer sich schnell verändernden Technologielandschaft ist es entscheidend, einen leistungsfähigen On-Call-Betrieb aufrechtzuerhalten, um einen reibungslosen Servicebetrieb sicherzustellen
  • Das Platform-Engineering-Team hat Schwierigkeiten, On-Call-Pläne, Incident Response, Kommunikation in kritischen Momenten und starken Kundensupport in Slack®-Kanälen effizient zu verwalten
  • Vorgestellt wird Genie, ein On-Call-Copilot, der generative KI nutzt, um die Kommunikation mit On-Call-Ingenieur:innen und die Beantwortung von Fragen zu optimieren

Ein genauerer Blick: Problem und Motivation

  • Bei Uber haben verschiedene Teams wie das Michelangelo-Team Slack-Supportkanäle, in denen interne Nutzer:innen Hilfe anfordern können
  • In diesen Kanälen werden im Durchschnitt 45.000 Fragen pro Monat gestellt
  • Das hohe Fragevolumen und lange Wartezeiten auf Antworten verringern die Produktivität von Nutzer:innen und On-Call-Ingenieur:innen

Umständlicher Prozess

  • Wenn Nutzer:innen eine Frage in einem Slack-Kanal stellen, müssen sie in der Regel auf die Antwort einer On-Call-Ingenieurin oder eines On-Call-Ingenieurs warten
  • Die On-Call-Ingenieur:innen beantworten die erste Frage der Nutzer:innen oder bitten um weitere Details
  • Nutzer:innen können Folgefragen stellen, um mehr Klarheit bitten oder zusätzliche Informationen liefern
  • Dann entsteht erneut eine Situation, in der auf die Antwort der On-Call-Ingenieur:innen gewartet werden muss
  • Nach mehrfachem Hin und Her wird die Frage der Nutzer:innen schließlich gelöst

Informationen sind schwer zu finden

  • Viele Fragen lassen sich durch Verweis auf bestehende Dokumentation beantworten, aber Informationen sind über Ubers internes Wiki namens Engwiki, internes Stack Overflow und weitere Orte verteilt, sodass es schwierig ist, bestimmte Antworten zu finden
  • Infolgedessen stellen Nutzer:innen häufig dieselben Fragen wiederholt, was in Hunderten von Slack-Kanälen zu einer hohen Nachfrage nach On-Call-Support führt

Architektonische Herausforderungen

  • Um den On-Call-Copiloten zu bauen, musste entschieden werden, ob das LLM feinabgestimmt oder Retrieval-Augmented Generation (RAG) genutzt werden soll
  • Fine-Tuning erfordert kuratierte Daten mit hochwertigen und vielfältigen Beispielen, aus denen das LLM lernen kann
  • Außerdem werden Rechenressourcen benötigt, um das Modell mit neuen Beispielen aktuell zu halten
  • RAG hingegen benötigt nicht von Anfang an vielfältige Beispiele
  • Da dies die Time-to-Market des Copiloten verkürzte, fiel die Wahl für den Copiloten auf diesen Ansatz

Beim Aufbau des On-Call-Copiloten gab es mehrere Herausforderungen, darunter das Lösen von Halluzinationsproblemen, das Absichern von Datenquellen und die Verbesserung der User Experience. Im Folgenden wird skizziert, wie jede dieser Herausforderungen angegangen wurde.

Beim Thema Halluzinationen lag der Fokus auf folgenden Punkten:

  • Genauigkeit der Antworten: Relevantes Wissen zur Frage wird abgerufen, damit die LLM-Engine keine falschen oder irreführenden Informationen erzeugt
  • Verifikationsmechanismen: Es wurden Methoden implementiert, um Antworten des Copiloten anhand maßgeblicher Quellen zu prüfen und so die Wahrscheinlichkeit von Halluzinationen zu verringern
  • Kontinuierliches Lernen: Dem Copiloten wird Zugriff auf die aktuellsten Daten gegeben, um die Genauigkeit zu erhöhen

Für die Datensicherheit wurden die zu erfassenden Datenquellen sorgfältig ausgewählt, da es viele Datenquellen gibt, die nicht in Slack-Kanälen offengelegt werden dürfen

Zur Verbesserung der User Experience wurde Folgendes entworfen:

  • Intuitive Oberfläche: Es wurde eine einfach zu bedienende Oberfläche gestaltet, mit der Nutzer:innen effizient mit dem Copiloten interagieren können
  • Feedback-Schleife: Es wurde ein System geschaffen, mit dem Nutzer:innen Feedback zu Antworten geben können, um die Leistung des Copiloten kontinuierlich zu verbessern

Diese Herausforderungen wurden gelöst, um einen zuverlässigen, benutzerfreundlichen und sicheren On-Call-Copiloten zu entwickeln

Tiefenanalyse der Struktur

  • Es folgt ein Blick auf die Architektur von Genie, dem On-Call-Copiloten
  • Zusammengefasst werden interne Datenquellen wie Ubers internes Wiki, internes Stack Overflow und Engineering-Anforderungsdokumente gescrapt und mit dem OpenAI-Embedding-Modell in Vektoren umgewandelt
  • Diese Embeddings werden in einer Vektordatenbank gespeichert
  • Wenn Nutzer:innen dann eine Frage in einem Slack-Kanal posten, wird die Frage in ein Embedding umgewandelt
  • Der Service sucht in der Vektordatenbank nach relevanten Embeddings zur Frage
  • Die über Embeddings indizierten Ergebnisse werden als Prompt für das LLM verwendet, um eine Antwort zu erhalten

Die Schritte zum Pushen von Artefakten für Datenaufbereitung, Embeddings und Serving lassen sich als RAG-Anwendung mit Apache Spark™ verallgemeinern. Diese allgemeinen Schritte bilden die Grundlage einer RAG-Anwendung

ETL

Datenaufbereitung

  • Die Spark-App holt Inhalte aus jeder Datenquelle über Ubers Engwiki oder die Uber Stack Overflow API
  • In diesem Datenaufbereitungsschritt wird ein Spark-DataFrame ausgegeben
  • Das Schema enthält in einer Spalte den Engwiki-Link und in einer anderen Spalte den Inhalt aus Engwiki, beide im String-Format

Embedding-Erstellung

  • Nachdem die Daten gescrapt wurden, werden mit dem OpenAI-Embedding-Modell Embeddings erstellt und in Ubers Blob-Storage Terrablob gepusht
  • Auf die erzeugten Embeddings kann nur über bestimmte Slack-Kanäle zugegriffen werden, die dem jeweiligen Engwiki-Bereich zugeordnet sind
  • Das Ausgabeformat ist ein DataFrame mit einem Schema, das den Chunk-Inhalt dem jeweiligen Vektor dieses Chunks zuordnet
  • Inhalte aus Ubers internem Wiki werden mit langchain in Chunks aufgeteilt, und die Embeddings werden über eine PySpark-UDF mit OpenAI erzeugt

Pusher

  • Gezeigt wird, wie Vektoren nach Terrablob gepusht werden
  • Es wird gezeigt, wie die Vektoren gepusht werden
  • Ein Bootstrap-Job wird ausgelöst, um Daten aus den Datenquellen in Sia zu laden
  • Sia ist Ubers interne Vektordatenbank-Lösung
  • Anschließend werden zwei Spark-Jobs für Index-Build und Merge ausgelöst und sammeln Daten nach Terrablob
  • Alle Leafs synchronisieren und laden den Basisindex und Snapshots herunter, die in Terrablob gespeichert sind
  • Bei der Suche wird die Query direkt an jeden Leaf gesendet

Knowledge Service

  • Genie verfügt über einen Backend-Service namens Knowledge Service
  • Er wandelt eingehende Queries zunächst in Embeddings um, ruft dann die relevantesten Chunks aus der Vektordatenbank ab und beantwortet so Anfragen zu allen eingehenden Queries

Kostenverfolgung

  • Zur Kostenverfolgung wird eine UUID an den Knowledge Service übergeben, wenn der Slack-Client oder eine andere Plattform den Knowledge Service aufruft
  • Der Knowledge Service übergibt diese UUID dann über einen Context-Header an das Michelangelo Gateway
  • Das Michelangelo Gateway ist ein Passthrough-Service zum LLM und kann die UUID daher zu Audit-Logs hinzufügen, die zur Kostenverfolgung verwendet werden

Bewertung der Genie-Leistung

Messmethode

  • Nutzer:innen können direkt in Slack Feedback geben, indem sie in Genies Antwort auf entsprechende Buttons klicken

  • Den Nutzer:innen werden folgende Optionen zur Auswahl angeboten:

    • Gelöst: Die Antwort löst das Problem vollständig
    • Hilfreich: Die Antwort war teilweise hilfreich, aber die Nutzer:innen benötigen weitere Unterstützung
    • Nicht hilfreich: Die Antwort war falsch oder nicht relevant
    • Nicht relevant: Die Nutzer:innen benötigen On-Call-Support, und Genie kann nicht helfen, etwa bei einem Code Review
  • Wenn Nutzer:innen Feedback hinterlassen, nimmt das Slack-Plugin dieses auf und streamt das Feedback zusammen mit zugehörigen Metadaten über ein bestimmtes Kafka-Topic in eine Hive-Tabelle

  • Später werden diese Metriken in einem Dashboard visualisiert

Leistungsbewertung

  • Genie-Nutzer:innen erhalten die Möglichkeit, eigene Evaluierungen auszuführen
  • Nutzer:innen können Halluzinationen, Relevanz der Antworten oder andere Metriken bewerten, die sie für ihren Use Case wichtig finden
  • Diese Evaluierung kann genutzt werden, um alle relevanten RAG-Komponenten wie Retrieval und Generation besser abzustimmen

Der Evaluierungsprozess ist eine separate ETL-Pipeline, die bereits aufgebaute Michelangelo-Komponenten verwendet. Kontext und Antworten von Genie werden aus Hive abgerufen und mit weiteren relevanten Daten wie Slack-Metadaten und Nutzerfeedback verknüpft. Anschließend werden sie verarbeitet und an den Evaluator übergeben. Der Evaluator nimmt einen festgelegten Prompt und führt das LLM als Judge aus. Die angegebenen Metriken werden extrahiert und in den Evaluierungsbericht aufgenommen, auf den Nutzer:innen in der UI zugreifen können

Dokumentenbewertung

  • Präziser Informationsabruf hängt von der Klarheit und Genauigkeit der Quelldokumente ab
  • Wenn die Qualität der Dokumentation selbst niedrig ist, gibt es keinen Weg zu guter Leistung, egal wie gut das LLM arbeitet
  • Daher ist die Fähigkeit, Dokumente zu bewerten und umsetzbare Vorschläge zur Verbesserung der Dokumentationsqualität zu machen, essenziell für ein effizientes und wirksames RAG-System

Gezeigt wird der Workflow der App zur Dokumentenbewertung. Nachdem die Daten gescrapt wurden, werden die Dokumente der Wissensbasis in einen Spark-DataFrame umgewandelt. Jede Zeile des DataFrames steht für ein Dokument der Wissensbasis. Danach wird das LLM als Judge aufgerufen, um die Bewertung durchzuführen. Dabei wird ein benutzerdefinierter Evaluierungs-Prompt verwendet, um das LLM zu speisen. Das LLM gibt zusammen mit dem Bewertungsscore eine Erläuterung zum Score sowie umsetzbare Vorschläge zurück, wie die Qualität jedes Dokuments verbessert werden kann. Alle diese Metriken werden als Evaluierungsbericht veröffentlicht, auf den Nutzer:innen in der Michelangelo-UI zugreifen können

Lösungen für die Herausforderungen

  • Um Halluzinationen zu reduzieren, wurde geändert, wie Prompts aus der Vektordatenbank an das LLM gesendet werden
    • Für alle aus der Vektordatenbank erhaltenen Ergebnisse werden die jeweilige Source-URL und ein Teilkontext ausdrücklich hinzugefügt
    • Das LLM wird gebeten, Antworten nur auf Basis der verschiedenen bereitgestellten Teilkontexte zu geben und die Source-URLs zurückzugeben, auf die sich die Antwort stützt
    • Es wird versucht, für jede Antwort Source-URLs bereitzustellen
  • Um zu verhindern, dass bei der Embedding-Erzeugung mit OpenAI oder in Slack Datenquellen an Personen durchsickern, die keinen Zugriff auf wichtige Datenquellen haben, wurden Datenquellen vorab kuratiert, die den meisten Uber-Ingenieur:innen breit zugänglich sind, und nur diese Datenquellen für die Embedding-Erzeugung zugelassen
  • Um Genies Potenzial zur Beantwortung von Fragen zu maximieren, wurde ein neuer Interaktionsmodus entwickelt
    • In diesem Modus können Nutzer:innen bequemer Folgefragen stellen und werden dazu angehalten, Genies Antwort sorgfältiger zu lesen
    • Wenn Genie eine Frage nicht beantworten kann, können Nutzer:innen das Problem leicht an den On-Call-Support eskalieren

Im neuen Interaktionsmodus antwortet Genie auf eine Frage zusammen mit bereitgestellten Buttons für die nächsten Schritte. Über diese Buttons können Nutzer:innen leicht Folgefragen stellen, die Frage als gelöst markieren oder menschliche Unterstützung anfordern

Ergebnisse

  • Seit dem Start im September 2023 hat Genie seine Präsenz auf 154 Slack-Kanäle ausgeweitet und mehr als 70.000 Fragen beantwortet
  • Genie erreicht eine Hilfreichkeitsquote von 48,9 %, was zeigt, dass seine Wirksamkeit steigt
  • Seit dem Launch wurden schätzungsweise 13.000 Stunden Engineering-Zeit eingespart

Zukunft

  • Genie ist ein hochmoderner Slack-Bot, der entwickelt wurde, um das On-Call-Management zu vereinfachen, Incident Response zu optimieren und die Teamzusammenarbeit zu verbessern
  • Mit Fokus auf Einfachheit und Wirksamkeit entwickelt, fungiert Genie als umfassender Assistent und unterstützt Engineering-Teams dabei, ihre On-Call-Verantwortung reibungslos zu bewältigen
  • Dieser On-Call-Assistant-Copilot kann das gesamte Erlebnis verändern, wie Nutzer:innen und On-Call-Ingenieur:innen innerhalb der Slack-Kanäle jeder Plattform interagieren und zusammenarbeiten
  • Außerdem kann er das Erlebnis innerhalb jedes Produkts wie Michelangelo oder einer IDE verändern, sodass Nutzer:innen produktspezifische Hilfe in produktspezifischen Slack-Kanälen oder direkt im Produkt finden können, ohne auf den On-Call-Support zu warten

Fazit

  • Der On-Call-Assistant-Copilot Genie revolutioniert die Art und Weise, wie Engineering-Teams On-Call-Aufgaben verwalten
  • Durch die Förderung automatischer Problemlösung und die Bereitstellung aufschlussreicher Analysen unterstützt Genie Teams dabei, ihre On-Call-Verantwortung effizient und effektiv zu bewältigen

Meinung von GN⁺

  • Genie ist ein innovativer On-Call-Copilot, der in Ubers zahlreichen Slack-Kanälen Nutzerfragen beantwortet, dadurch Ingenieur:innen Zeit spart und die User Experience verbessert
  • Der Erfolg von Genie zeigt die starke Verbindung von Machine-Learning-Technologie und menschlicher Expertise. Es nutzt große Datenmengen und LLMs, um präzise und hilfreiche Antworten auf Fragen bereitzustellen
  • Dennoch hat Genie weiterhin Einschränkungen und Raum für Verbesserungen. Das Halluzinationsproblem ist nicht vollständig gelöst, und gelegentlich können ungenaue oder irreführende Informationen geliefert werden. Das System muss durch kontinuierliches Monitoring und Nutzerfeedback verbessert werden
  • Ein weiterer Punkt sind Datensicherheit und Datenschutz. Die von Genie verarbeiteten Daten können sensibel und vertraulich sein, daher sind sichere Verarbeitung und Zugriffskontrolle essenziell
  • In Zukunft könnte sich Genie in Richtung höherer Antwortqualität, Integration weiterer Datenquellen und stärkerer Sicherheit weiterentwickeln. Außerdem wäre es möglich, ähnliche Copiloten wie Genie auf andere Geschäftsbereiche auszuweiten
  • Von automatisiertem Kundensupport über Sales Enablement bis hin zu Coding-Unterstützung können KI-basierte Assistenten für verschiedene Aufgaben eingesetzt werden. Solche Tools können die Produktivität von Mitarbeitenden steigern und die User Experience verbessern
  • Insgesamt ist Genie ein interessantes Beispiel dafür, wie KI und menschliche Expertise zu besseren Arbeitsweisen und besserem Kundenservice führen können. Diese Technologien werden sich weiterentwickeln und voraussichtlich erheblichen Einfluss darauf haben, wie wir arbeiten und interagieren

Noch keine Kommentare.

Noch keine Kommentare.