Filtri di sicurezza e dei contenuti

I modelli di AI generativa di Google, come Gemini 1.5 Flash e Gemini 1.5 Pro, sono progettati per dare la priorità alla sicurezza. Tuttavia, possono comunque generare risposte dannose, soprattutto quando vengono richieste esplicitamente. Per migliorare ulteriormente la sicurezza e ridurre al minimo gli abusi, puoi configurare i filtri dei contenuti per bloccare le risposte potenzialmente dannose.

Questa pagina descrive ciascuno dei tipi di filtri di sicurezza e contenuti e illustra i concetti chiave di sicurezza. Per i filtri dei contenuti configurabili, viene mostrato come configurare le soglie di blocco di ogni categoria di danno per controllare la frequenza con cui vengono bloccati i prompt e le risposte.

I filtri di sicurezza e dei contenuti fungono da barriera, impedendo l'output dannoso, ma non influiscono direttamente sul comportamento del modello. Per scoprire di più sulla guidabilità del modello, consulta le istruzioni di sistema per la sicurezza.

Prompt non sicuri

L'API Gemini di Vertex AI fornisce uno dei seguenti codici enum per spiegare il motivo del rifiuto di un prompt:

Enum Tipo di filtro Descrizione
PROHIBITED_CONTENT Filtro di sicurezza non configurabile Il prompt è stato bloccato perché è stato segnalato per contenuti vietati, in genere contenuti pedopornografici.
BLOCKED_REASON_UNSPECIFIED N/D Il motivo del blocco del prompt non è specificato.
OTHER N/D Questo enum si riferisce a tutti gli altri motivi per cui un prompt viene bloccato. Tieni presente che l'API Gemini di Vertex AI non supporta tutte le lingue. Per un elenco delle lingue supportate, consulta Supporto delle lingue di Gemini.

Per scoprire di più, consulta BlockedReason.

Di seguito è riportato un esempio di output dell'API Gemini di Vertex AI quando un prompt viene bloccato perché contiene PROHIBITED_CONTENT:

{
  "promptFeedback": {
    "blockReason": "PROHIBITED_CONTENT"
  },
  "usageMetadata": {
    "promptTokenCount": 7,
    "totalTokenCount": 7
  }
}

Risposte non sicure

I seguenti filtri possono rilevare e bloccare le risposte potenzialmente non sicure:

  • Filtri di sicurezza non configurabili, che bloccano il materiale pedopornografico (CSAM) e le informazioni che consentono l'identificazione personale (PII).
  • Filtri dei contenuti configurabili, che bloccano i contenuti non sicuri in base a un elenco di categorie di danno e alle relative soglie di blocco configurate dall'utente. Puoi configurare le soglie di blocco per ciascuno di questi danni in base a quanto è appropriato per il tuo caso d'uso e la tua attività. Per scoprire di più, vedi Filtri dei contenuti configurabili.
  • Filtri delle citazioni, che forniscono citazioni per il materiale di origine. Per scoprire di più, consulta Filtro citazioni.

Un LLM genera risposte in unità di testo chiamate token. Un modello smette di generare token perché raggiunge un punto di arresto naturale o perché uno dei filtri blocca la risposta. L'API Gemini di Vertex AI fornisce uno dei seguenti codici enum per spiegare il motivo dell'interruzione della generazione di token:

Enum Tipo di filtro Descrizione
STOP N/D Questo enum indica che il modello ha raggiunto un punto di arresto naturale o la sequenza di arresto fornita.
MAX_TOKENS N/D La generazione di token è stata interrotta perché il modello ha raggiunto il numero massimo di token specificato nella richiesta.
SAFETY Filtro dei contenuti configurabile La generazione del token è stata interrotta perché la risposta è stata segnalata per contenuti dannosi.
RECITATION Filtro citazioni La generazione del token è stata interrotta a causa di una potenziale citazione.
SPII Filtro di sicurezza non configurabile La generazione del token è stata interrotta perché la risposta è stata segnalata per contenuti che includono informazioni sensibili che consentono l'identificazione personale (SPII).
PROHIBITED_CONTENT Filtro di sicurezza non configurabile La generazione di token è stata interrotta perché la risposta è stata segnalata per contenuti vietati, in genere contenuti pedopornografici.
FINISH_REASON_UNSPECIFIED N/D Il motivo del completamento non è specificato.
OTHER N/D Questo enum si riferisce a tutti gli altri motivi che interrompono la generazione di token. Tieni presente che la generazione di token non è supportata per tutte le lingue. Per un elenco delle lingue supportate, consulta Supporto delle lingue di Gemini.

Per scoprire di più, consulta FinishReason.

Se un filtro blocca la risposta, il campo Candidate.content della risposta viene annullato. Non fornisce alcun feedback al modello.

Filtri dei contenuti configurabili

I filtri dei contenuti valutano i contenuti in base a un elenco di danni. Per ogni categoria di danno, i filtri dei contenuti assegnano un punteggio in base alla probabilità che i contenuti siano dannosi e un altro punteggio in base alla gravità dei contenuti dannosi.

I filtri dei contenuti configurabili non hanno un sistema di versionamento indipendente dalle versioni del modello. Google non aggiornerà il filtro dei contenuti configurabile per una versione di un modello rilasciata in precedenza. Tuttavia, potrebbe aggiornare il filtro dei contenuti configurabili per una versione futura di un modello.

Categorie di danno

I filtri dei contenuti valutano i contenuti in base alle seguenti categorie di danno:

Categoria di danno Definizione
Incitamento all'odio Commenti negativi o dannosi rivolti all'identità e/o agli attributi protetti.
Molestie Commenti minacciosi, intimidatori, prepotenti o illeciti rivolti a un altro individuo.
Contenuti sessualmente espliciti Contiene riferimenti ad atti sessuali o ad altri contenuti osceni.
Contenuti pericolosi Promuove o consente l'accesso a beni, servizi e attività dannosi.

Confronto tra punteggi di probabilità e punteggi di gravità

Il punteggio di sicurezza probabilità riflette la probabilità che una risposta del modello sia associata al rispettivo danno. Ha un punteggio di confidenza associato compreso tra 0.0 e 1.0, arrotondato a una cifra decimale. Il punteggio di confidenza è discretizzato in quattro livelli di confidenza: NEGLIGIBLE, LOW, MEDIUM e HIGH.

Il punteggio di gravità riflette l'entità del potenziale danno di una risposta del modello. Ha un punteggio di gravità associato compreso tra 0.0 e 1.0, arrotondato a una cifra decimale. Il punteggio di gravità è discretizzato in quattro livelli: NEGLIGIBLE, LOW, MEDIUM e HIGH.

I contenuti possono avere un punteggio di probabilità basso e un punteggio di gravità alto oppure un punteggio di probabilità alto e un punteggio di gravità basso.

Come configurare i filtri dei contenuti

Puoi utilizzare l'API Vertex AI Gemini o la console Google Cloud per configurare i filtri dei contenuti.

API Gemini di Vertex AI

L'API Gemini di Vertex AI fornisce due metodi di "blocco dei danni":

  • GRAVITÀ: questo metodo utilizza sia i punteggi di probabilità che quelli di gravità.
  • PROBABILITY: questo metodo utilizza solo il punteggio di probabilità.

Il metodo predefinito è SEVERITY. Per i modelli precedenti a gemini-1.5-flash e gemini-1.5-pro, il metodo predefinito è PROBABILITY. Per saperne di più, consulta HarmBlockMethod API reference.

L'API Gemini di Vertex AI fornisce le seguenti soglie di "blocco per danno":

  • BLOCK_LOW_AND_ABOVE: blocca quando il punteggio di probabilità o il punteggio di gravità è LOW, MEDIUM o HIGH.
  • BLOCK_MEDIUM_AND_ABOVE: blocca quando il punteggio di probabilità o il punteggio di gravità è MEDIUM o HIGH. Per gemini-1.5-flash-001 e gemini-1.5-pro-001, BLOCK_MEDIUM_AND_ABOVE è il valore predefinito.
  • BLOCK_ONLY_HIGH: blocca quando il punteggio di probabilità o il punteggio di gravità è HIGH.
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED: blocca utilizzando la soglia predefinita.
  • OFF: nessun blocco delle risposte automatiche e nessun metadato viene restituito. Per gemini-1.5-flash-002 e gemini-1.5-pro-002, OFF è il valore predefinito.
  • BLOCK_NONE: l'impostazione BLOCK_NONE rimuove il blocco delle risposte automatiche. In alternativa, puoi configurare le tue linee guida per i contenuti con i punteggi restituiti. Si tratta di un campo con limitazioni non disponibile per tutti gli utenti nelle versioni del modello GA.

Ad esempio, il seguente codice Python mostra come impostare la soglia di blocco per i danni su BLOCK_ONLY_HIGH per la categoria di contenuti pericolosi:

generative_models.SafetySetting(
  category=generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
  threshold=generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
),

In questo modo verrà bloccata la maggior parte dei contenuti classificati come pericolosi. Per saperne di più, consulta il riferimento all'API HarmBlockThreshold.

Per esempi end-to-end in Python, Node.js, Java, Go, C# e REST, consulta Esempi di configurazione dei filtri dei contenuti.

Console Google Cloud

La console Google Cloud ti consente di configurare una soglia per ogni attributo dei contenuti. Il filtro dei contenuti utilizza solo i punteggi di probabilità. Non è possibile utilizzare i punteggi di gravità.

La console Google Cloud fornisce i seguenti valori di soglia:

  • Off (impostazione predefinita): nessun blocco delle risposte automatiche.
  • Blocca alcuni: blocca quando il punteggio di probabilità è HIGH.
  • Blocca alcuni: blocca quando il punteggio di probabilità è MEDIUM o HIGH.
  • Blocca la maggior parte: viene applicato il blocco quando il punteggio di probabilità è LOW, MEDIUM o HIGH.

Ad esempio, se imposti l'impostazione di blocco su Blocca pochi per la categoria Contenuti pericolosi, tutti i contenuti con un'alta probabilità di essere pericolosi vengono bloccati. È consentito qualsiasi valore con una probabilità inferiore. La soglia predefinita è Block some.

Per impostare le soglie:

  1. Nella sezione Vertex AI della console Google Cloud, vai alla pagina Vertex AI Studio.

    Vai a Vertex AI Studio

  2. In Crea un nuovo prompt, fai clic su uno dei pulsanti per aprire la pagina di progettazione del prompt.

  3. Fai clic su Impostazioni di sicurezza.

    Viene visualizzata la finestra di dialogo Impostazioni di sicurezza.

  4. Per ogni categoria di danno, configura il valore di soglia desiderato.

  5. Fai clic su Salva.

Esempio di output quando una risposta viene bloccata dal filtro dei contenuti configurabile

Di seguito è riportato un esempio di output dell'API Gemini di Vertex AI quando una risposta viene bloccata dal filtro dei contenuti configurabile perché contiene contenuti pericolosi:

{
  "candidates": [{
    "finishReason": "SAFETY",
    "safetyRatings": [{
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.11027937,
      "severity": "HARM_SEVERITY_LOW",
      "severityScore": 0.28487435
    }, {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "probability": "HIGH",
      "blocked": true,
      "probabilityScore": 0.95422274,
      "severity": "HARM_SEVERITY_MEDIUM",
      "severityScore": 0.43398145
    }, {
      "category": "HARM_CATEGORY_HARASSMENT",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.11085559,
      "severity": "HARM_SEVERITY_NEGLIGIBLE",
      "severityScore": 0.19027223
    }, {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.22901751,
      "severity": "HARM_SEVERITY_NEGLIGIBLE",
      "severityScore": 0.09089675
    }]
  }],
  "usageMetadata": {
    "promptTokenCount": 38,
    "totalTokenCount": 38
  }
}

Esempi di configurazione dei filtri dei contenuti

I seguenti esempi mostrano come configurare il filtro dei contenuti utilizzando l'API Gemini di Vertex AI:

Gen AI SDK for Python

Installa

pip install --upgrade google-genai
Per scoprire di più, consulta la documentazione di riferimento dell'SDK.

Imposta le variabili di ambiente per utilizzare l'SDK Gen AI con Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=us-central1
export GOOGLE_GENAI_USE_VERTEXAI=True

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmCategory,
    HarmBlockThreshold,
    HttpOptions,
    SafetySetting,
)

client = genai.Client(http_options=HttpOptions(api_version="v1"))

system_instruction = "Be as mean as possible."

prompt = """
    Write a list of 5 disrespectful things that I might say to the universe after stubbing my toe in the dark.
"""

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model="gemini-2.0-flash-001",
    contents=prompt,
    config=GenerateContentConfig(
        system_instruction=system_instruction,
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)
# Example response:
#     None

# Finish Reason will be `SAFETY` if it is blocked.
print(response.candidates[0].finish_reason)
# Example response:
#     FinishReason.SAFETY

# For details on all the fields in the response
for each in response.candidates[0].safety_ratings:
    print('\nCategory: ', str(each.category))
    print('Is Blocked:', True if each.blocked else False)
    print('Probability: ', each.probability)
    print('Probability Score: ', each.probability_score)
    print('Severity:', each.severity)
    print('Severity Score:', each.severity_score)
# Example response:
#
#     Category:  HarmCategory.HARM_CATEGORY_HATE_SPEECH
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  2.547714e-05
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None
#
#     Category:  HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  3.6103818e-06
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None
#
#     Category:  HarmCategory.HARM_CATEGORY_HARASSMENT
#     Is Blocked: True
#     Probability:  HarmProbability.MEDIUM
#     Probability Score:  0.71599233
#     Severity: HarmSeverity.HARM_SEVERITY_MEDIUM
#     Severity Score: 0.30782545
#
#     Category:  HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  1.5624657e-05
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None

REST

Dopo aver configurato l'ambiente, puoi utilizzare REST per testare un prompt di testo. Il seguente esempio invia una richiesta all'endpoint del modello del publisher.

Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:

  • LOCATION: la regione in cui elaborare la richiesta. Le opzioni disponibili includono:

    Fai clic per espandere un elenco parziale delle regioni disponibili

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: il tuo ID progetto.
  • MODEL_ID: l'ID del modello multimodale che vuoi utilizzare. Le opzioni sono:
    • gemini-1.0-pro
    • gemini-1.0-pro-vision
  • ROLE: Il ruolo in una conversazione associato ai contenuti. La specifica di un ruolo è obbligatoria anche nei casi d'uso con un solo turno. I valori accettati sono:
    • USER: specifica i contenuti inviati da te.
    • MODEL: specifica la risposta del modello.
  • TEXT: le istruzioni di testo da includere nel prompt.
  • SAFETY_CATEGORY: la categoria di sicurezza per la quale configurare una soglia. I valori accettati sono:

    Fai clic per espandere le categorie di sicurezza

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: la soglia per bloccare le risposte che potrebbero appartenere alla categoria di sicurezza specificata in base alla probabilità. I valori accettati sono:

    Fai clic per espandere le soglie di blocco

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (valore predefinito)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE blocca di più, mentre BLOCK_ONLY_HIGH blocca di meno.

Metodo HTTP e URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

Corpo JSON della richiesta:

{
  "contents": {
    "role": "ROLE",
    "parts": { "text": "TEXT" }
  },
  "safetySettings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

curl

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

Salva il corpo della richiesta in un file denominato request.json, quindi esegui il comando seguente:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

Dovresti ricevere una risposta JSON simile alla seguente.

Comando curl di esempio

LOCATION="us-central1"
MODEL_ID="gemini-1.0-pro"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:streamGenerateContent -d \
$'{
  "contents": {
    "role": "user",
    "parts": { "text": "Hello!" }
  },
  "safety_settings": [
    {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "threshold": "OFF"
    },
    {
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "threshold": "BLOCK_LOW_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_ONLY_HIGH"
    }
  ]
}'

Filtro citazioni

Le funzionalità di codice generativo di Vertex AI sono progettate per produrre contenuti originali. Per sua natura, Gemini limita la probabilità che i contenuti esistenti vengano replicati in dettaglio. Se una funzionalità di Gemini fa un'ampia citazione da una pagina web, Gemini cita la pagina.

A volte gli stessi contenuti possono essere trovati su più pagine web. Gemini tenterà di indirizzarti a una fonte molto conosciuta. Nel caso di citazioni di repository di codice, la citazione potrebbe anche fare riferimento a una licenza open source applicabile. Il rispetto di eventuali requisiti di licenza è una tua responsabilità.

Per informazioni sui metadati del filtro delle citazioni, consulta la documentazione di riferimento dell'API Citation.

Filtro Integrità civica

Il filtro per l'integrità civica rileva e blocca i prompt che menzionano o fanno riferimento a elezioni e candidati politici. Questo filtro è disattivato per impostazione predefinita. Per attivarla, imposta la soglia di blocco per CIVIC_INTEGRITY su uno dei seguenti valori. Non fa differenza quale valore specifichi.

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

Il seguente codice Python mostra come attivare il filtro di integrità civica:

  generative_models.SafetySetting(
      category=generative_models.HarmCategory.CIVIC_INTEGRITY,
      threshold=generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
  ),

Per maggiori dettagli sul filtro per l'integrità civica, contatta il tuo Google Cloud rappresentante.

Best practice

Sebbene i filtri dei contenuti contribuiscano a impedire la visualizzazione di contenuti non sicuri, a volte potrebbero bloccare contenuti innocui o non rilevare contenuti dannosi. I modelli avanzati come Gemini 1.5 Flash e Gemini 1.5 Pro sono progettati per generare risposte sicure anche senza filtri. Prova diverse impostazioni dei filtri per trovare il giusto equilibrio tra sicurezza e autorizzazione di contenuti appropriati.

Passaggi successivi