Condividi tramite


Filtri dei contenuti

Importante

Il sistema di filtro del contenuto non viene applicato a richieste e completamenti elaborati dal modello Whisper nel Servizio OpenAI di Azure. Altre informazioni sul modello Whisper in Azure OpenAI.

Servizio OpenAI di Azure include un sistema di filtro dei contenuti che funziona insieme a modelli di base e i modelli di generazione immagini DALL-E. Questo sistema funziona eseguendo sia la richiesta che il completamento tramite un insieme di modelli di classificazione volti a rilevare e impedire l'output di contenuto dannoso. Il sistema di filtro del contenuto rileva e agisce su categorie specifiche di contenuto potenzialmente dannoso sia nelle richieste di input che nei completamenti di output. Le variazioni nelle configurazioni dell'API e nella progettazione dell'applicazione potrebbero influire sui completamenti e quindi sul comportamento di filtro.

I modelli di filtro dei contenuti per le categorie odio, sesso, violenza e autolesionismo sono stati sottoposti a training specifico e testati nelle lingue seguenti: inglese, tedesco, giapponese, spagnolo, francese, italiano, portoghese e cinese. Il servizio, tuttavia, può funzionare in molte altre lingue, ma la qualità può variare. In tutti i casi, è necessario eseguire test personalizzati per assicurarsi che funzioni per l'applicazione.

Oltre al sistema di filtro dei contenuti, il Servizio OpenAI di Azure esegue il monitoraggio per rilevare contenuti e/o comportamenti che suggeriscono un uso del servizio che potrebbe violare le condizioni del prodotto applicabili. Per ulteriori informazioni su come comprendere e mitigare i rischi associati alla propria applicazione, consultare la nota sulla trasparenza per Azure OpenAI. Per altre informazioni su come vengono elaborati i dati per il filtro dei contenuti e il monitoraggio di abusi, consultare Dati, privacy e sicurezza per il Servizio OpenAI di Azure.

Le seguenti sezioni forniscono informazioni sulle categorie di filtraggio del contenuto, i livelli di intensità del filtro e la relativa configurabilità, e gli scenari API da considerare nella progettazione e nell'implementazione dell'applicazione.

Categorie di filtraggio del contenuto

Il sistema di filtro dei contenuti integrato nel Servizio OpenAI di Azure include:

  • Modelli di classificazione multiclasse neurali finalizzati all’individuazione e al filtro di contenuti dannosi; i modelli coprono quattro categorie (odio, sesso, violenza e autolesionismo) in quattro livelli di gravità (sicuro, basso, medio e alto). Il contenuto rilevato a livello di gravità "sicuro" è etichettato nelle annotazioni, ma non è soggetto a filtri e non è configurabile.
  • Altri modelli di classificazione opzionali finalizzati a rilevare il rischi di jailbreak e contenuti noti per testo e codice; questi modelli sono classificatori binari che contrassegnano se il comportamento dell'utente o del modello è qualificato come attacco jailbreak o corrisponde a codice sorgente o testo noto. L'uso di questi modelli è facoltativo, ma l'uso del modello di codice materiale protetto può essere richiesto per la copertura dell'impegno per il copyright del cliente.

Categorie di rischio

Categoria Descrizione
Odio ed equità I danni correlati a odio ed equità fanno riferimento a contenuti che attaccano o usano un linguaggio peggiorativo o discriminatorio in riferimento a una persona o a un gruppo di identità sulla base di determinati attributi distintivi di tali gruppi, tra cui, a titolo esemplificativo, razza, etnia, nazionalità, gruppi di identità di genere ed espressione, orientamento sessuale, religione, stato di immigrazione, stato di abilità, aspetto fisico e taglie fisiche. 

L’equità è finalizzata a garantire che i sistemi di intelligenza artificiale trattino tutti i gruppi di persone in modo equo senza contribuire alle iniquità sociali esistenti. Analogamente ai discorsi che esprimono odio, i danni correlati all'equità dipendono da un trattamento diverso dei gruppi di identità.  
Sessuale La categoria sesso descrive il linguaggio correlato a organi anatomici e genitali, relazioni romantiche, atti rappresentati in termini erotici o affettuosi, gravidanza, atti sessuali fisici, compresi quelli rappresentati come violenza sessuale o stupro, prostituzione, pornografia e abuso.  
Violenza La categoria violenza descrive il linguaggio correlato ad azioni fisiche finalizzate a ferire, provocare lesioni, danneggiare o uccidere qualcuno o qualcosa; descrive ordigni, armi ed entità correlate, ad esempio manufatti, associazioni, legislazione ecc.
Autolesionismo La categoria autolesionismo descrive il linguaggio correlato ad azioni fisiche finalizzate a ferire, provocare lesioni o danneggiare il proprio corpo oppure a togliersi la vita.
Materiale protetto per testo* Il testo materiale protetto descrive contenuti testuali noti (ad esempio testi di canzoni, articoli, ricette e contenuti Web selezionati) che possono essere prodotti da modelli linguistici di grandi dimensioni.
Materiale protetto per codice Il codice materiale protetto descrive il codice sorgente corrispondente a un set di codice sorgente proveniente da repository pubblici, che possono essere prodotti da modelli linguistici di grandi dimensioni senza un'adeguata citazione dei repository di origine.

* Se l’utente è il proprietario del materiale testuale e desidera inviare contenuto testuale per la protezione, può presentare una richiesta.

Protezioni delle richieste

Tipo Descrizione
Prompt Shield per attacchi jailbreak Gli attacchi jailbreak sono prompt utente progettati per indurre il modello di intelligenza artificiale generativa a esibire comportamenti che è stato addestrato a evitare o a infrangere le regole stabilite nel messaggio di sistema. Tali attacchi possono variare da un gioco di ruolo intricato a una subversione sottile dell'obiettivo di sicurezza.
Prompt Shield per attacchi indiretti Gli attacchi indiretti, noti anche come attacchi con prompt indiretti o attacchi con iniezione di prompt tra domini, rappresentano una potenziale vulnerabilità in cui soggetti terzi inseriscono istruzioni dannose all'interno di documenti accessibili ed elaborabili dal sistema di intelligenza artificiale generativa. Richiede la formattazione e l'incorporamento di documenti.

Contenuto di testo

Avviso

La scheda Definizioni di gravità in questo documento include esempi di contenuti dannosi che potrebbero disturbare alcuni lettori.

Contenuto immagine

Avviso

La scheda Definizioni di gravità in questo documento include esempi di contenuti dannosi che potrebbero disturbare alcuni lettori.

Configurabilità (anteprima)

La configurazione predefinita di filtro dei contenuti per la serie di modelli GPT è impostata per filtrare in base alla soglia di gravità media per tutte e quattro le categorie di danno da contenuto (odio, violenza, sesso e autolesionismo) e si applica sia ai prompt (testo, testo/immagini multimodali) che ai completion (testo). Ciò implica che i contenuti rilevati con livello di gravità medio o alto vengono filtrati, mentre i contenuti rilevati a livello di gravità basso non vengono filtrati in base ai filtri dei contenuti. Per DALL-E, la soglia di gravità predefinita è impostata su bassa sia per i prompt (testo) che per i completion (immagini), quindi i contenuti rilevati con livelli di gravità bassi, medi o alti vengono filtrati. La funzionalità di configurabilità è disponibile in anteprima e consente ai clienti di modificare le impostazioni (separatamente per prompt e completamenti) in modo da filtrare contenuto per ogni categoria di contenuto a livelli di gravità diversi, come descritto nella tabella seguente:

Intensità del filtro Configurabile per richieste Configurabile per completamenti Descrizione
Basso, medio, elevato Configurazione di filtraggio più intenso. Il contenuto rilevato a livelli di gravità basso, medio e alto viene filtrato.
Medio, alto Il contenuto rilevato con livello di gravità basso non viene filtrato, il contenuto a livello medio e alto viene filtrato.
Alto Il contenuto rilevato a livelli di gravità basso e medio non viene filtrato. Viene filtrato solo il contenuto a livello di gravità elevato. Richiede approvazione1.
Nessun filtro Se approvato1 Se approvato1 Nessun contenuto viene filtrato indipendentemente dal livello di gravità rilevato. Richiede approvazione1.

1 Per i modelli OpenAI di Azure, solo i clienti che sono stati approvati per il filtro dei contenuti modificato hanno il controllo completo del filtro dei contenuti e possono disattivare i filtri dei contenuti. Applicare per filtri di contenuti modificati tramite questo modulo: Esame dell'accesso limitato di OpenAI di Azure: filtri di contenuti modificati Per i clienti di Azure per enti pubblici, applicare filtri di contenuti modificati tramite questo modulo: Azure per enti pubblici - Richiedere il filtro di contenuti modificato per il Servizio OpenAI di Azure.

Questa funzionalità di anteprima è disponibile per i modelli OpenAI di Azure seguenti:

  • Serie di modelli GPT (testo)
  • GPT-4 Turbo Vision 2024-04-09 (testo/immagini multimodali)
  • DALL-E 2 e 3 (immagini)

Le configurazioni di filtraggio del contenuto vengono create all'interno di una risorsa in Azure AI Studio e possono essere associate a distribuzioni. Ulteriori informazioni sulla configurabilità sono disponibili qui.

I clienti sono tenuti ad accertarsi che le applicazioni che integrano OpenAI di Azure siano conformi al Codice di comportamento.

Dettagli dello scenario

Quando il sistema di filtro dei contenuti rileva contenuti dannosi, si riceverà un errore nella chiamata dell’API se il prompt è stato ritenuto inappropriato, oppure finish_reason nella risposta sarà content_filter in modo da indicare che parte del completion è stato filtrato. Durante la compilazione dell'applicazione o del sistema, è opportuno tenere conto degli scenari in cui il contenuto restituito dall'API Completion è filtrato, per cui i contenuti potrebbero essere incompleti. Le misure da prendere in base a questa informazione saranno specifiche all'applicazione. Il comportamento può essere riepilogato nei seguenti punti:

  • I prompt classificati a livello di categoria e gravità filtrata restituiranno un errore HTTP 400.
  • Quando il contenuto viene filtrato, le chiamate di completamento non in streaming non restituiscono alcun contenuto. Il valore finish_reason verrà impostato su content_filter. In rari casi di risposte più lunghe, è possibile restituire un risultato parziale. In questi casi, finish_reason verrà aggiornato.
  • Per le chiamate di completamento del flusso, i segmenti verranno restituiti all'utente man mano che vengono completati. Il servizio continuerà lo streaming fino a raggiungere un token o una lunghezza di arresto, o quando viene rilevato contenuto classificato in una categoria di filtraggio e a un livello di gravità.

Scenario: si invia una chiamata di completamento non in streaming che richiede più output; nessun contenuto è classificato a livello di categoria di filtraggio e di gravità

La tabella seguente illustra i vari modi in cui il filtraggio del contenuto può essere visualizzato:

Codice di risposta HTTP Comportamento risposta
200 Nei casi in cui tutte le generazioni passano i filtri come configurati, nessun dettaglio di moderazione del contenuto viene aggiunto alla risposta. L'oggetto finish_reason per ogni generazione sarà arresto o lunghezza.

Payload della richiesta di esempio:

{
    "prompt":"Text example", 
    "n": 3,
    "stream": false
}

Esempio di risposta JSON:

{
    "id": "example-id",
    "object": "text_completion",
    "created": 1653666286,
    "model": "davinci",
    "choices": [
        {
            "text": "Response generated text",
            "index": 0,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

Scenario: la chiamata dell’API richiede più risposte (N>1) e almeno una delle risposte viene filtrata

Codice di risposta HTTP Comportamento risposta
200 Le generazioni filtrate avranno un valore finish_reason di content_filter.

Payload della richiesta di esempio:

{
    "prompt":"Text example",
    "n": 3,
    "stream": false
}

Esempio di risposta JSON:

{
    "id": "example",
    "object": "text_completion",
    "created": 1653666831,
    "model": "ada",
    "choices": [
        {
            "text": "returned text 1",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null
        },
        {
            "text": "returned text 2",
            "index": 1,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

Scenario: viene inviata una richiesta di input inappropriata all'API dei completamenti (sia per streaming che non streaming)

Codice di risposta HTTP Comportamento risposta
400 La chiamata API ha esito negativo quando la richiesta attiva un filtro di contenuto come configurato. Modificare il prompt e riprovare.

Payload della richiesta di esempio:

{
    "prompt":"Content that triggered the filtering model"
}

Esempio di risposta JSON:

"error": {
    "message": "The response was filtered",
    "type": null,
    "param": "prompt",
    "code": "content_filter",
    "status": 400
}

Scenario: si effettua una chiamata di completamento del flusso; nessun contenuto di output viene classificato a livello di categoria di filtraggio e gravità

Codice di risposta HTTP Comportamento risposta
200 In questo caso, la chiamata tornerà alla generazione completa e finish_reason sarà "length" o "stop" per ogni risposta generata.

Payload della richiesta di esempio:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

Esempio di risposta JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670914,
    "model": "ada",
    "choices": [
        {
            "text": "last part of generation",
            "index": 2,
            "finish_reason": "stop",
            "logprobs": null
        }
    ]
}

Scenario: si effettua una chiamata di completamento del flusso che richiede più completamenti e almeno una parte del contenuto di output viene filtrata

Codice di risposta HTTP Comportamento risposta
200 Per un determinato indice di generazione, l'ultimo blocco della generazione includerà un valore finish_reason non null. Il valore è content_filter quando la generazione è stata filtrata.

Payload della richiesta di esempio:

{
    "prompt":"Text example",
    "n": 3,
    "stream": true
}

Esempio di risposta JSON:

 {
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1653670515,
    "model": "ada",
    "choices": [
        {
            "text": "Last part of generated text streamed back",
            "index": 2,
            "finish_reason": "content_filter",
            "logprobs": null
        }
    ]
}

Scenario: il sistema di filtraggio del contenuto non viene eseguito al completamento

Codice di risposta HTTP Comportamento risposta
200 Se il sistema di filtraggio del contenuto è inattivo o non è in grado di completare l'operazione in tempo, la richiesta verrà comunque completata senza filtraggio del contenuto. È possibile determinare se il filtro non sia stato applicato cercando un messaggio di errore nell'oggetto content_filter_result.

Payload della richiesta di esempio:

{
    "prompt":"Text example",
    "n": 1,
    "stream": false
}

Esempio di risposta JSON:

{
    "id": "cmpl-example",
    "object": "text_completion",
    "created": 1652294703,
    "model": "ada",
    "choices": [
        {
            "text": "generated text",
            "index": 0,
            "finish_reason": "length",
            "logprobs": null,
            "content_filter_result": {
                "error": {
                    "code": "content_filter_error",
                    "message": "The contents are not filtered"
                }
            }
        }
    ]
}

Annotazioni

Filtri di contenuto

Quando le annotazioni sono abilitate come illustrato nel frammento di codice seguente, le informazioni seguenti vengono restituite tramite l'API per le categorie odio ed equità, sesso, violenza e autolesionismo:

  • categoria di filtro dei contenuti (odio, sesso, violenza, autolesionismo)
  • livello di gravità (sicuro, basso, medio o alto) all'interno di ogni categoria di contenuti
  • stato di filtro (true o false).

Modelli opzionali

È possibile abilitare modelli opzionali in annotazioni (restituzione di informazioni quando il contenuto è stato contrassegnato ma non filtrato) o la modalità filtro (restituzione di informazioni quando il contenuto è stato contrassegnato e filtrato).

Quando le annotazioni sono abilitate come illustrato nei frammenti di codice seguenti, le informazioni seguenti vengono restituite dall'API per i modelli opzionali:

Modello Output
jailbreak rilevati (true o false),
filtrati (true o false)
attacchi indiretti rilevati (true o false),
filtrati (true o false)
testo materiale protetto rilevati (true o false),
filtrati (true o false)
codice materiale protetto rilevati (true o false),
filtrati (true o false),
Citazione di esempio del repository GitHub pubblico in cui è stato trovato il frammento di codice
La licenza del repository

Quando viene visualizzato il codice nell'applicazione, è preferibile che l'applicazione visualizzi anche la citazione di esempio delle annotazioni. La conformità alla licenza citata può essere necessaria anche per la copertura dell'impegno per il copyright del cliente.

Vedere la tabella seguente per la disponibilità delle annotazioni in ogni versione dell'API:

Categoria 2024-02-01 - Disponibilità generale 2024-04-01 - anteprima 2023-10-01 - anteprima 2023-06-01 - anteprima
Odio
Violenza
Sessuale
Autolesionismo
Prompt Shield per attacchi jailbreak
Prompt Shield per attacchi indiretti
Testo materiale protetto
Codice materiale protetto
Blocklist per linguaggio blasfemo
Blocklist personalizzato
# os.getenv() for the endpoint and key assumes that you are using environment variables.

import os
from openai import AzureOpenAI
client = AzureOpenAI(
    api_key=os.getenv("AZURE_OPENAI_API_KEY"),  
    api_version="2024-03-01-preview",
    azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT") 
    )

response = client.completions.create(
    model="gpt-35-turbo-instruct", # model = "deployment_name".
    prompt="{Example prompt where a severity level of low is detected}" 
    # Content that is detected at severity level medium or high is filtered, 
    # while content detected at severity level low isn't filtered by the content filters.
)

print(response.model_dump_json(indent=2))

Output

{ 
  "choices": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "protected_material_code": { 
          "citation": { 
            "URL": " https://github.com/username/repository-name/path/to/file-example.txt", 
            "license": "EXAMPLE-LICENSE" 
          }, 
          "detected": true,
          "filtered": false 
        }, 
        "protected_material_text": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "finish_reason": "stop", 
      "index": 0, 
      "message": { 
        "content": "Example model response will be returned ", 
        "role": "assistant" 
      } 
    } 
  ], 
  "created": 1699386280, 
  "id": "chatcmpl-8IMI4HzcmcK6I77vpOJCPt0Vcf8zJ", 
  "model": "gpt-35-turbo-instruct", 
  "object": "text.completion",
  "usage": { 
    "completion_tokens": 40, 
    "prompt_tokens": 11, 
    "total_tokens": 417 
  },  
  "prompt_filter_results": [ 
    { 
      "content_filter_results": { 
        "hate": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "jailbreak": { 
          "detected": false, 
          "filtered": false 
        }, 
        "profanity": { 
          "detected": false, 
          "filtered": false 
        }, 
        "self_harm": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "sexual": { 
          "filtered": false, 
          "severity": "safe" 
        }, 
        "violence": { 
          "filtered": false, 
          "severity": "safe" 
        } 
      }, 
      "prompt_index": 0 
    } 
  ]
} 

Per informazioni dettagliate sugli endpoint dell'API REST di inferenza per Azure OpenAI e su come creare chat e completamenti, seguire le indicazioni di riferimento sulle API REST del servizio OpenAI di Azure. Le annotazioni vengono restituite per tutti gli scenari quando si usa qualunque versione dell'API di anteprima a partire da 2023-06-01-preview, nonché la versione dell'API di disponibilità generale 2024-02-01.

Scenario di esempio: un prompt di input contenente contenuto, classificato in una categoria di filtraggio e a un livello di gravità, viene inviato all'API dei completamenti

{
    "error": {
        "message": "The response was filtered due to the prompt triggering Azure 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=21298766",
        "type": null,
        "param": "prompt",
        "code": "content_filter",
        "status": 400,
        "innererror": {
            "code": "ResponsibleAIPolicyViolation",
            "content_filter_result": {
                "hate": {
                    "filtered": true,
                    "severity": "high"
                },
                "self-harm": {
                    "filtered": true,
                    "severity": "high"
                },
                "sexual": {
                    "filtered": false,
                    "severity": "safe"
                },
                "violence": {
                    "filtered":true,
                    "severity": "medium"
                }
            }
        }
    }
}

Incorporamento di documenti in prompt

Un aspetto chiave delle misure di intelligenza artificiale responsabile di OpenAI di Azure è il sistema di sicurezza dei contenuti. Questo sistema viene eseguito insieme al modello GPT principale per monitorare eventuali irregolarità nell'input e nell'output del modello. Le prestazioni sono migliorate quando è possibile distinguere i vari elementi del prompt utente, ad esempio l'input di sistema, l'input dell'utente e l'output dell'assistente di intelligenza artificiale.

Per le funzionalità di rilevamento avanzate, i prompt devono essere formattati in base ai metodi consigliati seguenti.

API Completion per chat

L'API Completion per chat è strutturata per definizione. Consiste in un elenco di messaggi, ognuno con un ruolo assegnato.

Il sistema di sicurezza analizzerà questo formato strutturato e applicherà il comportamento seguente:

  • Nel contenuto dell’“utente” più recente verranno rilevate le categorie di rischi RAI seguenti:
    • Odio
    • Sessuale
    • Violenza
    • Autolesionismo
    • Jailbreak (opzionale)

Di seguito è riportato un esempio di array di messaggi:

{"role": "system", "content": "Provide some context and/or instructions to the model."}, 
{"role": "user", "content": "Example question goes here."}, 
{"role": "assistant", "content": "Example answer goes here."}, 
{"role": "user", "content": "First question/message for the model to actually respond to."} 

Incorporamento di documenti nel prompt

Oltre al rilevamento dei contenuti dell'ultimo utente, Azure OpenAI supporta anche il rilevamento di rischi specifici all'interno dei documenti contestuali tramite Prompt Shield e rilevamento di attacchi prompt indiretti. È opportuno identificare parti dell'input che costituiscono un documento (ad esempio un sito Web recuperato, e-mail ecc.) con il delimitatore di documento seguente.

<documents> 
*insert your document content here* 
</documents>

In questo caso, sono disponibili le opzioni seguenti per il rilevamento nei documenti con tag:

  • Nel contenuto di ogni “documento” con tag, rilevare le categorie seguenti:
    • Attacchi indiretti (opzionale)

Di seguito è riportato un esempio di array di messaggi completion per chat:

{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n*insert your document content here*\n<\\documents> \"\"\""}, 

{"role": "user", "content": "First question/message for the model to actually respond to."} 

Escaping JSON

Quando si aggiungono tag a documenti non controllati per il rilevamento, il contenuto del documento deve essere preceduto da escape JSON per accertarsi che il sistema di sicurezza OpenAI di Azure esegua correttamente un’analisi.

Ad esempio, vedere il corpo dell’email seguente:

Hello Josè, 

I hope this email finds you well today.

Con l'escaping JSON, sarà:

Hello Jos\u00E9,\nI hope this email finds you well today. 

Il testo preceduto da escape in un contesto di completion per chat sarà:

{"role": "system", "content": "Provide some context and/or instructions to the model, including document context. \"\"\" <documents>\n Hello Jos\\u00E9,\\nI hope this email finds you well today. \n<\\documents> \"\"\""}, 

{"role": "user", "content": "First question/message for the model to actually respond to."}

Streaming di contenuti

Questa sezione descrive l'esperienza e le opzioni di streaming dei contenuti OpenAI di Azure. I clienti hanno la possibilità di ricevere contenuti dall'API durante la generazione, invece di attendere blocchi di contenuto verificati per il passaggio di filtri di contenuto.

Default

Il sistema di filtro dei contenuti è integrato e abilitato per impostazione predefinita per tutti i clienti. Nello scenario di streaming predefinito, il contenuto di completion viene memorizzato nel buffer, il sistema di filtro dei contenuti viene eseguito sul contenuto memorizzato nel buffer e, a seconda della configurazione di filtro dei contenuti, il contenuto viene restituito all'utente se non viola i criteri di filtro dei contenuti (impostazione predefinita di Microsoft o una configurazione utente personalizzata) o viene immediatamente bloccato e restituisce un errore di filtro dei contenuti, senza restituire il contenuto di completion dannoso. Questo processo viene ripetuto fino alla fine del flusso. Il contenuto viene esaminato completamente in base ai criteri di filtro dei contenuti prima che venga restituito all'utente. In questo caso, il contenuto non viene restituito token per token, ma in “blocchi di contenuto” delle rispettive dimensioni del buffer.

Filtro asincrono

I clienti possono scegliere il filtro asincrono come opzione aggiuntiva che offre una nuova esperienza di streaming. In questo caso, i filtri di contenuto vengono eseguiti in modo asincrono e il contenuto di completion viene restituito immediatamente con un'esperienza di streaming token per token priva di problemi. Nessun contenuto memorizzato nel buffer, per cui l'esperienza di streaming è veloce, senza la latenza associata alla sicurezza dei contenuti.

I clienti devono tenere presente che, mentre la funzionalità migliora la latenza, si tratta di un compromesso tra la sicurezza e il controllo in tempo reale di sezioni più piccole dell'output del modello. Poiché i filtri dei contenuti vengono eseguiti in modo asincrono, i messaggi di moderazione dei contenuti e i segnali di violazione dei criteri vengono ritardati, per cui alcune sezioni di contenuti dannosi che altrimenti sarebbero state filtrate immediatamente potrebbero essere visualizzate dall'utente.

Annotazioni: le annotazioni e i messaggi di moderazione dei contenuti vengono restituiti continuamente durante il flusso. È preferibile usare annotazioni nell'app e implementare meccanismi di sicurezza aggiuntivi per i contenuti di intelligenza artificiale, ad esempio il redacting dei contenuti o la restituzione di informazioni di sicurezza aggiuntive all'utente.

Segnale di filtro dei contenuti: il segnale di errore di filtro dei contenuti viene ritardato. In caso di violazione dei criteri, viene restituito non appena è disponibile e il flusso viene arrestato. Il segnale di filtro dei contenuti è garantito all'interno di una finestra di circa 1.000 caratteri dei contenuti che violano i criteri.

Impegno per il copyright del cliente: il contenuto contrassegnato retroattivamente come materiale protetto potrebbe non essere idoneo per la copertura dell'impegno per il copyright del cliente.

Per abilitare il filtro asincrono in Azure OpenAI Studio, seguire la guida pratica Guida pratica per il filtro dei contenuti per creare una nuova configurazione di filtro dei contenuti e selezionare Filtro asincrono nella sezione Streaming.

Confronto tra le modalità di filtro dei contenuti

Confronta Streaming - Impostazione predefinita Streaming - Filtro asincrono
Status Disponibilità generale Anteprima pubblica
Idoneità Tutti i clienti Clienti approvati per il filtro dei contenuti modificato
Abilitazione Abilitato per impostazione predefinita, nessuna azione necessaria I clienti approvati per il filtro dei contenuti modificato possono configurarlo direttamente in Azure OpenAI Studio (come parte di una configurazione di filtro dei contenuti, applicata a livello di distribuzione)
Modalità e disponibilità Testo: tutti i modelli GPT Testo: tutti i modelli GPT tranne gpt-4-vision
Esperienza di streaming Il contenuto viene memorizzato nel buffer e restituito in blocchi Latenza zero (nessun buffering, i filtri vengono eseguiti in modo asincrono)
Segnale di filtro dei contenuti Segnale di filtro immediato Segnale di filtro ritardato (con incrementi fino a 1.000 caratteri circa)
Configurazioni di filtro dei contenuti Supporta l'impostazione predefinita e qualunque impostazione di filtro definita dal cliente (inclusi modelli opzionali) Supporta l'impostazione predefinita e qualunque impostazione di filtro definita dal cliente (inclusi modelli opzionali)

Annotazioni e risposte di esempio

Messaggio di annotazione prompt

Come le annotazioni predefinite.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "prompt_filter_results": [ 
        { 
            "prompt_index": 0, 
            "content_filter_results": { ... } 
        } 
    ], 
    "choices": [], 
    "usage": null 
} 

Messaggio del token completion

I messaggi completion vengono inoltrati immediatamente. Non viene eseguita alcuna moderazione prima e inizialmente non vengono fornite annotazioni.

data: { 
    "id": "chatcmpl-7rAJvsS1QQCDuZYDDdQuMJVMV3x3N", 
    "object": "chat.completion.chunk", 
    "created": 1692905411, 
    "model": "gpt-35-turbo", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "delta": { 
                "content": "Color" 
            } 
        } 
    ], 
    "usage": null 
} 

Messaggio di annotazione

Il campo di testo sarà sempre una stringa vuota, indicante l’assenza di nuovi token. Le annotazioni saranno pertinenti solo ai token già inviati. Potrebbero esistere più messaggi di annotazione che fanno riferimento agli stessi token.

"start_offset" e "end_offset" sono offset di granularità bassa nel testo (con 0 all'inizio del prompt) per contrassegnare il testo a cui è pertinente l'annotazione.

"check_offset" rappresenta la quantità di testo completamente moderata. È un limite inferiore esclusivo sui valori "end_offset" delle annotazioni future. Non diminuisce.

data: { 
    "id": "", 
    "object": "", 
    "created": 0, 
    "model": "", 
    "choices": [ 
        { 
            "index": 0, 
            "finish_reason": null, 
            "content_filter_results": { ... }, 
            "content_filter_raw": [ ... ], 
            "content_filter_offsets": { 
                "check_offset": 44, 
                "start_offset": 44, 
                "end_offset": 198 
            } 
        } 
    ], 
    "usage": null 
} 

Flusso di risposta di esempio (passa filtri)

Di seguito è riportata una risposta completion usando il filtro asincrono. Tenere presente che le annotazioni del prompt non vengono modificate, i token completion vengono inviati senza annotazioni e i nuovi messaggi di annotazione vengono inviati senza token, ma associati a determinati offset di filtro dei contenuti.

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "What is color?"}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","prompt_annotations":[{"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":[],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Color"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" is"}}],"usage":null} 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" a"}}],"usage":null} 

... 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":44,"start_offset":44,"end_offset":198}}],"usage":null} 

... 

data: {"id":"chatcmpl-7rCNsVeZy0PGnX3H6jK8STps5nZUY","object":"chat.completion.chunk","created":1692913344,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":"stop","delta":{}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":506,"start_offset":44,"end_offset":571}}],"usage":null} 

data: [DONE] 

Flusso di risposta di esempio (bloccata da filtri)

{"temperature": 0, "frequency_penalty": 0, "presence_penalty": 1.0, "top_p": 1.0, "max_tokens": 800, "messages": [{"role": "user", "content": "Tell me the lyrics to \"Hey Jude\"."}], "stream": true}

data: {"id":"","object":"","created":0,"model":"","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":[],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"role":"assistant"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":"Hey"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" Jude"}}],"usage":null} 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35-turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":","}}],"usage":null} 

... 

data: {"id":"chatcmpl-8JCbt5d4luUIhYCI7YH4dQK7hnHx2","object":"chat.completion.chunk","created":1699587397,"model":"gpt-35- 

turbo","choices":[{"index":0,"finish_reason":null,"delta":{"content":" better"}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":null,"content_filter_results":{"hate":{"filtered":false,"severity":"safe"},"self_harm":{"filtered":false,"severity":"safe"},"sexual":{"filtered":false,"severity":"safe"},"violence":{"filtered":false,"severity":"safe"}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: {"id":"","object":"","created":0,"model":"","choices":[{"index":0,"finish_reason":"content_filter","content_filter_results":{"protected_material_text":{"detected":true,"filtered":true}},"content_filter_offsets":{"check_offset":65,"start_offset":65,"end_offset":1056}}],"usage":null} 

data: [DONE] 

Importante

Quando viene attivato il filtro dei contenuti per un prompt e viene ricevuto "status": 400 come parte della risposta, verrà addebitato un addebito per questa richiesta quando il prompt è stato valutato dal servizio. A causa della natura asincrona del sistema di filtro dei contenuti, verrà eseguito un addebito per i token sia prompt che completion. Verranno eseguiti addebiti anche quando viene ricevuto "status":200 con "finish_reason": "content_filter". In questo caso, il prompt non ha avuto problemi, ma è stato rilevato che il completion generato dal modello viola le regole di filtro dei contenuti che determinano il completion filtrato.

Procedure consigliate

Nell'ambito della progettazione dell'applicazione, prendere in considerazione le seguenti procedure consigliate per offrire un'esperienza positiva con l'applicazione, riducendo al minimo i potenziali danni:

  • Decidere come gestire gli scenari in cui gli utenti inviano richieste contenenti contenuto classificato a livello di categoria filtrata e gravità oppure usano in modo improprio l'applicazione.
  • Verificare se finish_reason un completamento è filtrato.
  • Verificare che non sia presente alcun oggetto errore in content_filter_result (a indicare che i filtri contenuto non sono stati eseguiti).
  • Se si usa il modello di codice materiale protetto in modalità annotazione, visualizzare l'URL di citazione quando viene visualizzato il codice nell'applicazione.

Passaggi successivi