Dokumentation

Code-Steps

Der code_step-Knoten führt benutzerdefinierte Logik in einer Starlark-Sandbox aus — frei editierbar, begrenzt durch eine Werkzeug-Allowlist.

Code-Steps (code_step)

Manche Logik ist zu spezifisch für einen compute-Operator, aber zu deterministisch, um einen LLM-Agent zu rechtfertigen: Abgleiche aus mehreren Quellen, maßgeschneiderte Geschäftsberechnungen, exotische Normalisierungen. Für diese Fälle führt der code_step-Knoten Code innerhalb einer Sandbox aus, ohne LLM-Aufruf und mit vorhersehbarer Ausgabe.

Der Code wird direkt bearbeitet, wie jedes andere Konfigurationsfeld: Kein Schlüssel von code_step ist gesperrt, und keine codespezifische Genehmigung ist erforderlich. Eine Änderung gilt ab der Veröffentlichung der Pipeline, bei der nächsten Ausführung.

Das Ausführungsmodell

code_step führt Starlark aus — einen für Isolation entworfenen Python-Dialekt: kein Dateisystemzugriff, kein Netzwerk, kein import, weder while-Schleife noch Rekursion, deterministisch, durch ein Zeitbudget begrenzt. Der Code sieht nur:

  • Die Eingaben, die Sie ihm explizit zuordnen (input_paths).
  • Die Werkzeuge, die Sie ihm aufzurufen erlauben (allowed_tools).

Alles andere ist außer Reichweite. Ein Code-Step kann nicht auf eine Ressource zugreifen, die Sie ihm nicht übergeben haben.

Konfiguration

FeldZweck
CodeDer ausgeführte Starlark-Quellcode, direkt bearbeitet.
Eingaben (input_paths)Variable → Selektor-Zuordnung. Nur diese Kontextschlüssel werden dem Code bereitgestellt. Interne Schlüssel (_*) werden abgelehnt.
Werkzeug-Allowlist (allowed_tools)Die über tool(name, args) aufrufbaren Werkzeuge, höchstens 50 Aufrufe pro Ausführung. Jeder Aufruf erbt die eigenen Schutzmechanismen des Werkzeugs (SSRF-Schutz, Abrechnung, Audit, Killswitch).
Ausgabeschlüssel (output_key)Wo das Ergebnis (JSON-serialisierbar) im Kontext abgelegt wird. Nachgelagerte Knoten lesen diesen Schlüssel. Leer = Ergebnis wird nicht gespeichert.
Ausführungsbudget (timeout_ms)Zeitobergrenze: standardmäßig 5 000 ms, maximal 30 000 ms. Ein Step, der sie überschreitet, schlägt fehl.

Wo die Sicherheitsgrenze liegt

Die Sprache ist nicht die Bedrohung: Starlark ist von Grund auf in einer Sandbox — von sich aus kann es weder eine Datei lesen, das Netzwerk erreichen noch endlos schleifen. Reine Berechnung ist harmlos.

Die einzige echte Fähigkeit ist die tool()-Brücke, und sie ist durch die zur Laufzeit durchgesetzte Allowlist begrenzt: Der Code kann nur die von Ihnen aufgelisteten Werkzeuge aufrufen (jeder andere Aufruf wird abgelehnt), und jedes trägt seine eigenen Schutzmechanismen (SSRF-Schutz, Abrechnung, Audit, Killswitch). Die Allowlist lässt sich ebenso frei bearbeiten wie der Code: Bei der Wahl der Werkzeuge legen Sie fest, was ein Step tun darf.

Eine leere Allowlist = keine Fähigkeit zu Seiteneffekten: Der Step berechnet lediglich über seine Eingaben und produziert eine Ausgabe.

Wann verwenden

  • Ja: deterministische Logik, die Sie präzise beschreiben können, die aber über die integrierten compute-Operationen hinausgeht (mehrere Listen abgleichen, zusammengesetzte Geschäftsregeln, proprietäre Formate).
  • Nein: ein einfacher Filter, eine Aggregation oder Projektion → ein compute-Operator genügt.
  • Nein: eine Aufgabe, die Urteilsvermögen oder offenes Schreiben erfordert → das ist ein Agent, kein Code.