Blog

Kundenerfolge und Neues direkt aus der Werkstatt

Entdecken Sie in diesen Fallstudien von info/matik, wie wir unseren Kunden das Leben erleichtert haben, und was uns und die Technikwelt gerade begeistert.

KLAUS der KI Assistent: Mit Daten sprechen - EF Core, Semantic Kernel und OpenAI

Vorschaubild

Problemstellung

Dieses Projekt entstand aus wiederkehrenden Fragen in Daten‑ und Management‑Reviews. Selbst sehr gute Dashboards lassen Anschlussfragen offen. Anstatt immer neue Visualisierungen zu bauen, sollte eine natürliche Unterhaltung mit den eigenen Daten möglich werden – direkt dort, wo die Daten leben. Teams & Manager wollten frei Fragen stellen und Antworten in natürlicher Sprache, als Tabelle oder als Diagramm erhalten. Klassische BI‑Wege sind dafür zu starr oder zu langsam. Ziel war eine Lösung, die Fachsprache versteht, das tatsächliche Datenmodell respektiert und sicher innerhalb der bestehenden Infrastruktur arbeitet.

Lösungsbeschreibung

Als Antwort auf diese Fragen haben wir KLAUS entwickelt. KLAUS ist ein Chatbot, der mit den Daten spricht – nicht mit einer Kopie, sondern eng an EF Core angebunden. Nutzerinnen und Nutzer formulieren Fragen in Alltagssprache. Der Bot interpretiert die Absicht, kennt dank Beschreibungen die Bedeutung der Entitäten und Attribute, und erzeugt Antworten als Text, Tabelle oder Diagramm. Das System nutzt Semantic Kernel für die Orchestrierung und die OpenAI API als LLM. Der Zugriff auf Daten erfolgt über einen direkten Zugang zum SQL Server.

Technische Umsetzung

Das Domänenmodell in EF Core wurde um erklärende Metadaten ergänzt. Attribute beschreiben, was Felder bedeuten, welche Standardwerte gelten und welche Berechnungen zu beachten sind. Semantic Kernel koordiniert den Ablauf: Es plant die Teilschritte, ruft bei Bedarf Tools auf und hält den Gesprächskontext. Als Tools stehen Funktionen bereit, die auf dem EF‑Kontext aufsetzen und vordefinierte Abfragen, Aggregationen und Projektionen ausführen. So bleibt der Datenzugriff nachvollziehbar und sicher.

Zur Illustration ein minimiertes Beispiel für semantische Hinweise direkt am Modell:

[LlmExplanation(@"Article is a sample if Number starts with 'S-'.
Default name is NameInGerman.
Articles are sold in boxes; items = boxes * UnitsPerPackage.")]
public class Article
{
    public string Number { get; set; }
    public string NameInGerman { get; set; }

    [LlmExplanation("Number of individual items per package/box")]
    public decimal UnitsPerPackage { get; set; }
}

Semantic Kernel erhält einen System‑Prompt, der unter anderem festlegt, wie Antworten formatiert werden, und der das LLM ausdrücklich anweist, T‑SQL‑Abfragen zu generieren, wenn Rohdaten benötigt werden. Über Semantic Kernel stehen drei Werkzeuge bereit, die KLAUS kontrolliert nutzt: Tabellen können aufgelistet werden, Metadaten zu Tabellen werden abgefragt und T‑SQL‑Abfragen werden ausgeführt. Der Datenpfad bleibt dabei in EF Core verankert; die generierten Abfragen laufen über freigegebene Funktionen und Prüfungen, oder der Agent erzeugt parametrisierte LINQ‑Abfragen auf Repository‑Ebenen. Guardrails achten darauf, dass nur zugelassene Operationen möglich sind und dass sensible Daten ausgeschlossen bleiben.

Datenschutz

KLAUS kann an verschiedenste LLMs angebunden werden. Tests unsererseit ergaben, dass die Modelle von OpenAI wie GPT 5 wirklich gute Ergebnisse erzielten. Allerdings können auch die selbstgehosteten Modelle verwendet werden. GPT OSS 20B ist sehr brauchbar. Damit lassen sich Systeme aufsetzen, welche einen besseren Datenschutz garantieren, da die Daten die eigene Infrastruktur nicht verlassen müssen.

System‑Prompt (Beispiel, generalisiert)

Du bist Klaus, BI‑Assistent in einem Handelsunternehmen.

DATENABFRAGE:
- Es besteht eine Verbindung mit einem Microsoft SQL Server durch das Plugin 'sql'.
- Rate niemals Queries; frage zuerst alle Tabellen mit 'list_all_tables' ab.
- Hole für alle benötigten Tabellen Spalten und Zusatzinformationen über 'get_table_metadata(table_name)'.
- Erstelle eine T‑SQL‑Query und führe diese über 'execute_sql_query(query)' aus.
- Bei Fehlern: Query anpassen und erneut versuchen.
- Halluziniere nie! Alle Zahlen müssen auf Datenbankabfragen basieren.
- Nennt der Benutzer Namen, so verwende LIKE '%Eingabe%'.
- Frage den Benutzer nicht nach technischen Details; er kennt diese nicht.
- Führe SQL‑Abfragen immer aus und erkläre nicht, wie man sie abfragen könnte.

OUTPUT‑FORMAT:
- Kurz und prägnant ohne technische Details; keine Nennung von Spalten/Tabellen/Filtern.
- Sprache des Benutzers verwenden.
- Verwende HTML‑Snippets ohne <html>/<body> Tags; nutze <h4>, <p>, <table>, <ul>.
- Chart.js für Zeitreihen/Verteilungen (max. 7 Kategorien, Rest = "Andere").
    WICHTIG: DOM‑Elemente und Context‑Variablen müssen eindeutig sein.
    const ctx_<random> = document.getElementById('chart_<random>').getContext('2d');
    new Chart(ctx_<random>, {...})

KOMMUNIKATION:
- Keine erfundenen Daten – bei Unklarheit nachfragen.
- Interne DB‑Struktur und verwendete SQL‑Queries nicht erwähnen.
- Kurze Annahmen explizit nennen.
- Ton: analytisch, präzise, freundlich.

ALLGEMEINES:
- Bei Verkäufen/Umsatz: Netto aus Aufträgen verwenden.

NÜTZLICHE ABFRAGEN:
- Beispiel: Liste relevanter Entitäten; für Namenssuchen LIKE verwenden.

Bewertung

KLAUS macht Daten spontaner nutzbar. Fachfragen lassen sich in Minuten statt in Tagen klären, ohne dass ständig neue BI‑Artefakte gebaut werden müssen. Gleichzeitig bleiben Qualität, Sicherheit und Nachvollziehbarkeit erhalten, weil alle Zugriffe durch EF Core und die Domänenlogik laufen.

Ausblick

Nächste Schritte sind feinere Zugriffskonzepte pro Rolle, vordefinierte Analysepfade als „Shortcuts“ und ein Katalog getesteter Diagrammvorlagen. Außerdem sollen weitere Datenquellen über denselben Ansatz angebunden werden, ohne das Bediengefühl zu verändern. Ergänzend kann ein leichtgewichtiges RAG‑System eingeführt werden, das erfolgreiche Abfragen inklusive Kontext persistiert. Dadurch können ähnliche Fragen künftig schneller beantwortet werden und die Qualität der Ergebnisse steigt, weil bewährte Muster gezielt wiederverwendet werden.