Dokumentation

Deterministische Operatoren

Aktionsknoten, die das LLM umgehen — HTTP, DB, Transformationen, Berechnungen.

Operatoren

Ein Operator ist ein Knoten, der eine deterministische Aktion ausführt: kein LLM, kein Zufall. Für eine gegebene Eingabe ist die Ausgabe vorhersehbar.

Warum sie verwenden

Jede Logik, die explizit geschrieben werden kann, sollte es auch. Ein LLM, das „eine Summe berechnet" oder „ein Datum formatiert", ist ein Anti-Muster: Es ist langsamer, teurer und kann Fehler machen.

Praktische Regel: Wenn Sie die Funktion in 5 Zeilen Python schreiben können, ist es ein Operator — kein Agent.

Verfügbare Typen

operator HTTP

Führt einen HTTP-Aufruf aus (REST, GraphQL). Konfiguration:

  • URL (mit Platzhaltern aus dem Kontext)
  • Methode, Header, Body
  • Authentifizierung: bearer, basic, api_key_header (benutzerdefinierter Header) oder oauth2 (siehe unten)
  • Zuordnung der Antwort zu Slots

operator DB

Führt eine Abfrage gegen eine in Administration → Datenbanken registrierte Datenbank aus. Unterstützt Postgres, MySQL, MongoDB und die interne betool-Datenbank für benutzerdefinierte Tabellen.

file_transform

Transformiert eine Datei. Integrierte Transformatoren:

  • Lesen (PDF mit OCR, DOCX, XLSX, CSV)
  • Chunking (nach Seite, nach Token-Chunk)
  • Konvertierung (HTML → Text, Markdown ↔ HTML)
  • Strukturextraktion (JSON aus einem Schema)

compute

Berechnungen und Aggregationen über Kontext-Slots:

  • Filter / Map / Reduce auf Listen
  • Statistiken Spalte für Spalte (count, total, pct)
  • Schema-Projektionen
  • Zusammengesetzte logische Bedingungen

payload_mapper

Stellt eine Ausgabe-Nutzlast aus Kontext-Slots zusammen. Nützlich zur Vorbereitung des Bodys eines nachgelagerten HTTP-Operators.

code_step

Wenn deterministische Logik über das hinausgeht, was compute bewältigen kann, führt ein Code-Step benutzerdefinierten Code in einer Sandbox aus — abgesichert durch menschliche Prüfung. Siehe Kontrollierte Code-Steps.

Authentifizierung & Secrets

Operatoren, die mit einem externen System kommunizieren (HTTP, DB), referenzieren ein in der Organisation registriertes Konto. Zugangsdaten sind innerhalb der Pipeline selbst niemals sichtbar — es wird nur ein Kontoname referenziert.

Dadurch erfordert die Rotation eines Passworts keine Änderungen an irgendeiner Pipeline.

Ausgehendes OAuth2 (client_credentials)

Für APIs, die ein OAuth2-Token erfordern (Enterprise-Cloud, ERP, Drittanbieter), unterstützt der HTTP-Operator den oauth2-Modus. Sie registrieren in der Organisation ein OAuth2-Zugangsdatumtoken_url, client_id, client_secret, scope — und der Knoten referenziert nur eine nicht sensible Kennung.

Zum Zeitpunkt des Aufrufs holt betool ein Token und verwendet es wieder, solange es gültig bleibt; es wird bei Ablauf lazy aktualisiert, ohne Hintergrundaufgabe. Das client_secret wird von der Administrations-API niemals zurückgegeben (nur ein has_secret-Indikator wird bereitgestellt), und das erhaltene Token wird als Authorization: Bearer … an die ausgehende Anfrage gesetzt.

Die Rotation des Secrets nach einer anbieterseitigen Rotation erfordert keine Pipeline-Änderungen: Der nächste Aufruf aktualisiert es automatisch.

Idempotenz

Jeder Operator, der einen Seiteneffekt erzeugt (HTTP POST, DB INSERT, E-Mail-Versand), muss auf der Zielseite auf Idempotenz ausgelegt sein. Empfohlene Praxis:

  • Fügen Sie einen idempotency_key in die Nutzlast ein (typischerweise exchange_id).
  • Prüfen Sie auf der Zielseite, ob der Schlüssel bereits verarbeitet wurde.

betool wiederholt einen fehlgeschlagenen Operator nicht automatisch: Es ist die Verantwortung Ihrer Pipeline, die Wiederholungsstrategie zu orchestrieren (Schleife + Bedingung).