Filtri dei contenuti

Importante

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

Il servizio OpenAI di Azure include un sistema di filtro del contenuto che funziona insieme ai modelli di base. 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 altre informazioni sulla comprensione e la mitigazione dei rischi associati all'applicazione, vedere 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 sezioni seguenti forniscono informazioni sulle categorie di filtro del contenuto, i livelli di gravità del filtro e la relativa configurabilità e gli scenari api da considerare nella progettazione e nell'implementazione dell'applicazione.

Categorie di filtro 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à "safe" è 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 danni

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à.  
Sessuale 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.
Rischio di jailbreak Gli attacchi jailbreak sono prompt degli utenti progettati per provocare il modello di intelligenza artificiale generativa in comportamenti esposti che è stato addestrato per evitare o per interrompere le regole impostate nel messaggio di sistema. Tali attacchi possono variare da un ruolo complesso a una subversione sottile dell'obiettivo di sicurezza.
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.

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 del contenuto predefinita è impostata per filtrare in base alla soglia di gravità media per tutte e quattro le categorie di danni al contenuto per richieste e completamenti. 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. La funzionalità di configurabilità è disponibile in anteprima e consente ai clienti di modificare le impostazioni, separatamente per i prompt e i completamenti, per filtrare il contenuto per ogni categoria di contenuto a livelli di gravità diversi, come descritto nella tabella seguente:

Gravità filtrata Configurabile per le richieste Configurabile per i completamenti Descrizione
Basso, medio, elevato Configurazione di filtro più rigorosa. Il contenuto rilevato a livelli di gravità bassi, medi e alti viene filtrato.
Medio, alto Impostazione predefinita. Il contenuto rilevato a livello di gravità basso non viene filtrato, il contenuto a 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.
Nessun filtro Se approvato* Se approvato* Nessun contenuto viene filtrato indipendentemente dal livello di gravità rilevato. Richiede l'approvazione*.

* Solo i clienti che sono stati approvati per il filtro del contenuto modificato hanno un controllo di filtro completo del contenuto e possono disattivare parzialmente o completamente i filtri di contenuto. Il controllo del filtro dei contenuti non si applica ai filtri dei contenuti per DALL-E (anteprima) o GPT-4 Turbo con Vision (anteprima). Applicare i filtri di contenuto modificati usando questo modulo: Verifica di accesso limitato di Azure OpenAI: filtro contenuto modificato (microsoft.com).Apply for modified content filters using this form: Azure OpenAI Limited Access Review: Modified Content Filtering (microsoft.com).

I clienti sono responsabili di garantire che le applicazioni che integrano Azure OpenAI siano conformi al Codice di comportamento.

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

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. Il modo in cui si agisce su queste informazioni sarà specifico dell'applicazione. Il comportamento può essere riepilogato nei punti seguenti:

  • I prompt classificati a livello di categoria e gravità filtrata restituiranno un errore HTTP 400.
  • Le chiamate di completamento non in streaming non restituiscono alcun contenuto quando il contenuto viene filtrato. Il finish_reason valore verrà impostato su content_filter. In rari casi con risposte più lunghe, è possibile restituire un risultato parziale. In questi casi, verrà aggiornato .finish_reason
  • 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 di arresto, la lunghezza o quando viene rilevato il contenuto classificato a una categoria filtrata e il livello di gravità.

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

La tabella seguente illustra i vari modi in cui è possibile visualizzare il filtro del contenuto:

Codice di risposta HTTP Comportamento della risposta
200 Nei casi in cui tutte le generazioni passano i filtri come configurati, alla risposta non vengono aggiunti dettagli di con modalità tenda ration. L'oggetto finish_reason per ogni generazione sarà stop o length.

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 della risposta
200 Le generazioni filtrate avranno un finish_reason valore pari content_filtera .

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 (per lo streaming o non in streaming)

Codice di risposta HTTP Comportamento della risposta
400 La chiamata API ha esito negativo quando il prompt 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 filtrata e gravità

Codice di risposta HTTP Comportamento della 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 della 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 filtro del contenuto non viene eseguito al completamento

Codice di risposta HTTP Comportamento della risposta
200 Se il sistema di filtro del contenuto è inattivo o non è in grado di completare l'operazione in tempo, la richiesta verrà comunque completata senza filtro del contenuto. È possibile determinare che il filtro non è 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 nel frammento di codice seguente, le informazioni seguenti vengono restituite dall'API per i modelli facoltativi: rischio jailbreak, testo del materiale protetto e codice materiale protetto:

  • categoria (jailbreak, protected_material_text, protected_material_code),
  • rilevata (true o false),
  • filtrato (true o false).

Per il modello di codice materiale protetto, le informazioni aggiuntive seguenti vengono restituite dall'API:

  • esempio di citazione di un repository GitHub pubblico in cui è stato trovato un 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.

Le annotazioni sono attualmente disponibili nella versione 2024-02-01 dell'API GA e in tutte le versioni di anteprima a partire da 2023-06-01-preview per i completamenti e i completamenti della chat (modelli GPT). Il frammento di codice seguente illustra come usare le annotazioni:

# 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 a livello di categoria filtrata e 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"
                }
            }
        }
    }
}

Streaming di contenuti

Questa sezione descrive l'esperienza e le opzioni di streaming dei contenuti OpenAI di Azure. Con l'approvazione, è possibile ricevere contenuto dall'API man mano che viene generato, 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 modificato asincrono

I clienti che sono stati approvati per i filtri di contenuto modificati possono scegliere il filtro modificato 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 una latenza zero.

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.

L'approvazione per il filtro del contenuto modificato è necessaria per l'accesso al filtro modificato asincrono. L'applicazione è disponibile qui. Per abilitarla in Azure OpenAI Studio, seguire la guida pratica relativa al filtro contenuto per creare una nuova configurazione di filtro del contenuto e selezionare Filtro modificato asincrono nella sezione Streaming.

Confronto tra le modalità di filtro del contenuto

Confronta Streaming - Impostazione predefinita Streaming - Filtro modificato 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 un filtro modificato 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 come "status": 400 parte della risposta, potrebbe essere previsto 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