Configurar filtros de segurança

Os modelos de IA generativa do Google, como o Gemini 1.5 Flash e o Gemini 1.5 Pro, foram criados para priorizar a segurança. No entanto, eles ainda podem gerar respostas prejudiciais, especialmente quando são explicitamente solicitados. Para aumentar ainda mais a segurança e minimizar o uso indevido, você pode configurar filtros de segurança para bloquear respostas potencialmente perigosas.

Esta página descreve cada um dos tipos de filtro de segurança e descreve os principais conceitos de segurança. Para filtros configuráveis, ele mostra como configurar os limites de bloqueio de cada categoria de dano para controlar com que frequência os comandos e respostas são bloqueados.

Os filtros de segurança funcionam como uma barreira, evitando resultados nocivos, mas não influenciam diretamente o comportamento do modelo. Para saber mais sobre a direção de modelos, consulte Instruções do sistema.

Comandos não seguros

A API Vertex AI Gemini fornece um dos seguintes códigos enum para explicar o motivo da rejeição de um comando:

Enum Tipo de filtro Descrição
PROHIBITED_CONTENT Filtro de segurança não configurável A solicitação foi bloqueada porque foi sinalizada por conter conteúdo proibido, geralmente material de abuso sexual infantil.
BLOCKED_REASON_UNSPECIFIED N/A O motivo para bloquear o comando não foi especificado.
OUTROS N/A Esse tipo enumerado se refere a todos os outros motivos para bloquear um comando. A API Vertex AI Gemini não é compatível com todos os idiomas. Para uma lista de idiomas compatíveis, consulte Compatibilidade com idiomas do Gemini.

Para saber mais, consulte BlockedReason.

Este é um exemplo de saída da API Vertex AI Gemini quando um comando é bloqueado por conter PROHIBITED_CONTENT:

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

Respostas não seguras

Os filtros a seguir podem detectar e bloquear respostas potencialmente não seguras:

  • Filtros de segurança não configuráveis, que bloqueiam material de abuso sexual infantil (CSAM) e informações de identificação pessoal (PII).
  • Filtros de segurança configuráveis, que bloqueiam conteúdo não seguro com base em uma lista de categorias de danos e os limites de bloqueio configurados pelo usuário. Você pode configurar limites de bloqueio para cada um desses danos com base no que é apropriado para seu caso de uso e negócios. Para saber mais, consulte Filtros de segurança configuráveis.
  • Filtros de citação, que evitam o uso indevido e garantem a citação correta de dados protegidos por direitos autorais. Para saber mais, consulte Filtro de citação.

Um LLM gera respostas em unidades de texto chamadas tokens. Um modelo interrompe a geração tokens porque ele chega a um ponto de parada natural ou porque um dos filtros bloqueia a resposta. A API Vertex AI Gemini fornece um dos códigos enum a seguir para explicar por que a geração de token foi interrompida:

Enum Tipo de filtro Descrição
STOP N/A Esse tipo enumerado indica que o modelo atingiu um ponto de parada natural ou a sequência de parada fornecida.
MAX_TOKENS N/A A geração de tokens foi interrompida porque o modelo atingiu o número máximo de tokens especificado na solicitação.
SEGURANÇA Filtro de segurança configurável A geração de tokens foi interrompida porque a resposta foi sinalizada por motivos de segurança.
RECITATION Filtro de citações A geração de tokens foi interrompida porque a resposta foi sinalizada por citações não autorizadas.
SPII Filtro de segurança não configurável A geração de tokens foi interrompida porque a resposta foi sinalizada por conteúdo com informações sensíveis de identificação pessoal (SPII).
PROHIBITED_CONTENT Filtro de segurança não configurável A geração do token foi interrompida porque a resposta foi sinalizada por incluir conteúdo proibido, geralmente material de abuso sexual infantil.
FINISH_REASON_UNSPECIFIED N/A O motivo da finalização não foi especificado.
OUTROS N/A Esse tipo enumerado refere-se a todos os outros motivos que interrompem a geração de tokens. Observe que a geração de tokens não é compatível com todos os idiomas. Para uma lista de idiomas compatíveis, consulte Compatibilidade com idiomas do Gemini.

Para saber mais, consulte FinishReason.

Se um filtro bloquear a resposta, ele anulará o campo Candidate.content da resposta. Ele não fornece feedback ao modelo.

Filtros de segurança configuráveis

Os filtros de segurança avaliam o conteúdo com base em uma lista de danos. Para cada categoria de danos, os filtros de segurança atribuem uma pontuação com base na probabilidade do conteúdo ser inseguro e outra pontuação com base na gravidade do conteúdo nocivo.

Os filtros de segurança configuráveis não têm controle de versões independente do modelo. O Google não atualiza o filtro de segurança configurável para uma versão lançada anteriormente de um modelo. No entanto, é possível que atualize o filtro de segurança configurável para uma versão futura de um modelo.

Categorias de dano

Os filtros de segurança avaliam o conteúdo com base nas seguintes categorias de danos:

Categoria de dano Definição
Discurso de ódio Comentários negativos ou nocivos voltados à identidade e/ou atributos protegidos.
Assédio Comentários ameaçadores, intimidadores, abusivos ou violentos direcionados a outra pessoa
Sexualmente explícito Contém referências a atos sexuais ou outro conteúdo sexual.
Conteúdo perigoso Promove ou permite o acesso a produtos, serviços e atividades prejudiciais.

Comparação de pontuações de probabilidade e de gravidade

A pontuação de segurança de probability reflete a probabilidade de uma resposta de modelo estar associada ao respectivo dano. Ele tem pontuação de confiança associada entre 0.0 e 1.0, arredondada para uma casa decimal. A pontuação de confiança é criterizada em quatro níveis de confiança de segurança: NEGLIGIBLE, LOW, MEDIUM e HIGH.

A pontuação de segurança severity reflete a magnitude de quão prejudicial a resposta de um modelo pode ser. Ele tem uma pontuação de gravidade associada que vai de 0.0 para 1.0, arredondada para uma casa decimal. A pontuação de gravidade é criterizada em quatro níveis: NEGLIGIBLE, LOW, MEDIUM e HIGH.

O conteúdo pode ter uma pontuação de probabilidade baixa e uma pontuação de gravidade alta ou uma pontuação de probabilidade alta e uma pontuação de gravidade baixa.

Como configurar filtros de segurança

Use a API Vertex AI Gemini ou o console do Google Cloud para configurar o filtro de segurança.

API Gemini da Vertex AI

A API Vertex AI Gemini fornece dois "bloqueios de dano", métodos:

  • SEVERITY: esse método usa pontuações de probabilidade e gravidade.
  • PROBABILITY: esse método usa apenas a pontuação de probabilidade.

O método padrão é SEVERITY. Para modelos anteriores a gemini-1.5-flash e gemini-1.5-pro, o método padrão é PROBABILITY. Para saber mais, consulte a referência da API HarmBlockMethod.

A API Vertex AI Gemini fornece os seguintes limites de "bloqueio de dano":

  • BLOCK_LOW_AND_ABOVE: bloqueia quando a pontuação de probabilidade ou de gravidade é LOW, MEDIUM ou HIGH.
  • BLOCK_MEDIUM_AND_ABOVE: bloqueia quando a pontuação de probabilidade ou de gravidade é MEDIUM ou HIGH. Para gemini-1.5-flash-001 e gemini-1.5-pro-001, BLOCK_MEDIUM_AND_ABOVE é o valor padrão.
  • BLOCK_ONLY_HIGH: bloqueia quando a pontuação de probabilidade ou de gravidade é HIGH.
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED: bloqueia usando o limite padrão.
  • DESATIVADA: nenhum bloqueio de resposta automática nem metadados de segurança são retornados. Para gemini-1.5-flash-002 e gemini-1.5-pro-002, OFF é o valor padrão.
  • BLOCK_NONE: a configuração de segurança BLOCK_NONE remove o bloqueio de respostas automáticas. Em vez disso, você pode configurar suas próprias diretrizes de segurança com as pontuações retornadas. Este é um campo restrito que não está disponível para todos os usuários nas versões de modelo do GA.

Por exemplo, o código Python a seguir demonstra como é possível configurar o método de bloqueio de danos para SEVERITY e o limite de bloqueio para BLOCK_ONLY_HIGH para a categoria de conteúdo perigoso:

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

Isso vai bloquear a maior parte do conteúdo classificado como perigoso. Para saber mais, consulte a referência da API HarmBlockThreshold.

Para conferir exemplos completos em Python, Node.js, Java, Go, C# e REST, consulte os Exemplos de configuração do filtro de segurança.

Console do Google Cloud

O console do Google Cloud permite configurar um limite para cada atributo de segurança. O filtro de segurança usa apenas as pontuações de probabilidade. Não há a opção de usar as pontuações de gravidade.

O console do Google Cloud fornece os seguintes valores de limite:

  • Desativado (padrão): não há bloqueio de respostas automáticas.
  • Bloquear poucos: bloquear quando a pontuação de probabilidade for HIGH.
  • Bloquear alguns: bloquear quando a pontuação de probabilidade for MEDIUM ou HIGH.
  • Bloquear muitos: bloquear quando a pontuação de probabilidade for LOW, MEDIUM ou HIGH.

Por exemplo, se você definir a configuração de bloqueio como Bloquear poucos na categoria "Conteúdos perigosos", tudo com alta probabilidade de ser um conteúdo nocivo será bloqueado. Qualquer item com menor probabilidade de risco é permitido. O limite padrão é Block some.

Para definir os limites, consulte as seguintes etapas:

  1. Na seção "Vertex AI" do console do Google Cloud, acesse a página do Vertex AI Studio.

    Acessar o Vertex AI Studio

  2. Em Criar um novo comando, clique em qualquer um dos botões para abrir a página de criação de comandos.

  3. Clique em Configurações de segurança.

    A caixa de diálogo Configurações de segurança é aberta.

  4. Para cada categoria de dano, configure o valor limite desejado.

  5. Clique em Salvar.

Exemplo de saída quando uma resposta é bloqueada pelo filtro de segurança configurável

Este é um exemplo de saída da API Vertex AI Gemini quando uma resposta é bloqueada pelo filtro de segurança configurável por conter conteúdo perigoso:

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

Exemplos de configuração do filtro de segurança

Os exemplos a seguir demonstram como configurar o filtro de segurança usando a API Vertex AI Gemini:

Python

Para saber como instalar o SDK da Vertex AI para Python, consulte Instalar o SDK da Vertex AI para Python. Para mais informações, consulte a documentação de referência da 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-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 testar essa amostra, siga as instruções de configuração para Node.js Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Node.js.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 testar essa amostra, siga as instruções de configuração para Java Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Java.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 testar essa amostra, siga as instruções de configuração para Go Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Go.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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 testar essa amostra, siga as instruções de configuração para C# Guia de início rápido da Vertex AI: como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para C#.

Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento 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

Depois de configurou seu ambiente use REST para testar uma solicitação de texto. O exemplo a seguir envia uma solicitação ao publisher endpoint do modelo.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • LOCATION: a região para processar a solicitação. As opções disponíveis incluem:

    Clicar para abrir uma lista parcial das regiões disponíveis

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: o ID do projeto.
  • MODEL_ID: o ID do modelo multimodal que você quer usar. As opções são:
    • gemini-1.0-pro
    • gemini-1.0-pro-vision
  • ROLE: o papel em uma conversa associada ao conteúdo. É necessário especificar um papel mesmo em casos de uso de turno único. Os valores aceitáveis são os seguintes:
    • USER: especifica o conteúdo que é enviado por você.
    • MODEL: especifica a resposta do modelo.
  • TEXT: as instruções de texto a serem incluídas no comando.
  • SAFETY_CATEGORY: a categoria de segurança para a qual configurar um limite. Os valores aceitáveis são os seguintes:

    Clique para expandir as categorias de segurança

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: o limite de bloqueio de respostas que podem pertencer à categoria de segurança especificada com base na probabilidade. Os valores aceitáveis são os seguintes:

    Clique para expandir os limites de bloqueio

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (padrão)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE bloqueia mais, e BLOCK_ONLY_HIGH bloqueia a menor.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, escolha uma destas opções:

curl

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

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

Salve o corpo da solicitação em um arquivo com o nome request.json e execute o comando a seguir:

$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

Você receberá uma resposta JSON semelhante a seguinte.

Exemplo de 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 citações

Os recursos de código generativo da Vertex AI têm como objetivo produzir conteúdo original. Por padrão, o Gemini limita a probabilidade de que o conteúdo atual seja replicado extensamente. Se um recurso do Gemini fizer uma citação extensa de uma página da Web, o Gemini cita essa página.

Às vezes, o mesmo conteúdo pode ser encontrado em várias páginas da Web. O Gemini tenta apontar para uma fonte conhecida. No caso de citações de repositórios de código, a citação também pode referenciar uma licença de código aberto aplicável. É sua responsabilidade obedecer aos requisitos de licença.

Para saber mais sobre os metadados do filtro de citações, consulte a referência da API Citation.

Filtro de integridade cívica

O filtro de integridade cívica detecta e bloqueia comandos que mencionam ou se relacionam a eleições e candidatos políticos. Esse filtro fica desativado por padrão. Para ativar essa opção, defina o limite de bloqueio para CIVIC_INTEGRITY como um dos seguintes valores. Não faz diferença qual valor você especifica.

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

O código Python a seguir mostra como ativar o filtro de integridade cívica:

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

Para mais detalhes sobre o filtro de integridade cívica, entre em contato com seu representante do Google Cloud.

Práticas recomendadas

Embora os filtros de segurança ajudem a evitar conteúdo não seguro, eles podem bloquear conteúdo seguro ou não detectar conteúdo não seguro. Modelos avançados, como Gemini 1.5 Flash e Gemini 1.5 Pro, são projetados para gerar respostas seguras, mesmo sem filtros. Teste diferentes configurações de filtro para encontrar o equilíbrio certo entre segurança e permissão de conteúdo adequado.

A seguir