Condividi tramite


Usare un elenco di blocchi con Azure OpenAI

I filtri di contenuto configurabili sono sufficienti per la maggior parte delle esigenze di moderazione dei contenuti. Tuttavia, potrebbe essere necessario filtrare i termini specifici del caso d'uso.

Prerequisiti

  • Una sottoscrizione di Azure. Crearne una gratuitamente.
  • Dopo aver creato la sottoscrizione di Azure, creare una risorsa Azure OpenAI nel portale di Azure per ottenere il token, la chiave e l'endpoint. Immettere un nome univoco per la risorsa, selezionare la sottoscrizione immessa nel modulo dell'applicazione, selezionare un gruppo di risorse, un'area supportata e un piano tariffario supportato. Selezionare Crea.
    • La distribuzione della risorsa richiede alcuni minuti. Al termine, selezionare Vai alla risorsa. Nel riquadro a sinistra, in Gestione risorse selezionare Chiave di sottoscrizione ed endpoint. L'endpoint e una delle chiavi vengono usati per chiamare le API.
  • Interfaccia della riga di comando di Azure installata
  • cURL installato

Usare elenchi elementi bloccati

È possibile creare elenchi di blocchi con l'API Azure OpenAI. Per iniziare, seguire questa procedura.

Ottenere il 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 con il comando seguente dell'interfaccia della riga di comando di Azure:

az account get-access-token 

Creare o modificare una blocklist

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

  1. Sostituire {subscriptionId} con l'ID sottoscrizione in uso.
  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 "descrizione" 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-04-01-preview' \ 
--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(creazione di un nuovo elenco) o 200(aggiornamento di un elenco esistente).

Applicare un elenco di blocchi a un filtro contenuto

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

Per applicare una lista di blocco di completamento a un filtro contenuto, usare il comando cURL seguente:

  1. Sostituire {subscriptionId} con l'ID sottoscrizione in uso.
  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-04-01-preview' \ 
--header 'Authorization: Bearer {token}' \ 
--header 'Content-Type: application/json' \ 
--data-raw '{ 
    "properties": { 
        "basePolicyName": "Microsoft.Default", 
        "completionBlocklists": [{ 
            "blocklistName": "raiBlocklistName", 
            "blocking": true 
        }], 
        "contentFilters": [ ] 
    } 
}' 

Aggiungere elementi block-level all’elenco

Nota

Vi è un limite massimo di 10.000 termini consentiti in un elenco.

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

  1. Sostituire {subscriptionId} con l'ID sottoscrizione in uso.
  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 l'elemento elenco.
  6. Sostituire {token} con il token ottenuto dal passaggio "Ottenere il token" precedente.
  7. Sostituire il valore del campo "blocking pattern" con l'elemento che si desidera aggiungere alla blocklist. La lunghezza massima di un elemento block-level è di 1000 caratteri. Specificare anche se il criterio è regex o 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-04-01-preview' \ 
--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. Provare 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 una blocklist

È ora possibile testare la distribuzione con l'elenco di blocchi. Per istruzioni sulla chiamata agli endpoint OpenAI di Azure, vedere Avvio rapido.

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

{ 
    "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": [ 
                    { 
                        "filtered": true, 
                        "id": "raiBlocklistName" 
                    } 
                ], 
                "hate": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "self_harm": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "sexual": { 
                    "filtered": false, 
                    "severity": "safe" 
                }, 
                "violence": { 
                    "filtered": false, 
                    "severity": "safe" 
                } 
            } 
        } 
    } 
} 

Se il completamento stesso è bloccato, la risposta restituisce 200, perché il completamento si interrompe solo quando viene trovata una corrispondenza con il contenuto dell'elenco di blocchi. Le annotazioni indicano che è stata trovata una corrispondenza in un elenco di blocchi.

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

Passaggi successivi