Filter keamanan dan konten

Model AI generatif Google, seperti Gemini 1.5 Flash dan Gemini 1.5 Pro, dirancang untuk memprioritaskan keamanan. Namun, mereka masih dapat menghasilkan respons berbahaya, terutama saat diprompt secara eksplisit. Untuk lebih meningkatkan keamanan dan meminimalkan penyalahgunaan, Anda dapat mengonfigurasi filter konten untuk memblokir respons yang berpotensi berbahaya.

Halaman ini menjelaskan setiap jenis filter keamanan dan konten serta menguraikan konsep keamanan utama. Untuk filter konten yang dapat dikonfigurasi, halaman ini menunjukkan cara mengonfigurasi nilai minimum pemblokiran setiap kategori bahaya untuk mengontrol seberapa sering perintah dan respons diblokir.

Filter keamanan dan konten berfungsi sebagai penghalang, mencegah output berbahaya, tetapi tidak memengaruhi perilaku model secara langsung. Untuk mempelajari kemampuan kemudi model lebih lanjut, lihat Petunjuk sistem untuk keamanan.

Perintah yang tidak aman

Vertex AI Gemini API memberikan salah satu kode enum berikut untuk menjelaskan alasan perintah ditolak:

Enum Jenis filter Deskripsi
PROHIBITED_CONTENT Filter keamanan yang tidak dapat dikonfigurasi Perintah tersebut diblokir karena ditandai karena berisi konten yang dilarang, biasanya CSAM.
BLOCKED_REASON_UNSPECIFIED T/A Alasan pemblokiran perintah tidak ditentukan.
OTHER T/A Enum ini mengacu pada semua alasan lain untuk memblokir perintah. Perhatikan bahwa Vertex AI Gemini API tidak mendukung semua bahasa. Untuk mengetahui daftar bahasa yang didukung, lihat Dukungan bahasa Gemini.

Untuk mempelajari lebih lanjut, lihat BlockedReason.

Berikut adalah contoh output Vertex AI Gemini API saat perintah diblokir karena berisi PROHIBITED_CONTENT:

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

Respons yang tidak aman

Filter berikut dapat mendeteksi dan memblokir respons yang berpotensi tidak aman:

  • Filter keamanan yang tidak dapat dikonfigurasi, yang memblokir materi pelecehan seksual terhadap anak-anak (CSAM) dan informasi identitas pribadi (PII).
  • Filter konten yang dapat dikonfigurasi, yang memblokir konten tidak aman berdasarkan daftar kategori bahaya dan nilai minimum pemblokiran yang dikonfigurasi pengguna. Anda dapat mengonfigurasi nilai minimum pemblokiran untuk setiap bahaya ini berdasarkan hal yang sesuai untuk kasus penggunaan dan bisnis Anda. Untuk mempelajari lebih lanjut, lihat Filter konten yang dapat dikonfigurasi.
  • Filter kutipan, yang memberikan kutipan untuk materi sumber. Untuk mempelajari lebih lanjut, lihat Filter kutipan.

LLM menghasilkan respons dalam unit teks yang disebut token. Model berhenti membuat token karena mencapai titik perhentian alami atau karena salah satu filter memblokir respons. Vertex AI Gemini API menyediakan salah satu kode enum berikut untuk menjelaskan alasan pembuatan token dihentikan:

Enum Jenis filter Deskripsi
STOP T/A Enum ini menunjukkan bahwa model mencapai titik perhentian alami atau urutan perhentian yang diberikan.
MAX_TOKENS T/A Pembuatan token dihentikan karena model mencapai jumlah maksimum token yang ditentukan dalam permintaan.
SAFETY Filter konten yang dapat dikonfigurasi Pembuatan token dihentikan karena respons ditandai sebagai konten berbahaya.
RECITATION Filter kutipan Pembuatan token dihentikan karena potensi pembacaan.
SPII Filter keamanan yang tidak dapat dikonfigurasi Pembuatan token dihentikan karena respons ditandai untuk konten Informasi Identitas Pribadi yang Sensitif (SPII).
PROHIBITED_CONTENT Filter keamanan yang tidak dapat dikonfigurasi Pembuatan token dihentikan karena respons ditandai karena berisi konten yang dilarang, biasanya CSAM.
FINISH_REASON_UNSPECIFIED T/A Alasan penyelesaian tidak ditentukan.
OTHER T/A Enum ini mengacu pada semua alasan lain yang menghentikan pembuatan token. Perhatikan bahwa pembuatan token tidak didukung untuk semua bahasa. Untuk mengetahui daftar bahasa yang didukung, lihat Dukungan bahasa Gemini.

Untuk mempelajari lebih lanjut, lihat FinishReason.

Jika filter memblokir respons, filter akan membatalkan kolom Candidate.content respons. Model ini tidak memberikan masukan apa pun ke model.

Filter konten yang dapat dikonfigurasi

Filter konten menilai konten berdasarkan daftar bahaya. Untuk setiap kategori bahaya, filter konten menetapkan satu skor berdasarkan probabilitas konten yang berbahaya dan skor lain berdasarkan keparahan konten berbahaya.

Filter konten yang dapat dikonfigurasi tidak memiliki pembuatan versi yang independen dari versi model. Google tidak akan memperbarui filter konten yang dapat dikonfigurasi untuk versi model yang dirilis sebelumnya. Namun, tindakan ini dapat memperbarui filter konten yang dapat dikonfigurasi untuk versi model mendatang.

Kategori bahaya

Filter konten menilai konten berdasarkan kategori bahaya berikut:

Kategori Kerugian Definisi
Ujaran Kebencian Komentar negatif atau berbahaya yang menargetkan atribut identitas dan/atau dilindungi.
Pelecehan Komentar yang mengancam, mengintimidasi, menindas, atau melecehkan yang menarget individu lain.
Seksual Vulgar Berisi referensi ke tindakan seksual atau konten cabul lainnya.
Konten Berbahaya Mempromosikan atau memungkinkan akses ke barang, layanan, dan aktivitas berbahaya.

Perbandingan skor probabilitas dan skor keparahan

Skor keamanan probabilitas mencerminkan kemungkinan respons model terkait dengan bahaya masing-masing. Atribut ini memiliki skor keyakinan terkait antara 0.0 dan 1.0, yang dibulatkan ke satu angka desimal. Skor keyakinan diskretisasi menjadi empat tingkat keyakinan: NEGLIGIBLE, LOW, MEDIUM, dan HIGH.

Skor keparahan mencerminkan besarnya tingkat bahaya respons model. Masalah ini memiliki skor keparahan terkait yang berkisar dari 0.0 hingga 1.0, dibulatkan ke satu tempat desimal. Skor keparahan diskretasikan menjadi empat level: NEGLIGIBLE, LOW, MEDIUM, dan HIGH.

Konten dapat memiliki skor probabilitas yang rendah dan skor keparahan yang tinggi, atau skor probabilitas yang tinggi dan skor keparahan yang rendah.

Cara mengonfigurasi filter konten

Anda dapat menggunakan Vertex AI Gemini API atau konsol Google Cloud untuk mengonfigurasi filter konten.

Vertex AI Gemini API

Vertex AI Gemini API menyediakan dua metode "blokir bahaya":

  • SEVERITY: Metode ini menggunakan skor probabilitas dan keparahan.
  • PROBABILITY: Metode ini hanya menggunakan skor probabilitas.

Metode default-nya adalah SEVERITY. Untuk model yang lebih lama dari gemini-1.5-flash dan gemini-1.5-pro, metode defaultnya adalah PROBABILITY. Untuk mempelajari lebih lanjut, lihat referensi API HarmBlockMethod.

Vertex AI Gemini API menyediakan nilai minimum "blokir bahaya" berikut:

  • BLOCK_LOW_AND_ABOVE: Blokir jika skor probabilitas atau skor keparahan adalah LOW, MEDIUM, atau HIGH.
  • BLOCK_MEDIUM_AND_ABOVE: Blokir jika skor probabilitas atau skor keparahan adalah MEDIUM atau HIGH. Untuk gemini-1.5-flash-001 dan gemini-1.5-pro-001, BLOCK_MEDIUM_AND_ABOVE adalah nilai default.
  • BLOCK_ONLY_HIGH: Blokir jika skor probabilitas atau skor keparahan adalah HIGH.
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED: Memblokir menggunakan nilai minimum default.
  • OFF: Tidak ada pemblokiran respons otomatis dan tidak ada metadata yang ditampilkan. Untuk gemini-1.5-flash-002 dan gemini-1.5-pro-002, OFF adalah nilai default.
  • BLOCK_NONE: Setelan BLOCK_NONE menghapus pemblokiran respons otomatis. Sebagai gantinya, Anda dapat mengonfigurasi panduan konten Anda sendiri dengan skor yang ditampilkan. Ini adalah kolom terbatas yang tidak tersedia untuk semua pengguna dalam versi model GA.

Misalnya, kode Python berikut menunjukkan cara menetapkan nilai minimum pemblokiran konten berbahaya ke BLOCK_ONLY_HIGH untuk kategori konten berbahaya:

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

Tindakan ini akan memblokir sebagian besar konten yang diklasifikasikan sebagai konten berbahaya. Untuk mempelajari lebih lanjut, lihat referensi API HarmBlockThreshold.

Untuk contoh menyeluruh di Python, Node.js, Java, Go, C#, dan REST, lihat Contoh konfigurasi filter konten.

Konsol Google Cloud

Konsol Google Cloud memungkinkan Anda mengonfigurasi nilai minimum untuk setiap atribut konten. Filter konten hanya menggunakan skor probabilitas. Tidak ada opsi untuk menggunakan skor keparahan.

Konsol Google Cloud menyediakan nilai nilai minimum berikut:

  • Nonaktif (default): Tidak ada pemblokiran respons otomatis.
  • Blokir beberapa: Memblokir jika skor probabilitasnya adalah HIGH.
  • Blokir beberapa: Memblokir jika skor probabilitasnya adalah MEDIUM atau HIGH.
  • Blokir sebagian besar: Memblokir jika skor probabilitasnya adalah LOW, MEDIUM, atau HIGH.

Misalnya, jika Anda menetapkan setelan pemblokiran ke Block few untuk kategori Konten Berbahaya, semua konten yang memiliki probabilitas tinggi sebagai konten berbahaya akan diblokir. Semua yang memiliki probabilitas lebih rendah diizinkan. Nilai minimum default-nya adalah Block some.

Untuk menetapkan nilai minimum, lihat langkah-langkah berikut:

  1. Di bagian Vertex AI pada Konsol Google Cloud, buka halaman Vertex AI Studio.

    Buka Vertex AI Studio

  2. Di bagian Buat perintah baru, klik salah satu tombol untuk membuka halaman desain perintah.

  3. Klik Setelan keamanan.

    Jendela dialog Setelan keamanan akan terbuka.

  4. Untuk setiap kategori bahaya, konfigurasikan nilai nilai minimum yang diinginkan.

  5. Klik Simpan.

Contoh output saat respons diblokir oleh filter konten yang dapat dikonfigurasi

Berikut adalah contoh output Vertex AI Gemini API saat respons diblokir oleh filter konten yang dapat dikonfigurasi karena berisi konten berbahaya:

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

Contoh konfigurasi filter konten

Contoh berikut menunjukkan cara mengonfigurasi filter konten menggunakan Vertex AI Gemini API:

Gen AI SDK untuk Python

Pelajari cara menginstal atau mengupdate Google Gen AI SDK untuk Python.
Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi Gen AI SDK untuk Python API atau repositori GitHub python-genai.
Tetapkan variabel lingkungan untuk menggunakan Gen AI SDK dengan 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=us-central1
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.0-flash-001",
    contents=prompt,
    config=GenerateContentConfig(
        system_instruction=system_instruction,
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)
# Finish Reason will be `SAFETY` if it is blocked.
print(response.candidates[0].finish_reason)
# Safety Ratings show the levels for each filter.
for safety_rating in response.candidates[0].safety_ratings:
    print(safety_rating)

# Example response:
# None
# FinishReason.SAFETY
# blocked=None category=<HarmCategory.HARM_CATEGORY_HATE_SPEECH: 'HARM_CATEGORY_HATE_SPEECH'> probability=<HarmProbability.NEGLIGIBLE: 'NEGLIGIBLE'> probability_score=1.767152e-05 severity=<HarmSeverity.HARM_SEVERITY_NEGLIGIBLE: 'HARM_SEVERITY_NEGLIGIBLE'> severity_score=None
# blocked=None category=<HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: 'HARM_CATEGORY_DANGEROUS_CONTENT'> probability=<HarmProbability.NEGLIGIBLE: 'NEGLIGIBLE'> probability_score=2.399503e-06 severity=<HarmSeverity.HARM_SEVERITY_NEGLIGIBLE: 'HARM_SEVERITY_NEGLIGIBLE'> severity_score=0.061250776
# blocked=True category=<HarmCategory.HARM_CATEGORY_HARASSMENT: 'HARM_CATEGORY_HARASSMENT'> probability=<HarmProbability.MEDIUM: 'MEDIUM'> probability_score=0.64129734 severity=<HarmSeverity.HARM_SEVERITY_MEDIUM: 'HARM_SEVERITY_MEDIUM'> severity_score=0.2686556
# blocked=None category=<HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: 'HARM_CATEGORY_SEXUALLY_EXPLICIT'> probability=<HarmProbability.NEGLIGIBLE: 'NEGLIGIBLE'> probability_score=5.2786977e-06 severity=<HarmSeverity.HARM_SEVERITY_NEGLIGIBLE: 'HARM_SEVERITY_NEGLIGIBLE'> severity_score=0.043162167

Vertex AI SDK untuk Python

Untuk mempelajari cara menginstal atau mengupdate Vertex AI SDK untuk Python, lihat Menginstal Vertex AI SDK untuk Python. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Vertex AI SDK untuk Python.

import vertexai

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

# TODO(developer): Update and un-comment below line
# PROJECT_ID = "your-project-id"
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
response = model.generate_content(
    [image_file, "What is in this image?"],
    safety_settings=safety_config,
)

print(response.text)
print(response.candidates[0].safety_ratings)
# Example response:
# The image contains a beautiful arrangement of blueberry scones, flowers, coffee, and blueberries.
# The scene is set on a rustic blue background. The image evokes a sense of comfort and indulgence.
# ...

Node.js

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Node.js Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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
    safetySettings: [
      {
        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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Go Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

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#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai Vertex AI menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API C# Vertex AI.

Untuk melakukan autentikasi ke Vertex AI, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca Menyiapkan autentikasi untuk lingkungan pengembangan lokal.


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

Setelah menyiapkan lingkungan, Anda dapat menggunakan REST untuk menguji perintah teks. Contoh berikut mengirimkan permintaan ke endpoint model penayang.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • LOCATION: Region untuk memproses permintaan. Opsi yang tersedia mencakup hal berikut:

    Klik untuk meluaskan sebagian daftar region yang tersedia

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: Project ID Anda.
  • MODEL_ID: ID model model multimodal yang ingin Anda gunakan. Opsinya adalah:
    • gemini-1.0-pro
    • gemini-1.0-pro-vision
  • ROLE: Peran dalam percakapan yang terkait dengan konten. Menentukan peran diperlukan bahkan dalam kasus penggunaan satu giliran. Nilai yang dapat diterima mencakup hal berikut:
    • USER: Menentukan konten yang dikirim oleh Anda.
    • MODEL: Menentukan respons model.
  • TEXT: Petunjuk teks yang akan disertakan dalam perintah.
  • SAFETY_CATEGORY: Kategori keamanan untuk mengonfigurasi nilai minimum. Nilai yang dapat diterima mencakup hal berikut:

    Klik untuk meluaskan kategori keamanan

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: Batas untuk memblokir respons yang mungkin termasuk dalam kategori keamanan yang ditentukan berdasarkan probabilitas. Nilai yang dapat diterima mencakup hal berikut:

    Klik untuk meluaskan nilai minimum pemblokiran

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (default)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE memblokir paling banyak, sedangkan BLOCK_ONLY_HIGH memblokir paling sedikit.

Metode HTTP dan URL:

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

Isi JSON permintaan:

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

Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

curl

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

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

Simpan isi permintaan dalam file bernama request.json, dan jalankan perintah berikut:

$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

Anda akan melihat respons JSON yang mirip seperti berikut:

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

Filter kutipan

Fitur kode generatif Vertex AI dimaksudkan untuk menghasilkan konten asli. Secara desain, Gemini membatasi kemungkinan konten yang ada direplikasi secara mendetail. Jika fitur Gemini membuat kutipan yang panjang dari halaman web, Gemini akan mencantumkan halaman tersebut sebagai sumber kutipan.

Terkadang konten yang sama dapat ditemukan di beberapa halaman web. Gemini mencoba mengarahkan Anda ke sumber yang populer. Dalam hal kutipan ke repositori kode, kutipan juga dapat merujuk ke lisensi open source yang berlaku. Mematuhi setiap persyaratan lisensi adalah tanggung jawab Anda.

Untuk mempelajari metadata filter kutipan, lihat Referensi Citation API.

Filter integritas sipil

Filter integritas sipil mendeteksi dan memblokir perintah yang menyebutkan atau terkait dengan pemilu dan kandidat politik. Filter ini dinonaktifkan secara default. Untuk mengaktifkannya, tetapkan nilai minimum pemblokiran untuk CIVIC_INTEGRITY ke salah satu nilai berikut. Nilai yang Anda tentukan tidak akan berpengaruh.

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

Kode Python berikut menunjukkan cara mengaktifkan filter integritas sipil:

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

Untuk mengetahui detail selengkapnya tentang filter integritas sipil, hubungi perwakilan Google Cloud Anda.

Praktik terbaik

Meskipun filter konten membantu mencegah konten tidak aman, filter tersebut terkadang dapat memblokir konten yang tidak berbahaya atau melewatkan konten berbahaya. Model lanjutan seperti Gemini 1.5 Flash dan Gemini 1.5 Pro dirancang untuk menghasilkan respons yang aman meskipun tanpa filter. Uji berbagai setelan filter untuk menemukan keseimbangan yang tepat antara keamanan dan mengizinkan konten yang sesuai.

Langkah berikutnya