このページでは、プロンプトとレスポンスをサニタイズする方法について詳しく説明します。Model Armor は、AI アプリケーションを保護するための一連のフィルタを提供します。Model Armor は、構成されたスクリーニングの信頼度に基づいてプロンプトとレスポンスをチェックします。
始める前に
テンプレートを作成するの手順に沿ってテンプレートを作成します。
必要な権限を取得する
プロンプトとレスポンスのサニタイズに必要な権限を取得するには、Model Armor に対する次の IAM ロールの付与を管理者に依頼してください。
- Model Armor ユーザー (
roles/modelarmor.user) - Model Armor 閲覧者 (
roles/modelarmor.viewer)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
Sensitive Data Protection テンプレートを含むプロジェクトで、テンプレートを作成するの Advanced Sensitive Data Protection ステップの一部として作成されたサービス エージェントに、DLP ユーザーロール(roles/dlp.user)と DLP 読み取り者ロール(roles/dlp.reader)を付与します。Sensitive Data Protection テンプレートが Model Armor テンプレートと同じプロジェクトにある場合は、この手順をスキップします。
gcloud projects add-iam-policy-binding SDP_PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role=roles/dlp.user gcloud projects add-iam-policy-binding SDP_PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-modelarmor.iam.gserviceaccount.com --role=roles/dlp.reader
次のように置き換えます。
SDP_PROJECT_ID: 高度な Sensitive Data Protection テンプレートが属しているプロジェクトの ID。PROJECT_NUMBER: テンプレートが属しているプロジェクトの番号。
API を有効にする
Model Armor を使用するには、Model Armor API を有効にする必要があります。
コンソール
Model Armor API を有効にします。
API を有効にするために必要なロール
API を有効にするには、
serviceusage.services.enable権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。詳しくは、ロールを付与する方法をご覧ください。Model Armor を有効にするプロジェクトを選択します。
gcloud
始める前に、Google Cloud CLI で Model Armor API を使用して、次の処理を行います。
Google Cloud コンソールで Cloud Shell をアクティブにします。
Google Cloud コンソールの下部にある Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています。セッションが初期化されるまで数秒かかることがあります。
gcloud CLI を使用して API エンドポイントのオーバーライドを設定する
この手順は、gcloud CLI を使用して Model Armor API を有効にする場合にのみ必要です。gcloud CLI がリクエストを Model Armor サービスに正しく転送するように、API エンドポイントのオーバーライドを手動で設定する必要があります。
次のコマンドを実行して、Model Armor サービスの API エンドポイントを設定します。
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.LOCATION.rep.googleapis.com/"
LOCATION は、Model Armor を使用するリージョンに置き換えます。
プロンプトをサニタイズする
プロンプトをサニタイズして、悪意のある入力を防ぎ、安全で適切なプロンプトが LLM に送信されるようにします。
テキスト プロンプト
Model Armor は、テキストを分析し、さまざまなフィルタを適用して潜在的な脅威を特定して軽減することで、テキスト プロンプトをサニタイズします。
REST
Model Armor でテキスト プロンプトをサニタイズするには、次のコマンドを使用します。
curl -X POST \
-d '{"userPromptData":{"text":"[UNSAFE TEXT]"}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
次のように置き換えます。
PROJECT_ID: テンプレートのプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
これにより、次のレスポンスが返されます。MATCH_FOUND は「危険」カテゴリに分類されます。
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" }, "dangerous": { "matchState": "MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } } } } } }
Go
このコードを実行するには、まず Go 開発環境を設定し、Model Armor Go SDK をインストールします。
C#
このコードを実行するには、まず C# 開発環境を設定し、Model Armor C# SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Model Armor Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Model Armor Node.js SDK をインストールします。
PHP
このコードを実行するには、まず PHP 開発環境を設定し、Model Armor PHP SDK をインストールします。
Python
このコードを実行するには、Python 開発環境を設定し、Model Armor Python SDK をインストールします。
これにより、次のレスポンスが返されます。
sanitization_result { filter_match_state: MATCH_FOUND filter_results { key: "rai" value { rai_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND rai_filter_type_results { key: "dangerous" value { confidence_level: HIGH match_state: MATCH_FOUND } } } } } filter_results { key: "pi_and_jailbreak" value { pi_and_jailbreak_filter_result { execution_state: EXECUTION_SUCCESS match_state: MATCH_FOUND confidence_level: HIGH } } } filter_results { key: "malicious_uris" value { malicious_uri_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } filter_results { key: "csam" value { csam_filter_filter_result { execution_state: EXECUTION_SUCCESS match_state: NO_MATCH_FOUND } } } invocation_result: SUCCESS }
会話型 AI でプロンプトをサニタイズするためのベスト プラクティス
Model Armor を使用して会話型 AI アプリケーションの入力をサニタイズする場合は、SanitizeUserPrompt メソッドの userPromptData フィールドに何を含めるかを理解することが重要です。
ユーザー入力ごとに個別にサニタイズする: ユーザーから受信した新しいメッセージごとに
SanitizeUserPromptAPI を呼び出します。これにより、ユーザー入力のすべての部分が LLM で処理される前に、潜在的な脅威について分析されます。userPromptDataフィールドには、現在の会話におけるユーザーからの最新のメッセージの内容のみを含める必要があります。会話履歴を含めない: チャット履歴全体を
userPromptDataフィールドに連結しないでください。システム プロンプトを含めない:
userPromptDataフィールドからシステム プロンプトを除外します。Model Armor は、ユーザーが提供した入力のみで脅威を検出することに重点を置いています。
多言語検出が有効になっているテキスト プロンプトをサニタイズする
リクエストごとに enableMultiLanguageDetection フラグを true に設定して、リクエストごとに多言語検出を有効にします。必要に応じて、より正確な結果を得るために原文の言語を指定できます。
- 原文の言語を指定しない場合、Model Armor は言語を自動的に検出し、多言語サポートを提供します。
- ソース言語を指定すると、Model Armor はその言語を使用してテキスト プロンプトを評価し、言語の自動検出は行いません。
次のコマンドを使用して、リクエスト レベルで多言語検出が有効になっている Model Armor でテキスト プロンプトをサニタイズします。
curl -X POST \ -d '{"userPromptData":{"text":"[UNSAFE TEXT]"}, "multiLanguageDetectionMetadata": { "enableMultiLanguageDetection": true , "sourceLanguage": "jp"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
次のように置き換えます。
PROJECT_ID: テンプレートのプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
ストリーミング テキスト プロンプトをサニタイズする
Model Armor のストリーミング メソッドは、コンテンツ全体が利用可能になるのを待たずに、プロンプトとレスポンスをテキスト ストリームとしてリアルタイムでサニタイズします。この機能は、大きなテキスト ペイロードを処理するアプリケーションや、LLM との低レイテンシのやり取りが必要なアプリケーションで特に役立ちます。
ストリーミングを有効にするには、次のメソッドを使用します。
- StreamSanitizeUserPrompt: ユーザーが提供したテキストをストリーミングしてサニタイズします。
- StreamSanitizeModelResponse: LLM で生成されたテキストをストリーミングしてサニタイズします。
Model Armor には、次のストリーミング モードがあります。
- バッファリング モード: ストリーミングされたすべてのチャンクを収集し、単一の単位としてまとめて処理します。
- リアルタイム モード: 受信したチャンクを個別に処理し、継続的にフィードバックを提供します。
Model Armor は、リアルタイム ストリーミング モードを使用する場合は無制限のトークンをサポートしますが、バッファリング モードではトークン上限が適用されます。
ストリーミングは次のように機能します。
- チャンク入力: アプリケーションは、テキスト全体を一度に送信するのではなく、テキストを小さなチャンクに分割して Model Armor に送信します。
- リアルタイム処理: Model Armor は、これらのチャンクが到着すると処理し、テンプレートで構成されたセキュリティ フィルタと安全フィルタを適用します。
- 継続的なフィードバック: モード(リアルタイム モードまたはバッファリング モード)に応じて、Model Armor は処理されたチャンクごとに結果を返すか、すべてのチャンクを受信した後に結果を返します。
ストリーミング テキスト プロンプトをサニタイズするには、次のコマンドを使用します。
Go
このコードを実行するには、まず Go 開発環境を設定し、Model Armor Go SDK をインストールします。
package main
import (
"context"
"fmt"
"io"
"log"
modelarmor "cloud.google.com/go/modelarmor/apiv1beta"
modelarmorpb "cloud.google.com/go/modelarmor/apiv1beta/modelarmorpb"
"google.golang.org/api/option"
"google.golang.org/protobuf/encoding/protojson"
)
func main() {
ctx := context.Background()
// Define variables for project, location, and template ID
projectID := "your-project-id"
location := "your-location-id"
templateID := "your-template-id"
// 1. Create the client with the custom regional endpoint.
opts := option.WithEndpoint("modelarmor.us-central1.rep.googleapis.com:443")
c, err := modelarmor.NewClient(ctx, opts)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
defer c.Close()
// 2. Start the StreamSanitizeUserPrompt bidirectional stream.
stream, err := c.StreamSanitizeUserPrompt(ctx)
if err != nil {
log.Fatalf("failed to initialize stream: %v", err)
}
// 3. Use a goroutine to send the requests.
go func() {
// Define the user prompt data
userPromptData := &modelarmorpb.DataItem{
DataItem: &modelarmorpb.DataItem_Text{
// Specify the user prompt.
Text: "This is a sample user prompt",
},
}
// Create the request object
req := &modelarmorpb.SanitizeUserPromptRequest{ // Use fmt.Sprintf to construct the resource name
Name: fmt.Sprintf("projects/%s/locations/%s/templates/%s", projectID, location, templateID),
UserPromptData: userPromptData,
}
reqs := []*modelarmorpb.SanitizeUserPromptRequest{req}
for _, r := range reqs {
if err := stream.Send(r); err != nil {
log.Printf("Failed to send request: %v", err)
return
}
}
stream.CloseSend()
}()
// 4. Iterate over the responses from the stream.
for {
resp, err := stream.Recv()
if err == io.EOF {
break
}
if err != nil {
log.Fatalf("failed to receive response: %v", err)
}
// Marshal the proto message to a formatted JSON string
b, _ := protojson.MarshalOptions{
Multiline: true,
Indent: " ",
}.Marshal(resp)
// Results can be consumed or assigned here in production workflows
}
}
Java
このコードを実行するには、まず Java 開発環境を設定し、Model Armor Java SDK をインストールします。
package com.example.armor;
import com.google.api.gax.rpc.BidiStream;
import com.google.cloud.modelarmor.v1beta.DataItem;
import com.google.cloud.modelarmor.v1beta.ModelArmorClient;
import com.google.cloud.modelarmor.v1beta.ModelArmorSettings;
import com.google.cloud.modelarmor.v1beta.SanitizationResult;
import com.google.cloud.modelarmor.v1beta.SanitizeUserPromptRequest;
import com.google.cloud.modelarmor.v1beta.SanitizeUserPromptResponse;
import com.google.cloud.modelarmor.v1beta.StreamingMode;
import com.google.cloud.modelarmor.v1beta.TemplateName;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutionException;
public class StreamSanitizeUserPrompt {
public static void main(String[] args) {
try {
streamSanitizeUserPromptExample();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void streamSanitizeUserPromptExample()
throws IOException, InterruptedException, ExecutionException {
// Specify the Google Project ID.
String projectId = "your-project-id";
// Specify the location ID. For example, us-central1.
String locationId = "your-location-id";
// Specify the template ID.
String templateId = "your-template-id";
String customApiEndpoint = "modelarmor.us-central1.rep.googleapis.com:443";
List<String> promptChunks = Arrays.asList(
"This is the first part of the user prompt. ",
"This is the second part. ",
"And this is the final part."
);
// ModelArmorSettings is now properly imported and recognized here
try (
ModelArmorClient modelArmorClient = ModelArmorClient.create(
ModelArmorSettings.newBuilder()
.setEndpoint(customApiEndpoint)
.build()
)
) {
BidiStream<SanitizeUserPromptRequest, SanitizeUserPromptResponse> stream =
modelArmorClient.streamSanitizeUserPromptCallable().call();
String resourceName = TemplateName.of(projectId, locationId, templateId).toString();
// --- Send First Request ---
SanitizeUserPromptRequest firstRequest = SanitizeUserPromptRequest.newBuilder()
.setName(resourceName)
.setUserPromptData(DataItem.newBuilder().setText(promptChunks.get(0)))
.setStreamingMode(StreamingMode.STREAMING_MODE_BUFFERED)
.build();
stream.send(firstRequest);
// --- Send Subsequent Requests ---
for (int i = 1; i < promptChunks.size(); i++) {
SanitizeUserPromptRequest subsequentRequest = SanitizeUserPromptRequest.newBuilder()
.setName(resourceName)
.setUserPromptData(DataItem.newBuilder().setText(promptChunks.get(i)))
.build();
stream.send(subsequentRequest);
}
stream.closeSend();
// --- Receive Responses ---
for (SanitizeUserPromptResponse response : stream) {
if (response.hasSanitizationResult()) {
SanitizationResult result = response.getSanitizationResult();
// Results can be consumed or assigned here in production workflows
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Python
このコードを実行するには、Python 開発環境を設定し、Model Armor Python SDK をインストールします。
from google.cloud import modelarmor_v1beta
def sample_stream_sanitize_user_prompt():
# Create a client
client = modelarmor_v1beta.ModelArmorClient(transport="grpc", client_options = {"api_endpoint" : "modelarmor.us-central1.rep.googleapis.com"})
# Specify the Google Project ID.
project_id = "your-project-id"
# Specify the location ID. For example, us-central1.
location = "your-location-id"
# Specify the template ID.
template_id = "your-template-id"
template_name = client.template_path(project_id, location, template_id)
# Initialize request argument(s)
user_prompt_data = modelarmor_v1beta.DataItem()
# Specify the user prompt.
user_prompt_data.text = "This is a sample user prompt"
request = modelarmor_v1beta.SanitizeUserPromptRequest(
name=template_name,
user_prompt_data=user_prompt_data,
)
# This method expects an iterator which contains
# 'modelarmor_v1beta.SanitizeUserPromptRequest' objects
# Here we create a generator that yields a single `request` for
# demonstrative purposes.
requests = [request]
def request_generator():
for request in requests:
yield request
# Make the request
stream = client.stream_sanitize_user_prompt(requests=request_generator())
# Handle the response
for response in stream:
# Results can be consumed or assigned here in production workflows
sample_stream_sanitize_user_prompt()
ストリーミング テキスト プロンプトまたはレスポンスをサニタイズする場合は、次の点を考慮してください。
- コンテンツを効果的にサニタイズするには、個々のチャンクがトークン上限を超えないようにします。
- Model Armor のストリーミング メソッドは、テキスト入力のみをサポートし、画像やファイルなどの添付ファイルはサポートしていません。
- 相関 ID を使用して、特定のリクエストのストリーミング サニタイズ ログを追跡します。
- Model Armor のストリーミング メソッドは、Sensitive Data Protection の匿名化をサポートしていません。
ファイルベースのプロンプト
ファイルに保存されているプロンプトをサニタイズするには、ファイルの内容を Base64 形式で指定します。Model Armor ではファイルタイプが自動的に検出されません。ファイル形式を示すには、byteDataType フィールドを明示的に設定する必要があります。このフィールドがない場合や指定されていない場合、リクエストは失敗します。指定できる byteDataType 値は PLAINTEXT_UTF8、PDF、WORD_DOCUMENT、EXCEL_DOCUMENT、POWERPOINT_DOCUMENT、TXT、CSV です。Sensitive Data Protection の匿名化は、ファイルベースのプロンプトではサポートされていません。
REST
curl -X POST \ -d "$(jq -n \ --arg data "$(base64 -w 0 -i sample.pdf)" \ '{userPromptData: {byteItem: {byteDataType: "FILE_TYPE", byteData: $data}}}')" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。FILE_TYPE: 入力ファイルの形式。
Go
このコードを実行するには、まず Go 開発環境を設定し、Model Armor Go SDK をインストールします。
C#
このコードを実行するには、まず C# 開発環境を設定し、Model Armor C# SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Model Armor Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Model Armor Node.js SDK をインストールします。
PHP
このコードを実行するには、まず PHP 開発環境を設定し、Model Armor PHP SDK をインストールします。
Python
このコードを実行するには、Python 開発環境を設定し、Model Armor Python SDK をインストールします。
Sensitive Data Protection の基本構成
Model Armor は Sensitive Data Protection と統合され、個人情報の偶発的な公開を防ぎます。Sensitive Data Protection の基本の設定が有効になっているテンプレートを作成します。Sensitive Data Protection の基本を使用すると、Sensitive Data Protection の固定された infoType セットをスクリーニングできます。
次の Sensitive Data Protection の infoType は、すべてのリージョンのプロンプトでスキャンされます。
CREDIT_CARD_NUMBER: 12~19 桁のクレジット カード番号。世界各地の決済取引に使用されます。FINANCIAL_ACCOUNT_NUMBER: 特定の金融口座を指す番号(銀行口座番号や退職金口座番号など)。GCP_CREDENTIALS: Google Cloud サービス アカウント認証情報。{api_client_lib_name} とサービス アカウントでの認証のために使用できる認証情報。GCP_API_KEY: Google Cloud API キー。非公開のユーザーデータにアクセスする必要のない Google Cloud API を呼び出すときに使用される、暗号化された文字列です。PASSWORD: 構成、コード、その他のテキスト内のクリアテキストのパスワード。
米国を拠点とするリージョンのプロンプトでは、次の追加の Sensitive Data Protection infoType がスキャンされます。
US_SOCIAL_SECURITY_NUMBER: 米国社会保障番号(SSN)は、米国市民、永住者、一時居住者に発行される 9 桁の番号です。この検出機能は、いずれかの数字グループがすべてゼロの番号(つまり 000-##-####、###-00-####、###-##-0000)、最初の数字グループが 666 の番号、9 で始まる番号には一致しません。US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER: 米国の個人納税者番号(ITIN)は、国税庁(IRS)によって発行される納税識別番号(TIN)の一種です。ITIN は、社会保障番号(Social Security Number: SSN)を取得できない特定の非居住者および居住外国人、その配偶者、および扶養家族にのみ利用可能な税処理番号です。
以下に、Sensitive Data Protection の基本の構成例を示します。
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --project=PROJECT_ID \ --basic-config-filter-enforcement=enabled
次のように置き換えます。
TEMPLATE_ID: テンプレートの ID。LOCATION: テンプレートのロケーション。
REST
export FILTER_CONFIG_SDP_BASIC='{ "filterConfig": { "sdpSettings": { "basicConfig": { "filterEnforcement": "ENABLED" } } } }' curl -X PATCH \ -d "$FILTER_CONFIG_SDP_BASIC" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.sdpSettings.basicConfig.filterEnforcement"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
Go
このコードを実行するには、まず Go 開発環境を設定し、Model Armor Go SDK をインストールします。
C#
このコードを実行するには、まず C# 開発環境を設定し、Model Armor C# SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Model Armor Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Model Armor Node.js SDK をインストールします。
PHP
このコードを実行するには、まず PHP 開発環境を設定し、Model Armor PHP SDK をインストールします。
Python
このコードを実行するには、Python 開発環境を設定し、Model Armor Python SDK をインストールします。
作成したテンプレートを使用して、プロンプトをスクリーニングします。次に例を示します。
curl -X POST \ -d '{"userPromptData":{"text":"can you remember my ITIN : ###-##-####"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
この例では、次のレスポンスが返されます。
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "findings": [ { "infoType": "US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER", "likelihood": "LIKELY", "location": { "byteRange": { "start": "26", "end": "37" }, "codepointRange": { "start": "26", "end": "37" } } } ] } } } ] } }
Sensitive Data Protection の詳細の構成
Model Armor は、Sensitive Data Protection の詳細の構成設定を使用して LLM プロンプトとレスポンスをスクリーニングします。これにより、Sensitive Data Protection の基本の設定で提供される infoType 以外の Sensitive Data Protection 機能を使用できます。
Model Armor で Sensitive Data Protection の高度なフィルタを使用するには、Sensitive Data Protection テンプレートが Model Armor テンプレートと同じクラウド ロケーションにある必要があります。
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --advanced-config-inspect-template="path/to/template" \
次のように置き換えます。
TEMPLATE_ID: テンプレートの ID。LOCATION: テンプレートのロケーション。
REST
export FILTER_CONFIG_SDP_ADV='{ "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }' curl -X POST \ -d "$FILTER_CONFIG_SDP_ADV" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID?updateMask=filterConfig.sdpSettings.advancedConfig"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
この例では、次のレスポンスが返されます。
{ "name": "projects/PROJECT_ID/locations/LOCATION/templates/all-filters-test", "createTime": "2024-12-16T17:08:19.626693819Z", "updateTime": "2024-12-16T17:08:19.626693819Z", "filterConfig": { "sdpSettings": { "advancedConfig": { "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/deidentify-ip-address", "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/inspect-ip-address" } } } }
C#
このコードを実行するには、まず C# 開発環境を設定し、Model Armor C# SDK をインストールします。
Go
このコードを実行するには、まず Go 開発環境を設定し、Model Armor Go SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Model Armor Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Model Armor Node.js SDK をインストールします。
PHP
このコードを実行するには、まず PHP 開発環境を設定し、Model Armor PHP SDK をインストールします。
Python
このコードを実行するには、Python 開発環境を設定し、Model Armor Python SDK をインストールします。
作成したテンプレートを使用して、プロンプトをスクリーニングします。次に例を示します。
curl -X POST \ -d '{"userPromptData":{"text":"is there anything malicious running on 1.1.1.1?"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeUserPrompt"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
この例では、次のレスポンスが返されます。
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": [ { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, { "sdpFilterResult": { "deidentifyResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "data": { "text": "is there anything malicious running on [IP_ADDRESS]?" }, "transformedBytes": "7", "infoTypes": ["IP_ADDRESS"] } } } ] } }
モデルのレスポンスをサニタイズする
LLM は有害なレスポンスを生成する可能性があります。アプリケーションで LLM を使用する際のリスクを軽減するには、レスポンスをサニタイズすることが重要です。
Model Armor でモデル レスポンスをサニタイズするコマンドの例を次に示します。
REST
curl -X POST \
-d '{"modelResponseData":{"text":"IP address of the current network is ##.##.##.##"}}' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。この例では、次のレスポンスが返されます。
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "rai": { "raiFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "raiFilterTypeResults": { "dangerous": { "confidenceLevel": "MEDIUM_AND_ABOVE", "matchState": "MATCH_FOUND" }, "sexually_explicit": { "matchState": "NO_MATCH_FOUND" }, "hate_speech": { "matchState": "NO_MATCH_FOUND" }, "harassment": { "matchState": "NO_MATCH_FOUND" } } } }, "pi_and_jailbreak": { "piAndJailbreakFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "malicious_uris": { "maliciousUriFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, } } }
C#
このコードを実行するには、まず C# 開発環境を設定し、Model Armor C# SDK をインストールします。
Go
このコードを実行するには、まず Go 開発環境を設定し、Model Armor Go SDK をインストールします。
Java
このコードを実行するには、まず Java 開発環境を設定し、Model Armor Java SDK をインストールします。
Node.js
このコードを実行するには、まず Node.js 開発環境を設定し、Model Armor Node.js SDK をインストールします。
PHP
このコードを実行するには、まず PHP 開発環境を設定し、Model Armor PHP SDK をインストールします。
Python
このコードを実行するには、Python 開発環境を設定し、Model Armor Python SDK をインストールします。
多言語検出が有効になっているモデル レスポンスをサニタイズする
リクエストごとに enableMultiLanguageDetection フラグを true に設定して、レスポンスごとに多言語検出を有効にします。必要に応じて、より正確な結果を得るために原文の言語を指定できます。
- 原文の言語を指定しない場合、Model Armor は言語を自動的に検出し、多言語サポートを提供します。
- 原文の言語を指定すると、Model Armor はその言語を使用してモデルのレスポンスを評価し、言語の自動検出は行いません。
curl -X POST \ -d '{"modelResponseData":{"text":"[UNSAFE TEXT]"}, "multiLanguageDetectionMetadata": { "enableMultiLanguageDetection": true , "sourceLanguage": "jp"}}' \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://modelarmor.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/templates/TEMPLATE_ID:sanitizeModelResponse"
次のように置き換えます。
PROJECT_ID: テンプレートが属するプロジェクトの ID。LOCATION: テンプレートのロケーション。TEMPLATE_ID: テンプレートの ID。
プロジェクト全体でモデルのレスポンスをサニタイズする
AI の安全性を一元的に管理できるようにするため、組織は多くの場合、Model Armor テンプレートを専用のプロジェクト(プロジェクト A: TEMPLATE_PROJECT_ID)に保存し、アプリケーションを別のプロジェクト(プロジェクト B)で実行します。
プロジェクト B のサービス アカウント(CALLER_SERVICE_ACCOUNT)がプロジェクト A のテンプレートにアクセスできるようにするには、テンプレート プロジェクトに IAM ポリシー バインディングを追加する必要があります。
必要なプロジェクト間の権限を付与するには、次のコマンドを実行します。
gcloud projects add-iam-policy-binding TEMPLATE_PROJECT_ID \ --member='serviceAccount:CALLER_SERVICE_ACCOUNT' \ --role='roles/modelarmor.user'
次のように置き換えます。
TEMPLATE_PROJECT_ID: テンプレートがホストされているプロジェクトの ID。CALLER_SERVICE_ACCOUNT: API リクエストを行うプロジェクトのサービス アカウント。
次のステップ
- Model Armor について確認する。
- Model Armor のフロア設定について確認する。
- Model Armor テンプレートについて確認する。
- Model Armor に関する問題のトラブルシューティングを行う。