Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa guida confronta il filtro predefinito e asincrono per lo streaming di completamenti della chat. Filtro asincrono restituisce i token generati prima che i risultati del filtro contenuto corrispondenti siano disponibili, anziché attendere la valutazione del contenuto memorizzato nel buffer.
Nota
La configurazione del filtro asincrono richiede l'autorizzazione per modificare i criteri di filtro del contenuto nel portale di Foundry.
Scegliere la modalità di streaming corretta
Usare lo streaming predefinito quando:
- Il contenuto deve essere valutato prima che l'applicazione lo visualizzi.
- L'applicazione non può gestire segnali di filtro ritardati o rimuovere il contenuto dopo averlo visualizzato.
Usare il filtro asincrono quando:
- Una minore latenza di streaming è importante per l'applicazione.
- L'applicazione utilizza annotazioni ritardate e segnali di filtro.
- L'applicazione può interrompere la visualizzazione del contenuto e rimuovere o sostituire il contenuto già visualizzato quando arriva un segnale di filtro.
- È stato valutato il rischio che il contenuto che viola i criteri possa essere visualizzato prima dell'arrivo del segnale di filtro e sono state implementate misure di mitigazione aggiuntive appropriate per l'applicazione.
Comportamento di filtro predefinito
Il sistema di protezione del contenuto è integrato e abilitato per impostazione predefinita per tutti i clienti. Con il flusso predefinito di Chat Completions, il contenuto di completamento viene memorizzato nel buffer e valutato dal sistema di guardrail del contenuto. A seconda della configurazione della guardrail, il contenuto memorizzato nel buffer viene restituito se non viola i criteri di protezione o viene bloccato e viene restituito un errore di protezione. Questo processo viene ripetuto fino alla fine del flusso. Il contenuto viene valutato rispetto ai criteri di protezione prima che venga restituito all'applicazione, quindi arriva in blocchi di contenuto memorizzati nel buffer anziché token per token.
Nota
L'ultimo segmento di una risposta trasmessa potrebbe essere restituito prima dell'applicazione della policy di guardrail. Nei test con un elenco di blocchi personalizzato (blocco, applicato ai completamenti) in una distribuzione gpt-4o, un termine nell'elenco di blocco in circa le ultime 15-30 parole di una risposta trasmessa è stato restituito al client con finish_reason: "stop". La stessa risposta è stata bloccata quando stream era impostato su false e bloccata durante lo streaming quando il termine era seguito da altro testo. Se l'applicazione non può tollerare contenuti che violano i criteri che raggiungono il client, usare richieste non di streaming o applicare un filtro personalizzato al segmento finale del flusso.
Filtro asincrono per i completamenti della chat
Con il filtro asincrono, i filtri di contenuto vengono eseguiti in modo asincrono e il contenuto di completamento viene restituito token per token senza buffering per il filtro del contenuto. Questo approccio rimuove la latenza di filtro del contenuto dal recapito dei token, ma ritarda i risultati del filtro e i segnali di violazione dei criteri.
I clienti devono comprendere 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 moderazione del contenuto 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: durante il flusso vengono restituite annotazioni di Chat Completions e messaggi di moderazione del contenuto. Utilizzare questi messaggi nell'applicazione e implementare il comportamento per i segnali ritardati, ad esempio arrestare la visualizzazione del contenuto e rimuovere o sostituire il contenuto già visualizzato.
Segnale di filtro del contenuto: il segnale di errore di filtro del contenuto viene ritardato. Se si verifica una violazione dei criteri, viene restituita non appena è disponibile e il flusso si arresta. 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 per il copyright del cliente.
Considerazioni sul costo
Importante
Fatturazione per il filtraggio dei contenuti in streaming
Quando il filtro del contenuto viene attivato durante lo streaming, gli addebiti si applicano sia per i token di richiesta che per i token di completamento:
- Stato 400 (richiesta filtrata): addebito per la valutazione della richiesta
- Stato 200 con finish_reason: "content_filter": addebito per i token di richiesta e per i token di completamento generati prima del filtro
Questo vale sia per le modalità default che per il filtro asincrono. Per dettagli, vedere prezzi di Azure OpenAI.
Per abilitare il Filtro asincrono nel Microsoft Foundry portal, seguire la guida pratica su come utilizzare il filtro dei contenuti per creare una nuova configurazione di filtro del contenuto, e selezionare Filtro asincrono nella sezione Streaming.
Nota
Il filtro asincrono è disponibile nell'API versione 2024-02-01 e successive. Usare OpenAI Python SDK v1.0+ o Azure OpenAI SDK con versioni API compatibili.
Confronto tra le modalità di filtro del contenuto
| Confrontare | Streaming - Impostazione predefinita | Streaming - Filtro asincrono |
|---|---|---|
| Stato | GA | GA |
| Ammissibilità | Tutti i clienti | Tutti i clienti |
| Come abilitare | Abilitato per impostazione predefinita, nessuna azione necessaria | I clienti possono configurarlo direttamente nel portale foundry (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 |
| 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 caratteri per blocco) |
| 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 di Chat Completions
Messaggio di annotazione prompt
Questo messaggio 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. Il servizio non esegue la moderazione né fornisce inizialmente 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 è sempre una stringa vuota, che indica che non sono presenti nuovi token. Le annotazioni si applicano solo ai token già inviati. Più messaggi di annotazione possono fare riferimento agli stessi token.
"start_offset" e "end_offset" sono offset di granularità bassa nel testo (con 0 all'inizio della richiesta) che contrassegnano il testo a cui si applica l'annotazione.
"check_offset" mostra la quantità di testo completamente moderata. Si tratta di un vincolo inferiore esclusivo sui valori "end_offset" delle annotazioni future. Non diminuisce mai.
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
}
Spiegazione dei campi chiave:
-
check_offset: posizione del carattere fino a cui il contenuto è stato completamente moderato (non diminuisce mai) -
start_offset: posizione iniziale del carattere in cui viene avviato questo batch di annotazioni -
end_offset: posizione del carattere finale in cui termina il batch di annotazione
Tutti gli offset vengono calcolati a partire da 0 all'inizio del testo originale del prompt.
Flusso di risposta di esempio (passa filtri)
L'esempio seguente mostra una risposta di completamento della chat reale che usa il filtro asincrono. Le annotazioni dei prompt non cambiano, i token di completamento vengono inviati senza annotazioni e i nuovi messaggi di annotazione vengono inviati senza token. Questi nuovi messaggi di annotazione vengono invece collegati a determinati offset di filtro 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]
Risoluzione dei problemi
Il flusso si interrompe con il motivo content_filter
Sintomo: il flusso termina in modo imprevisto con finish_reason: "content_filter".
Causa: il contenuto generato dal modello ha violato i criteri di filtro del contenuto. In modalità filtro asincrono questo segnale può arrivare dopo che è già stato visualizzato un contenuto.
Risoluzione:
- Controllare l'ultimo blocco
content_filter_resultsper identificare quale categoria ha attivato il filtro (odio, violenza, contenuto sessuale, autolesionismo, materiale protetto) - Se si usa il filtro asincrono, implementare la redazione del contenuto nella propria applicazione per rimuovere il contenuto che è già stato visualizzato.
- Esaminare la configurazione del filtro del contenuto nel portale di Foundry per regolare le soglie di gravità, se appropriato
- Prendere in considerazione la riformulazione del prompt per evitare l'attivazione di filtri
Annotazioni non visualizzate nel flusso
Sintomo: il flusso viene completato correttamente, ma content_filter_results è sempre vuoto o null.
Causa: le annotazioni di filtro del contenuto potrebbero non essere abilitate per la distribuzione o si usa una versione dell'API che non supporta le annotazioni.
Risoluzione:
- Verificare di usare l'API versione 2024-02-01 o successiva
- Controllare la configurazione del filtro del contenuto nel portale di Foundry
- Verificare che le annotazioni siano abilitate per i filtri selezionati
- Consultare la documentazione relativa alle annotazioni Guardrail per i passaggi di configurazione
Segnali di filtro ritardato in modalità filtro asincrono
Sintomo: il contenuto che deve essere filtrato viene visualizzato brevemente prima di essere contrassegnato retroattivamente.
Causa: si tratta di un comportamento previsto in modalità filtro asincrono. Il filtro viene eseguito in modo asincrono con un segnale garantito entro circa 1.000 caratteri.
Risoluzione:
- Funziona come progettato per la modalità filtro asincrono
- Implementare la redazione del contenuto lato client quando si ricevono segnali di filtro ritardati
- Monitorare i
check_offsetvalori per tenere traccia dello stato di avanzamento della moderazione - Prendere in considerazione l'uso della modalità di streaming predefinita se è necessario applicare filtri immediati per il caso d'uso
Comprendere content_filter_offsets
Sintomo: non chiaro come interpretare check_offseti valori , start_offsete end_offset .
Spiegazione:
-
check_offset: posizione del carattere fino a cui il contenuto è stato completamente moderato (non diminuisce mai) -
start_offset: inizio dell'intervallo di testo a cui si applica questa annotazione -
end_offset: fine dell'intervallo di testo a cui si applica questa annotazione
Tutti gli offset sono posizioni di caratteri con 0 all'inizio della richiesta.
Passaggi successivi
- Configurare i filtri di contenuto - Configurare il filtro asincrono nel portale di Foundry
- Informazioni di riferimento sulle annotazioni guardrail - Schemi di annotazione dettagliati e livelli di gravità
- Filtro dei contenuti - Informazioni sulle funzionalità di sicurezza dei contenuti