Configurer des filtres de sécurité

Les modèles d'IA générative de Google, comme Gemini 1.5 Flash et Gemini 1.5 Pro, sont conçus en faisant de la sécurité la première des priorités. Toutefois, ils peuvent toujours générer des réponses nuisibles, en particulier lorsqu'ils reçoivent des requêtes explicites en ce sens. Pour renforcer la sécurité et limiter les cas d'utilisation abusive, vous pouvez configurer des filtres de sécurité afin de bloquer les réponses potentiellement nuisibles.

Cette page décrit chacun des types de filtres de sécurité et présente les concepts de sécurité clés. Pour les filtres configurables, elle explique comment configurer les seuils de blocage de chaque catégorie de préjudice, afin de contrôler la fréquence à laquelle les requêtes et les réponses sont bloquées.

Les filtres de sécurité agissent comme une barrière, empêchant la génération de résultats nuisibles, mais n'influencent pas directement le comportement du modèle. Pour en savoir plus sur la directionnalité du modèle, consultez la section Instructions système.

Requêtes non sécurisées

L'API Gemini Vertex AI fournit l'un des codes enum suivants pour justifier le refus d'une requête :

Enum Type de filtre Description
PROHIBITED_CONTENT Filtre de sécurité non configurable La requête a été bloquée, car elle a été signalée comme contenant du contenu interdit, généralement du contenu d'abus sexuels sur mineurs.
BLOCKED_REASON_UNSPECIFIED N/A Le motif du blocage de la requête n'est pas spécifié.
OTHER N/A Ce code enum englobe tous les autres motifs de blocage d'une requête. Notez que l'API Gemini Vertex AI n'est pas compatible avec toutes les langues. Pour obtenir la liste des langues disponibles, consultez la page Langues compatibles avec Gemini.

Pour en savoir plus, consultez la section dédiée au code BlockedReason.

Voici un exemple de sortie de l'API Gemini Vertex AI lorsqu'une requête est bloquée car contenant un PROHIBITED_CONTENT :

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

Réponses non sécurisées

Les filtres suivants peuvent détecter et bloquer les réponses potentiellement non sécurisées :

  • Filtres de sécurité non configurables, qui bloquent les contenus d'abus sexuels sur mineurs et les informations permettant d'identifier personnellement un utilisateur.
  • Filtres de sécurité configurables, qui bloquent le contenu non sécurisé en fonction d'une liste de catégories de préjudice et de leurs seuils de blocage configurés par l'utilisateur. Vous pouvez configurer des seuils de blocage pour chacun de ces préjudices en fonction de votre cas d'utilisation et de votre activité. Pour en savoir plus, consultez la section Filtres de sécurité configurables.
  • Filtres de citation, qui empêchent l'utilisation abusive et garantissent la citation appropriée des données protégées par des droits d'auteur. Pour en savoir plus, consultez la section Filtre de citation.

Un LLM génère des réponses sous forme d'unités de texte appelées jetons. Un modèle cesse de générer des jetons lorsqu'il atteint un point d'arrêt naturel ou lorsqu'un des filtres bloque la réponse. L'API Gemini Vertex AI fournit l'un des codes enum suivants pour expliquer l'arrêt de la génération de jetons :

Enum Type de filtre Description
STOP N/A Ce code enum indique que le modèle a atteint un point d'arrêt naturel, ou que les conditions de la séquence d'arrêt définie sont réunies.
MAX_TOKENS N/A La génération de jetons a été arrêtée, car le modèle a atteint le nombre maximal de jetons spécifié dans la requête.
SAFETY Filtre de sécurité configurable La génération de jeton a été interrompue, car la réponse a été signalée pour des raisons de sécurité.
RECITATION Filtre de citation La génération du jeton a été interrompue, car la réponse a été signalée comme contenant des citations non autorisées.
SPII Filtre de sécurité non configurable La génération du jeton a été interrompue, car la réponse a été signalée comme contenant des informations personnelles sensibles.
PROHIBITED_CONTENT Filtre de sécurité non configurable La génération du jeton a été interrompue, car la réponse a été signalée comme présentant du contenu interdit, généralement du contenu d'abus sexuels sur mineurs.
FINISH_REASON_UNSPECIFIED N/A Le motif d'interruption n'est pas spécifié.
AUTRE N/A Ce code enum englobe tous les autres motifs d'arrêt de la génération de jetons. Notez que la génération de jetons n'est pas disponible pour toutes les langues. Pour obtenir la liste des langues disponibles, consultez la page Langues compatibles avec Gemini.

Pour en savoir plus, consultez la section dédiée au code FinishReason.

Si un filtre bloque la réponse, le champ Candidate.content de la réponse est annulé. Il ne fournit aucun commentaire au modèle.

Filtres de sécurité configurables

Les filtres de sécurité évaluent le contenu par rapport à une liste de préjudices. Pour chaque catégorie de préjudice, les filtres de sécurité attribuent un score de sécurité basé sur la probabilité que le contenu soit non sécurisé, et un autre score de sécurité basé sur la gravité du contenu nuisible.

Les filtres de sécurité configurables ne disposent pas d'un processus de gestion des versions qui soit indépendant de celui applicable aux versions du modèle. Google ne mettra pas à jour le filtre de sécurité configurable pour une version déjà publiée d'un modèle. Toutefois, il peut mettre à jour le filtre de sécurité configurable pour une future version d'un modèle.

Catégories de préjudice

Les filtres de sécurité évaluent le contenu en fonction des catégories de préjudice suivantes :

Catégorie de préjudice Définition
Incitation à la haine Commentaires négatifs ou offensants ciblant l'identité et/ou les attributs protégés.
Harcèlement Commentaires malveillants, intimidants ou abusifs ciblant une autre personne
Contenu à caractère sexuel explicite Contient des références à des actes sexuels ou à d'autres contenus obscènes.
Contenu dangereux Encourage ou facilite l'accès à des activités, produits et services dangereux.

Comparaison des scores de probabilité et de gravité

Le score de sécurité de probabilité reflète la probabilité qu'une réponse du modèle soit associée au préjudice respectif. Il est associé à un score de confiance compris entre 0.0 et 1.0, arrondi à un chiffre après la virgule. Le score de confiance est discretisé en quatre niveaux de confiance en termes de sécurité : NEGLIGIBLE, LOW, MEDIUM et HIGH.

Le score de sécurité de gravité reflète l'ampleur du préjudice associé à une réponse du modèle. Il est associé à un score de gravité compris entre 0.0 et 1.0, arrondi à un chiffre après la virgule. Le score de gravité est discretisé en quatre niveaux : NEGLIGIBLE, LOW, MEDIUM et HIGH.

Un contenu peut avoir un score de probabilité faible et un score de gravité élevé, ou un score de probabilité élevé et un score de gravité faible.

Configurer des filtres de sécurité

Vous pouvez configurer le filtre de sécurité à l'aide de l'API Gemini Vertex AI ou de la console Google Cloud.

API Gemini Vertex AI

L'API Gemini Vertex AI fournit deux méthodes de blocage des contenus nuisibles :

  • GRAVITÉ : cette méthode utilise à la fois des scores de probabilité et de gravité.
  • PROBABILITÉ : cette méthode utilise uniquement le score de probabilité.

La méthode par défaut est PROBABILITY. Pour en savoir plus, consultez la documentation de référence de l'API HarmBlockMethod.

L'API Gemini Vertex AI fournit les seuils de "blocage des contenus nuisibles" suivants :

  • BLOCK_LOW_AND_ABOVE : bloquer lorsque le score de probabilité ou le score de gravité est LOW, MEDIUM ou HIGH.
  • BLOCK_MEDIUM_AND_ABOVE : bloquer lorsque le score de probabilité ou le score de gravité est MEDIUM ou HIGH. Pour gemini-1.5-flash-001 et gemini-1.5-pro-001, BLOCK_MEDIUM_AND_ABOVE est la valeur par défaut.
  • BLOCK_ONLY_HIGH : bloquer lorsque le score de probabilité ou le score de gravité est HIGH.
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED : bloquer en utilisant le seuil par défaut.
  • OFF : aucun blocage de réponse automatique ; aucune métadonnée de sécurité n'est renvoyée. Pour gemini-1.5-flash-002 et gemini-1.5-pro-002, la valeur par défaut est OFF.
  • BLOCK_NONE : le paramètre de sécurité BLOCK_NONE supprime le blocage automatique des réponses. À la place, vous pouvez configurer vos propres consignes de sécurité avec les scores renvoyés. Il s'agit d'un champ restreint qui n'est pas disponible pour tous les utilisateurs dans les versions de modèle en DG.

Par exemple, le code Python suivant montre comment définir la méthode de blocage des contenus nuisibles sur SEVERITY et le seuil de blocage des contenus nuisibles sur BLOCK_ONLY_HIGH pour la catégorie des contenus dangereux :

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

La plupart des contenus classés comme dangereux seront ainsi bloqués. Pour en savoir plus, consultez la documentation de référence de l'API HarmBlockThreshold.

Pour obtenir des exemples complets en Python, Node.js, Java, Go, C# et REST, consultez la section Exemples de configuration de filtres de sécurité.

console Google Cloud

La console Google Cloud vous permet de configurer un seuil pour chaque attribut de sécurité. Le filtre de sécurité n'utilise que les scores de probabilité. Il n'existe aucune option permettant d'utiliser les scores de gravité.

La console Google Cloud fournit les valeurs de seuil suivantes :

  • Désactivé (par défaut) : le blocage automatique des réponses est désactivé.
  • Bloquer quelques contenus : bloquer lorsque le score de probabilité est HIGH.
  • Bloquer certains contenus : bloquer lorsque le score de probabilité est MEDIUM ou HIGH.
  • Bloquer la plupart des contenus : bloquer lorsque le score de probabilité est LOW, MEDIUM ou HIGH.

Par exemple, si vous définissez le paramètre de blocage sur Bloquer quelques contenus pour la catégorie de contenu dangereux, tous les éléments ayant une haute probabilité d'être des contenus dangereux sont bloqués. Cependant, tous ceux ayant une faible probabilité sont autorisés. Le seuil par défaut est de Block some.

Pour définir les seuils, procédez comme suit :

  1. Dans la section "Vertex AI" de la console Google Cloud, accédez à la page Vertex AI Studio.

    Accéder à Vertex AI Studio

  2. Sous Créer une requête, cliquez sur l'un des boutons pour ouvrir la page de conception de requête.

  3. Cliquez sur Paramètres de sécurité.

    La boîte de dialogue Paramètres de sécurité s'affiche.

  4. Pour chaque catégorie de préjudice, configurez la valeur de seuil souhaitée.

  5. Cliquez sur Enregistrer.

Exemple de résultat lorsqu'une réponse est bloquée par le filtre de sécurité configurable

Voici un exemple de sortie de l'API Gemini Vertex AI lorsqu'une réponse est bloquée par le filtre de sécurité configurable car présentant du contenu dangereux :

{
  "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
  }
}

Exemples de configuration de filtres de sécurité

Les exemples suivants montrent comment configurer le filtre de sécurité à l'aide de l'API Gemini Vertex AI :

Python

Pour savoir comment installer ou mettre à jour le SDK Vertex AI pour Python, consultez la section Installer le SDK Vertex AI pour Python. Pour en savoir plus, consultez la documentation de référence de l'API Python.

import vertexai

from vertexai.generative_models import (
    GenerativeModel,
    HarmCategory,
    HarmBlockThreshold,
    Part,
    SafetySetting,
)

# TODO(developer): Update project
vertexai.init(project=PROJECT_ID, location="us-central1")

model = GenerativeModel("gemini-1.5-flash-001")

# Safety config
safety_config = [
    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,
    ),
]

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?"],
    safety_settings=safety_config,
    stream=True,
)

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

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Node.js.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

/**
 * TODO(developer): Update these variables before running the sample.
 */
const PROJECT_ID = process.env.CAIP_PROJECT_ID;
const LOCATION = 'us-central1';
const MODEL = 'gemini-1.5-flash-001';

async function setSafetySettings() {
  // Initialize Vertex with your Cloud project and location
  const vertexAI = new VertexAI({project: PROJECT_ID, 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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Java.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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.5-flash-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)
              .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_LOW_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

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI Go.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.

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

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

// generateMultimodalContent generates a response into w, based upon the  provided image.
func generateMultimodalContent(w io.Writer, projectID, location, modelName string) error {
	// location := "us-central1"
	// model := "gemini-1.5-flash-001"
	ctx := context.Background()

	client, err := genai.NewClient(ctx, projectID, location)
	if err != nil {
		return fmt.Errorf("unable to create client: %w", 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("320px-Felis_catus-cat_on_snow.jpg")),
		FileURI:  "gs://cloud-samples-data/generative-ai/image/320px-Felis_catus-cat_on_snow.jpg",
	}

	res, err := model.GenerateContent(ctx, img, genai.Text("describe this image."))
	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#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# décrites dans le guide de démarrage rapide de Vertex AI à l'aide des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Vertex AI C#.

Pour vous authentifier auprès de Vertex AI, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local.


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.5-flash-001"
    )
    {
        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

Une fois que vous avez configuré votre environnement, vous pouvez utiliser REST pour tester une requête textuelle. L'exemple suivant envoie une requête au point de terminaison du modèle de l'éditeur.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • LOCATION : région dans laquelle traiter la requête. Les options disponibles sont les suivantes :

    Cliquer pour développer une liste partielle des régions disponibles

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID : l'ID de votre projet.
  • MODEL_ID : ID du modèle multimodal que vous souhaitez utiliser. Vous disposez des options suivantes :
    • gemini-1.0-pro
    • gemini-1.0-pro-vision
  • ROLE : rôle dans une conversation associée au contenu. La spécification d'un rôle est requise, même dans les cas d'utilisation à un seul tour. Les valeurs acceptées incluent les suivantes :
    • USER : spécifie le contenu envoyé par vous.
    • MODEL : spécifie la réponse du modèle.
  • TEXT : instructions textuelles à inclure dans la requête.
  • SAFETY_CATEGORY : catégorie de sécurité pour laquelle configurer un seuil. Les valeurs acceptées incluent les suivantes :

    Cliquer pour développer les catégories de sécurité

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD : seuil de blocage des réponses susceptibles d'appartenir à la catégorie de sécurité spécifiée en fonction de la probabilité. Les valeurs acceptées incluent les suivantes :

    Cliquer pour développer les seuils de blocage

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (par défaut)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE bloque le plus, tandis que BLOCK_ONLY_HIGH bloque le moins.

Méthode HTTP et URL :

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

Corps JSON de la requête :

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

Pour envoyer votre requête, choisissez l'une des options suivantes :

curl

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

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

Enregistrez le corps de la requête dans un fichier nommé request.json, puis exécutez la commande suivante :

$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

Vous devriez recevoir une réponse JSON semblable à la suivante.

Exemple de commande curl

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"
    }
  ]
}'

Filtre de citation

Les fonctionnalités de code génératif de Vertex AI sont destinées à produire du contenu original. Par conception, Gemini limite la probabilité que le contenu existant soit reproduit de manière détaillée. Si une fonctionnalité Gemini reprend largement le contenu d'une page Web, Gemini cite cette page.

Parfois, le même contenu peut figurer sur plusieurs pages Web. Gemini tente alors de vous rediriger vers une source consultée fréquemment. Dans le cas de citations de dépôts de code, celles-ci peuvent également faire référence à une licence Open Source applicable. Il vous incombe de respecter les conditions de cette licence.

Pour en savoir plus sur les métadonnées du filtre de citation, consultez la documentation de référence de l'API Citation.

Filtre d'intégrité civique

Le filtre d'intégrité civique détecte et bloque les requêtes qui mentionnent des élections ou des candidats politiques, ou qui leur sont liés. Ce filtre est désactivé par défaut. Pour l'activer, définissez le seuil de blocage de CIVIC_INTEGRITY sur l'une des valeurs suivantes. La valeur que vous spécifiez n'a pas d'importance.

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

Le code Python suivant permet d'activer le filtre d'intégrité civique :

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

Pour en savoir plus sur le filtre d'intégrité civique, contactez votre représentant Google Cloud.

Bonnes pratiques

Bien que les filtres de sécurité permettent d'éviter les contenus non sécurisés, ils peuvent parfois bloquer des contenus inoffensifs ou ne pas bloquer des contenus nuisibles. Les modèles avancés tels que Gemini 1.5 Flash et Gemini 1.5 Pro sont conçus pour générer des réponses sécurisées, même sans filtres. Testez différents paramètres de filtre pour trouver le juste équilibre entre sécurité et autorisation de contenus appropriés.

Étape suivante