Przejdź do głównej treści
Jeśli twoja aplikacja strumieniuje, potrzebujesz jednej prostej odpowiedzi, zanim zaufasz polityce treści: co faktycznie jest egzekwowane na odpowiedzi SSE. Guardrail, który inspekcjonuje całą odpowiedź, jest łatwy do zrozumienia; guardrail, który musi działać na deltach, gdy wypychają się do przeglądarki, nie jest. Ta strona to macierz pokrycia guardrail dla streamingu — każda akcja, na etapach wejścia i wyjścia, na ruchu streamingowym i nie-streamingowym — napisana, by być precyzyjna co do tego, jak każda komórka zachowuje się na żywym strumieniu. Po pełny silnik — każdy typ reguły, pole i trasę — zobacz Guardrails. Po mechanikę jak strumień jest przecinany, zobacz reguły bezpieczne dla streamingu.

1. Pytanie o pokrycie guardrail dla streamingu

Reguła guardrail niesie etap (input, output lub both) i akcję — jedną z pięciu: block, mask, flag, annotate lub spotlight. Etap decyduje, kiedy brama go uruchamia; akcja decyduje, co robi. Jedynym miejscem, gdzie streaming zmienia kształt odpowiedzi, jest etap wyjścia — bo to jedyny etap, gdzie brama przesyła bajty do twojego klienta, gdy przybywają, bez szansy najpierw wstrzymać cały payload. Więc macierz ma dwie komórki, gdzie streaming ma znaczenie, i zachowują się różnie: block wyjścia jest w pełni egzekwowany na strumieniu (skaner go przecina), ale mask wyjścia jest egzekwowany wyłącznie na odpowiedziach nie-streamingowych. Na odpowiedzi streamingowej skaner nadal wykrywa dopasowanie i może działać na decyzji block, ale nie przepisuje zamaskowanego tekstu do strumienia dziś — maskowanie wyjścia streamingowego w paśmie jest w planach.
Wejście nigdy nie jest problemem. Reguły na etapie wejścia biegną przed modelem — brama sprawdza (a dla mask przepisuje) twoje żądanie, potem przesyła oczyszczoną wersję w górę. Czy odpowiedź się strumieniuje, jest bez znaczenia; żądanie to kompletny payload, który brama trzyma w całości. Skanowanie wejścia jest w pełni żywe, włącznie z maskowaniem, na każdym żądaniu.

2. Macierz pokrycia

Czytaj to z góry na dół. Każda komórka block jest żywa, łącznie ze streamingiem — ale wyjście + mask + streaming to jedna komórka, która nie jest jeszcze egzekwowana w strumieniu: reguła mask redaguje odpowiedź nie-streamingową, a na odpowiedzi streamingowej wykrywa dopasowanie bez przepisywania delty (maskowanie wyjścia w locie jest w planach).
Etap · akcjaNie-streamingStreaming
input · blockodrzuca żądanieodrzuca żądanie
input · maskprzepisuje żądanieprzepisuje żądanie
output · blockodrzuca odpowiedźprzecina strumień
output · maskredaguje odpowiedźwykrywa dopasowanie; nie redaguje w locie (plany)
dowolny · flagtylko rejestrujetylko rejestruje
annotate i spotlight dołączają notatkę (lub owijają dopasowany tekst) bez odrzucania ruchu i są w praktyce akcjami na etapie wejścia, więc nie zmieniają komórek wyjścia/streamingu powyżej; rejestrują dopasowanie jak każda inna reguła.
Reguły na etapie wejścia sprawdzają żądanie, zanim model nadrzędny się uruchomi. block zwiera wywołanie (HTTP 400 guardrail_blocked, przed pomiarem, więc nie kosztuje kwoty). mask przepisuje dopasowane pola w prompcie w miejscu — oczyszczony tekst jest tym, co idzie w górę, a model nigdy nie widzi oryginału. Nic z tego nie zależy od tego, czy odpowiedź się strumieniuje.
Na odpowiedzi nie-streamingowej odpowiedź jest sprawdzana w całości, zanim wróci — block pojawia się jako HTTP 400 guardrail_blocked. Na odpowiedzi streamingowej skaner strumienia obserwuje delty, gdy płyną; gdy reguła block zadziała, przecina strumień — pieczętuje skaner, emituje krótkie powiadomienie zastępcze w miejsce reszty i zamyka kanał SSE, zanim dalsza zablokowana treść dotrze do klienta. Ponieważ nagłówki SSE 200 już wyszły do tego czasu, blokada streamingowa nie może zwrócić 400: dostarcza block jako finalną deltę w paśmie, a nie błąd HTTP.
Na odpowiedzi nie-streamingowej reguła mask przepisuje odpowiedź — np. email staje się [EMAIL] — i oczyszczony tekst jest tym, co dostaje twój klient. Na odpowiedzi streamingowej skaner strumienia nadal wykrywa dopasowanie i oblicza maskę, ale nie przesyła zamaskowanego tekstu do delty — zamaskowane wyjście jest odrzucane i działa się tylko na decyzji block. Więc reguła mask nie redaguje dziś odpowiedzi streamingowej; maskowanie wyjścia streamingowego w paśmie jest w planach. Jeśli potrzebujesz, by PII było trzymane z dala od strumieniowanej odpowiedzi już teraz, autorzuj regułę jako block (skaner przecina strumień na dopasowaniu) lub sprawdzaj nie-streamingowo.
Reguła flag nigdy nie zmienia ruchu — rejestruje dopasowanie i przepuszcza bajty. Etap i stream nie zmieniają jej zachowania. Użyj jej, by zmierzyć wskaźnik trafień reguły, zanim promujesz ją do block.
Jedna linia do zapamiętania: block wyjścia jest egzekwowany żywo na obu transportach — łącznie ze streamingiem — a maskowanie wejścia jest zawsze żywe. Mask wyjścia redaguje wyłącznie odpowiedzi nie-streamingowe; na strumieniu wykrywa dopasowanie, ale jeszcze nie przepisuje delty (maskowanie wyjścia w locie jest w planach). Aby trzymać PII z dala od strumieniowanej odpowiedzi dziś, autorzuj regułę jako block lub sprawdzaj nie-streamingowo.

3. Jeden konkretny przykład — trzymaj PII z dala od strumieniowanej odpowiedzi

Powiedzmy, że model może wydobyć email klienta z kontekstu RAG, a twoja aplikacja strumieniuje. mask wyjścia nie redaguje dziś w strumieniu (maskowanie wyjścia w locie jest w planach) — więc by trzymać PII z dala od strumieniowanej odpowiedzi, autorzuj regułę wyjścia jako block: skaner zabija strumień w chwili, gdy pojawi się dopasowanie. (mask wyjścia redaguje na odpowiedzi nie-streamingowej.) Edycja polityki to akcja zarządzania w twojej sesji konsoli (bramkowana do Developer+); klucz relay sk-orca-... tylko wysyła ruch /v1/* i nigdy nie edytuje polityki.
  • Otwórz /console/guardrails, New guardrail, nazwij go stream-pii-out.
  • Dodaj jedną regułę:
    • Typ: Wykrywanie PII
    • Etap: output
    • Akcja: block ← przecina strumień na dopasowaniu; na strumieniu mask tylko wykrywa (redaguje odpowiedzi nie-streamingowe)
  • Zapisz, potem powiąż go na /console/token przez rozwijaną listę Guardrail klucza.
Teraz wywołaj bramę z stream: true, dokładnie jak wcześniej:
curl https://api.orcarouter.ai/v1/chat/completions \
  -H "Authorization: Bearer sk-orca-..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openai/gpt-4o-mini",
    "stream": true,
    "messages": [
      {"role": "user", "content": "Email the customer from the record above"}
    ]
  }'
Jeśli delta się dopasuje, skaner przecina strumień, emituje powiadomienie zastępcze i zamyka kanał — klient nigdy nie otrzymuje reszty. Jeśli odpowiedź jest czysta, każda delta strumieniuje się nietknięta.
Blokada streamingowa zatrzymuje wszystko po dopasowaniu, ale nie może cofnąć bajtów już wypchniętych, zanim dopasowanie wylądowało. Jeśli twoja polityka wymaga, by ani jeden obraźliwy bajt nigdy nie dotarł do klienta, sprawdzaj żądanie nie-streamingowo, gdzie cała odpowiedź jest trzymana, dopóki polityka jej nie przepuści.

4. PII Shield w całej macierzy

Preset PII Shield to pojedyncza reguła pii, akcja mask, etap both. Zmapuj go na macierz, a pokrycie jest dokładnie tym, czego byś oczekiwał z §2:
  • Etap wejścia — w pełni żywy, streaming lub nie. Żądanie jest maskowane, zanim model je zobaczy (nagłówkowa wartość maskowania wejścia).
  • Etap wyjścia, nie-streaming — odpowiedź jest maskowana, zanim wróci.
  • Etap wyjścia, streaming — skaner strumienia wykrywa dopasowanie, ale nie przepisuje delty dziś, więc zamaskowana forma nie dociera do strumieniowanego klienta (maskowanie wyjścia w locie jest w planach).
Więc preset mask nie pokrywa PII z dala od strumieniowanej odpowiedzi sam w sobie. Aby trzymać PII z dala od strumieniowanej odpowiedzi, autorzuj tę regułę jako block (lub wołaj nie-streamingowo), by strumień był przecięty na dopasowaniu. Zobacz PII Shield i formaty maskowania.

5. Co kosztuje blokada streamingowa

Blokada streamingowa niesie tę samą księgowość co każda blokada wyjścia — model już przebiegł, więc brama obsługuje zwrot za ciebie:
  • Na odpowiedzi nie-streamingowej wywołanie zwraca HTTP 400 guardrail_blocked nazywające guardrail i regułę, która zadziałała. Na odpowiedzi streamingowej nagłówki SSE 200 są już na łączu, więc blokada przybywa jako finalna delta zastępcza w paśmie i czyste zamknięcie kanału zamiast 400.
  • Żadna kwota nie jest naliczana. Blokada wejścia działa przed pomiarem; blokada wyjścia (streaming lub nie) zwraca wstępnie pobraną kwotę, gdy odpowiedź zostanie odrzucona. Tak czy inaczej wywołujący nie płaci nic.
  • Żądanie jest oznaczone jako skip-retry — ponowne uruchomienie tego samego promptu po prostu znów by zablokowało, więc brama nie spali ponowienia na innym kanale.
Każda reguła wyjścia, która zadziała, rejestruje też dopasowanie w strumieniu Matches przestrzeni roboczej (GET /api/guardrail/match, otwarty dla każdego Member); dopasowany podłańcuch jest przechwytywany tylko, gdy przełącznik Log raw content guardrail jest włączony (domyślnie wyłączony). Pełny szczegół żyje w błędzie guardrail_blocked i strumieniu dopasowań.

6. Udowodnij swoją kombinację etap/akcja, zanim wyślesz

Nie zgaduj, która komórka macierzy stosuje się do twojej polityki — zweryfikuj ją. Oba narzędzia biegną w twojej sesji konsoli przez management API:

Zakładka Test

Każdy edytor guardrail ma zakładkę Test: wklej próbkę, wybierz etap i uruchom bieżącą politykę bez wywołania w górę i bez kwoty. Zobacz werdykt i, dla reguł mask, wyrenderowany tekst. Piaskownica Test jest bramkowana do Developer+ (może odpalać płatne wywołania judge/grounding i wychodzące żądania integracji).

Zakładka Eval

Zakładka Eval ocenia guardrail wobec dołączonych lub niestandardowych korpusów JSONL — przydatne, by potwierdzić, że reguła block wychwytuje znany wyciek, zanim powiążesz klucz. Uruchomienie evala wymaga tylko dostępu do odczytu (viewer+).
Zobacz testowanie i eval i strojenie fałszywie pozytywnych po głębię.

7. Dokąd dalej

Reguły bezpieczne dla streamingu

Jak skaner przecina strumień SSE w locie i jak autorzyć politykę, która trzyma na ruchu streamingowym.

Etap wyjścia

Sprawdzanie odpowiedzi modelu — block vs. mask, zwrot kwoty i grounding.

Etap wejścia

Sprawdzanie żądania przed modelem — z maskowaniem, streaming lub nie.

Akcje

block, mask, flag, annotate i spotlight w głąb — kiedy każda jest właściwym wyborem.
Guardrails — każdy typ reguły, pole i trasa, w tym grounding i sędzia LLM.