← Zurück zur Startseite
§ DOCUMENTATION
Richtlinien-Ausdrücke (CEL)
Verfassen Sie Durchsetzungsregeln in CEL – der Common Expression Language, die von Kubernetes Admission, GCP IAM, Envoy und Istio verwendet wird. Deterministisch, isoliert, kein I/O, kein Zugriff auf globale Host-Variablen.
§ 01
Wann eignet sich eine Ausdrucks-Richtlinie?
Ausdrucks-Richtlinien bilden die Mitte zwischen einem integrierten Richtlinientyp (der mit Execlave ausgeliefert wird) und einem benutzerdefinierten Validator (der Ihren eigenen Dienst aufruft). Verwenden Sie sie, wenn die Regel reine Geschäftslogik über den Anforderungskontext ist und keinen Zustand benötigt, den Execlave noch nicht enthält.
- Ausgabenlimits, die von Umgebung oder Agent abhängen.
- Werkzeug-Bereichsregeln, die von der Identität des Aufrufers abhängen.
- Metadatengesteuerte Zulassung / Ablehnung, bei der das SDK strukturierte Felder anhängt.
Für alles, das einen Datenbankzugriff oder einen externen API-Aufruf erfordert, verwenden Sie stattdessen einen benutzerdefinierten Validator.
§ 02
Kontextvariablen
Jeder Ausdruck wird gegen denselben strukturierten Kontext ausgewertet. Ausdrücke müssen letztlich einen booleschen Wert zurückgeben.
// Kontextvariablen, die jedem Ausdruck zur Verfügung stehen{ input: string, // Benutzer- / vorgelagerter Prompt output: string, // Modellantwort (nur bei phase="post") agentId: string, agentName: string, environment: string, // z. B. "production", "staging" tools: list<string>, // in der Anfrage deklarierte Werkzeuge metadata: map, // freie Metadaten aus dem SDK cost: double, // geschätzte / tatsächliche Kosten in USD orgId: string, now: int, // Unix-Epochensekunden (Serverzeit) phase: string // "pre" (Vor-Ausführung) | "post"}§ 03
Beispiele
# Jeden Produktions-Agenten mit geschätzten Kosten > 1,00 $ blockierencost > 1.0 && environment == "production" # Eskalieren, wenn ein sensibles Werkzeug angefordert wirdtools.exists(t, t == "payments.transfer") # Nur dem finance-assistant erlauben, Rückerstattungen auszustellenagentName == "finance-assistant" || !tools.exists(t, t == "refunds.issue") # Metadatengesteuertes Gate (SDK hängt userId an metadata an)metadata.userId == "u_banned"§ 04
Garantien
- Deterministisch und rein — kein Zugriff auf Uhr, Netzwerk, Dateisystem oder Umgebungsvariablen über den deklarierten Kontext hinaus.
- Beim Schreiben validiert — Ausdrücke werden während
POST /policiesundPATCH /policies/:idgeparst. Ungültige Syntax gibt HTTP 400 mit der Parser-Meldung unterfields["ruleDefinition.expression"]zurück. - Größenbegrenzt — Ausdrücke über 4 KB werden abgelehnt.
- Einmal kompiliert, gecacht — ein Parse-Cache für bis zu 500 kompilierte Ausdrücke wird pro Prozess vorgehalten.
- Durch Fehlermodus gesteuert — ein nicht-boolesches Ergebnis oder eine beim Schreiben erkannte Fehlkonfiguration wird übersprungen und protokolliert. Ein echter Laufzeitfehler bei der Auswertung delegiert an den
failure_modeder Richtlinie:fail_open(Standard) enthält sich, sodass andere Richtlinien der Anfrage unberührt bleiben, währendfail_closedden Fehler als Verletzung behandelt und durchsetzt. Eine fehlkonfigurierte Richtlinie kann den Anfragepfad im Standardmodus dennoch nicht zum Absturz bringen.
§ 05
Ergebnisse
| Ausdruck gibt zurück | Wirkung |
|---|---|
true | Verletzung — die Richtlinienaktion (block / warn / require_approval) wird angewendet. |
false | Keine Verletzung — die Durchsetzung fährt mit den verbleibenden Richtlinien fort. |
| nicht-boolescher Wert / Parse-Fehler | Richtlinie wird übersprungen und protokolliert. Andere Richtlinien sind nicht betroffen. |
| Laufzeitfehler bei der Auswertung | Delegiert an failure_mode — fail_open enthält sich (Standard), fail_closed setzt durch. |
§ 06
Eine Ausdrucks-Richtlinie erstellen
curl -X POST https://api.execlave.com/api/v1/policies \ -H "Authorization: Bearer $EXECLAVE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "cost-guardrail", "policyType": "expression", "severity": "high", "action": "block", "ruleDefinition": { "expression": "cost > 1.0 && environment == \"production\"", "message": "Estimated cost exceeds $1.00 in production" } }'