Verwenden von Blocklisten in Microsoft Foundry-Modellen

Die in Microsoft Foundry verfügbaren konfigurierbaren Guardrails und Steuerelemente sind für die meisten Inhaltsmoderationsanforderungen ausreichend. Möglicherweise müssen Sie jedoch spezifische Ausdrücke für Ihren Anwendungsfall filtern , z. B. Wettbewerbernamen, interne Projektnamen oder domänenspezifische vertrauliche Ausdrücke. Dazu können Sie benutzerdefinierte Blocklisten erstellen, die automatisch Inhalte filtern, die Ihre angegebenen Ausdrücke enthalten.

In diesem Artikel erfahren Sie, wie Sie:

  • Erstellen und Verwalten von benutzerdefinierten Blocklisten
  • Hinzufügen von Ausdrücken mit exakten Übereinstimmungs- oder Regex-Mustern
  • Anwenden von Blocklisten auf Ihre Inhaltsfilter
  • Testen des Blocklistenverhaltens mit Ihren Bereitstellungen

Voraussetzungen

Verwenden von Blocklisten

Sie können Blocklisten mit der Azure OpenAI-API erstellen. Die folgenden Schritte helfen Ihnen bei den ersten Schritten.

Holen Sie sich Ihr Token

Zunächst müssen Sie ein Token für den Zugriff auf die APIs zum Erstellen, Bearbeiten und Löschen von Blocklisten abrufen. Sie können dieses Token mit dem folgenden Azure CLI Befehl abrufen:

az account get-access-token 

Erstellen oder Ändern einer Blockliste

Kopieren Sie den befehl cURL unten in einen Text-Editor, und nehmen Sie die folgenden Änderungen vor:

  1. Ersetzen Sie {subscriptionId} durch Ihre Abonnement-ID.
  2. Ersetzen Sie {resourceGroupName} durch ihren Ressourcengruppennamen.
  3. Ersetzen Sie {accountName} durch Ihren Ressourcennamen.
  4. Ersetzen Sie {raiBlocklistName} (in der URL) durch einen benutzerdefinierten Namen für Ihre Liste. Zulässige Zeichen: 0-9, A-Z, a-z, - . _ ~.
  5. Ersetzen Sie {token} durch das Token, das Sie aus dem obigen Schritt "Token abrufen" erhalten haben.
  6. Ersetzen Sie optional den Wert des Felds "beschreibung" durch eine benutzerdefinierte Beschreibung.
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-10-01' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "description": "This is a prompt blocklist"  
    } 
}' 

Der Antwortcode sollte 201 (eine neue Liste erstellt) oder 200 (eine vorhandene Liste aktualisiert) sein.

Anwenden einer Blockliste auf einen Inhaltsfilter

Wenn Sie noch keinen Inhaltsfilter erstellt haben, können Sie dies in Foundry tun. Siehe Inhaltsfilterung.

Verwenden Sie den folgenden cURL-Befehl, um eine Vervollständigungsblockliste auf einen Inhaltsfilter anzuwenden:

  1. Ersetzen Sie {subscriptionId} durch Ihre Unter-ID.
  2. Ersetzen Sie {resourceGroupName} durch ihren Ressourcengruppennamen.
  3. Ersetzen Sie {accountName} durch Ihren Ressourcennamen.
  4. Ersetzen Sie {raiPolicyName} durch den Namen des Inhaltsfilters.
  5. Ersetzen Sie {token} durch das Token, das Sie aus dem obigen Schritt "Token abrufen" erhalten haben.
  6. Ändern Sie optional den "completionBlocklists" Titel in "promptBlocklists", um die Blockliste auf Benutzeraufforderungen statt auf KI-Modellabschlüsse anzuwenden.
  7. Ersetzen Sie "raiBlocklistName" im Textkörper durch einen benutzerdefinierten Namen für Ihre Liste. Zulässige Zeichen: 0-9, A-Z, a-z, - . _ ~.
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiPolicies/{raiPolicyName}?api-version=2024-10-01' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "basePolicyName": "Microsoft.Default", 
        "completionBlocklists": [{ 
            "blocklistName": "raiBlocklistName", 
            "blocking": true 
        }], 
        "contentFilters": [ ] 
    } 
}' 

Hinzufügen von BlockItems zur Liste

Hinweis

In einer Liste sind maximal 10.000 Ausdrücke zulässig.

Kopieren Sie den befehl cURL unten in einen Text-Editor, und nehmen Sie die folgenden Änderungen vor:

  1. Ersetzen Sie {subscriptionId} durch Ihre Unter-ID.
  2. Ersetzen Sie {resourceGroupName} durch ihren Ressourcengruppennamen.
  3. Ersetzen Sie {accountName} durch Ihren Ressourcennamen.
  4. Ersetzen Sie {raiBlocklistName} (in der URL) durch einen benutzerdefinierten Namen für Ihre Liste. Zulässige Zeichen: 0-9, A-Z, a-z, - . _ ~.
  5. Ersetzen Sie {raiBlocklistItemName} durch einen benutzerdefinierten Namen für Ihr Listenelement.
  6. Ersetzen Sie {token} durch das Token, das Sie aus dem obigen Schritt "Token abrufen" erhalten haben.
  7. Ersetzen Sie den Wert des "pattern" Felds durch das Element, das Sie Ihrer Blockliste hinzufügen möchten. Die maximale Länge eines BlockItem beträgt 1.000 Zeichen. Geben Sie auch an, ob das Muster „RegEx“ oder eine genaue Übereinstimmung ist.
curl --location --request PUT 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}/raiBlocklistItems/{raiBlocklistItemName}?api-version=2024-10-01' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{  
    "properties": {  
        "pattern": "blocking pattern",  
        "isRegex": false  
    }  
}' 

Hinweis

Es kann etwa 5 Minuten dauern, bis eine neue Benennung der Blockliste hinzugefügt wird. Testen Sie die Blockliste nach 5 Minuten.

Der Antwortcode sollte sein 200.

{ 
  "name": "raiBlocklistItemName", 
  "id": "/subscriptions/subscriptionId/resourceGroups/resourceGroupName/providers/Microsoft.CognitiveServices/accounts/accountName/raiBlocklists/raiBlocklistName/raiBlocklistItems/raiBlocklistItemName", 
  "properties": { 
    "pattern": "blocking pattern", 
    "isRegex": false 
  } 
} 

Analysieren von Text mit einer Blockliste

Jetzt können Sie Ihre Bereitstellung testen, für die die Blockliste vorhanden ist. Anweisungen zum Aufrufen der Azure OpenAI-Endpunkte finden Sie unter Quickstart.

Im folgenden Beispiel blockiert eine GPT-35-Turbo-Bereitstellung mit einer Blockliste die Eingabeaufforderung. Die Antwort gibt einen 400 Fehler zurück.

{
  "error": {
    "message": "The response was filtered due to the prompt triggering Azure OpenAI's content management policy. Please modify your prompt and retry. To learn more about our content filtering policies please read our documentation: https://go.microsoft.com/fwlink/?linkid=2198766",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400,
    "innererror": {
      "code": "ResponsibleAIPolicyViolation",
      "content_filter_result": {
        "custom_blocklists": {
          "details": [{ "filtered": true, "id": "pizza" }],
          "filtered": true
        }
      }
    }
  }
}

Wenn die Vervollständigung selbst blockiert ist, wird die Antwort als 200 zurückgegeben, da die Vervollständigung nur abgeschnitten wird, wenn der Inhalt der Blockliste abgeglichen wird. Die Anmerkungen zeigen, dass ein Blocklistenelement abgeglichen wurde.

{ 
    "id": "chatcmpl-85NkyY0AkeBMunOjyxivQSiTaxGAl", 
    "object": "chat.completion", 
    "created": 1696293652, 
    "model": "gpt-35-turbo", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": "content_filter", 
            "message": { 
                "role": "assistant" 
            }, 
            "content_filter_results": { 
                "custom_blocklists": [ 
                    { 
                        "filtered": true, 
                        "id": "myBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    ], 
    "usage": { 
        "completion_tokens": 75, 
        "prompt_tokens": 27, 
        "total_tokens": 102 
    } 
} 

Schlüsselfelder in der Antwort:

  • finish_reason: "content_filter" gibt an, dass der Abschluss durch eine Blocklisten-Übereinstimmung beendet wurde.
  • custom_blocklists[].id zeigt an, welche Blockliste den Filter ausgelöst hat
  • custom_blocklists[].filtered: true bestätigt, dass der Inhalt blockiert wurde

Löschen eines Blocklistenelements

Verwenden Sie den folgenden cURL-Befehl, um ein Blocklistenelement zu löschen:

  1. Ersetzen Sie {subscriptionId} durch Ihre Abonnement-ID.
  2. Ersetzen Sie {resourceGroupName} durch ihren Ressourcengruppennamen.
  3. Ersetzen Sie {accountName} durch Ihren Ressourcennamen.
  4. Ersetzen Sie {raiBlocklistName} durch den Namen Ihrer Blockliste.
  5. Ersetzen Sie {raiBlocklistItemName} durch den Namen des zu löschenden Elements.
  6. Ersetzen Sie {token} durch das Token, das Sie aus dem obigen Schritt "Token abrufen" erhalten haben.
curl --location --request DELETE 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}/raiBlocklistItems/{raiBlocklistItemName}?api-version=2024-10-01' \
--header 'Authorization: Bearer {token}'

Der Antwortcode sollte (Element gelöscht) oder 200 (kein Inhalt) sein 204 .

Löschen einer Blockliste

Verwenden Sie den folgenden cURL-Befehl, um eine gesamte Blockliste zu löschen:

  1. Ersetzen Sie {subscriptionId} durch Ihre Abonnement-ID.
  2. Ersetzen Sie {resourceGroupName} durch ihren Ressourcengruppennamen.
  3. Ersetzen Sie {accountName} durch Ihren Ressourcennamen.
  4. Ersetzen Sie {raiBlocklistName} durch den Namen der zu löschenden Blockliste.
  5. Ersetzen Sie {token} durch das Token, das Sie aus dem obigen Schritt "Token abrufen" erhalten haben.
curl --location --request DELETE 'https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{accountName}/raiBlocklists/{raiBlocklistName}?api-version=2024-10-01' \
--header 'Authorization: Bearer {token}'

Warnung

Durch das Löschen einer Blockliste werden alle Elemente in dieser Liste entfernt und können nicht rückgängig gemacht werden.

Problembehandlung

403 Verbotener Fehler

Stellen Sie sicher, dass Ihr Azure AD-Token über die richtigen Berechtigungen verfügt. Das Konto muss über Cognitive Services Contributor oder Owner Rolle für die Azure OpenAI-Ressource verfügen.

Blockliste zeigt keine Wirkung

Neue Blocklistenbegriffe können bis zu 5 Minuten dauern, bis sie verteilt werden. Warten Sie, und testen Sie es erneut. Wenn das Problem weiterhin besteht, überprüfen Sie, ob die Blockliste ordnungsgemäß auf Den Inhaltsfilter angewendet wurde.

Muster stimmt nicht mit erwartetem Inhalt überein

Stellen Sie bei Verwendung von regex-Mustern sicher, dass die Mustersyntax gültig ist. Testen Sie ihr regex-Muster separat, bevor Sie es der Blockliste hinzufügen. Häufige Probleme sind:

  • Sonderzeichen ohne Escape-Zeichen
  • Groß-/Kleinschreibung (Bei Mustern wird standardmäßig die Groß-/Kleinschreibung beachtet)
  • Anchors (^ und $) verhalten sich möglicherweise nicht wie erwartet in Streamingszenarien

Kontingentgrenze erreicht

Jede Blockliste kann maximal 10.000 Ausdrücke enthalten. Wenn Sie mehr benötigen, erstellen Sie weitere Blocklisten, und wenden Sie sie auf denselben Inhaltsfilter an.