Configura filtros de seguridad

Los modelos de IA generativa de Google, como Gemini 1.5 Flash y Gemini 1.5 Pro, están diseñados para priorizar la seguridad. Sin embargo, aún pueden generar respuestas dañinas, en especial cuando se les solicita de forma explícita. Para mejorar aún más la seguridad y minimizar el uso inadecuado, puedes configurar filtros de seguridad para bloquear respuestas potencialmente dañinas.

En esta página, se describe cada uno de los tipos de filtros de seguridad y se describen conceptos clave de seguridad. En el caso de los filtros configurables, se muestra cómo configurar los umbrales de bloqueo de cada categoría de daño para controlar la frecuencia con la que se bloquean las solicitudes y respuestas.

Los filtros de seguridad actúan como una barrera para evitar resultados dañinos, pero no influyen directamente en el comportamiento del modelo. Para obtener más información sobre la capacidad de dirección del modelo, consulta Instrucciones del sistema.

Instrucciones no seguras

La API de Gemini de Vertex AI proporciona uno de los siguientes códigos enum para explicar por qué se rechazó una instrucción:

Enum Tipo de filtro Descripción
PROHIBITED_CONTENT Filtro de seguridad no configurable Se bloqueó la instrucción porque se marcó por incluir contenido prohibido, por lo general, CSAM.
BLOCKED_REASON_UNSPECIFIED N/A No se especifica el motivo por el que se bloqueó la instrucción.
OTRO N/A Esta enumeración hace referencia a todos los demás motivos para bloquear una instrucción. Ten en cuenta que la API de Gemini de Vertex AI no es compatible con todos los idiomas. Para obtener una lista de los idiomas admitidos, consulta Compatibilidad con idiomas de Gemini.

Para obtener más información, consulta BlockedReason.

El siguiente es un ejemplo del resultado de la API de Gemini de Vertex AI cuando se bloquea una instrucción por contener PROHIBITED_CONTENT:

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

Respuestas no seguras

Los siguientes filtros pueden detectar y bloquear respuestas potencialmente inseguras:

  • Filtros de seguridad no configurables, que bloquean el material de abuso sexual infantil (CSAM) y la información de identificación personal (PII).
  • Filtros de seguridad configurables, que bloquean el contenido no seguro en función de una lista de categorías de daño y sus umbrales de bloqueo configurados por el usuario. Puedes configurar umbrales de bloqueo para cada uno de estos daños según lo que sea apropiado para tu caso de uso y tu empresa. Para obtener más información, consulta Filtros de seguridad configurables.
  • Filtros de citas, que evitan el uso inadecuado y garantizan la cita correcta de los datos protegidos por derechos de autor. Para obtener más información, consulta Filtro de cita.

Un LLM genera respuestas en unidades de texto llamadas tokens. Un modelo deja de generar tokens porque alcanza un punto de detención natural o porque uno de los filtros bloquea la respuesta. La API de Gemini de Vertex AI proporciona uno de los siguientes códigos enum para explicar por qué se detuvo la generación de tokens:

Enum Tipo de filtro Descripción
STOP N/A Esta enumeración indica que el modelo alcanzó un punto de detención natural o la secuencia de detención proporcionada.
MAX_TOKENS N/A La generación de tokens se detuvo porque el modelo alcanzó la cantidad máxima de tokens especificada en la solicitud.
SAFETY Filtro de seguridad configurable La generación del token se detuvo porque la respuesta se marcó por motivos de seguridad.
RECITATION Filtro de citas La generación del token se detuvo porque la respuesta se marcó para citas no autorizadas.
SPII Filtro de seguridad no configurable La generación de tokens se detuvo porque la respuesta se marcó por contenido de información de identificación personal sensible (IIPS).
PROHIBITED_CONTENT Filtro de seguridad no configurable La generación de tokens se detuvo porque la respuesta se marcó por incluir contenido prohibido, por lo general, CSAM.
FINISH_REASON_UNSPECIFIED N/A No se especifica el motivo de finalización.
OTRO N/A Esta enumeración hace referencia a todos los demás motivos que detienen la generación de tokens. Ten en cuenta que la generación de tokens no es compatible con todos los idiomas. Para obtener una lista de los idiomas admitidos, consulta Compatibilidad con idiomas de Gemini.

Para obtener más información, consulta FinishReason.

Si un filtro bloquea la respuesta, anula el campo Candidate.content de la respuesta. No proporciona ningún comentario al modelo.

Filtros de seguridad configurables

Los filtros de seguridad evalúan el contenido en función de una lista de daños. Para cada categoría de daño, los filtros de seguridad asignan una puntuación de seguridad según la probabilidad de que el contenido no sea seguro y otra puntuación de seguridad según la gravedad del contenido dañino.

Los filtros de seguridad configurables no tienen control de versiones independiente de las versiones del modelo. Google no actualizará el filtro de seguridad configurable para una versión de un modelo que se haya lanzado anteriormente. Sin embargo, puede actualizar el filtro de seguridad configurable para una versión futura de un modelo.

Categorías de daño

Los filtros de seguridad evalúan el contenido según las siguientes categorías de daño:

Categoría de daño Definición
Incitación al odio o a la violencia Comentarios negativos o dañinos que se orientan a la identidad o los atributos protegidos.
Acoso Comentarios amenazantes, intimidantes, de bullying o abusivos dirigidos a otra persona.
Sexualmente explícito Incluye referencias a actos sexual o a otro contenido obsceno.
Contenido peligroso Promueve o habilita el acceso a bienes, servicios y actividades perjudiciales.

Comparación de las puntuaciones de probabilidad y las puntuaciones de gravedad

La puntuación de seguridad de probabilidad refleja la probabilidad de que una respuesta del modelo esté asociada con el daño correspondiente. Tiene una puntuación de confianza asociada entre 0.0 y 1.0, redondeada a un decimal. La puntuación de confianza se discretiza en cuatro niveles de confianza de seguridad: NEGLIGIBLE, LOW, MEDIUM y HIGH.

La puntuación de seguridad de gravedad refleja la magnitud de la gravedad de una respuesta del modelo. Tiene una puntuación de gravedad asociada que varía de 0.0 a 1.0, redondeada a un decimal. La puntuación de gravedad se discretiza en cuatro niveles: NEGLIGIBLE, LOW, MEDIUM y HIGH.

El contenido puede tener una puntuación de probabilidad baja y una puntuación de gravedad alta, o una puntuación de probabilidad alta y una puntuación de gravedad baja.

Cómo configurar filtros de seguridad

Puedes usar la API de Vertex AI Gemini o la consola de Google Cloud para configurar el filtro de seguridad.

API de Gemini de Vertex AI

La API de Gemini de Vertex AI proporciona dos métodos de "bloqueo de daños":

  • SEVERITY: Este método usa puntuaciones de probabilidad y gravedad.
  • PROBABILITY: Este método solo usa la puntuación de probabilidad.

El método predeterminado es SEVERITY. Para modelos anteriores a gemini-1.5-flash y gemini-1.5-pro, el método predeterminado es PROBABILITY. Si deseas obtener más información, consulta la referencia de la API de HarmBlockMethod.

La API de Gemini de Vertex AI proporciona los siguientes umbrales de "bloqueo de contenido dañino":

  • BLOCK_LOW_AND_ABOVE: Bloquea cuando la puntuación de probabilidad o la puntuación de gravedad sea LOW, MEDIUM o HIGH.
  • BLOCK_MEDIUM_AND_ABOVE: Bloquea cuando la puntuación de probabilidad o la puntuación de gravedad sea MEDIUM o HIGH. Para gemini-1.5-flash-001 y gemini-1.5-pro-001, BLOCK_MEDIUM_AND_ABOVE es el valor predeterminado.
  • BLOCK_ONLY_HIGH: Bloquea cuando la puntuación de probabilidad o la puntuación de gravedad sea HIGH.
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED: Bloquea con el umbral predeterminado.
  • OFF: No se bloquean las respuestas automáticas ni se muestran metadatos de seguridad. Para gemini-1.5-flash-002 y gemini-1.5-pro-002, OFF es el valor predeterminado.
  • BLOCK_NONE: La configuración de seguridad BLOCK_NONE quita el bloqueo de respuestas automáticas. En cambio, puedes configurar tus propios lineamientos de seguridad con las puntuaciones que se muestran. Este es un campo restringido que no está disponible para todos los usuarios en las versiones del modelo de GA.

Por ejemplo, en el siguiente código de Python, se muestra cómo puedes establecer el método de bloqueo de daño en SEVERITY y el umbral de bloqueo de daño en BLOCK_ONLY_HIGH para la categoría de contenido peligroso:

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

De esta forma, se bloqueará la mayor parte del contenido clasificado como peligroso. Para obtener más información, consulta la referencia de la API de HarmBlockThreshold.

Para ver ejemplos de extremo a extremo en Python, Node.js, Java, Go, C# y REST, consulta Ejemplos de configuración de filtros de seguridad.

Consola de Google Cloud

La consola de Google Cloud te permite configurar un umbral para cada atributo de seguridad. El filtro de seguridad solo usa las puntuaciones de probabilidad. No hay opción para usar las puntuaciones de gravedad.

La consola de Google Cloud proporciona los siguientes valores de umbral:

  • Desactivado (predeterminado): No se bloquean las respuestas automáticas.
  • Bloquear pocos: Bloquear el contenido cuando la puntuación de probabilidad sea HIGH.
  • Bloquear algunos: Bloquear cuando la puntuación de probabilidad sea MEDIUM o HIGH.
  • Bloquear la mayoría: Bloquear cuando la puntuación de probabilidad sea LOW, MEDIUM o HIGH.

Por ejemplo, si estableces la configuración de bloqueo en Bloquear poco para la categoría de contenido peligroso, se bloqueará todo lo que tenga una alta probabilidad de ser contenido peligroso. Se permite cualquier cosa con una probabilidad menor. El umbral predeterminado es Block some.

Para establecer los umbrales, sigue estos pasos:

  1. En la sección Vertex AI de la consola de Google Cloud, ve a la página Vertex AI Studio.

    Ir a Vertex AI Studio

  2. En Crear un mensaje nuevo, haz clic en cualquiera de los botones para abrir la página de diseño de mensajes.

  3. Haz clic en Configuración de seguridad.

    Se abrirá la ventana de diálogo Configuración de seguridad.

  4. Para cada categoría de daño, configura el valor de umbral deseado.

  5. Haz clic en Guardar.

Ejemplo de resultado cuando el filtro de seguridad configurable bloquea una respuesta

A continuación, se muestra un ejemplo del resultado de la API de Vertex AI Gemini cuando el filtro de seguridad configurable bloquea una respuesta por contener contenido peligroso:

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

Ejemplos de configuración de filtros de seguridad

En los siguientes ejemplos, se muestra cómo puedes configurar el filtro de seguridad con la API de Vertex AI Gemini:

Python

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de 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-002")

# 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

Antes de probar este ejemplo, sigue las instrucciones de configuración para Node.js incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Node.js.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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,
      },
      {
        category: HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
      },
    ],
  });

  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

Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Java.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Antes de probar este ejemplo, sigue las instrucciones de configuración para Go incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI Go.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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#

Antes de probar este ejemplo, sigue las instrucciones de configuración para C# incluidas en la guía de inicio rápido de Vertex AI sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de Vertex AI C#.

Para autenticarte en Vertex AI, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo 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

Después de configurar tu entorno, puedes usar REST para probar una instrucción de texto. En el siguiente ejemplo, se envía una solicitud al extremo del modelo de publicador.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • LOCATION: La región para procesar la solicitud. Las opciones disponibles incluyen las siguientes:

    Haz clic para expandir una lista parcial de regiones disponibles

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: El ID del proyecto.
  • MODEL_ID: el ID del modelo multimodal que deseas usar. Las opciones son las siguientes:
    • gemini-1.0-pro
    • gemini-1.0-pro-vision
  • ROLE: El rol en una conversación asociada con el contenido. Especificar un rol es obligatorio incluso en casos de uso de un solo turno. Los valores aceptables son los siguientes:
    • USER: especifica el contenido que envías.
    • MODEL: especifica la respuesta del modelo.
  • TEXT: Las instrucciones de texto que se incluirán en el mensaje.
  • SAFETY_CATEGORY: La categoría de seguridad para la que se configura un umbral. Los valores aceptables son los siguientes:

    Haz clic para expandir las categorías de seguridad

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: El umbral para bloquear respuestas que podrían pertenecer a la categoría de seguridad especificada según la probabilidad. Los valores aceptables son los siguientes:

    Haz clic para expandir los umbrales de bloqueo

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (predeterminada)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE bloquea más, mientras que BLOCK_ONLY_HIGH bloquea menos.

HTTP method and URL:

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

Cuerpo JSON de la solicitud:

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

Para enviar tu solicitud, elige una de estas opciones:

curl

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

Guarda el cuerpo de la solicitud en un archivo llamado request.json y ejecuta el siguiente 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

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

Filtro de citas

Las funciones de código generativo de Vertex AI están destinadas a producir contenido original. De forma predeterminada, Gemini limita la probabilidad de que el contenido existente se replique en su totalidad. Si una función de Gemini hace una cita extensa de una página web, Gemini cita esa página.

En ocasiones, es posible que se encuentre el mismo contenido en varias páginas web. Gemini intentará dirigirte a una fuente popular. En el caso de citas a repositorios de código, la cita también puede hacer referencia a una licencia de código abierto aplicable. Es su responsabilidad cumplir con los requisitos de las licencias.

Para obtener información acerca de los metadatos del filtro de citas, consulta la referencia de la API de citas.

Filtro de integridad cívica

El filtro de integridad cívica detecta y bloquea las instrucciones que mencionan o se relacionan con elecciones y candidatos políticos. Este filtro está inhabilitado de forma predeterminada. Para activarlo, establece el umbral de bloqueo de CIVIC_INTEGRITY en cualquiera de los siguientes valores. No importa qué valor especifiques.

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

En el siguiente código de Python, se muestra cómo activar el filtro de integridad cívica:

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

Para obtener más detalles sobre el filtro de integridad cívica, comunícate con tu representante de Google Cloud.

Prácticas recomendadas

Si bien los filtros de seguridad ayudan a evitar el contenido no seguro, en ocasiones, es posible que bloqueen contenido seguro o no detecten contenido no seguro. Los modelos avanzados, como Gemini 1.5 Flash y Gemini 1.5 Pro, están diseñados para generar respuestas seguras incluso sin filtros. Prueba diferentes parámetros de configuración de los filtros para encontrar el equilibrio adecuado entre seguridad y permitir contenido apropiado.

¿Qué sigue?