Come usare elenchi di blocchi nei modelli di Microsoft Foundry

Le guardrail e i controlli configurabili disponibili in Microsoft Foundry sono sufficienti per la maggior parte delle esigenze di moderazione del contenuto. Tuttavia, potrebbe essere necessario filtrare i termini specifici del caso d'uso, ad esempio nomi di concorrenti, nomi di progetto interni o termini sensibili specifici del dominio. A tale scopo, è possibile creare elenchi di blocchi personalizzati che filtrano automaticamente il contenuto contenente i termini specificati.

Questo articolo illustra come:

  • Creare e gestire elenchi di blocchi personalizzati
  • Aggiungere termini usando la corrispondenza esatta o pattern regex
  • Applicare elenchi di blocchi ai filtri di contenuto
  • Testare il comportamento della lista di blocco con le tue distribuzioni

Prerequisiti

Usare elenchi di blocchi

È possibile creare elenchi di blocchi con l'API OpenAI Azure. La procedura seguente consente di iniziare.

Ottieni il tuo token

Prima di tutto, è necessario ottenere un token per accedere alle API per la creazione, la modifica e l'eliminazione di elenchi di blocchi. È possibile ottenere questo token usando il comando interfaccia della riga di comando di Azure seguente:

az account get-access-token 

Creare o modificare un elenco di blocchi

Copiare il comando cURL seguente in un editor di testo e apportare le modifiche seguenti:

  1. Sostituire {subscriptionId} con l'ID sottoscrizione.
  2. Sostituire {resourceGroupName} con il nome del gruppo di risorse.
  3. Sostituire {accountName} con il nome della risorsa.
  4. Sostituire {raiBlocklistName} (nell'URL) con un nome personalizzato per l'elenco. Caratteri consentiti: 0-9, A-Z, a-z, - . _ ~.
  5. Sostituire {token} con il token ottenuto dal passaggio "Ottenere il token" precedente.
  6. Facoltativamente, sostituire il valore del campo "description" con una descrizione personalizzata.
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"  
    } 
}' 

Il codice di risposta deve essere 201 (creato un nuovo elenco) o 200 (aggiornato un elenco esistente).

Applicare un elenco di blocchi a un filtro contenuto

Se non è ancora stato creato un filtro contenuto, è possibile farlo in Foundry. Vedere Filtro del contenuto.

Per applicare un elenco di blocchi di completamento a un filtro contenuto, usare il comando cURL seguente:

  1. Sostituire {subscriptionId} con il proprio ID di sottoscrizione.
  2. Sostituire {resourceGroupName} con il nome del gruppo di risorse.
  3. Sostituire {accountName} con il nome della risorsa.
  4. Sostituire {raiPolicyName} con il nome del filtro contenuto
  5. Sostituire {token} con il token ottenuto dal passaggio "Ottenere il token" precedente.
  6. Facoltativamente, modificare il "completionBlocklists" titolo in "promptBlocklists" se si vuole che l'elenco di blocchi venga applicato alle richieste degli utenti anziché ai completamenti del modello di intelligenza artificiale.
  7. Sostituire "raiBlocklistName" nel corpo con un nome personalizzato per l'elenco. Caratteri consentiti: 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": [ ] 
    } 
}' 

Aggiungere blockItems all'elenco

Nota

Esiste un limite massimo di 10.000 termini consentiti in un elenco.

Copiare il comando cURL seguente in un editor di testo e apportare le modifiche seguenti:

  1. Sostituire {subscriptionId} con il proprio ID di sottoscrizione.
  2. Sostituire {resourceGroupName} con il nome del gruppo di risorse.
  3. Sostituire {accountName} con il nome della risorsa.
  4. Sostituire {raiBlocklistName} (nell'URL) con un nome personalizzato per l'elenco. Caratteri consentiti: 0-9, A-Z, a-z, - . _ ~.
  5. Sostituire {raiBlocklistItemName} con un nome personalizzato per la voce di elenco.
  6. Sostituire {token} con il token ottenuto dal passaggio "Ottenere il token" precedente.
  7. Sostituire il valore del "pattern" campo con l'elemento che si vuole aggiungere all'elenco di blocchi. La lunghezza massima di un blockItem è di 1.000 caratteri. Specificare inoltre se il pattern è regex o a corrispondenza esatta.
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  
    }  
}' 

Nota

L'aggiunta di un nuovo termine all'elenco di blocchi può richiedere circa 5 minuti. Verifica la lista di blocco dopo 5 minuti.

Il codice di risposta deve essere 200.

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

Analizzare il testo con un elenco di blocchi

Ora puoi testare la tua distribuzione che ha l'elenco di blocco. Per istruzioni sulla chiamata agli endpoint OpenAI Azure, visitare il Quickstart.

Nell'esempio seguente, una distribuzione GPT-35-Turbo con un elenco di blocchi blocca il prompt. La risposta restituisce un 400 errore.

{
  "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
        }
      }
    }
  }
}

Se il completamento stesso è bloccato, la risposta restituisce 200, perché il completamento viene interrotto solo quando viene trovata una corrispondenza con il contenuto dell'elenco di blocchi. Le annotazioni mostrano una corrispondenza trovata per un elemento nella lista di blocco.

{ 
    "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 
    } 
} 

Campi chiave nella risposta:

  • finish_reason: "content_filter" indica che il completamento è stato arrestato da una corrispondenza blocklist
  • custom_blocklists[].id mostra quale elenco di elementi bloccati ha attivato il filtro
  • custom_blocklists[].filtered: true conferma che il contenuto è stato bloccato

Eliminare un elemento dalla lista di blocco

Per eliminare un elemento blocklist, usare il comando cURL seguente:

  1. Sostituire {subscriptionId} con l'ID sottoscrizione.
  2. Sostituire {resourceGroupName} con il nome del gruppo di risorse.
  3. Sostituire {accountName} con il nome della risorsa.
  4. Sostituire {raiBlocklistName} con il nome dell'elenco di blocchi.
  5. Sostituire {raiBlocklistItemName} con il nome dell'elemento da eliminare.
  6. Sostituire {token} con il token ottenuto dal passaggio "Ottenere il token" precedente.
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}'

Il codice di risposta deve essere 200 (elemento eliminato) o 204 (nessun contenuto).

Eliminare un elenco di blocchi

Per eliminare un intero elenco di blocchi, usare il comando cURL seguente:

  1. Sostituire {subscriptionId} con l'ID sottoscrizione.
  2. Sostituire {resourceGroupName} con il nome del gruppo di risorse.
  3. Sostituire {accountName} con il nome della risorsa.
  4. Sostituire {raiBlocklistName} con il nome dell'elenco di blocchi da eliminare.
  5. Sostituire {token} con il token ottenuto dal passaggio "Ottenere il token" precedente.
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}'

Avviso

L'eliminazione di un elenco di elementi bloccati rimuove tutti gli elementi dell'elenco e non può essere annullata.

Risoluzione dei problemi

Errore 403 Accesso negato

Verificare che il token di Azure AD disponga delle autorizzazioni corrette. L'account deve avere il ruolo di Cognitive Services Contributor o di Proprietario sulla risorsa Azure OpenAI.

Blocklist non ha effetto

La propagazione dei nuovi termini dell'elenco di blocchi può richiedere fino a 5 minuti. Attendere e riprovare. Se il problema persiste, verificare che l'elenco di blocchi sia applicato correttamente al filtro del contenuto.

Criterio non corrispondente al contenuto previsto

Se si usano modelli regex, verificare che la sintassi del modello sia valida. Testare separatamente il modello regex prima di aggiungerlo all'elenco di blocchi. I problemi comuni includono:

  • Caratteri speciali non preceduti da escape
  • Distinzione tra maiuscole e minuscole (i modelli fanno distinzione tra maiuscole e minuscole per impostazione predefinita)
  • Gli ancoraggi (^ e $) potrebbero non comportarsi come previsto negli scenari di streaming

Limite di quota raggiunto

Ogni elenco di blocchi può contenere un massimo di 10.000 termini. Se sono necessari altri elementi, creare più elenchi di blocchi e applicarli allo stesso filtro contenuto.