PII, PHI Maskierung - Presidio
Übersicht
| Eigenschaft | Details |
|---|---|
| Beschreibung | Verwenden Sie diese Guardrail, um PII (personenbezogene Daten), PHI (geschützte Gesundheitsinformationen) und andere sensible Daten zu maskieren. |
| Anbieter | Microsoft Presidio |
| Unterstützte Entitätstypen | Alle Presidio Entitätstypen |
| Unterstützte Aktionen | MASK, BLOCK |
| Unterstützte Modi | pre_call, during_call, post_call, logging_only |
Deployment-Optionen
Für diese Guardrail benötigen Sie bereitgestellte Presidio Analyzer und Presidio Anonymizer Container.
| Deployment-Option | Details |
|---|---|
| Presidio Docker Container bereitstellen | - Presidio Analyzer Docker Container - Presidio Anonymizer Docker Container |
Schnellstart
- LiteLLM UI
- Config.yaml
1. Erstellen einer Guardrail zur Maskierung von PII, PHI
Navigieren Sie in der LiteLLM UI zu Guardrails. Klicken Sie auf "Guardrail hinzufügen". Wählen Sie in diesem Dropdown-Menü "Presidio PII" aus und geben Sie Ihre Presidio Analyzer- und Anonymizer-Endpunkte ein.
1.2 Entitätstypen konfigurieren
Wählen Sie nun die Entitätstypen aus, die Sie maskieren möchten. Sehen Sie sich die unterstützten Aktionen hier an
Definieren Sie Ihre Guardrails unter dem Abschnitt guardrails
model_list:
- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY
guardrails:
- guardrail_name: "presidio-pii"
litellm_params:
guardrail: presidio # supported values: "aporia", "bedrock", "lakera", "presidio"
mode: "pre_call"
Setzen Sie die folgenden Umgebungsvariablen
export PRESIDIO_ANALYZER_API_BASE="https://:5002"
export PRESIDIO_ANONYMIZER_API_BASE="https://:5001"
Unterstützte Werte für mode
pre_callVor dem LLM-Aufruf, auf der Eingabe ausführenpost_callNach dem LLM-Aufruf, auf der Eingabe & Ausgabe ausführenlogging_onlyAusführen nach dem LLM-Aufruf, PII-Maskierung nur vor dem Logging nach Langfuse usw. anwenden. Nicht auf der eigentlichen LLM-API-Anfrage / -Antwort.
2. LiteLLM Gateway starten
litellm --config config.yaml --detailed_debug
3. Testen!
3.1 LiteLLM UI
Navigieren Sie in der LiteLLM UI zur Seite "Test Keys", wählen Sie die von Ihnen erstellte Guardrail aus und senden Sie die folgenden Nachrichten mit PII-Daten.
My credit card is 4111-1111-1111-1111 and my email is test@example.com.
3.2 Testen im Code
Um eine Guardrail für eine Anfrage anzuwenden, senden Sie guardrails=["presidio-pii"] im Request-Body.
Langchain, OpenAI SDK Anwendungsbeispiele
- Maskierter PII-Aufruf
- Kein PII-Aufruf
Erwarten Sie, dass Jane Doe maskiert wird, da es sich um PII handelt.
curl https://:4000/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "Hello my name is Jane Doe"}
],
"guardrails": ["presidio-pii"],
}'
Erwartete Antwort bei Fehler
{
"id": "chatcmpl-A3qSC39K7imjGbZ8xCDacGJZBoTJQ",
"choices": [
{
"finish_reason": "stop",
"index": 0,
"message": {
"content": "Hello, <PERSON>! How can I assist you today?",
"role": "assistant",
"tool_calls": null,
"function_call": null
}
}
],
"created": 1725479980,
"model": "gpt-3.5-turbo-2024-07-18",
"object": "chat.completion",
"system_fingerprint": "fp_5bd87c427a",
"usage": {
"completion_tokens": 13,
"prompt_tokens": 14,
"total_tokens": 27
},
"service_tier": null
}
curl https://:4000/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "Hello good morning"}
],
"guardrails": ["presidio-pii"],
}'
Guardrail-Anfragen nachverfolgen
Sobald Ihre Guardrail in Produktion ist, können Sie Ihre Guardrail auch auf LiteLLM Logs, Langfuse, Arize Phoenix usw. nachverfolgen, alle LiteLLM-Logging-Integrationen.
LiteLLM UI
Auf der LiteLLM Logs-Seite können Sie sehen, dass der PII-Inhalt für diese spezielle Anfrage maskiert wurde. Und Sie können detaillierte Trace-Informationen für die Guardrail sehen. Dies ermöglicht es Ihnen, maskierte Entitätstypen mit ihrem entsprechenden Konfidenzscore und die Dauer der Guardrail-Ausführung zu überwachen.
Langfuse
Beim Verbinden von Litellm mit Langfuse können Sie die Guardrail-Informationen in der Langfuse Trace sehen.
Entitätstyp-Konfiguration
Sie können spezifische Entitätstypen für die PII-Erkennung konfigurieren und entscheiden, wie jeder Entitätstyp behandelt werden soll (maskieren oder blockieren).
Entitätstypen in config.yaml konfigurieren
Definieren Sie Ihre Guardrails mit spezifischer Entitätstyp-Konfiguration
model_list:
- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY
guardrails:
- guardrail_name: "presidio-mask-guard"
litellm_params:
guardrail: presidio
mode: "pre_call"
pii_entities_config:
CREDIT_CARD: "MASK" # Will mask credit card numbers
EMAIL_ADDRESS: "MASK" # Will mask email addresses
- guardrail_name: "presidio-block-guard"
litellm_params:
guardrail: presidio
mode: "pre_call"
pii_entities_config:
CREDIT_CARD: "BLOCK" # Will block requests containing credit card numbers
Unterstützte Entitätstypen
LiteLLM unterstützt alle Presidio-Entitätstypen. Sehen Sie die vollständige Liste der Presidio-Entitätstypen hier.
Unterstützte Aktionen
Für jeden Entitätstyp können Sie eine der folgenden Aktionen angeben
MASK: Ersetzen Sie die Entität durch einen Platzhalter (z. B.<PERSON>)BLOCK: Blockieren Sie die Anfrage vollständig, wenn dieser Entitätstyp erkannt wird
Testanfrage mit Entitätstyp-Konfiguration
- Maskierung von PII-Entitäten
- Blockierung von PII-Entitäten
Bei Verwendung der Maskierungskonfiguration werden Entitäten durch Platzhalter ersetzt.
curl https://:4000/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "My credit card is 4111-1111-1111-1111 and my email is test@example.com"}
],
"guardrails": ["presidio-mask-guard"]
}'
Beispielantwort mit maskierten Entitäten
{
"id": "chatcmpl-123abc",
"choices": [
{
"message": {
"content": "I can see you provided a <CREDIT_CARD> and an <EMAIL_ADDRESS>. For security reasons, I recommend not sharing this sensitive information.",
"role": "assistant"
},
"index": 0,
"finish_reason": "stop"
}
],
// ... other response fields
}
Bei Verwendung der Blockierungskonfiguration werden Anfragen, die die konfigurierten Entitätstypen enthalten, vollständig mit einer Ausnahme blockiert.
curl https://:4000/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "My credit card is 4111-1111-1111-1111"}
],
"guardrails": ["presidio-block-guard"]
}'
Beim Ausführen dieser Anfrage wird der Proxy eine BlockedPiiEntityError Ausnahme auslösen.
{
"error": {
"message": "Blocked PII entity detected: CREDIT_CARD by Guardrail: presidio-block-guard."
}
}
Die Ausnahme enthält den blockierten Entitätstyp (in diesem Fall CREDIT_CARD) und den Namen der Guardrail, die die Blockierung verursacht hat.
Erweitert
language pro Anfrage festlegen
Die Presidio API unterstützt die Übergabe des language Parameters. Hier ist, wie Sie language pro Anfrage festlegen können
- curl
- OpenAI Python SDK
curl https://:4000/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-1234" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "is this credit card number 9283833 correct?"}
],
"guardrails": ["presidio-pre-guard"],
"guardrail_config": {"language": "es"}
}'
import openai
client = openai.OpenAI(
api_key="anything",
base_url="http://0.0.0.0:4000"
)
# request sent to model set on litellm proxy, `litellm --model`
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages = [
{
"role": "user",
"content": "this is a test request, write a short poem"
}
],
extra_body={
"metadata": {
"guardrails": ["presidio-pre-guard"],
"guardrail_config": {"language": "es"}
}
}
)
print(response)
Ausgabe-Parsing
LLM-Antworten können manchmal die maskierten Token enthalten.
Für Presidio 'replace'-Operationen kann LiteLLM die LLM-Antwort überprüfen und den maskierten Token durch die vom Benutzer übermittelten Werte ersetzen.
Definieren Sie Ihre Guardrails unter dem Abschnitt guardrails
model_list:
- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY
guardrails:
- guardrail_name: "presidio-pre-guard"
litellm_params:
guardrail: presidio # supported values: "aporia", "bedrock", "lakera", "presidio"
mode: "pre_call"
output_parse_pii: True
Erwarteter Ablauf
Benutzereingabe: "Hallo Welt, mein Name ist Jane Doe. Meine Nummer ist: 034453334"
LLM-Eingabe: "Hallo Welt, mein Name ist[PERSON]". Meine Nummer ist[PHONE_NUMBER]"
LLM-Antwort: "Hallo[PERSON]", nett, Sie kennenzulernen!"
Benutzerantwort: "Hallo Jane Doe, nett, Sie kennenzulernen!"
Ad-hoc-Erkenner
Senden Sie Ad-hoc-Erkenner an Presidio /analyze, indem Sie eine JSON-Datei an den Proxy übergeben.
Definieren Sie Ad-hoc-Erkenner in Ihrer LiteLLM config.yaml
Definieren Sie Ihre Guardrails unter dem Abschnitt guardrails
model_list:
- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY
guardrails:
- guardrail_name: "presidio-pre-guard"
litellm_params:
guardrail: presidio # supported values: "aporia", "bedrock", "lakera", "presidio"
mode: "pre_call"
presidio_ad_hoc_recognizers: "./hooks/example_presidio_ad_hoc_recognizer.json"
Setzen Sie die folgenden Umgebungsvariablen
export PRESIDIO_ANALYZER_API_BASE="https://:5002"
export PRESIDIO_ANONYMIZER_API_BASE="https://:5001"
Sie können dies in Aktion sehen, wenn Sie den Proxy ausführen.
litellm --config /path/to/config.yaml --debug
Machen Sie eine Chat-Vervollständigungsanfrage, Beispiel
{
"model": "azure-gpt-3.5",
"messages": [{"role": "user", "content": "John Smith AHV number is 756.3026.0705.92. Zip code: 1334023"}]
}
Und suchen Sie nach Protokollen, die mit Presidio PII Masking beginnen, Beispiel
Presidio PII Masking: Redacted pii message: <PERSON> AHV number is <AHV_NUMBER>. Zip code: <US_DRIVER_LICENSE>
Nur Logging
Wenden Sie PII-Maskierung nur vor dem Logging nach Langfuse usw. an.
Nicht auf der eigentlichen LLM-API-Anfrage / -Antwort.
Dies wird derzeit nur für
/chat/completionAnfragen- beim 'success' Logging angewendet.
- Definieren Sie den Modus:
logging_onlyin Ihrer LiteLLM config.yaml
Definieren Sie Ihre Guardrails unter dem Abschnitt guardrails
model_list:
- model_name: gpt-3.5-turbo
litellm_params:
model: openai/gpt-3.5-turbo
api_key: os.environ/OPENAI_API_KEY
guardrails:
- guardrail_name: "presidio-pre-guard"
litellm_params:
guardrail: presidio # supported values: "aporia", "bedrock", "lakera", "presidio"
mode: "logging_only"
Setzen Sie die folgenden Umgebungsvariablen
export PRESIDIO_ANALYZER_API_BASE="https://:5002"
export PRESIDIO_ANONYMIZER_API_BASE="https://:5001"
- Proxy starten
litellm --config /path/to/config.yaml
- Testen Sie es!
curl -X POST 'http://0.0.0.0:4000/chat/completions' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer sk-1234' \
-D '{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "user",
"content": "Hi, my name is Jane!"
}
]
}'
Erwartete protokollierte Antwort
Hi, my name is <PERSON>!