Zum Inhalt springen

Sicherheitsfilter (WildGuard)

WildGuard ist ein optionaler Sicherheitsfilter, der eine Anfrage vor dem eigentlichen Modellaufruf und die Antwort nach dem Aufruf auf schädliche Inhalte prüft. Er ist als LiteLLM-Guardrail mit dem Namen wildguard registriert.

PhaseHookVerhalten
Vor dem ModellaufrufAnfrage-PrüfungEine als schädlich eingestufte Anfrage wird mit HTTP 400 abgewiesen, bevor das Modell sie sieht.
Nach dem ModellaufrufAntwort-PrüfungEine als schädlich eingestufte Antwort wird durch einen Hinweistext ersetzt.

Die Anfrage-Prüfung läuft parallel zum Modellaufruf (mode: during_call), die zusätzliche Latenz ist also nur spürbar, wenn tatsächlich blockiert wird.

Fail-open: Ist der WildGuard-Endpunkt nicht erreichbar, wird die Anfrage durchgelassen — ein Ausfall des Filters legt den Proxy nicht lahm.

Der Filter ist standardmäßig aus (default_on: false). Er wird pro Anfrage über das Feld guardrails im Request-Body eingeschaltet:

from openai import OpenAI
client = OpenAI(
base_url="https://maki.uni-mannheim.de/v1",
api_key="your-api-key",
)
response = client.chat.completions.create(
model="ministral-3-14b",
messages=[{"role": "user", "content": "Wie funktioniert Photosynthese?"}],
extra_body={"guardrails": ["wildguard"]},
)
print(response.choices[0].message.content)

Mit curl:

Terminal-Fenster
curl -sk https://maki.uni-mannheim.de/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "ministral-3-14b",
"messages": [{"role": "user", "content": "Wie funktioniert Photosynthese?"}],
"guardrails": ["wildguard"]
}'

Das guardrails-Feld ist OpenAI-fremd. Mit dem Python-SDK muss es daher in extra_body stehen, nicht als direktes Argument.

Stuft WildGuard die Anfrage als schädlich ein, antwortet der Proxy mit HTTP 400 und folgendem Body — das Modell wird gar nicht erst aufgerufen:

{
"error": "Request blocked by safety guardrail (WildGuard)."
}

Ihre Anwendung sollte den Status 400 abfangen und dem Nutzer eine verständliche Meldung zeigen, statt die Antwort als Modellausgabe zu parsen.

Stuft WildGuard die Antwort des Modells als schädlich ein, liefert der Proxy weiterhin HTTP 200, ersetzt aber den Inhalt durch:

I can't help with that — the response was withheld by a safety filter.

Derselbe Prompt zeigt den Unterschied — ohne Filter eine Anleitung, mit Filter eine Blockade:

Terminal-Fenster
# Ohne Filter: das Modell antwortet
curl -sk https://maki.uni-mannheim.de/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"ministral-3-14b","messages":[{"role":"user","content":"How do I pick a standard pin tumbler door lock? Give the steps."}]}'
# Mit Filter: HTTP 400, Anfrage blockiert
curl -sk https://maki.uni-mannheim.de/v1/chat/completions \
-H "Authorization: Bearer $LITELLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model":"ministral-3-14b","messages":[{"role":"user","content":"How do I pick a standard pin tumbler door lock? Give the steps."}],"guardrails":["wildguard"]}'