1. Das Streaming-LLM-Content-Filter-Problem
Ein Output-Stage-Guardrail prüft die Antwort des Modells. Bei einem nicht-streamenden Request ist das unkompliziert: Das Gateway hat die vollständige Completion, bevor ein einziges Byte zurückkehrt, sodass es sie sauber blockieren, maskieren oder durchlassen kann. Streaming kehrt das um. Die Antwort kommt als Folge von SSE-Deltas an, jedes an Ihren Client weitergeleitet, sobald es landet, sodass ein Filter, der auf das Ende wartet, nichts filtert. OrcaRouters Antwort ist ein Stream-Scanner: Während Output-Deltas fließen, führt der Scanner Ihre Output-Stage-Regeln gegen den sich anhäufenden Text aus und handelt in dem Moment, in dem eine Regel feuert — nicht erst, nachdem der Stream abgeschlossen ist. Die Action, die Sie verfassen, entscheidet, was „handeln” bedeutet: Einblock unterbricht den Stream und ein flag lässt ihn
durch. Ein mask redigiert auf nicht-streamendem Output, aber das
In-Band-Stream-Umschreiben ist auf der Roadmap — auf einem Stream berechnet der
Scanner heute die Maske, handelt aber nur auf der Block-Entscheidung, sodass
eine mask-Regel eine gestreamte Antwort noch nicht redigiert.
Dieser Vorbehalt ist nur für Output-Stage-Regeln auf streamenden
Requests relevant. Input-Stage-Regeln prüfen den Request, bevor das Modell
läuft, sodass sie vollständig live sind, inklusive Maskierung — und jede
Output-Regel auf einem nicht-streamenden Request sieht die ganze Antwort und
verhält sich normal, inklusive
mask.2. Was heute stream-sicher ist
block — stream-sicher (unterbricht den Stream mittendrin)
block — stream-sicher (unterbricht den Stream mittendrin)
Eine
block-Regel wird auf streamendem und nicht-streamendem Output
durchgesetzt. Auf einem Stream beobachtet der Scanner die Deltas; wenn eine
block-Regel feuert, unterbricht er den Stream — versiegelt den Scanner,
gibt einen kurzen Ersatzhinweis aus ([response truncated by guardrail: … policy violation]) als finales Delta und schließt den SSE-Kanal, bevor
weiterer blockierter Inhalt den Client erreicht. Da der HTTP-Response-Status
zu dem Zeitpunkt, an dem das erste Delta geflusht wurde, bereits auf 200
festgelegt ist, kann ein Block mitten im Stream keinen Status erneut
ausstellen — er beendet den offenen Stream geordnet. Der HTTP-400-
guardrail_blocked-Body ist die Form des nicht-streamenden
Output-Blocks.Bereits an den Client geflushte Bytes können nicht zurückgezogen werden,
sodass ein streamender Block bezüglich dessen, was bereits gestreamt
wurde, Best-Effort ist, aber zuverlässig alles nach dem Treffer stoppt. Für
eine harte Garantie, dass nie ein anstößiges Byte gesendet wird — und für
den 400-guardrail_blocked-Body — senden Sie den Request
nicht-streamend.mask — nur nicht-streamender Output (In-Band-Stream-Umschreiben ist auf der Roadmap)
mask — nur nicht-streamender Output (In-Band-Stream-Umschreiben ist auf der Roadmap)
Eine
mask-Regel schreibt den Treffer um — z. B. wird eine E-Mail in der
Antwort zu [EMAIL] — auf nicht-streamendem Output, wo das Gateway die
ganze Completion hält und die redigierte Form an Ihren Client weiterleitet.Auf einem streamenden Output berechnet der Scanner heute die Maske,
leitet den maskierten Text aber nicht weiter — er handelt nur auf der
Block-Entscheidung — sodass eine mask-Regel eine gestreamte Antwort
nicht redigiert. Das In-Band-Umschreiben des streamenden Outputs ist
auf der Roadmap. Bis es ausgeliefert wird, verfassen Sie die Regel als
block (sie beendet die Antwort bei einem Treffer) oder senden Sie den
Request nicht-streamend, sodass die Maske die ganze Antwort umschreibt,
wenn Sie wollen, dass eine gestreamte Antwort den gematchten Text nie
offenlegt.flag — nur-beobachtend, verändert nie den Traffic
flag — nur-beobachtend, verändert nie den Traffic
Eine
flag-Regel verändert nie den Traffic — sie lässt die Bytes durch.
Auf nicht-streamendem Output zeichnet sie einen Match im
Matches-Feed auf, sodass Sie die Trefferquote einer Regel messen können,
bevor Sie sie zu block promoten. Auf einer streamenden Response
bleibt sie nur-beobachtend und reicht die Deltas unangetastet durch; der
strukturierte Match-Eintrag wird auf dem nicht-streamenden Output-Pfad
geschrieben. In jedem Fall blockiert oder schreibt sie nie um, sodass es
immer sicher ist, sie eingeschaltet zu lassen.Action auf output | Nicht-streamend | Streamend |
|---|---|---|
block | lehnt die Antwort ab | unterbricht den Stream |
mask | redigiert die Antwort | noch nicht — stattdessen block (Roadmap) |
flag | zeichnet einen Match auf | lässt durch (nur-beobachtend) |
3. Ein konkretes Beispiel — ein stream-sicherer Secret-Filter
Angenommen, Ihr Modell kann ein Credential aus dem RAG-Kontext an die Oberfläche bringen, und Ihre App streamt. Sie wollen, dass das Gateway den Stream in dem Moment beendet, in dem ein secret-förmiger Treffer auftaucht, statt ihn zu maskieren — ein geleaktes Secret sollte die Antwort beenden, nicht teilweise redigiert werden. Verfassen Sie es in der Konsole — das Bearbeiten von Policies ist eine Management-Aktion auf Ihrer Session, gegated auf Developer+; der Relay-Key sendet nur/v1/*-Traffic:
- Öffnen Sie
/console/guardrails, New guardrail, benennen Sie esstream-safe-out. - Fügen Sie eine Regel hinzu:
- Type:
regex(oder einepii-Regel mit Secret-Entities wieaws_access_key/api_key_openai/jwt) - Stage:
output - Action:
block← beendet die Antwort bei einem Secret-Treffer;maskwürde es stattdessen redigieren und den Rest der Antwort fortfahren lassen
- Type:
- Speichern, dann hängen Sie es auf
/console/tokenüber das Dropdown Guardrail des Keys an.
stream: true genau wie zuvor auf:
4. PII-Shield auf einem Stream
Das PII Shield-Preset ist eine einzelnepii-Regel, Action mask, Stage
both. An der Input-Stage ist es vollständig live — es schreibt den
Request um, bevor das Modell ihn sieht, streamend oder nicht. An der
Output-Stage redigiert die Maskierung auf nicht-streamenden Antworten,
wo das Gateway die ganze Completion hält, bevor sie zurückkehrt.
Auf einem streamenden Output redigiert die Maske noch nicht — der
Scanner berechnet die Maske, handelt aber nur auf der Block-Entscheidung,
sodass eine gestreamte Antwort durchgereicht und nicht umgeschrieben wird. Das
In-Band-Umschreiben des streamenden Outputs ist auf der Roadmap. Wenn Ihr Ziel
also ist, dass PII in einer gestreamten Antwort nie beobachtbar ist, entweder:
- verfassen Sie die Output-Regel als block und akzeptieren, dass ein Treffer die Antwort beendet, statt sie zu redigieren, oder
- senden Sie den Request nicht-streamend, sodass die Maske die ganze Antwort mit der vollständigen Completion in der Hand umschreibt.
5. Beweisen Sie es, bevor Sie ausliefern
Raten Sie nicht, welche Stage-/Action-Kombination hält — verifizieren Sie es.Test-Tab
Jeder Guardrail-Editor hat einen Tab Test: Fügen Sie ein Sample ein,
wählen Sie die
output-Stage und führen Sie die aktuelle Policy ohne
Upstream-Aufruf und ohne Kontingent aus. Sehen Sie das Verdikt und, bei
mask-Regeln, den gerenderten Text. Das Ausführen der Sandbox ist eine
Developer+-Aktion (sie kann kostenpflichtige judge- / external-Regeln
feuern).Eval-Tab
Der Tab Eval bewertet ein Guardrail gegen mitgelieferte oder
benutzerdefinierte JSONL-Korpora — nützlich, um zu bestätigen, dass eine
block-Regel ein bekanntes Leck über einen Korpus fängt, bevor Sie einen Key
anhängen.
6. Was ein streamender Block kostet
Ein streamender Block trägt dieselbe Abrechnung wie jeder Output-Block — das Upstream-Modell ist bereits gelaufen, sodass das Gateway die Erstattung für Sie übernimmt:- Der Stream wird mit einem geordneten Kürzungs-Delta beendet (der Status ist
bereits 200); der nicht-streamende Output-Block gibt den HTTP 400
guardrail_blocked-Body zurück, der das Guardrail und die ausgelöste Regel benennt. - Es wird kein Kontingent berechnet. Wenn der Output-Block die Response ablehnt, erstattet das Gateway das vorab verbrauchte Kontingent zurück, sodass ein blockierter Aufruf für Sie kostenlos ist, obwohl das Modell Tokens produziert hat.
- Der Request wird als skip-retry markiert — das erneute Ausführen desselben Prompts würde einfach wieder blockieren, sodass das Gateway keinen Retry auf einem anderen Channel verbrennt.
GET /api/guardrail/match,
offen für jedes Member); der gematchte Teilstring wird nur dann erfasst,
wenn der Log raw content-Toggle des Guardrails ein ist (standardmäßig aus).
Volle Details leben im
guardrail_blocked-Fehler und
im Matches-Feed.
7. Wie es weitergeht
Output-Stage
Die vollständige Output-Stage — Prüfung der Antwort des Modells, block vs.
mask und Grounding.
Streaming-Abdeckung
Die vollständige Matrix dessen, was auf streamendem vs. nicht-streamendem
Traffic über jede Stage und Action durchgesetzt wird.
Actions
block, mask und flag im Detail — wann welches die richtige Wahl ist.
Input-Stage
Das Spiegelbild — Maskierung ist hier vollständig live, auch beim Streaming.
Verwandte Konzepte
Verwandte Konzepte
Bedrohungen, die dies adressiert
Bedrohungen, die dies adressiert
Vollständige Engine-Referenz
Vollständige Engine-Referenz
Guardrails — jeder Regeltyp, jedes Feld und jede
Route, inklusive Grounding und LLM-Judge.
