Configura attributi di sicurezza

L'API Vertex AI Gemini blocca i contenuti non sicuri in base a un elenco di attributi di sicurezza e alle relative soglie di blocco configurate. Questa pagina descrive i concetti chiave sulla sicurezza e mostra come configurare le soglie di blocco di ogni attributo di sicurezza per controllare la frequenza con cui messaggi e risposte vengono bloccati.

Punteggio di confidenza dell'attributo di sicurezza

I contenuti elaborati tramite l'API Vertex AI Gemini vengono valutati in base a un elenco di attributi di sicurezza, che includono categorie dannose" e argomenti che possono essere considerati sensibili. Questi attributi di sicurezza sono indicati nella seguente tabella:

Punteggio degli attributi di sicurezza

Attributo sicurezza Definizione
Incitamento all'odio Commenti negativi o dannosi che hanno come target l'identità e/o attributi protetti.
Molestie Commenti dannosi, intimidatori, prepotenti o illeciti rivolti a un altro individuo.
Contenuti sessualmente espliciti Riferimenti ad atti sessuali o ad altri contenuti osceni.
Contenuti pericolosi Promuovono o consentono l'accesso a beni, servizi e attività dannosi.

Probabilità degli attributi di sicurezza

A ogni attributo di sicurezza è associato un punteggio di confidenza compreso tra 0,0 e 1,0, arrotondato a una posizione decimale. Il punteggio di affidabilità riflette la probabilità che l'input o la risposta appartenga a una determinata categoria.

Il punteggio di confidenza nella seguente tabella viene restituito con un livello di affidabilità della sicurezza:

Probability Descrizione
NEGLIGIBLE I contenuti hanno una probabilità trascurabile di non essere sicuri.
LOW I contenuti hanno una bassa probabilità di non essere sicuri.
MEDIUM I contenuti hanno una probabilità media di non essere sicuri.
HIGH È molto probabile che i contenuti non siano sicuri.

Gravità attributo di sicurezza

A ciascuno dei quattro attributi di sicurezza vengono assegnati un punteggio di sicurezza (livello di gravità) e un punteggio di gravità che va da 0,0 a 1,0, arrotondato a una posizione decimale. Le valutazioni e i punteggi nella seguente tabella riflettono la gravità prevista dei contenuti appartenenti a una determinata categoria:

Gravità Descrizione
NEGLIGIBLE La gravità dei contenuti è prevista come trascurabile in base alle norme di sicurezza di Google.
LOW Si prevede che la gravità dei contenuti sia bassa rispetto alle norme di Google relative alla sicurezza.
MEDIUM La gravità dei contenuti è prevista come media in base alle norme di sicurezza di Google.
HIGH Si prevede che la gravità dei contenuti sia elevata in base alle norme di Google relative alla sicurezza.

Punteggi di probabilità rispetto ai punteggi di gravità

Esistono due tipi di punteggi di sicurezza:

  • Punteggi di sicurezza basati sulla probabilità di essere non sicuri
  • Punteggi di sicurezza basati sulla gravità dei contenuti dannosi

L'attributo sicurezza probability riflette la probabilità che un input o una risposta del modello venga associato al rispettivo attributo di sicurezza. L'attributo di sicurezza gravità riflette l'entità di quanto potrebbe essere dannoso un input o una risposta del modello.

I contenuti possono avere un punteggio di probabilità basso e un punteggio di gravità alto o un punteggio di probabilità alto e un punteggio di gravità basso. Ad esempio, considera le seguenti due frasi:

  1. Il robot mi ha dato un pugno.
  2. Il robot mi ha tagliato fuori.

La prima frase potrebbe causare una maggiore probabilità di non essere sicura, mentre la seconda potrebbe avere una gravità maggiore in termini di violenza. Per questo motivo, è importante testare e considerare attentamente il livello di blocco appropriato necessario per supportare i tuoi casi d'uso chiave e anche ridurre al minimo i danni per gli utenti finali.

Impostazioni di sicurezza

Le impostazioni di sicurezza fanno parte della richiesta che invii al servizio API. Può essere modificato per ogni richiesta inviata all'API. La seguente tabella descrive le impostazioni dei blocchi che puoi modificare per ogni categoria. Ad esempio, se imposti l'opzione di blocco su Blocca pochi per la categoria di contenuti pericolosi, tutti i contenuti con un'alta probabilità di essere contenuti pericolosi vengono bloccati. Ma tutto con una probabilità più bassa è consentito. Se non viene configurato, l'impostazione di blocco predefinita è Blocca alcuni.

Soglia (Studio) Soglia (API) Soglia (descrizione)
BLOCK_NONE (limitato) Mostra sempre indipendentemente dalla probabilità di contenuti non sicuri.
Blocco ridotto BLOCK_ONLY_HIGH Blocca quando è alta probabilità di contenuti non sicuri.
Blocca alcuni (valore predefinito) BLOCK_MEDIUM_AND_ABOVE (valore predefinito) Blocca quando con una probabilità media o elevata di contenuti non sicuri.
Blocco esteso BLOCK_LOW_AND_ABOVE Blocca quando è bassa probabilità di contenuti non sicuri.
HARM_BLOCK_THRESHOLD_UNSPECIFIED La soglia non è specificata. Blocca utilizzando la soglia predefinita.

Puoi modificare queste impostazioni per ogni richiesta inviata al servizio di testo. Per i dettagli, consulta il riferimento dell'API HarrmBlockThreshold.

Come rimuovere il blocco delle risposte automatiche per determinati attributi di sicurezza

L'impostazione di sicurezza BLOCK_NONE rimuove il blocco delle risposte automatiche (per gli attributi di sicurezza descritti in Impostazioni di sicurezza) e ti consente di configurare le tue linee guida di sicurezza con i punteggi restituiti. Per accedere all'impostazione BLOCK_NONE, puoi:

  1. Richiedi la lista consentita tramite il modulo Lista consentita per i filtri di sicurezza di Gemini.

  2. Cambia il tipo di account in Fatturazione mensile con fatturazione mensile non automatica utilizzando il riferimento della fatturazione mensile non automatica di Google Cloud.

Differenze principali tra Gemini e altre famiglie di modelli

Sebbene a Gemini e PaLM vengano applicati gli stessi classificatori di sicurezza, il numero di attributi di sicurezza restituiti nell'API potrebbe variare a seconda delle famiglie di modelli. La logica di blocco (ovvero la soglia di confidenza) si basa su una valutazione rigorosa su ciascun modello. Pertanto, un'impostazione di sicurezza applicata a un modello potrebbe non corrispondere perfettamente al comportamento di un'impostazione di sicurezza applicata a un modello diverso. Per questo motivo, ti consigliamo di configurare la tua logica di blocco con punteggi di gravità non elaborati e punteggi di confidenza non elaborati, applicando le stesse soglie di punteggio a tutti i modelli.

Configura soglie

Python

Per scoprire come installare o aggiornare l'SDK Vertex AI per Python, consulta Installare l'SDK Vertex AI per Python. Per saperne di più, consulta la documentazione di riferimento dell'API Python.

import vertexai

from vertexai import generative_models

# TODO(developer): Update and un-comment below line
# project_id = "PROJECT_ID"

vertexai.init(project=project_id, location="us-central1")

model = generative_models.GenerativeModel(model_name="gemini-1.0-pro-vision-001")

# Generation config
generation_config = generative_models.GenerationConfig(
    max_output_tokens=2048, temperature=0.4, top_p=1, top_k=32
)

# Safety config
safety_config = [
    generative_models.SafetySetting(
        category=generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    generative_models.SafetySetting(
        category=generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=generative_models.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

image_file = Part.from_uri(
    "gs://cloud-samples-data/generative-ai/image/scones.jpg", "image/jpeg"
)

# Generate content
responses = model.generate_content(
    [image_file, "What is in this image?"],
    generation_config=generation_config,
    safety_settings=safety_config,
    stream=True,
)

text_responses = []
for response in responses:
    print(response.text)
    text_responses.append(response.text)

Node.js

Prima di provare questo esempio, segui le istruzioni di configurazione di Node.js riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Node.js Vertex AI.

Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

const {
  VertexAI,
  HarmCategory,
  HarmBlockThreshold,
} = require('@google-cloud/vertexai');

/**
 * TODO(developer): Update these variables before running the sample.
 */
async function setSafetySettings(
  projectId = 'PROJECT_ID',
  location = 'us-central1',
  model = 'gemini-1.0-pro-001'
) {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: projectId, location: location});

  // Instantiate the model
  const generativeModel = vertexAI.getGenerativeModel({
    model: model,
    // The following parameters are optional
    // They can also be passed to individual content generation requests
    safety_settings: [
      {
        category: HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
      },
    ],
    generation_config: {
      max_output_tokens: 256,
      temperature: 0.4,
      top_p: 1,
      top_k: 16,
    },
  });

  const request = {
    contents: [{role: 'user', parts: [{text: 'Tell me something dangerous.'}]}],
  };

  console.log('Prompt:');
  console.log(request.contents[0].parts[0].text);
  console.log('Streaming Response Text:');

  // Create the response stream
  const responseStream = await generativeModel.generateContentStream(request);

  // Log the text response as it streams
  for await (const item of responseStream.stream) {
    if (item.candidates[0].finishReason === 'SAFETY') {
      console.log('This response stream terminated due to safety concerns.');
      break;
    } else {
      process.stdout.write(item.candidates[0].content.parts[0].text);
    }
  }
  console.log('This response stream terminated due to safety concerns.');
}

Java

Prima di provare questo esempio, segui le istruzioni di configurazione di Java riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Java Vertex AI.

Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import com.google.cloud.vertexai.VertexAI;
import com.google.cloud.vertexai.api.Candidate;
import com.google.cloud.vertexai.api.GenerateContentResponse;
import com.google.cloud.vertexai.api.GenerationConfig;
import com.google.cloud.vertexai.api.HarmCategory;
import com.google.cloud.vertexai.api.SafetySetting;
import com.google.cloud.vertexai.generativeai.GenerativeModel;
import java.util.Arrays;
import java.util.List;

public class WithSafetySettings {

  public static void main(String[] args) throws Exception {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-google-cloud-project-id";
    String location = "us-central1";
    String modelName = "gemini-1.0-pro-vision-001";
    String textPrompt = "your-text-here";

    String output = safetyCheck(projectId, location, modelName, textPrompt);
    System.out.println(output);
  }

  // Use safety settings to avoid harmful questions and content generation.
  public static String safetyCheck(String projectId, String location, String modelName,
      String textPrompt) throws Exception {
    // Initialize client that will be used to send requests. This client only needs
    // to be created once, and can be reused for multiple requests.
    try (VertexAI vertexAI = new VertexAI(projectId, location)) {
      StringBuilder output = new StringBuilder();

      GenerationConfig generationConfig =
          GenerationConfig.newBuilder()
              .setMaxOutputTokens(2048)
              .setTemperature(0.4F)
              .setTopK(32)
              .setTopP(1)
              .build();

      List<SafetySetting> safetySettings = Arrays.asList(
          SafetySetting.newBuilder()
              .setCategory(HarmCategory.HARM_CATEGORY_HATE_SPEECH)
              .setThreshold(SafetySetting.HarmBlockThreshold.BLOCK_LOW_AND_ABOVE)
              .build(),
          SafetySetting.newBuilder()
              .setCategory(HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT)
              .setThreshold(SafetySetting.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE)
              .build()
      );

      GenerativeModel model = new GenerativeModel(modelName, vertexAI)
          .withGenerationConfig(generationConfig)
          .withSafetySettings(safetySettings);

      GenerateContentResponse response = model.generateContent(textPrompt);
      output.append(response).append("\n");

      // Verifies if the above content has been blocked for safety reasons.
      boolean blockedForSafetyReason = response.getCandidatesList()
          .stream()
          .anyMatch(candidate -> candidate.getFinishReason() == Candidate.FinishReason.SAFETY);
      output.append("Blocked for safety reasons?: ").append(blockedForSafetyReason);

      return output.toString();
    }
  }
}

Go

Prima di provare questo esempio, segui le istruzioni di configurazione di Go riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API Go Vertex AI.

Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.

import (
	"context"
	"fmt"
	"io"
	"mime"
	"path/filepath"

	"cloud.google.com/go/vertexai/genai"
)

// generateMultimodalContent generates a response into w, based upon the prompt
// and image provided.
func generateMultimodalContent(w io.Writer, prompt, image, projectID, location, modelName string) error {
	// prompt := "describe this image."
	// location := "us-central1"
	// model := "gemini-1.0-pro-vision-001"
	// image := "gs://cloud-samples-data/generative-ai/image/320px-Felis_catus-cat_on_snow.jpg"
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("unable to create client: %v", err)
	}
	defer client.Close()

	model := client.GenerativeModel(modelName)
	model.SetTemperature(0.4)
	// configure the safety settings thresholds
	model.SafetySettings = []*genai.SafetySetting{
		{
			Category:  genai.HarmCategoryHarassment,
			Threshold: genai.HarmBlockLowAndAbove,
		},
		{
			Category:  genai.HarmCategoryDangerousContent,
			Threshold: genai.HarmBlockLowAndAbove,
		},
	}

	// Given an image file URL, prepare image file as genai.Part
	img := genai.FileData{
		MIMEType: mime.TypeByExtension(filepath.Ext(image)),
		FileURI:  image,
	}

	res, err := model.GenerateContent(ctx, img, genai.Text(prompt))
	if err != nil {
		return fmt.Errorf("unable to generate contents: %w", err)
	}

	fmt.Fprintf(w, "generated response: %s\n", res.Candidates[0].Content.Parts[0])
	return nil
}

C#

Prima di provare questo esempio, segui le istruzioni di configurazione di C# riportate nella guida rapida di Vertex AI sull'utilizzo delle librerie client. Per maggiori informazioni, consulta la documentazione di riferimento dell'API C# Vertex AI.

Per eseguire l'autenticazione in Vertex AI, configura le Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per un ambiente di sviluppo locale.


using Google.Api.Gax.Grpc;
using Google.Cloud.AIPlatform.V1;
using System.Text;
using System.Threading.Tasks;
using static Google.Cloud.AIPlatform.V1.SafetySetting.Types;

public class WithSafetySettings
{
    public async Task<string> GenerateContent(
        string projectId = "your-project-id",
        string location = "us-central1",
        string publisher = "google",
        string model = "gemini-1.0-pro-vision"
    )
    {
        var predictionServiceClient = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();


        var generateContentRequest = new GenerateContentRequest
        {
            Model = $"projects/{projectId}/locations/{location}/publishers/{publisher}/models/{model}",
            Contents =
            {
                new Content
                {
                    Role = "USER",
                    Parts =
                    {
                        new Part { Text = "Hello!" }
                    }
                }
            },
            SafetySettings =
            {
                new SafetySetting
                {
                    Category = HarmCategory.HateSpeech,
                    Threshold = HarmBlockThreshold.BlockLowAndAbove
                },
                new SafetySetting
                {
                    Category = HarmCategory.DangerousContent,
                    Threshold = HarmBlockThreshold.BlockMediumAndAbove
                }
            }
        };

        using PredictionServiceClient.StreamGenerateContentStream response = predictionServiceClient.StreamGenerateContent(generateContentRequest);

        StringBuilder fullText = new();

        AsyncResponseStream<GenerateContentResponse> responseStream = response.GetResponseStream();
        await foreach (GenerateContentResponse responseItem in responseStream)
        {
            // Check if the content has been blocked for safety reasons.
            bool blockForSafetyReason = responseItem.Candidates[0].FinishReason == Candidate.Types.FinishReason.Safety;
            if (blockForSafetyReason)
            {
                fullText.Append("Blocked for safety reasons");
            }
            else
            {
                fullText.Append(responseItem.Candidates[0].Content.Parts[0].Text);
            }
        }

        return fullText.ToString();
    }
}

REST

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

  • LOCATION: la regione in cui elaborare la richiesta. Le opzioni disponibili sono le seguenti:

    Fai clic per espandere le 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. È necessario specificare un ruolo anche nei casi d'uso a turno singolo. I valori accettati includono:
    • 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 cui configurare una soglia. I valori accettati includono:

    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 il blocco delle risposte che potrebbero appartenere alla categoria di sicurezza specificata in base alla probabilità. I valori accettati includono:

    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 lo blocca 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" }
  },
  "safety_settings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
}

Per inviare la richiesta, scegli una delle seguenti opzioni:

arricciatura

Salva il corpo della richiesta in un file denominato request.json ed esegui questo comando:

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 ed esegui questo comando:

$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 in formato 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": "BLOCK_NONE"
    },
    {
      "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"
    }
  ]
}'

Console

  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.

    Si apre la finestra di dialogo Impostazioni di sicurezza.

  4. Per ogni attributo di sicurezza, configura il valore della soglia desiderato.

  5. Fai clic su Salva.

Passaggi successivi