End-to-End-Evaluierung des großen Sprachmodells
In dieser Phase bewerten Sie Ihre Retrieval-Augmented Generation (RAG)-Lösung, indem Sie die erwarteten Benutzeraufforderungen untersuchen, die die abgerufenen Grundlageninformationen für das Sprachmodell bereitstellen. Davor müssen Sie die vorherigen Phasen abschließen. Sie müssen Ihre Testdokumente und -abfragen sammeln, Ihre Testdokumente in Blöcke aufteilen sowie die Blöcke anreichern und integrieren, einen Suchindex erstellen und eine Suchstrategie implementieren. Anschließend müssen Sie jede dieser Phasen auswerten und sicherstellen, dass die Ergebnisse Ihren Erwartungen entsprechen. An diesem Punkt sollten Sie überzeugt sein, dass Ihre Lösung relevante Hintergrunddaten für eine Benutzeranfrage zurückgibt.
Diese Basisdaten bilden den Kontext für die Aufforderung, die Sie an das Sprachmodell senden, um die Anfrage des Benutzers zu bearbeiten. Prompt Engineering-Strategien werden in diesem Artikel nicht behandelt. Dieser Artikel befasst sich mit der Evaluierung des entwickelten Aufrufs zum Sprachmodell aus der Perspektive der Grounding-Daten. In diesem Artikel werden allgemeine Auswertungsmetriken sowie spezifische Ähnlichkeits- und Auswertungsmetriken von Sprachmodellen behandelt, die Sie in Modellauswertungsberechnungen oder als eigenständige Metriken verwenden können.
Dieser Artikel bietet keine vollständige Liste mit Sprachmodellmetriken oder Ähnlichkeits- und Auswertungsmetriken. Die wichtigste Erkenntnis aus diesem Artikel ist, dass es verschiedene Metriken gibt, die jeweils unterschiedliche Anwendungsfälle haben. Nur Sie haben ein ganzheitliches Verständnis Ihrer Workload. Sie und Ihre Data Scientists müssen bestimmen, was Sie messen möchten und welche Metriken geeignet sind.
Dieser Artikel ist Teil einer Serie. Lesen Sie zuerst die Einführung.
Auswertungsmetriken für Sprachmodelle
Es gibt mehrere Metriken, die Sie verwenden sollten, um die Antwort des Sprachmodells auszuwerten, einschließlich Grundheit, Vollständigkeit, Auslastung, Relevanz und Korrektheit. Da das Gesamtziel des RAG-Musters darin besteht, relevante Daten als Kontext für ein Sprachmodell bereitzustellen, wenn eine Antwort generiert wird, sollten im Idealfall jede der oben genannten Metriken eine hohe Bewertung erzielen. Je nach Arbeitsauslastung müssen Sie jedoch möglicherweise eine Aufgabe der anderen vorziehen.
Wichtig
Sprachmodellantworten sind nicht deterministisch. Dies bedeutet, dass beim gleichen Prompt an ein Sprachmodell häufig unterschiedliche Ergebnisse zurückgegeben werden. Dies ist wichtig zu verstehen, wenn Sie ein Sprachmodell als Teil Ihres Auswertungsprozesses verwenden. Verwenden Sie beim Auswerten der Sprachmodellnutzung einen Zielbereich anstelle eines einzelnen Ziels.
Quellenübereinstimmung
Quellenübereinstimmung, manchmal auch als Wahrhaftigkeit bezeichnet, misst, ob die Antwort vollständig auf dem Kontext basiert. Es wird überprüft, dass die Antwort keine informationen verwendet, die nicht im Kontext vorhanden sind. Eine Metrik mit niedriger Fundiertheit weist darauf hin, dass das Sprachmodell möglicherweise ungenaue oder unsinnige Antworten gibt.
Berechnung der Quellenübereinstimmung
Verwenden Sie die folgenden Methoden, um die Quellenübereinstimmung der Antworten zu berechnen:
- Azure KI Inhaltssicherheit-basierte Quellenübereinstimmung ist ein benutzerdefiniertes Modell, das eine natürliche Sprachinferenz verwendet, um zu bestimmen, ob Behauptungen oder in diesem Fall Segmente auf dem Kontext im Quelldokument basieren.
- Große Sprachmodell-basierte Quellenübereinstimmung wird ein großes Sprachmodell verwendet, um die Quellenübereinstimmung der Antwort zu bestimmen.
- Ragas Wahrhaftigkeitsbibliothek.
- MLflow-Wahrhaftigkeitsberechnung.
Evaluieren der Quellenübereinstimmung
Eine geringe Quellenübereinstimmungs-Berechnung bedeutet, dass das Sprachmodell die Blöcke nicht als relevant einstuft. Sie sollten überlegen, ob Sie Ihrer Sammlung Daten hinzufügen, Ihre Chunking-Strategie oder Blockgröße anpassen oder Ihren Prompt optimieren müssen.
Vollständigkeit
Mit Vollständigkeit wird ermittelt, ob die Antwort alle Teile der Abfrage beantwortet. Dadurch verstehen Sie besser, ob die Blöcke im Kontext relevant, sich direkt auf die Abfrage beziehen und eine vollständige Antwort bereitstellen.
Vollständigkeit berechnen
Verwenden Sie die folgenden Methoden, um die Vollständigkeit der Antworten zu berechnen:
- KI-gesteuert: Prompt zum Abrufen des Scores.
- Ein Sprachmodell kann Ihnen dabei helfen, die Qualität seiner Antwort zu messen. Dafür benötigen Sie die Frage, den Kontext und die generierte Antwort. Die folgenden Schritte beschreiben den übergeordneten Prozess:
- Verwenden Sie das Sprachmodell, um die Frage umzuformulieren, zusammenzufassen oder zu vereinfachen. In diesem Schritt wird die Absicht identifiziert.
- Bitten Sie das Modell zu überprüfen, ob die Absicht oder die Antwort darauf in den abgerufenen Dokumenten enthalten ist oder daraus abgeleitet werden kann. Die Antwort kann bei jedem Dokument „Ja“ oder „Neinׅ“ lauten. Antworten, die mit „Ja“ beginnen, geben an, dass die abgerufenen Dokumente für die Absicht oder Antwort auf die Absicht relevant sind.
- Berechnen Sie das Verhältnis der Absichten, die eine Antwort beginnend mit „Ja“ aufweisen.
- Quadrieren Sie das Ergebnis, um die Fehler hervorzuheben.
Vollständigkeit bewerten
Wenn die Vollständigkeit niedrig ist, beginnen Sie damit, sie zu erhöhen, indem Sie Ihr Einbettungsmodell auswerten. Vergleichen Sie das Vokabular in Ihrem Inhalt mit dem Vokabular in Ihrem Einbettungsmodell. Ermitteln Sie, ob Sie ein domänenspezifisches Einbettungsmodell benötigen oder ein vorhandenes Modell optimieren sollten. Der nächste Schritt besteht darin, Ihre Chunking-Strategie zu bewerten. Wenn Sie Blöcke mit fester Größe verwenden, sollten Sie die Blockgröße erhöhen. Sie können auch auswerten, ob Ihre Testdaten über genügend Daten verfügen, um die Frage vollständig zu beantworten.
Nutzung
Verwendung misst den Umfang, in dem die Antwort aus Informationen aus den Blöcken im Kontext besteht. Ziel ist es, den Umfang zu bestimmen, in dem jeder Block Teil der Antwort ist. Wenn die Verwertung niedrig ist, weist dies darauf hin, dass Ihre Ergebnisse für die Abfrage möglicherweise nicht relevant sind. Sie sollten neben der Vollständigkeit auch die Verwendung bewerten.
Berechne die Auslastung
Verwenden Sie ein Sprachmodell, um den Grad der Nutzung zu berechnen. Sie können die Antwort und den Kontext, der die Segmente enthält, an das Sprachmodell übergeben. Sie können das Sprachmodell anweisen, die Anzahl der Blöcke zu bestimmen, die die Antwort enthalten.
Bewertung der Auslastung
In der folgenden Tabelle finden Sie Anweisungen zum Bewerten der Vollständigkeit und Nutzung.
Hohe Verwertung | Niedrige Verwertung | |
---|---|---|
Hohe Vollständigkeit | Keine Aktion erforderlich. | In diesem Fall beantworten die zurückgegebenen Daten die Frage, geben aber auch irrelevante Blöcke zurück. Reduzieren Sie den Top-K-Parameterwert, um wahrscheinlichere oder deterministischere Ergebnisse zu erzielen. |
Geringe Vollständigkeit | In diesem Fall verwendet das Sprachmodell die von Ihnen bereitgestellten Blöcke, aber sie adressieren die Frage nicht vollständig. Führen Sie die folgenden Schritte aus:
|
In diesem Fall beantworten die zurückgegebenen Daten die Frage nicht vollständig, und die von Ihnen bereitgestellten Blöcke werden nicht vollständig genutzt. Führen Sie die folgenden Schritte aus:
|
Relevance
Mit Relevanz wird ermittelt, inwiefern die Antwort des Sprachmodells für die Abfrage relevant ist und sich darauf bezieht.
Relevanz berechnen
Verwenden Sie die folgenden Methoden, um die Relevanz der Antworten zu berechnen:
Hinweis
Sie können die Relevanz über das Azure AI Foundry-Portal oder anhand der Anweisungen in diesem Artikel selbst berechnen.
Relevanz bewerten
Wenn die Relevanz niedrig ist, gehen Sie folgendermaßen vor:
- Stellen Sie sicher, dass die für das Sprachmodell bereitgestellten Blöcke relevant sind.
- Bestimmen Sie, ob relevante, nutzbare Abschnitte nicht zurückgegeben werden. Wenn Sie diese Datenblöcke entdecken, bewerten Sie Ihr Einbettungsmodell.
- Wenn keine geeigneten Blöcke vorhanden sind, überprüfen Sie, ob relevante Daten vorhanden sind. Wenn dies der Fall ist, bewerten Sie Ihre Chunking-Strategie.
- Wenn relevante Blöcke zurückgegeben werden, bewerten Sie den Prompt.
Die Bewertungsergebnisse von Methoden wie Vollständigkeit der Ausgabe sollten dem Relevanzbewertungsergebnis ähneln.
Korrektheit
Korrektheit misst den Grad, in dem die Antwort korrekt und sachlich ist.
Korrektheit berechnen
Es gibt mehrere Möglichkeiten, die Korrektheit zu bewerten, einschließlich:
- Sprachmodell – Verwenden Sie ein Sprachmodell, um die Korrektheit zu berechnen. Sie können die Antwort an das Sprachmodell übergeben, idealerweise ein anderes Sprachmodell als das, das zum Generieren des Ergebnisses verwendet wird. Sie können das Sprachmodell fragen, um festzustellen, ob die Antwort sachlich ist oder nicht.
- externe vertrauenswürdige Quelle – Verwenden Sie eine externe vertrauenswürdige Quelle, um die Richtigkeit der Antwort zu überprüfen. Abhängig von der API Ihrer vertrauenswürdigen Quelle können Sie die vertrauenswürdige Quelle allein oder mit einem Sprachmodell verwenden.
Korrektheit bewerten
Wenn die Korrektheit niedrig ist, führen Sie die folgenden Aufgaben aus:
- Stellen Sie sicher, dass die für das Sprachmodell bereitgestellten Datenblöcke sachlich korrekt sind und keine Datenverzerrungen vorliegen. Möglicherweise müssen Sie alle Probleme in den Quelldokumenten oder -inhalten beheben.
- Wenn die Blöcke sachlich korrekt sind, werten Sie Ihren Prompt aus.
- Bewerten Sie, ob im Modell inhärente Ungenauigkeiten vorhanden sind, die mit zusätzlichen fundierten Fakten oder Feinabstimmungen überwunden werden müssen.
Ähnlichkeits- und Evaluierungsmetriken
In Data Science können Sie Hunderte von Ähnlichkeits- und Auswertungsmetriken verwenden. Einige Algorithmen sind spezifisch für eine Domäne, z. B. Sprache-zu-Text- oder Sprache-zu-Sprachübersetzung-Algorithmen. Jeder Algorithmus verfügt über eine eindeutige Strategie für die Berechnung seiner Metrik.
Data Scientists ermitteln, was Sie messen möchten und welche Metrik oder Kombination von Metriken Sie dafür verwenden können. Bei der Sprachübersetzung überprüft die Zweisprachige Auswertungsmetrik (BLEU) beispielsweise, wie viele n-Gramme sowohl in der maschinellen als auch in der menschlichen Übersetzung vorkommen, um die Ähnlichkeit zu messen, ob dieselben Wörter in den Übersetzungen verwendet werden. Die Kosinus-Ähnlichkeit verwendet Einbettungen zwischen der Maschine und menschlichen Übersetzungen, um die semantische Ähnlichkeit zu messen. Wenn Sie eine hohe semantische Ähnlichkeit anstreben und ähnliche Wörter wie in der menschlichen Übersetzung verwenden möchten, benötigen Sie einen hohen BLEU-Wert und eine hohe Kosinus-Ähnlichkeit. Wenn nur die semantische Ähnlichkeit für Sie relevant ist, konzentrieren Sie sich auf die Kosinus-Ähnlichkeit.
Die folgende Liste enthält eine Auswahl allgemeiner Ähnlichkeits- und Auswertungsmetriken. Beachten Sie, dass die aufgelisteten Ähnlichkeitsmetriken als tokenbasiert, sequenzbasiert oder editierbasiert beschrieben werden. Diese Beschreibungen veranschaulichen, welchen Ansatz die Metriken zum Berechnen der Ähnlichkeit verwenden. Außerdem enthält die Liste drei Algorithmen zum Auswerten der Qualität der Textübersetzung von einer Sprache in die andere.
- Längste gemeinsame Teilzeichenfolge ist ein sequenzbasierter Algorithmus, der die längste gemeinsame Teilzeichenfolge zwischen zwei Zeichenfolgen findet. Der längste gemeinsame Teilzeichenfolgen-Prozentsatz akzeptiert die längste gemeinsame Teilzeichenfolge und dividiert sie durch die Anzahl der Zeichen der kleineren oder größeren Eingabezeichenfolge.
- Längste gemeinsame Teilfolge (LCS) ist ein sequenzbasierter Algorithmus, der die längste Teilfolge zwischen zwei Zeichenfolgen findet. LCS erfordert nicht, dass die Untersequenzen in aufeinander folgender Reihenfolge angeordnet sind.
- Kosinus-Ähnlichkeit ist ein tokenbasierter Algorithmus, der den Kosinus des Winkels zwischen den beiden Vektoren berechnet.
- Jaro-Winkler-Abstand ist ein bearbeitungsbasierter Algorithmus, der die Mindestanzahl der Schritte zählt, um eine Zeichenfolge in eine andere zu transformieren.
- Hamming-Abstand ist ein bearbeitungsbasierter Algorithmus, der die minimale Anzahl von Ersetzungen misst, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln.
- Jaccard-Index ist ein tokenbasierter Algorithmus, der Ähnlichkeit berechnet, indem die Schnittmenge von zwei Zeichenfolgen durch die Vereinigung dieser Zeichenfolgen geteilt wird.
- Levenshtein-Abstand ist ein bearbeitungsbasierter Algorithmus, der die Ähnlichkeit berechnet, indem er die minimale Anzahl von einzelnen Zeichenbearbeitungen bestimmt, die erforderlich sind, um eine Zeichenfolge in eine andere umzuwandeln.
- BLEU bewertet die Qualität von Texten, die durch maschinelle Übersetzung von einer Sprache in eine andere entstehen. BLEU berechnet die Überlappung von n-Grammen zwischen einer maschinellen Übersetzung und einer menschlichen Übersetzung, um diese Evaluierung vorzunehmen.
- ROUGE ist eine Metrik, die eine maschinelle Übersetzung von einer Sprache in die andere mit einer menschlichen Übersetzung vergleicht. Es gibt mehrere ROUGE-Varianten, die die Überlappung von n-Grammen, skip-Bigrammen oder längste häufige Untersequenzen verwenden.
- METEOR wertet die Qualität von Text aus, der das Ergebnis der maschinellen Übersetzung ist, indem genaue Übereinstimmungen, Übereinstimmungen nach Wortstamm, Synonymen, Paraphrasierung und Ausrichtung betrachtet werden.
Weitere Informationen zu allgemeinen Ähnlichkeits- und Auswertungsmetriken finden Sie in den folgenden Ressourcen:
Verwenden mehrerer Auswertungsmetriken zusammen
Sie sollten die Sprachmodellauswertungsmetriken zusammen verwenden, um ein besseres Verständnis dafür zu erhalten, wie gut Ihre RAG-Lösung funktioniert. Es folgen mehrere Beispiele für die gemeinsame Verwendung mehrerer Auswertungsmetriken.
Geerdetheit und Korrektheit
Die Metriken "Grundheit" und "Korrektheit" helfen zusammen zu ermitteln, ob das System den Kontext genau interpretiert und verwendet. Wenn die Grundheit hoch ist, aber die Korrektheit niedrig ist, bedeutet dies, dass das Sprachmodell den Kontext verwendet, aber eine falsche Antwort bereitstellt. Die falsche Antwort kann auf eine fehlerhafte Verwendung des Kontexts oder der Probleme mit den Quelldaten zurückzuführen sein. Ist die Fundiertheit beispielsweise 0,9 und die Korrektheit 0,4, bedeutet das, dass das System sich auf das richtige Quellmaterial bezieht, aber falsche Schlussfolgerungen zieht. Betrachten Sie eine Antwort, die besagt, dass "Einstein die Quantenmechanik entwickelte", basierend auf einem Kontext, der sowohl Einstein als auch die Quantenmechanik separat erwähnt. Diese Antwort ist geerdet, aber sachlich falsch.
Diese Metrikkombination ist eine Kombination, bei der die Priorisierung eines Werts gegenüber dem anderen für Ihre spezifische Arbeitsauslastung sehr wichtig sein könnte. Wenn z. B. die Quelldaten potenziell falsche Informationen nach Entwurf enthalten, und es kann wichtig sein, dass das System diese falschen Informationen in seinen Antworten aufbewahrt. In diesem Fall sollten Sie eine fundierte Antwort einer richtigen Antwort vorziehen. In anderen Fällen sollte Ihre Workload eher durch Kontextdaten überprüft werden, während die endgültige Richtigkeit weiterhin priorisiert wird.
Nutzung und Vollständigkeit
Auslastungs- und Vollständigkeitsmetriken helfen dabei, die Effektivität des Abrufsystems zu bewerten. Hohe Auslastung (0,9) mit geringer Vollständigkeit (0,3) gibt an, dass das System genaue, aber unvollständige Informationen abruft. Wenn sie beispielsweise nach Ursachen des Zweiten Weltkriegs gefragt werden, könnte das System perfekt Informationen über die Invasion Polens abrufen, aber andere entscheidende Faktoren verpassen. Dieses Szenario kann darauf hinweisen, dass es Blöcke mit relevanten Informationen gibt, die nicht als Teil des Kontexts verwendet wurden. Für dieses Szenario sollten Sie mehr Blöcke zurückgeben sowie Ihre Strategie der Blockrangfolge und Ihren Prompt auswerten.
Fundiertheit, Nutzung und Ähnlichkeit
Geerdetheits-, Nutzungs- und Ähnlichkeitsmetriken helfen zusammen zu identifizieren, wie gut das System die Wahrheit bei der Transformation von Informationen bewahrt. Hohe Fundiertheit (0,9) und Nutzung (0,9) bei geringer Ähnlichkeit (0,3) weisen darauf hin, dass das System die richtigen Grundlagendaten verwendet, sie aber schlecht umformuliert. Um dieses Szenario zu beheben, bewerten Sie Ihre Aufforderung. Ändern Sie die Eingabeaufforderung, und testen Sie die Ergebnisse.
Dokumentation, Berichterstellung und Aggregation
Sie sollten sowohl die für ein Experiment ausgewählten Hyperparameter als auch die resultierenden Auswertungsmetriken dokumentieren, damit Sie die Auswirkungen der Hyperparameter auf Ihre Ergebnisse verstehen. Sie sollten Hyperparameter und Ergebnisse auf granularen Ebenen dokumentieren, z. B. beim Einbetten oder bei der Suchauswertung, und auf Makroebene, z. B. beim Testen des gesamten Systems von Anfang bis Ende.
Während des Entwurfs und der Entwicklung können Sie die Hyperparameter und Ergebnisse möglicherweise manuell nachverfolgen. Das Ausführen mehrerer Auswertungen für das gesamte Testdokument und die Sammlung der Testabfragen kann jedoch Hunderte von Auswertungsläufen und Tausende von Ergebnissen umfassen. Sie sollten die Persistenz von Parametern und Ergebnissen für Ihre Evaluierungen automatisieren.
Nachdem Ihre Hyperparameter und Ergebnisse gespeichert worden sind, sollten Sie Diagramme und Grafiken erstellen, um zu visualisieren, wie sich die Hyperparameter auf die Metriken auswirken. Mithilfe der Visualisierung können Sie ermitteln, welche Auswahl zu Einbrüchen oder Spitzen in der Leistung führt.
Es ist wichtig zu verstehen, dass das Entwerfen und Auswerten Ihrer RAG-Lösung kein einmaliger Vorgang ist. Ihre Sammlung von Dokumenten ändert sich im Laufe der Zeit. Die Fragen, die Ihre Kunden stellen, ändern sich im Laufe der Zeit, und Ihr Verständnis der Arten dieser Fragen entwickelt sich, während Sie aus der Produktion lernen. Sie sollten diesen Prozess immer wieder überprüfen. Die konsistente Dokumentation früherer Evaluierungen ist für zukünftige Entwurfs- und Evaluierungsbemühungen von entscheidender Bedeutung.
RAG Experiment Accelerator
Diese Artikel führen Sie durch alle Phasen und Entwurfsentscheidungen, die am Entwerfen und Auswerten einer RAG-Lösung beteiligt sind. Die Artikel konzentrieren sich auf das, was Sie tun sollten, und nicht, wie Sie es tun sollten. Ein Entwicklungsteam, das mit den wichtigsten Kunden von Microsoft arbeitet, hat ein Tool namens RAG Experiment Accelerator entwickelt. RAG Experiment Accelerator ist ein hochmodernes Experimentierframework. Es wurde entwickelt, um die Entwicklung von RAG-Lösungen zu optimieren und zu fördern. Mit RAG Experiment Accelerator können in der Forschung und Entwicklung die kritischen Komponenten, die die RAG-Leistung vorantreiben, effizient untersucht und optimiert werden. Diese Innovation führt letztendlich zu einer genaueren und kohärenteren Textgenerierung.
RAG Experiment Accelerator verwendet eine Befehlszeilenschnittstelle, sodass Sie problemlos mit verschiedenen Einbettungsmodellen experimentieren, Chunking-Strategien optimieren und verschiedene Suchansätze auswerten können, um das volle Potenzial Ihres RAG-Systems auszuschöpfen. Dadurch können Sie sich auf die Kernaspekte der RAG-Entwicklung konzentrieren, indem Sie eine einfache Konfiguration für die Hyperparameteroptimierung verwenden.
Das Framework bietet außerdem umfassende Unterstützung für die Sprachmodellkonfiguration. Diese Unterstützung hilft Ihnen dabei, das perfekte Gleichgewicht zwischen Modellkomplexität und Generierungsqualität zu erzielen. Mit diesem Tool können Sie den Experimentierprozess optimieren, Zeit sparen und die Leistung Ihrer RAG-Modelle erheblich verbessern.
RAG mit Vision Application Framework
Ein Großteil der Anweisungen in diesem Artikel zur Arbeit mit Medien in Ihrer RAG-Lösung stammt von einem anderen Entwicklungsteam, das mit den wichtigsten Kunden von Microsoft zusammenarbeitet. Dieses Team schrieb ein Framework namens RAG mit Vision Application Framework. Dieses Framework bietet eine Python-basierte RAG-Pipeline, die sowohl Text- als auch Bildinhalte aus MHTML-Dokumenten verarbeitet.
Das Framework lädt, zerlegt und bereichert Text und Bilder aus MHTML-Dateien. Anschließend werden die Datenabschnitte in Azure KI-Suche eingelesen. Das Framework setzt die Zwischenspeicherung zur Bildanreicherung um, um die Verarbeitung und die Kosteneffizienz zu verbessern. Das Framework umfasst auch die Bewertung als Teil der Pipeline.
Beitragende
Dieser Artikel wird von Microsoft gepflegt. Er wurde ursprünglich von folgenden Mitwirkenden geschrieben:
- Raouf Aliouat | Software Engineer II
- Rob Bagby | Principal Architecture Center Content Lead
- Paul Butler | Software Engineer
- Prabal Deb | Hauptsoftwareingenieur
- Soubhi Hadri | Senior Data Scientist
- Ritesh Modi | leitender Ingenieur
- Ryan Pfalz | Senior Technical Program Manager
- Mahdi Setayesh | Haupt-Softwareentwickler
- Randy Thurman | Leitender KI-Cloud-Lösungsarchitekt