← Blog
8 Min. Lesezeit

Feature Spotlight: AI Automations

AI Automations untersuchen wiederkehrende Fragen zur Datenqualität und zeigen, wie jedes Ergebnis zustande kommt.

Michele Vigilante
Michele Vigilante
Co-Founder & CEO
Die Übersicht der Beetl Automations mit einem Lieferantenstandort-Check im Status Healthy und zwei Lieferantenstamm-Checks im Status Needs attention. Alle drei laufen täglich um 08:00 Uhr.

Ich hatte schon länger über dieses Feature nachgedacht, weil wir die meisten Bausteine bereits hatten: Pipelines, eine Query Engine, Scheduling, Run History und einen AI Assistant, der Daten untersuchen kann. Aus diesen Bausteinen wollte ich einen täglichen Check bauen, der mir sagt, ob die Daten noch stimmen.

AI Automations sind zeitgesteuerte oder manuell gestartete Checks in Beetl. Man beschreibt in eigenen Worten, was Beetl abchecken soll. Beetl untersucht daraufhin die aktuellen Daten mit read-only SQL und meldet Healthy, Needs attention oder Failed.

Natürlich geht das bereits deterministisch. Man schreibt eine Query, erwartet, dass sie keine Zeilen zurückgibt, und löst einen Alert aus, sobald sie das doch tut. Für eine klar definierte Invariante ist das oft genau richtig.

Ein deterministischer Check deckt nur die Bedingungen ab, die in seiner Query stehen. Sobald Ausnahmen oder neue Werte aus den Quellsystemen auftauchen, muss die Query angepasst werden. Sonst werden ihre Ergebnisse zunehmend unbrauchbar.

Ich wollte einen Check, der selbstständiger arbeitet und die nächsten Untersuchungsschritte selbst wählen kann. Ich wollte nur das gewünschte Ergebnis beschreiben. Das System sollte sich anschließend das Schema ansehen, Datenstichproben ziehen, Queries schreiben und auffällige Ergebnisse genauer untersuchen. Alle Queries mussten read-only bleiben, und ich wollte jeden Schritt samt Ergebnis nachvollziehen können.

Aufbau der Pipeline für den Lieferantenstamm

In diesem Szenario integriert ein Fertigungskonzern ein gerade übernommenes Unternehmen. Die Zentrale nutzt SAP, das übernommene Unternehmen Dynamics 365. Beide Systeme enthalten Lieferanten und Rechnungen. Eine Zuordnungstabelle soll jede lokale Lieferanten-ID mit einer konzernweiten ID verbinden.

Dadurch entsteht ein überschaubares Stammdatenproblem. Die lokalen Datensätze müssen demselben Konzernlieferanten zugeordnet werden, auch wenn die beiden Systeme diesen Lieferanten unterschiedlich beschreiben.

Ich habe mit Lieferanten- und Rechnungsdaten aus SAP und Dynamics angefangen und eine Zuordnungstabelle zwischen lokalen Lieferanten und Konzernlieferanten ergänzt. Die Pipeline Supplier master review führt diese Quellen zusammen und markiert Lieferanten, die in den letzten 90 Tagen verwendet wurden.

Die deployte Pipeline Supplier master review mit fünf Quellen, vier SQL-Stufen, einem Silver-Ziel und der Variable activity_since.
Aus fünf Quelldatensätzen entsteht der Datensatz supplier_master_review. Über „Open image“ lässt sich die gesamte Pipeline anzeigen.

Das Ergebnis enthält 242 Zeilen, obwohl die Quellsysteme nur 240 Lieferantendatensätze enthalten. Zwei Lieferanten sind jeweils zwei Konzern-IDs zugeordnet, deshalb verdoppelt der Join diese beiden Datensätze. Ich habe diesen Widerspruch absichtlich drin gelassen. Genau solche Probleme sollte die Automation finden.

Ein einfacher Check der Standortdaten

Der erste Check war bewusst einfach:

Prüfe in supplier_master_review, ob Lieferanten, die in den letzten 90 Tagen verwendet wurden, kein Land oder keine Postleitzahl haben.

Das war alles. Ich musste weder eine Query schreiben noch einen Rule Builder konfigurieren. Ich habe beschrieben, was der Check untersuchen sollte, und festgelegt, wann er laufen sollte.

Die Automation Active supplier location completeness mit einem in eigenen Worten beschriebenen Check, einem täglichen Zeitplan für 08:00 Uhr und reinem Lesezugriff.
Der gewünschte Check ist in eigenen Worten beschrieben. Über „Open image“ lässt sich die vollständige Konfiguration mit Zeitplan anzeigen.

Dann habe ich den Check vor dem Speichern über „Test automation“ gestartet. Beetl untersuchte den Datensatz, führte die nötigen Queries aus und meldete Healthy.

Ein Test der Automation Active supplier location completeness mit dem Status Healthy, nachdem keine aktiven Lieferanten ohne Land oder Postleitzahl gefunden wurden.
Der Test ist Healthy, weil keinem aktiven Lieferanten Standortdaten fehlen.

Ich wusste schon, dass die 236 im Bericht zwei doppelte Zeilen enthielten. Beide Duplikate hatten vollständige Standortdaten. Für diesen Check waren sie egal, deshalb ließ ich die Zahl zunächst stehen.

Welche Lieferanten zählen?

Der nächste Check war breiter angelegt. Er sollte kürzlich verwendete Lieferanten finden, denen ein offizieller Firmenname, ein Land, eine Steuer-ID, Zahlungsbedingungen oder eine Einkaufskategorie fehlten. Außerdem wollte ich wissen, ob gesperrte Lieferanten weiterhin aktuelle Rechnungen hatten.

Die Automation Active supplier master completeness im Status Running, während Beetl die Daten untersucht.
Die gespeicherte Automation ist aktiv, hat nur Lesezugriff und läuft gerade.

Der Check meldete 17 Lieferanten mit unvollständigen oder widersprüchlichen Stammdaten.

Der Bericht behandelte erneut jede aktive Zeile als eigenen Lieferanten. Damit kam er auf 236 statt auf die korrekten 234.

Das read-only SQL und das gespeicherte Ergebnis mit 236 aktiven Zeilen und 234 eindeutigen aktiven Lieferanten.
Die Abfrage zeigt 236 aktive Zeilen und 234 eindeutige Lieferanten.

Zuerst habe ich die Anweisung ergänzt: Jeder Lieferant soll anhand von Quellsystem und Lieferanten-ID genau einmal gezählt werden. Der nächste Run kam trotzdem wieder auf 236.

Der zweite Bericht der Automation Active supplier master completeness zählt nach der präzisierten Anweisung weiterhin 236 aktive Lieferantenzeilen.
Auch der zweite Run zählte 236 aktive Zeilen. Über „Open image“ lässt sich der vollständige Bericht anzeigen.

Statt die Anweisung noch einmal umzuschreiben, habe ich dem nächsten Run die Query für eindeutige Lieferanten als Kontext mitgegeben.

Die Starting query Active suppliers wählt eindeutige Lieferantenfelder aus supplier_master_review aus, wenn recently_used den Wert true hat.
Die „Starting query“ definiert eindeutig, was hier als ein Lieferant zählt.

Beetl verwendet die „Starting query“ als festen Ausgangspunkt für die weitere Analyse. Damit bleiben exakte Definitionen in SQL, während die Automation alles Weitere selbst untersucht.

Gelöst! Der nächste Run meldete 234 aktive Lieferanten und dieselben 17 Ausnahmen. Dafür brauchte er nur noch fünf sichtbare Untersuchungsschritte statt zehn.

Der korrigierte Bericht der Automation Active supplier master completeness mit 234 aktiven Lieferanten und 17 betroffenen Lieferanten.
Mit der „Starting query“ zählt der Bericht 234 aktive Lieferanten und behält die 17 Ausnahmen bei. Über „Open image“ lässt sich der vollständige Bericht anzeigen.

Lieferantenidentitäten über mehrere Runs vergleichen

Mit dem dritten Check wollte ich feststellen, ob Lieferanten über SAP und Dynamics hinweg einheitlich identifiziert wurden. Dazu gehörten fehlende Konzernzuordnungen, mehrfach zugeordnete Lieferanten, widersprüchliche Steuer-IDs und wahrscheinliche Duplikate.

Der erste Run fand vier nicht zugeordnete Lieferanten, zwei Lieferanten mit mehreren Konzern-IDs, widersprüchliche Steuer-ID-Zuordnungen und acht Duplikatgruppen mit inkonsistenten Zuordnungen.

Der Identitäts-Check sollte auch zeigen, ob die Datenbereinigung vorankommt. Wenn „Use previous runs“ aktiviert ist, kann Beetl abgeschlossene Runs über Tool Calls abrufen. So landet nicht der gesamte Verlauf im Kontext des Modells. Die Automation entscheidet anhand der Anweisungen, welchen Run sie untersucht und welche Informationen sie abruft.

Die Automation Cross-system supplier identity conflicts mit aktivierter und hervorgehobener Einstellung Use previous runs.
Mit „Use previous runs“ kann die Automation bei Bedarf auf abgeschlossene Runs zurückgreifen. Über „Open image“ lässt sich die vollständige Konfiguration anzeigen.

Im nächsten Run hat Beetl zunächst das vorherige Ergebnis untersucht, die aktuellen Daten erneut abgefragt und gemeldet, dass sich nichts verändert hatte.

Die Untersuchung der Identitäts-Automation mit zwei Schritten zu früheren Runs und anschließenden aktuellen Checks der Lieferantenidentität samt Links zu Abfragen und Ergebnissen.
Der Run untersucht frühere Ergebnisse und prüft danach die aktuellen Daten mit sichtbaren Abfragen und Ergebnissen.

Damit ist mein kleines Experiment abgeschlossen, und mit dem Ergebnis bin ich sehr zufrieden. Beetl hat die aktuellen Daten anhand meiner Beschreibung untersucht, jeden Schritt nachvollziehbar gemacht, exakte Definitionen aus SQL übernommen und bei späteren Runs frühere Ergebnisse einbezogen.

Natürlich sollte man für präzise Invarianten weiterhin deterministische Checks verwenden. AI Automations helfen bei den offeneren Fragen: vage Anforderungen untersuchen, mit unbekannten Daten umgehen und aus den Ergebnissen eine genauer definierte Regel ableiten. Mit klaren Grenzen und transparenten Untersuchungsschritten sind LLMs meiner Meinung nach genau hier am nützlichsten für die Datenqualität.

Als Nächstes kommen Benachrichtigungen. Automations sollen die richtigen Personen über Slack, E-Mail, WhatsApp, Microsoft Teams oder einen generischen Webhook erreichen. Außerdem prüfen wir, wie wir Automation-Zustände für Prometheus-basiertes Alerting bereitstellen können, damit sie in bestehende Monitoring- und Incident-Response-Prozesse einfließen. Mehr dazu bald.

Häufige Fragen

Was ist eine AI Automation in Beetl?
Ein Datenqualitäts-Check, der nach Zeitplan oder manuell läuft. Sie beschreiben in eigenen Worten, was Beetl abchecken soll. Beetl untersucht daraufhin die aktuellen Daten im Workspace mit read-only SQL und meldet Healthy, Needs attention oder Failed. Dazu zeigt es die Abfragen und Daten, auf denen das Ergebnis beruht.
Kann eine Automation Quelldaten verändern?
Nein. Automations haben derzeit nur Lesezugriff.
Was ist eine „Starting query“?
Eine optionale SQL-Abfrage, mit der man der Automation eine genaue Definition oder einen festen Ausgangspunkt für ihre Analyse vorgibt.
Was bewirkt „Use previous runs“?
Damit kann die Automation abgeschlossene Runs über Tool Calls abrufen. Sie entscheidet selbst, welche früheren Ergebnisse relevant sind, und prüft danach die aktuellen Daten.

Möchten Sie das mit Ihren Daten sehen?

Kontakt aufnehmen