Share via


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.

Il servizio OpenAI di Azure include un sistema di filtro dei contenuti che funziona insieme ai modelli di base, inclusi i modelli di generazione di 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, sessuale, violenza e autolesionismo sono stati addestrati e testati in modo specifico sulle seguenti lingue: inglese, tedesco, giapponese, spagnolo, francese, italiano, portoghese e cinese. Tuttavia, il servizio può funzionare in molte altre lingue, ma la qualità potrebbe variare. In tutti i casi, è necessario eseguire test personalizzati per assicurarsi che funzioni per l'applicazione.

Oltre al sistema di filtro del contenuto, il servizio Azure OpenAI esegue il monitoraggio per rilevare il contenuto e/o i comportamenti che suggeriscono l'uso del servizio in modo da 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 monitoraggio di filtri e abusi del contenuto, vedere 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 del contenuto integrato nel servizio OpenAI di Azure contiene:

  • Modelli di classificazione a più classi neurali volti a rilevare e filtrare il contenuto dannoso; i modelli riguardano quattro categorie (odio, violenza, violenza e autolesionismo) in quattro livelli di gravità (sicuri, bassi, medi e alti). Il contenuto rilevato a livello di gravità "sicuro" è etichettato nelle annotazioni, ma non è soggetto a filtri e non è configurabile.
  • Altri modelli di classificazione facoltativi volti a rilevare il rischio di jailbreak e il contenuto noto 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 testo noto o codice sorgente. 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 e equità I danni correlati all'odio e all'equità si riferiscono a qualsiasi contenuto che attacca o usa un linguaggio pejorative o discriminatorio con riferimento a una persona o a gruppi di identità sulla base di determinati attributi diversi di questi gruppi, tra cui razza, etnia, nazionalità, gruppi di identità di genere ed espressione, orientamento sessuale, religione, stato dell'immigrazione, stato della capacità, aspetto personale, e le dimensioni del corpo. 

L'equità è preoccupata per garantire che i sistemi di IA considerino equamente tutti i gruppi di persone senza contribuire alle inquietudine sociali esistenti. Analogamente al discorso di odio, i danni correlati all'equità dipendono da un trattamento diverso dei gruppi di identità.  
Contenuti sessuali Il linguaggio sessuale descrive il linguaggio correlato ad organi anatomici e genitali, relazioni romantiche, atti ritratti in termini erotici o affettuosi, gravidanza, atti sessuali fisici, inclusi quelli rappresentati come un assalto o un atto violento sessuale forzato contro la volontà, la prostituzione, la pornografia e l'abuso.  
Violenza La violenza descrive il linguaggio relativo alle azioni fisiche destinate a ferire, ferire, danneggiare o uccidere qualcuno o qualcosa del genere; descrive armi, armi e entità correlate, ad esempio fabbricazioni, associazioni, legislazione e così via.
Autolesionismo L'autolesionismo descrive il linguaggio correlato alle azioni fisiche destinate a ferire intenzionalmente, ferire, danneggiare il corpo o uccidersi.
Materiale protetto per il testo* Il testo del materiale protetto descrive il contenuto di testo noto ,ad esempio testi di canzoni, articoli, ricette e contenuti Web selezionati, che possono essere restituiti da modelli linguistici di grandi dimensioni.
Materiale protetto per il codice Il codice materiale protetto descrive il codice sorgente che corrisponde a un set di codice sorgente da repository pubblici, che possono essere restituiti da modelli di linguaggio di grandi dimensioni senza una corretta citazione dei repository di origine.

* Se sei un proprietario del materiale di testo e vuoi inviare contenuto di testo per la protezione, invia una richiesta.

Protezioni delle richieste

Tipo Descrizione
Richiedi scudo per attacchi Jailbreak Gli attacchi jailbreak sono prompt degli utenti progettati per provocare il modello di intelligenza artificiale generativa in comportamenti esposti che è stato sottoposto a training per evitare o per interrompere le regole impostate nel messaggio di sistema. Tali attacchi possono variare da un gioco di ruolo complesso a una subversione sottile dell'obiettivo di sicurezza.
Richiedi scudo per attacchi indiretti Gli attacchi indiretti, detti anche attacchi di prompt indiretto o attacchi cross-domain prompt injection, rappresentano una potenziale vulnerabilità in cui terze parti inseriscono istruzioni dannose all'interno di documenti a cui il sistema di intelligenza artificiale generativa può accedere ed elaborare. Richiede l'incorporamento e la formattazione dei documenti.

Contenuto di testo

Avviso

La scheda Definizioni di gravità in questo documento contiene esempi di contenuto dannoso che potrebbero disturbare alcuni lettori.

Contenuto immagine

Avviso

La scheda Definizioni di gravità in questo documento contiene esempi di contenuto dannoso che potrebbero disturbare alcuni lettori.

Configurabilità (anteprima)

La configurazione di filtro dei contenuti predefinita per la serie di modelli GPT è impostata per filtrare in base alla soglia di gravità media per tutte e quattro le categorie di danni al contenuto (odio, violenza, sessuale e autolesionismo) e si applica a entrambe le richieste (testo, testo/ immagine multi modale) e completamenti (testo). Ciò significa che il contenuto rilevato a livello di gravità medio o alto viene filtrato, mentre il contenuto rilevato a livello di gravità basso non viene filtrato in base ai filtri di contenuto. Per DALL-E, la soglia di gravità predefinita è impostata su bassa sia per le richieste (testo) che per i completamenti (immagini), quindi viene filtrato il contenuto rilevato a livelli di gravità bassi, medi o alti. 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 del contenuto modificato hanno un controllo di filtro completo del contenuto e possono disattivare i filtri di contenuto. Applicare i filtri di contenuto modificati tramite questo modulo: Verifica di accesso limitato di OpenAI di Azure: filtri di contenuto modificati e monitoraggio degli abusi (microsoft.com)

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/immagine multi-modale)
  • DALL-E 2 e 3 (immagine)

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 responsabili di garantire che le applicazioni che integrano Azure OpenAI siano conformi al Codice di comportamento.

Dettagli dello scenario

Quando il sistema di filtro del contenuto rileva contenuto dannoso, viene visualizzato un errore nella chiamata API se la richiesta è stata ritenuta inappropriata o nella finish_reason risposta sarà content_filter di indicare che alcuni dei completamenti sono stati filtrati. Quando si compila l'applicazione o il sistema, è consigliabile tenere conto di questi scenari in cui viene filtrato il contenuto restituito dall'API Completamenti, che potrebbe comportare contenuti 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 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 include un valore non Null finish_reason . 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, self_harm)
  • livello di gravità (sicuro, basso, medio o alto) all'interno di ogni categoria di contenuto
  • stato di filtro (true o false).

Modelli facoltativi

I modelli facoltativi possono essere abilitati in annotazioni (restituisce informazioni quando il contenuto è stato contrassegnato, ma non filtrato) o la modalità filtro (restituisce 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 facoltativi:

Modello Output
Jailbreak rilevata (true o false),
filtrata (true o false)
attacchi indiretti rilevata (true o false),
filtrata (true o false)
testo materiale protetto rilevata (true o false),
filtrata (true o false)
codice materiale protetto detected (true o false),
filtrato (true o false),
Citazione di esempio del repository GitHub pubblico in cui è stato trovato il frammento di codice,
Licenza del repository

Quando si visualizza il codice nell'applicazione, è consigliabile 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 Disponibilità generale 2024-02-01 2024-04-01-preview 2023-10-01-preview 2023-06-01-preview
Odio
Violenza
Contenuti sessuali
Autolesionismo
Richiedi scudo per attacchi jailbreak
Richiedi scudo per attacchi indiretti
Testo materiale protetto
Codice materiale protetto
Elenco di blocchi di contenuto volgare
Elenco di blocchi 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 qualsiasi versione dell'API di anteprima a partire da 2023-06-01-preview, nonché la versione 2024-02-01dell'API GA .

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 nelle richieste

Un aspetto chiave delle misure di intelligenza artificiale responsabile di Azure OpenAI è 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 possono distinguere i vari elementi del prompt, 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 Completamento chat

L'API Completamento chat è strutturata per definizione. È costituito da un elenco di messaggi, ognuno con un ruolo assegnato.

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

  • Nel contenuto "utente" più recente verranno rilevate le categorie di rischi RAI seguenti:
    • Odio
    • Contenuti sessuali
    • Violenza
    • Autolesionismo
    • Jailbreak (facoltativo)

Di seguito è riportato un esempio di matrice 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 di contesto tramite Prompt Shields - Indirect Prompt Prompt Attack Detection. È necessario identificare parti dell'input che sono un documento (ad esempio, sito Web recuperato, posta elettronica e così via) 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 contrassegnati:

  • In ogni contenuto "documento" contrassegnato, rilevare le categorie seguenti:
    • Attacchi indiretti (facoltativo)

Di seguito è riportato un esempio di matrice di messaggi di completamento della 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."} 

Escape JSON

Quando si contrassegnano documenti non controllati per il rilevamento, il contenuto del documento deve essere preceduto da un escape JSON per garantire la corretta analisi da parte del sistema di sicurezza OpenAI di Azure.

Ad esempio, vedere il corpo del messaggio di posta elettronica seguente:

Hello Josè, 

I hope this email finds you well today.

Con l'escape JSON, verrà letto:

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

Il testo preceduto da escape in un contesto di completamento della chat leggerà:

{"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 contenuto dall'API durante la generazione, invece di attendere blocchi di contenuto verificati per passare i filtri di contenuto.

Default

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

Filtro asincrono

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

I clienti devono tenere presente che, mentre la funzionalità migliora la latenza, si tratta di un compromesso rispetto alla sicurezza e al controllo in tempo reale di sezioni più piccole dell'output del modello. Poiché i filtri di contenuto vengono eseguiti in modo asincrono, i messaggi di con modalità tenda ration e i segnali di violazione dei criteri vengono ritardati, il che significa che alcune sezioni di contenuto dannoso che altrimenti sarebbero state filtrate immediatamente potrebbero essere visualizzate all'utente.

Annotazioni: le annotazioni e i messaggi di con modalità tenda ration vengono restituiti continuamente durante il flusso. È consigliabile usare annotazioni nell'app e implementare meccanismi di sicurezza aggiuntivi per i contenuti di intelligenza artificiale, ad esempio la redacting del contenuto o la restituzione di informazioni di sicurezza aggiuntive all'utente.

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

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

Per abilitare il filtro asincrono in Azure OpenAI Studio, seguire la guida pratica relativa al filtro contenuto per creare una nuova configurazione di filtro del contenuto e selezionare Filtro asincrono nella sezione Streaming.

Confronto tra le modalità di filtro del contenuto

Confronta Streaming - Impostazione predefinita Streaming - Filtro asincrono
Status Disponibilità generale Anteprima pubblica
Idoneità Tutti i clienti Clienti approvati per il filtro del contenuto modificato
Abilitazione Abilitato per impostazione predefinita, nessuna azione necessaria I clienti approvati per il filtro del contenuto modificato possono configurarlo direttamente in Azure OpenAI Studio (come parte di una configurazione di filtro del contenuto, applicata a livello di distribuzione)
Modalità e disponibilità Testo; tutti i modelli GPT Testo; tutti i modelli GPT ad eccezione di 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 del contenuto Segnale di filtro immediato Segnale di filtro ritardato (fino a ~1.000 incrementi di caratteri)
Configurazioni di filtro del contenuto Supporta l'impostazione predefinita e qualsiasi impostazione di filtro definita dal cliente (inclusi i modelli facoltativi) Supporta l'impostazione predefinita e qualsiasi impostazione di filtro definita dal cliente (inclusi i modelli facoltativi)

Annotazioni e risposte di esempio

Messaggio di annotazione prompt

Corrisponde alle annotazioni predefinite.

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

Messaggio del token di completamento

I messaggi di completamento vengono inoltrati immediatamente. Non viene eseguita alcuna moderazione per 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, che indica che non sono presenti nuovi token. Le annotazioni saranno rilevanti solo per i token già inviati. Potrebbero essere presenti 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 della richiesta) per contrassegnare il testo a cui è rilevante l'annotazione.

"check_offset" rappresenta la quantità di testo completamente moderata. Si tratta di un limite inferiore esclusivo sui "end_offset" valori 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 di completamento della chat reale usando il filtro asincrono. Si noti che le annotazioni della richiesta non vengono modificate, i token di completamento vengono inviati senza annotazioni e i nuovi messaggi di annotazione vengono inviati senza token, ma sono invece associati a determinati offset di filtro del contenuto.

{"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 (bloccato dai 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 del contenuto per una richiesta e viene ricevuto un oggetto "status": 400 come parte della risposta, verrà addebitato un addebito per questa richiesta perché la richiesta è stata valutata dal servizio. Gli addebiti si verificheranno anche quando viene ricevuto un oggetto "status":200 con "finish_reason": "content_filter". In questo caso la richiesta non ha avuto problemi, ma il completamento generato dal modello è stato rilevato per violare le regole di filtro del contenuto che determinano il completamento 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 si visualizza il codice nell'applicazione.

Passaggi successivi