Loading
Alireza Shokrani

Digital Architect

AI Solutions Engineer

Founder @ CoreBiz ERP

GenAI & RAG Specialist

Full-Stack Systems Developer

Alireza Shokrani

Digital Architect

AI Solutions Engineer

Founder @ CoreBiz ERP

GenAI & RAG Specialist

Full-Stack Systems Developer

Solution

Transformation statischer Unternehmensdaten in Entscheidungsmaschinen: Überbrückung von ERP-Workflows mit kontextbewussten KI-Copiloten

11. September 2026 KI-Engineering & Architektur
Transformation statischer Unternehmensdaten in Entscheidungsmaschinen: Überbrückung von ERP-Workflows mit kontextbewussten KI-Copiloten

Wie man die Integrationsschicht zwischen statischen Finanz-/Inventardaten und dynamischem KI-Reasoning aufbaut — wo natürlichsprachliche Prompts in validierte, sichere SQL/API-Aufrufe innerhalb komplexer organisatorischer Workflows übersetzt werden.

Einführung — Das ERP-Daten-Paradoxon

Enterprise-Resource-Planning-Systeme (ERP) enthalten die wertvollsten Daten des Unternehmens: Finanzhauptbücher, Inventaraufzeichnungen, Beschaffungshistorie, Kundentransaktionen. Dennoch sind diese Daten in statischen Formen gefangen — zugänglich über starre UI-Masken, vorgefertigte Berichte und SQL-Abfragen, die nur technisch geschulte Mitarbeiter schreiben können.

Das Ergebnis ist eine strukturelle Ineffizienz:

  • Entscheidungsträger benötigen Antworten, die Daten erfordern, auf die sie nicht direkt zugreifen können

  • Analysten verbringen Stunden mit dem Schreiben von Abfragen statt mit der Analyse von Ergebnissen

  • Die Daten existieren — aber sie handeln nicht. Sie liegen da und warten darauf, dass ein Mensch eine Geschäftsfrage in eine technische Abfrage übersetzt.

Dies ist die Lücke, die KI-Copiloten für ERP schließen sollen.

Aber die Lücke wird nicht geschlossen, indem man einfach ein LLM an eine Datenbank anschließt. Eine naive „Chat with your Data”-Implementierung ist im Unternehmenskontext eine Haftung. Die Engineering-Herausforderung ist die Integrationsschicht — die Middleware, die natürliche Sprache in validierte, sichere, auditierbare Aktionen innerhalb von Systemen übersetzt, in denen Fehler finanzielle und regulatorische Konsequenzen haben.

Dieser Artikel behandelt die Architektur dieser Schicht:

Von statischen Daten zu Entscheidungsmaschinen — wie man kontextbewusste KI-Copiloten aufbaut, die natürlichsprachliche Eingaben und ERP-Workflows sicher überbrücken.

Teil 1 — Warum „Chat with your Data” im Unternehmen scheitert

Die Demo ist verlockend: Man zeigt einem LLM eine Datenbank, stellt eine Frage, bekommt eine Antwort. Aber im ERP-Kontext scheitert naives Text-to-SQL aus vorhersehbaren, architektonischen Gründen.

Die Fehlermodi

FehlermodusKonsequenz
Schema-HalluzinationLLM erfindet Tabellen/Spalten, die nicht existieren → Abfrage scheitert
SchreiboperationenLLM generiert UPDATE/DELETE → Datenkorruption
BerechtigungsumgehungAbfrage liefert Daten, die der Benutzer nicht sehen darf
Unbegrenzte AusführungAbfrage scannt gesamte Tabellen → Datenbanksperre → Produktionsausfall
Kein Audit-TrailKann nicht erklären, wer was gefragt oder welche Daten zugegriffen hat
Prompt InjectionBösartige Eingabe manipuliert den Agenten zu unautorisierten Aktionen

Ein LLM ohne Leitplanken ist kein Copilot. Es ist ein unkontrollierter Akteur mit Datenbank-Anmeldeinformationen.

Die OWASP-Rahmung: LLM03 — Excessive Agency

Die OWASP Top 10 für LLM-Anwendungen 2026 hat Excessive Agency (LLM03) hervorgehoben, um das wachsende Risiko von KI-Systemen widerzuspiegeln, die auf Daten zugreifen und Aktionen ausführen können. Im ERP-Kontext ist dies nicht theoretisch — ein Copilot mit Schreibzugriff auf Finanzaufzeichnungen ist ein Hochrisiko-KI-System gemäß EU-KI-Gesetz.

Engineering-Implikation: Die Integrationsschicht muss mit der Annahme entworfen werden, dass das LLM versuchen wird, unautorisierte Aktionen auszuführen — und das System muss sie verhindern, nicht durch Prompts darauf vertrauen.

Teil 2 — Die sichere Architektur: Ebenen der Eindämmung

Die Produktionsarchitektur für ERP-KI-Copiloten erfordert Verteidigung in der Tiefe — mehrere Validierungsebenen zwischen der natürlichen Sprache des Benutzers und der Datenbank.

┌─────────────────────────────────────────────────────────────────────────────┐
│                         BENUTZEROBERFLÄCHEN-EBENE                           │
│              (Chat-Widget, natürlichsprachliche Eingabe)                    │
├─────────────────────────────────────────────────────────────────────────────┤
│                         INTENT- & ROUTING-EBENE                             │
│     (Abfrage klassifizieren: Nur-Lesen vs. Aktion, einfach vs. komplex)     │
├─────────────────────────────────────────────────────────────────────────────┤
│                         SCHEMA-KONTEXT-EBENE                                │
│      (Relevante Tabellen/Spalten abrufen — NICHT das gesamte Schema)        │
├─────────────────────────────────────────────────────────────────────────────┤
│                         LLM-GENERIERUNGS-EBENE                              │
│           (SQL/API-Aufruf aus Kontext + Frage generieren)                   │
├─────────────────────────────────────────────────────────────────────────────┤
│                         SICHERHEITS-VALIDIERUNGS-EBENE                      │
│    (SQL-Guard: Nur-SELECT, Schema-Prüfung, LIMIT-Injektion, Timeout)        │
├─────────────────────────────────────────────────────────────────────────────┤
│                         BERECHTIGUNGS-DURCHSETZUNGS-EBENE                   │
│           (Benutzerrolle → erlaubte Tabellen, Zeilen, Felder)               │
├─────────────────────────────────────────────────────────────────────────────┤
│                         AUSFÜHRUNGS-SANDBOX                                 │
│           (Nur-Lese-Verbindung, Zeilenlimits, Abfrage-Timeout)              │
├─────────────────────────────────────────────────────────────────────────────┤
│                         AUDIT & OBSERVABILITY                               │
│      (Jede Abfrage, jedes Ergebnis, jeder Benutzer — protokolliert)         │
└─────────────────────────────────────────────────────────────────────────────┘

Architekturprinzip: Das LLM ist eine Komponente in dieser Pipeline — nicht der Entscheider. Seine Ausgabe wird als nicht vertrauenswürdige Eingabe behandelt, bis sie durch deterministische Ebenen validiert wurde.

Teil 3 — Die SQL-Sicherheitsschicht: Nur-SELECT-Validierung

Die kritischste Sicherheitskontrolle ist die SQL-Abfrage-Validierung vor der Ausführung.

Der Nur-SELECT-Guard

Produktions-Text-to-SQL-Systeme erzwingen eine strikte Regel: nur Leseabfragen sind erlaubt.

Erlaubt:    SELECT ... FROM ...
Blockiert:  INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, TRUNCATE
Blockiert:  GRANT, REVOKE, EXEC, CALL
Blockiert:  Mehrere Anweisungen (Semikolon-getrennt)

Implementierungsmuster:

import sqlglot

def validate_query(sql: str) -> tuple[bool, str]:
    """SQL als einzelne SELECT-Anweisung validieren."""
    try:
        parsed = sqlglot.parse_one(sql)
    except Exception as e:
        return False, f"SQL-Parse-Fehler: {e}"
    
    # Anweisungstyp prüfen
    if not isinstance(parsed, sqlglot.exp.Select):
        return False, f"Nur SELECT-Anweisungen erlaubt. Erhalten: {type(parsed).__name__}"
    
    # Verbotene Schlüsselwörter im Roh-SQL prüfen
    forbidden = ['INSERT', 'UPDATE', 'DELETE', 'DROP', 'ALTER', 
                 'CREATE', 'TRUNCATE', 'GRANT', 'REVOKE']
    upper_sql = sql.upper()
    for kw in forbidden:
        if kw in upper_sql:
            return False, f"Verbotenes Schlüsselwort erkannt: {kw}"
    
    # LIMIT sicherstellen (injizieren, falls fehlend)
    if not parsed.args.get('limit'):
        parsed = parsed.limit(1000)  # Standard-Sicherheitslimit
    
    return True, parsed.sql()

Warum sqlglot: Das Parsen des SQL in einen AST — statt String-Matching — fängt obfuskierte Angriffe (Kommentare, Whitespace-Manipulation, Groß-/Kleinschreibung) ab, die regex-basierte Filter übersehen.

LIMIT-Injektion

Selbst SELECT-Abfragen können Schaden verursachen, wenn sie gesamte Tabellen scannen:

-- Benutzer fragt: "Zeige mir alle Rechnungen"
-- LLM generiert: SELECT * FROM invoices
-- Guard transformiert: SELECT * FROM invoices LIMIT 1000

Engineering-Begründung: Eine Abfrage, die 10 Millionen Zeilen zurückgibt, erschöpft Speicher, sättigt das Netzwerk und blockiert die Datenbank. LIMIT-Injektion ist eine harte Sicherheitsanforderung.

Ausführungs-Sandboxing

Die für KI-Abfragen verwendete Datenbankverbindung sollte schreibgeschützt und isoliert sein:

KontrolleImplementierung
VerbindungstypRead-Only-Replika oder Rolle mit Nur-SELECT-Privilegien
Statement-TimeoutSET statement_timeout = '5s' — lang laufende Abfragen abbrechen
ZeilenlimitMaximale Zeilen pro Abfrage
Ressourcen-IsolationSeparater Connection-Pool vom Anwendungsverkehr

Teil 4 — Schema-Kontext: Das Retrieval-Problem in Text-to-SQL

Das LLM kann kein valides SQL generieren, ohne das Schema zu kennen. Aber das gesamte Schema an das LLM zu übergeben, erzeugt zwei Probleme:

  • Token-Kosten — Unternehmens-ERP-Schemata können Hunderte von Tabellen haben

  • Genauigkeitsverschlechterung — irrelevante Tabellen verwirren das Modell

Schema-Linking via RAG

Die Lösung ist Schema-Retrieval — die dynamische Auswahl der relevanten Tabellen und Spalten für jede Abfrage:

Benutzerfrage: "Wie hoch ist der aktuelle Lagerbestand für SKU ZX-447?"

Schritt 1: Relevantes Schema abrufen
  → Tabellen: inventory, products, warehouses
  → Spalten: sku, quantity, warehouse_id, reorder_level

Schritt 2: Kontext für LLM aufbauen
  → "Verfügbare Tabellen: inventory(sku, quantity, warehouse_id), 
     products(sku, name, category), ..."

Schritt 3: LLM generiert SQL mit korrekten Tabellen-/Spaltennamen

Implementierung: Tabellen- und Spaltenbeschreibungen als Embeddings indexieren; Top-k relevante Schema-Elemente für jede Abfrage abrufen.

Das Knowledge-File-Muster

Produktionssysteme ergänzen Schema-Retrieval mit Domain-Wissen — Synonyme, Geschäftsbegriffe und Beispielabfragen:

# knowledge.yaml
synonyms:
  "Lagerbestand": "inventory.quantity"
  "Nachbestellpunkt": "inventory.reorder_level"
  "SKU": "products.sku"

example_queries:
  - question: "Wie hoch ist der Bestand für SKU X?"
    sql: "SELECT quantity FROM inventory WHERE sku = 'X'"

Engineering-Auswirkung: Die Knowledge-Datei überbrückt die semantische Lücke zwischen der Art, wie Geschäftsbenutzer sprechen, und der Struktur der Datenbank.

Teil 5 — Berechtigungs-Durchsetzung: Row-Level-Security für KI

Eine kritische — und oft übersehene — Anforderung: Der KI-Copilot muss dieselben Berechtigungen respektieren wie der Benutzer.

Das Berechtigungsproblem

Benutzer A (Vertriebsleiter): Kann alle Kundendaten sehen
Benutzer B (Vertriebsmitarbeiter): Kann nur seine zugewiesenen Kunden sehen
Benutzer C (Finanzen): Kann alle Finanzdaten sehen, keine Kunden-PII

Naiver Copilot: Führt dieselbe Abfrage für alle Benutzer aus
→ Datenleck

Rollenbewusste Query-Umschreibung

Die Integrationsschicht muss Berechtigungsfilter in jede Abfrage injizieren:

-- Benutzer fragt: "Zeige mir alle Bestellungen"
-- LLM generiert: SELECT * FROM orders
-- Berechtigungsebene schreibt um basierend auf Benutzerrolle:

-- Vertriebsmitarbeiter (user_id=42):
SELECT * FROM orders WHERE sales_rep_id = 42

-- Regionalleiter (region='EMEA'):
SELECT * FROM orders WHERE region = 'EMEA'

-- Admin:
SELECT * FROM orders

Implementierungsmuster:

  • Berechtigungszuordnungen definieren (Rolle → erlaubte Tabellen, Zeilenfilter, Spaltenmasken)

  • Vor Ausführung das LLM-generierte SQL parsen und WHERE-Klauseln injizieren

  • Für Spaltenebenen-Sicherheit sensible Spalten durch NULL oder maskierte Werte ersetzen

Feld-Whitelisting

Über Zeilenfilter hinaus verhindert Spaltenebenen-Zugriffskontrolle PII-Exposition:

Blockierte Spalten (pro Konfiguration):
  - password, api_key, token
  - ssn, tax_id, bank_account
  - salary (es sei denn HR-Rolle)

Die Berechtigungsebene validiert, dass keine blockierte Spalte im generierten SQL erscheint.

Teil 6 — Die Audit-Ebene: Compliance als Architektur

Gemäß EU-KI-Gesetz müssen KI-Systeme, die in Finanz- und Beschäftigungskontexten operieren, Audit-Logs führen, die eine nachträgliche Verifikation von Entscheidungen ermöglichen.

Die Audit-Anforderung

Für jede KI-generierte Abfrage muss das System protokollieren:

FeldZweck
BenutzeridentitätWer gefragt hat
Natürlichsprachlicher PromptWas gefragt wurde (roh)
Generiertes SQLWas ausgeführt wurde
ValidierungsergebnisWurde es blockiert? Warum?
BerechtigungskontextWelche Filter wurden angewendet
AusführungsergebnisZurückgegebene Zeilen, Ausführungszeit
ZeitstempelWann es geschah

Engineering-Begründung: In einem regulierten Kontext ist „die KI hat es gesagt” keine akzeptable Antwort. Das System muss die Reasoning-Kette rekonstruieren können.

Manipulationssichere Protokollierung

Für Hochrisikokontexte (Kreditentscheidungen, Beschäftigungsempfehlungen) sollten Logs kryptographisch signiert werden:

import hmac
import hashlib

def sign_audit_record(record: dict, secret: bytes) -> str:
    """HMAC-Signatur für Audit-Manipulationssicherheit generieren."""
    canonical = json.dumps(record, sort_keys=True)
    return hmac.new(secret, canonical.encode(), hashlib.sha256).hexdigest()

Warum HMAC: Stellt sicher, dass Audit-Aufzeichnungen nicht nachträglich ohne Erkennung geändert werden können — eine Anforderung für regulatorische Compliance.

Teil 7 — Agenten-Orchestrierung: Wenn Abfragen zu Aktionen werden

Nicht jede Frage ist eine einfache Leseoperation. Unternehmens-Copiloten müssen zunehmend mehrstufige Workflows ausführen:

Benutzer: "Bewerte die Angebote für RFQ 000012 und empfehle einen Lieferanten."

Dies erfordert:
  1. RFQ-Daten lesen (Retrieval)
  2. Lieferantenangebotsdaten lesen (Retrieval)
  3. Bewertungskriterien lesen (Retrieval)
  4. Jedes Angebot bewerten (Reasoning)
  5. Empfehlung generieren (Reasoning)
  6. Zur menschlichen Genehmigung vorlegen (HITL-Gate)
  7. Bestellung erstellen (Aktion — erfordert Genehmigung)

Das LangGraph-Muster für ERP-Agenten

LangGraph bietet die zustandsbehaftete Orchestrierung, die für mehrstufige ERP-Workflows erforderlich ist:

┌─────────────┐
│   Router    │ ← Abfragetyp klassifizieren
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Retriever  │ ← Relevanten Kontext abrufen
│  (Schema +  │
│   Daten)    │
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Reasoner   │ ← SQL / Plan generieren
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Validator  │ ← SQL-Guard + Berechtigungsprüfung
└──────┬──────┘
       │
       ├── BLOCKIERT → Fehler an Benutzer zurückgeben
       │
       ▼ (valid)
┌─────────────┐
│  Executor   │ ← Abfrage in Sandbox ausführen
└──────┬──────┘
       │
       ▼
┌─────────────┐
│  Formatter  │ ← Ergebnisse präsentieren
└─────────────┘

Human-in-the-Loop für Schreiboperationen

Für Aktionen, die Daten modifizieren (Rechnung erstellen, Inventar aktualisieren), ist ein menschliches Genehmigungs-Gate obligatorisch:

Agent schlägt Aktion vor: "Bestellung für 500 Einheiten von Lieferant X erstellen"
       │
       ▼
┌─────────────────┐
│  Menschliche    │ ← Benutzer muss explizit genehmigen
│  Überprüfung    │
│  (Approval-UI)  │
└────────┬────────┘
         │
    GENEHMIGT → Über ERP-API ausführen
    ABGELEHNT → Ablehnung protokollieren, keine Aktion

Engineering-Begründung: Das EU-KI-Gesetz verlangt menschliche Aufsicht für Hochrisiko-KI-Systeme. Das Genehmigungs-Gate ist kein UX-Feature — es ist eine Compliance-Anforderung.

Teil 8 — Die vollständige Integrationsarchitektur

┌─────────────────────────────────────────────────────────────────────────────┐
│                              ERP-SYSTEM                                     │
│  ┌─────────────────┐  ┌─────────────────┐  ┌─────────────────────────────┐ │
│  │  Finanz-DB      │  │  Inventar-DB    │  │  Geschäftslogik (APIs)      │ │
│  └────────┬────────┘  └────────┬────────┘  └──────────────┬──────────────┘ │
└───────────┼────────────────────┼──────────────────────────┼────────────────┘
            │                    │                          │
            ▼                    ▼                          ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         INTEGRATIONS-MIDDLEWARE                             │
│  ┌───────────────────────────────────────────────────────────────────────┐ │
│  │  SICHERHEITS-EBENE: SQL-Guard │ Berechtigungs-Injektor │ Audit        │ │
│  └───────────────────────────────────────────────────────────────────────┘ │
│  ┌───────────────────────────────────────────────────────────────────────┐ │
│  │  INTELLIGENZ-EBENE: Schema-Retriever │ LLM-Orchestrator │ Validator   │ │
│  └───────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                         KI-COPILOT-OBERFLÄCHE                               │
│              Chat-UI │ Approval-Gates │ Ergebnis-Präsentation               │
└─────────────────────────────────────────────────────────────────────────────┘
            │
            ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                              BENUTZER                                       │
│         Finanzen │ Betrieb │ Management │ Beschaffung                       │
└─────────────────────────────────────────────────────────────────────────────┘

Technologie-Stack (Referenz)

EbeneTechnologie-Optionen
OrchestrierungLangGraph, LangChain
SQL-Validierungsqlglot (AST-Parsing)
Schema-Retrievalpgvector, Elasticsearch
LLMOpenAI, Anthropic, lokal (vLLM)
AuditPostgreSQL, HMAC-Signierung
ERP-IntegrationREST-APIs, MCP-Server

Teil 9 — Wann diese Architektur verwendet werden sollte (und wann nicht)

ERP-KI-Copilot mit dieser Architektur bauen, wenn:

  • ✅ Benutzer natürlichsprachlichen Zugriff auf ERP-Daten benötigen

  • ✅ Sicherheit und Auditierbarkeit nicht verhandelbar sind

  • ✅ Das ERP wohldefinierte APIs oder Datenbankzugriff hat

  • ✅ Rollenbasierte Berechtigungen durchgesetzt werden müssen

  • ✅ Compliance (EU-KI-Gesetz, SOX, DSGVO) gilt

  • ✅ Die Organisation Engineering-Kapazität zur Wartung der Middleware hat

NICHT bauen, wenn:

  • ❌ Das ERP bereits ausreichende Berichte für Benutzerbedürfnisse bietet

  • ❌ Kein dediziertes Engineering-Team zur Wartung der Sicherheitsebenen existiert

  • ❌ Der Anwendungsfall risikoreiche autonome Entscheidungen ohne menschliche Aufsicht beinhaltet

  • ❌ Latenzanforderungen LLM-Inferenz + Validierung nicht zulassen

Ein Copilot ohne Sicherheitsebenen ist kein Assistent. Er ist eine Haftung mit Datenbank-Anmeldeinformationen.


Fazit — Von der Datenspeicherung zur Entscheidungsinfrastruktur

ERP-Systeme speichern Daten. Sie generieren nicht von sich aus Entscheidungen.

Die Integrationsschicht zwischen statischen Daten und dynamischem KI-Reasoning ist der Ort, an dem der Wert geschaffen — oder das Risiko eingeführt wird. Der Unterschied ist architektonische Disziplin:

  • SQL-Sicherheit ist nicht optional — sie ist die Grenze zwischen einem Copilot und einer Bedrohung

  • Berechtigungs-Durchsetzung ist kein Feature — sie ist eine Sicherheitsanforderung

  • Audit-Protokollierung ist kein Overhead — sie ist Compliance-Infrastruktur

  • Menschliche Aufsicht ist keine Reibung — sie ist die rechtliche Grundlage für den Einsatz

Das ERP kennt die Antwort bereits. Die Aufgabe des Copiloten ist es, die richtige Frage zu stellen — sicher, auditierbar und innerhalb der Grenzen dessen, was der Benutzer wissen darf.

Hinweis des Autors

Dieser Artikel spiegelt architektonische Muster wider, die bei der Entwicklung von Binesh AI — einem benutzerdefinierten KI-Framework mit RAG-Pipelines, Agenten-Orchestrierung und Enterprise-Integrationsschichten — entwickelt wurden. Für die Zusammenarbeit an ERP-KI-Copilot-Architektur erreichen Sie mich über die Kontaktseite.

Tags:
Write a comment