Filtros de seguridad y de contenido

Los modelos de IA generativa de Google, como Gemini 2.5 Flash, se han diseñado para priorizar la seguridad. Sin embargo, pueden generar respuestas dañinas, sobre todo si se les pide explícitamente. Para mejorar aún más la seguridad y minimizar el uso inadecuado, puedes configurar filtros de contenido para bloquear respuestas potencialmente dañinas.

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

Los filtros de seguridad y de contenido actúan como barrera para evitar que se genere contenido dañino, pero no influyen directamente en el comportamiento del modelo. Para obtener más información sobre la capacidad de dirigir el modelo, consulta Instrucciones del sistema para la seguridad.

Peticiones no seguras

La API de Gemini en Vertex AI proporciona uno de los siguientes códigos enum para explicar por qué se ha rechazado una petición:

Enum Tipo de filtro Descripción
PROHIBITED_CONTENT Filtro de seguridad no configurable La petición se ha bloqueado porque se ha detectado que contiene contenido prohibido, normalmente material de abuso sexual infantil.
BLOCKED_REASON_UNSPECIFIED N/A No se ha especificado el motivo del bloqueo de la petición.
OTHER N/A Este enum hace referencia a todos los demás motivos por los que se bloquea una petición. Ten en cuenta que la API de Gemini en Vertex AI no admite todos los idiomas. Para ver una lista de los idiomas disponibles, consulta Idiomas disponibles en Gemini.

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

A continuación, se muestra un ejemplo de la salida de la API de Gemini en Vertex AI cuando se bloquea una petició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 no seguras:

  • Filtros de seguridad no configurables, que bloquean el material de abuso sexual infantil y la información de identificación personal.
  • Filtros de contenido configurables: bloquean el contenido no seguro en función de una lista de categorías dañinas y de los umbrales de bloqueo configurados por el usuario. Puedes configurar umbrales de bloqueo para cada uno de estos daños en función de lo que sea adecuado para tu caso práctico y tu empresa. Para obtener más información, consulta Filtros de contenido configurables.
  • Filtros de citas, que proporcionan citas de material de origen. Para obtener más información, consulta Filtro de citas.

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

Enum Tipo de filtro Descripción
STOP N/A Este enum indica que el modelo ha llegado a un punto de parada natural o a la secuencia de parada proporcionada.
MAX_TOKENS N/A La generación de tokens se ha detenido porque el modelo ha alcanzado el número máximo de tokens especificado en la solicitud.
SAFETY Filtro de contenido configurable Se ha detenido la generación de tokens porque la respuesta se ha marcado como contenido dañino.
RECITATION Filtro de citas La generación de tokens se ha detenido debido a una posible recitación.
SPII Filtro de seguridad no configurable Se ha detenido la generación de tokens porque se ha detectado que la respuesta contiene información personal identificable sensible (IPIS).
PROHIBITED_CONTENT Filtro de seguridad no configurable Se ha detenido la generación de tokens porque se ha detectado que la respuesta contiene contenido prohibido, normalmente material de abuso sexual infantil.
FINISH_REASON_UNSPECIFIED N/A No se ha especificado el motivo de finalización.
OTHER N/A Este enum hace referencia a todos los demás motivos por los que se detiene la generación de tokens. Ten en cuenta que no se admite la generación de tokens en todos los idiomas. Para ver una lista de los idiomas disponibles, consulta Idiomas disponibles en 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 contenido configurables

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

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

Categorías de contenido dañino

Los filtros de contenido evalúan el contenido en función de las siguientes categorías de daño:

Categoría de daño Definición
Incitación al odio Comentarios negativos u ofensivos dirigidos a la identidad o a atributos protegidos.
Acoso Comentarios amenazantes, intimidatorios, acosadores o abusivos dirigidos a otra persona.
Contenido sexual explícito Incluye referencias a actos sexuales u otro contenido lascivo.
Contenido peligroso Promociona o permite el acceso a bienes, servicios y actividades perjudiciales.

Comparación de las puntuaciones de probabilidad y gravedad

La puntuación de seguridad de probabilidad refleja la probabilidad de que una respuesta del modelo esté asociada al 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: NEGLIGIBLE, LOW, MEDIUM y HIGH.

La puntuación de gravedad refleja la magnitud del daño que puede causar la respuesta de un modelo. Tiene una puntuación de gravedad asociada que va 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 bien una puntuación de probabilidad alta y una puntuación de gravedad baja.

Cómo configurar filtros de contenido

Puedes usar la API de Gemini en Vertex AI o la Google Cloud consola para configurar los filtros de contenido.

API de Gemini en Vertex AI

La API de Gemini en Vertex AI proporciona dos métodos de bloqueo de contenido dañino:

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

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

La API de Gemini en 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.
  • BLOCK_ONLY_HIGH: se bloquea cuando la puntuación de probabilidad o la puntuación de gravedad es HIGH.
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED: bloquea el contenido con el umbral predeterminado.
  • OFF: no se bloquea ninguna respuesta automatizada y no se devuelven metadatos. En el caso de gemini-2.5-flash y los modelos posteriores, OFF es el valor predeterminado.
  • BLOCK_NONE: el ajuste BLOCK_NONE elimina el bloqueo de respuestas automáticas. En su lugar, puedes configurar tus propias directrices de contenido con las puntuaciones devueltas. Este campo está restringido y no está disponible para todos los usuarios de las versiones del modelo de GA.

Por ejemplo, el siguiente código de Python muestra cómo puedes definir el umbral de bloqueo de contenido dañino en BLOCK_ONLY_HIGH para la categoría de contenido peligroso:

generative_models.SafetySetting(
  category=generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
  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 HarmBlockThreshold.

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

Google Cloud consola

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

La consola Google Cloud proporciona los siguientes valores de umbral:

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

Por ejemplo, si selecciona la opción Bloquear poco en la categoría de contenido peligroso, se bloqueará todo el contenido que tenga una alta probabilidad de ser peligroso. Se permite cualquier otra opción con una probabilidad inferior. El umbral predeterminado es Block some.

Para definir los umbrales, sigue estos pasos:

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

    Ir a Vertex AI Studio

  2. En Crear una petición, haz clic en cualquiera de los botones para abrir la página de diseño de la petición.

  3. Haz clic en Configuración de seguridad.

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

  4. En cada categoría de daño, configure el valor de umbral que quiera.

  5. Haz clic en Guardar.

Ejemplo de salida cuando el filtro de contenido configurable bloquea una respuesta

A continuación, se muestra un ejemplo de la salida de la API de Gemini en Vertex AI cuando el filtro de contenido 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 contenido

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

Python

Instalar

pip install --upgrade google-genai

Para obtener más información, consulta la documentación de referencia del SDK.

Define variables de entorno para usar el SDK de IA generativa 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=global
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.5-flash",
    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

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

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • LOCATION: la región en la que se procesará la solicitud. Entre las opciones disponibles se incluyen las siguientes:

    Haz clic para ver una lista parcial de las regiones disponibles

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: tu ID de proyecto.
  • MODEL_ID: el ID del modelo multimodal que quieras usar, como gemini-2.5-flash.
  • ROLE: el rol en una conversación asociado al contenido. Es obligatorio especificar un rol incluso en los casos prácticos de una sola interacción. Entre los valores aceptados se incluyen los siguientes:
    • USER: especifica el contenido que has enviado.
    • MODEL: especifica la respuesta del modelo.
  • TEXT: las instrucciones de texto que se deben incluir en la petición.
  • SAFETY_CATEGORY: la categoría de seguridad para la que se va a configurar un umbral. Entre los valores aceptados se incluyen los siguientes:

    Haz clic para desplegar las categorías de seguridad.

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: Umbral para bloquear las respuestas que podrían pertenecer a la categoría de seguridad especificada en función de la probabilidad. Entre los valores aceptados se incluyen los siguientes:

    Haz clic para desplegar los umbrales de bloqueo

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (predeterminado)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE bloquea la mayoría de las cookies, mientras que BLOCK_ONLY_HIGH bloquea la menor cantidad.

Método HTTP y 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" }
  },
  "safetySettings": {
    "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 siguiente.

Comando curl de ejemplo

LOCATION="us-central1"
MODEL_ID="gemini-2.5-flash"
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 diseñadas para producir contenido original. Por diseño, Gemini limita la probabilidad de que se replique contenido que ya existe. Si una función de Gemini cita de forma extensa una página web, Gemini la mencionará.

En ocasiones, un mismo contenido puede aparecer en varias páginas web. Gemini intenta dirigirte a una fuente popular. En el caso de las citas de repositorios de código, es posible que la cita también haga referencia a la licencia de software libre aplicable. Es su responsabilidad cumplir los requisitos de dichas licencias.

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

Prácticas recomendadas

Aunque los filtros de contenido ayudan a evitar el contenido no seguro, es posible que, en ocasiones, bloqueen contenido benigno o no detecten contenido dañino. Los modelos avanzados, como Gemini 2.5 Flash, se han diseñado para generar respuestas seguras incluso sin filtros. Prueba diferentes ajustes de filtros para encontrar el equilibrio adecuado entre seguridad y contenido apropiado.

Siguientes pasos