Zum Hauptinhalt springen

PII, PHI Maskierung - Presidio

Übersicht

EigenschaftDetails
BeschreibungVerwenden Sie diese Guardrail, um PII (personenbezogene Daten), PHI (geschützte Gesundheitsinformationen) und andere sensible Daten zu maskieren.
AnbieterMicrosoft Presidio
Unterstützte EntitätstypenAlle Presidio Entitätstypen
Unterstützte AktionenMASK, BLOCK
Unterstützte Modipre_call, during_call, post_call, logging_only

Deployment-Optionen

Für diese Guardrail benötigen Sie bereitgestellte Presidio Analyzer und Presidio Anonymizer Container.

Deployment-OptionDetails
Presidio Docker Container bereitstellen- Presidio Analyzer Docker Container
- Presidio Anonymizer Docker Container

Schnellstart

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

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.

PII Anfrage
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

Erwarten Sie, dass Jane Doe maskiert wird, da es sich um PII handelt.

Maskierte PII-Anfrage
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

Antwort mit maskiertem PII
{
"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
}

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

config.yaml mit Entitätstypen
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

Bei Verwendung der Maskierungskonfiguration werden Entitäten durch Platzhalter ersetzt.

Maskierung PII-Anfrage
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
}

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

Sprachparameter - curl
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"}
}'

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

Ausgabe-Parsing-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-pre-guard"
litellm_params:
guardrail: presidio # supported values: "aporia", "bedrock", "lakera", "presidio"
mode: "pre_call"
output_parse_pii: True

Erwarteter Ablauf

  1. Benutzereingabe: "Hallo Welt, mein Name ist Jane Doe. Meine Nummer ist: 034453334"

  2. LLM-Eingabe: "Hallo Welt, mein Name ist[PERSON]". Meine Nummer ist[PHONE_NUMBER]"

  3. LLM-Antwort: "Hallo[PERSON]", nett, Sie kennenzulernen!"

  4. 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.

Beispiel Ad-hoc-Erkenner

Definieren Sie Ad-hoc-Erkenner in Ihrer LiteLLM config.yaml

Definieren Sie Ihre Guardrails unter dem Abschnitt guardrails

Ad-hoc-Erkenner-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-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

Ad-hoc-Erkenner-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.

Proxy mit Debug ausführen
litellm --config /path/to/config.yaml --debug

Machen Sie eine Chat-Vervollständigungsanfrage, Beispiel

Benutzerdefinierte PII-Anfrage
{
"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

PII-Maskierungs-Log
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.

Hinweis

Dies wird derzeit nur für

  • /chat/completion Anfragen
  • beim 'success' Logging angewendet.
  1. Definieren Sie den Modus: logging_only in Ihrer LiteLLM config.yaml

Definieren Sie Ihre Guardrails unter dem Abschnitt guardrails

Nur Logging-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-pre-guard"
litellm_params:
guardrail: presidio # supported values: "aporia", "bedrock", "lakera", "presidio"
mode: "logging_only"

Setzen Sie die folgenden Umgebungsvariablen

Nur Logging-Umgebungsvariablen
export PRESIDIO_ANALYZER_API_BASE="https://:5002"
export PRESIDIO_ANONYMIZER_API_BASE="https://:5001"
  1. Proxy starten
Proxy starten
litellm --config /path/to/config.yaml
  1. Testen Sie es!
Nur Logging testen
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

Protokollierte Antwort mit maskiertem PII
Hi, my name is <PERSON>!