安全フィルタを構成する

Google の生成 AI モデル(Gemini 1.5 Flash や Gemini 1.5 Pro など)は、安全性を重視して設計されています。ただし、プロンプトに露骨な表現が含まれていると、有害な回答を生成する可能性があります。安全性をさらに強化し、不正使用を最小限に抑えるには、有害な可能性のある回答をブロックするように安全フィルタを構成します。

このページでは、このような安全フィルタのタイプと、安全性に関する重要なコンセプトについて説明します。構成可能なフィルタについて、有害カテゴリのブロックしきい値を構成してプロンプトと回答がブロックされる頻度を制御する方法について説明します。

保護フィルタは障壁として機能し、有害な出力を防ぎますが、モデルの動作に直接影響することはありません。モデルのステアリング機能の詳細については、安全性に関するシステム指示をご覧ください。

安全でないプロンプト

Vertex AI Gemini API は、プロンプトが拒否された理由を説明する次のいずれかの enum コードを返します。

列挙型 フィルタの種類 説明
PROHIBITED_CONTENT 構成不可の安全フィルタ 禁止されているコンテンツ(通常は CSAM)が含まれていると報告されたため、プロンプトがブロックされました。
BLOCKED_REASON_UNSPECIFIED なし プロンプトをブロックする理由が指定されていません。
OTHER なし この列挙型は、プロンプトをブロックするその他のすべての理由を指します。Vertex AI Gemini API はすべての言語をサポートしているわけではありません。サポートされている言語の一覧については、Gemini の言語サポートをご覧ください。

詳細については、BlockedReason をご覧ください。

PROHIBITED_CONTENT が含まれているためにプロンプトがブロックされた場合の Vertex AI Gemini API の出力の例を次に示します。

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

安全でない回答

次のフィルタを使用すると、安全でない可能性のある回答を検出してブロックできます。

  • 構成不可の安全フィルタ: 児童性的虐待のコンテンツ(CSAM)と個人を特定できる情報(PII)をブロックします。
  • 構成可能な安全フィルタ: 有害カテゴリのリストと、ユーザーが構成したブロックしきい値に基づいて、安全でないコンテンツをブロックします。これらの有害コンテンツのブロックしきい値は、ユースケースとビジネスに応じて構成できます。詳細については、構成可能な安全フィルタをご覧ください。
  • 引用フィルタ: ソース マテリアルの引用を提供します。詳細については、引用フィルタをご覧ください。

LLM は、トークンと呼ばれるテキスト単位で回答を生成します。モデルは、自然な停止点に達するか、フィルタのいずれかで回答がブロックされると、トークンの生成を停止します。Vertex AI Gemini API は、トークン生成が停止した理由を説明する次のいずれかの enum コードを提供します。

列挙型 フィルタの種類 説明
STOP なし この列挙型は、モデルが自然な停止点または指定された停止シーケンスに達したことを示します。
MAX_TOKENS なし モデルがリクエストで指定されたトークンの最大数に達したため、トークンの生成が停止されました。
SAFETY 構成可能な安全フィルタ 安全上の理由から回答にフラグが付けられたため、トークンの生成が停止されました。
RECITATION 引用フィルタ 朗読の可能性があるため、トークンの生成が停止されました。
SPII 構成不可の安全フィルタ 回答に個人を特定できる機密情報(SPII)のコンテンツが含まれているため、トークンの生成が停止されました。
PROHIBITED_CONTENT 構成不可の安全フィルタ 禁止されているコンテンツ(通常は CSAM)が含まれており、回答にフラグが付けられたため、トークンの生成が停止されました。
FINISH_REASON_UNSPECIFIED なし 終了の理由は指定されていません。
OTHER なし この列挙型は、トークンの生成を停止するその他のすべての理由を指します。トークンの生成は、すべての言語でサポートされているわけではありません。サポートされている言語の一覧については、Gemini の言語サポートをご覧ください。

詳細については、FinishReason をご覧ください。

フィルタが回答をブロックすると、回答の Candidate.content フィールドは無効になります。モデルにフィードバックは提供されません。

構成可能な安全フィルタ

安全フィルタは、有害性のリストと照合してコンテンツを評価します。安全フィルタは、有害カテゴリごとに、コンテンツが安全でない確率に基づく安全スコアと、有害なコンテンツの重大度に基づく安全スコアを割り当てます。

構成可能な安全フィルタには、モデル バージョンとは独立したバージョニングはありません。以前にリリースされたモデルのバージョンの構成可能な安全フィルタは更新されません。ただし、モデルの将来のバージョンの構成可能な安全フィルタが更新される可能性はあります。

有害カテゴリ

安全フィルタは、次の有害カテゴリに基づいてコンテンツを評価します。

有害カテゴリ 定義
ヘイトスピーチ ID や保護されている属性をターゲットとする否定的なコメントや有害なコメント。
嫌がらせ 他人をターゲットにした威圧表現、いじめ、虐待的な内容を含むコメント
性的に露骨な表現 性行為やわいせつな内容に関する情報が含まれるコンテンツ。
危険なコンテンツ 有害な商品、サービス、アクティビティへのアクセスを促進または可能にするコンテンツ。

確率スコアと重大度スコアの比較

安全性スコアの確率は、モデルの回答がそれぞれの有害カテゴリに関連付けられている可能性を反映しています。信頼スコアは 0.01.0 で、小数点第 2 位を四捨五入します。信頼スコアは、NEGLIGIBLELOWMEDIUMHIGH の 4 つの安全性信頼レベルに分割されます。

安全性スコアの重大度は、モデルの回答が有害である可能性の重大性を反映しています。重大度スコアは 0.01.0 の範囲で、小数点第 2 位を四捨五入します。重大度スコアは、NEGLIGIBLELOWMEDIUMHIGH の 4 つのレベルに分割されます。

コンテンツの確率スコアが低く、重大度スコアが高い場合や、確率スコアが高く、重大度スコアが低い場合があります。

安全フィルタを構成する方法

安全フィルタは、Vertex AI Gemini API または Google Cloud コンソールを使用して構成できます。

Vertex AI Gemini API

Vertex AI Gemini API には、有害なコンテンツをブロックする方法が 2 つあります。

  • SEVERITY: この方法では、確率スコアと重大度スコアの両方を使用します。
  • PROBABILITY: この方法では、確率スコアのみを使用します。

デフォルトの方法は SEVERITY です。gemini-1.5-flashgemini-1.5-pro より古いモデルの場合、デフォルトのメソッドは PROBABILITY です。詳細については、HarmBlockMethod API リファレンスをご覧ください。

Vertex AI Gemini API には、次の有害コンテンツのブロックしきい値があります。

  • BLOCK_LOW_AND_ABOVE: 確率スコアまたは重大度スコアが LOWMEDIUM、または HIGH の場合にブロックします。
  • BLOCK_MEDIUM_AND_ABOVE: 確率スコアまたは重大度スコアが MEDIUM または HIGH の場合にブロックします。gemini-1.5-flash-001gemini-1.5-pro-001 の場合、デフォルト値は BLOCK_MEDIUM_AND_ABOVE です。
  • BLOCK_ONLY_HIGH: 確率スコアまたは重大度スコアが HIGH の場合にブロックします。
  • HARM_BLOCK_THRESHOLD_UNSPECIFIED: デフォルトのしきい値を使用してブロックします。
  • オフ: 自動回答のブロックは行われず、安全性メタデータは返されません。gemini-1.5-flash-002gemini-1.5-pro-002 の場合、デフォルト値は OFF です。
  • BLOCK_NONE: BLOCK_NONE の安全性設定では、自動回答のブロックが解除されます。代わりに、返されたスコアを使用して独自の安全性ガイドラインを構成できます。これは制限付きフィールドで、GA モデル バージョンのすべてのユーザーが使用できるわけではありません。

たとえば、次の Python コードは、危険なコンテンツ カテゴリの有害コンテンツ ブロックのしきい値を BLOCK_ONLY_HIGH に設定する方法を示しています。

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

これにより、危険なコンテンツとして分類されるコンテンツのほとんどがブロックされます。詳細については、HarmBlockThreshold API リファレンスをご覧ください。

Python、Node.js、Java、Go、C#、REST のエンドツーエンドの例については、安全フィルタ構成の例をご覧ください。

Google Cloud コンソール

Google Cloud コンソールでは、安全性属性ごとにしきい値を構成できます。安全フィルタは確率スコアのみを使用します。重大度スコアを使用するオプションはありません。

Google Cloud コンソールには、次のしきい値が用意されています。

  • オフ(デフォルト): 自動回答のブロックは行われません。
  • 少量をブロック: 確率スコアが HIGH の場合にブロックします。
  • 一部をブロック: 確率スコアが MEDIUM または HIGH の場合にブロックします。
  • ほとんどをブロック: 確率スコアが LOWMEDIUM、または HIGH の場合にブロックします。

たとえば、「危険なコンテンツ」カテゴリのブロック設定を [少量をブロック] に設定した場合、危険なコンテンツである確率が高いものはすべてブロックされますが、その確率の低いものは許可されます。デフォルトのしきい値は Block some です。

しきい値を設定する手順は次のとおりです。

  1. Google Cloud コンソールの [Vertex AI Studio] セクションで、[Vertex AI Studio] ページに移動します。

    Vertex AI Studio に移動

  2. [プロンプトを新規作成] でいずれかのボタンをクリックしてプロンプト デザインページを開きます。

  3. [安全性設定] をクリックします。

    [安全性設定] ダイアログ ウィンドウが開きます。

  4. 有害コンテンツのカテゴリごとに目的のしきい値を構成します。

  5. [保存] をクリックします。

構成可能な安全フィルタによって回答がブロックされた場合の出力例

危険なコンテンツが含まれているため、構成可能な安全フィルタによって回答がブロックされた場合の Vertex AI Gemini API の出力例を次に示します。

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

安全フィルタの構成例

次の例は、Vertex AI Gemini API を使用して安全フィルタを構成する方法を示しています。

Python

Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。

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

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Node.js の設定手順を完了してください。詳細については、Vertex AI Node.js API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

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

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Java の設定手順を完了してください。詳細については、Vertex AI Java API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

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

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Go の設定手順を完了してください。詳細については、Vertex AI Go API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。

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#

このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある C# の設定手順を完了してください。詳細については、Vertex AI C# API のリファレンス ドキュメントをご覧ください。

Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。


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

環境をセットアップしたら、REST を使用してテキスト プロンプトをテストできます。次のサンプルは、パブリッシャー モデルのエンドポイントにリクエストを送信します。

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: リクエストを処理するリージョン。使用できる選択肢は以下のとおりです。

    クリックして、利用可能なリージョンの一部を開く

    • us-central1
    • us-west4
    • northamerica-northeast1
    • us-east4
    • us-west1
    • asia-northeast3
    • asia-southeast1
    • asia-northeast1
  • PROJECT_ID: 実際のプロジェクト ID
  • MODEL_ID: 使用するマルチモーダル モデルのモデル ID。次のオプションがあります。
    • gemini-1.0-pro
    • gemini-1.0-pro-vision
  • ROLE: コンテンツに関連付けられた会話におけるロール。単一ターンのユースケースでも、ロールの指定が必要です。指定できる値は次のとおりです。
    • USER: 送信するコンテンツを指定します。
    • MODEL: モデルの回答を指定します。
  • TEXT: プロンプトに含める指示のテキスト。
  • SAFETY_CATEGORY: しきい値を構成する安全性カテゴリ。指定できる値は以下のとおりです。

    クリックして安全性カテゴリを開く

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • THRESHOLD: 確率に基づいて、指定された安全性カテゴリに属する可能性のあるレスポンスをブロックするためのしきい値。指定できる値は以下のとおりです。

    クリックしてブロックしきい値を開く

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE(デフォルト)
    • BLOCK_LOW_AND_ABOVE
    BLOCK_LOW_AND_ABOVE は最もブロックし、BLOCK_ONLY_HIGH は最も少なくブロックします。

HTTP メソッドと URL:

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

リクエストの本文(JSON):

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

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

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

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$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

次のような JSON レスポンスが返されます。

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

引用フィルタ

Vertex AI の生成コード機能は、オリジナルのコンテンツを生成することを目的としています。Gemini は、既存のコンテンツが長く複製される可能性を抑えるように設計されています。Gemini の機能がウェブページから長い引用をしている場合は、そのページを引用します。

同じコンテンツが複数のウェブページで見つかった場合、Gemini は、人気のあるソースを示すよう試みます。コード リポジトリを引用する場合は、該当するオープンソース ライセンスへの参照も追加されることがあります。ライセンス要件は、お客様ご自身の責任で遵守していただく必要があります。

引用フィルタのメタデータについては、Citation API リファレンスをご覧ください。

市民の清廉性に関するフィルタ

市民の清廉性に関するフィルタは、選挙や候補者に言及しているプロンプトや関連するプロンプトを検出してブロックします。このフィルタはデフォルトで無効になっています。有効にするには、CIVIC_INTEGRITY のブロックしきい値を次のいずれかの値に設定します。指定する値はどちらでも構いません。

  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

次の Python コードは、市民の清廉性に関するフィルタを有効にする方法を示しています。

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

市民の清廉性に関するフィルタの詳細については、Google Cloud の担当者にお問い合わせください。

ベスト プラクティス

安全フィルタは安全でないコンテンツをブロックするのに役立ちますが、安全なコンテンツがブロックされたり、安全でないコンテンツがブロックされなかったりすることがあります。Gemini 1.5 Flash や Gemini 1.5 Pro などの高度なモデルは、フィルタなしでも安全な回答を生成するように設計されています。さまざまなフィルタ設定をテストして、安全性と適切なコンテンツの許可のバランスを保ってください。

次のステップ