בדף הזה מוסבר בפירוט איך לבצע סניטציה של הנחיות ותשובות. Model Armor מציע קבוצה של מסננים להגנה על אפליקציות AI. Model Armor בודק את ההנחיות ואת התשובות לפי רמות הסמך של הסינון שהוגדרו.
לפני שמתחילים
יוצרים תבנית לפי ההוראות במאמר יצירת תבניות.
קבלת ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות בשביל לנקות את ההנחיות והתשובות, אתם צריכים לבקש מהאדמין לתת לכם את התפקידים הבאים ב-IAM ב-Model Armor:
- משתמש ב-Model Armor (
roles/modelarmor.user) - צפייה ב-Model Armor (
roles/modelarmor.viewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
בפרויקט שמכיל את התבנית של Sensitive Data Protection, מעניקים את התפקיד 'משתמש DLP' (roles/dlp.user) ואת התפקיד 'קורא DLP' (roles/dlp.reader) לסוכן השירות שנוצר כחלק מהשלב 'Sensitive Data Protection מתקדם' של יצירת תבניות.
מדלגים על השלב הזה אם תבנית ה-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. -
PROJECT_NUMBER: מספר הפרויקט שאליו שייכת התבנית.
הפעלת ממשקי ה-API
כדי להשתמש ב-Model Armor, צריך להפעיל את Model Armor API.
המסוף
מפעילים את Model Armor API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של שימוש בשירות' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםבוחרים את הפרויקט שבו רוצים להפעיל את Model Armor.
gcloud
לפני שמתחילים, צריך לבצע את השלבים הבאים באמצעות Google Cloud CLI עם Model Armor API:
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
הגדרת שינוי של נקודת הקצה של ה-API באמצעות ה-CLI של gcloud
השלב הזה נדרש רק אם משתמשים ב-CLI של gcloud כדי להפעיל את Model Armor API. כדי לוודא שה-CLI של gcloud מנתב את הבקשות לשירות Model Armor בצורה נכונה, צריך להגדיר ידנית את החלפת נקודת הקצה של ה-API.
מריצים את הפקודה הבאה כדי להגדיר את נקודת קצה ל-API לשירות הגנה מוגברת על המודל.
gcloud config set api_endpoint_overrides/modelarmor "https://modelarmor.LOCATION.rep.googleapis.com/"
מחליפים את LOCATION באזור שבו רוצים להשתמש בהגנה מוגברת על המודל.
חיטוי ההנחיות
הנחיות חיטוי כדי למנוע קלט זדוני ולעזור להבטיח שהנחיות בטוחות ומתאימות יישלחו למודלים של שפה גדולה (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: מזהה הפרויקט של התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_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 ולהתקין את 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 שיכולה לנהל שיחה, חשוב להבין מה צריך לכלול בשדה userPromptData של השיטה SanitizeUserPrompt.
ניקוי כל קלט משתמש בנפרד: קוראים ל-
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: מזהה הפרויקט של התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_ID: מזהה התבנית.
הנחיות שמכילות תמונות
כדי להפעיל סינון תמונות, צריך להגדיר את האופן שבו המודל פועל במטא-נתונים של התבנית.
אפשר להגדיר אמצעי תקשורת בתבניות חדשות ובתבניות קיימות.
אם מציינים רק מודאליות אחת (IMAGE או TEXT), Model Armor מדלג על השנייה ומחזיר EXECUTION_SKIPPED. צריך להגדיר במפורש את השדה byteDataType לערך IMAGE ולספק את התמונה בקידוד base64 בפורמט הנתמך בשדה byteData.
כדי לנקות הנחיה שמכילה תמונה, משתמשים בפקודה הבאה.
curl -X POST \ -d "$(jq -n \ --arg data "$(base64 -w 0 -i IMAGE)" \ '{userPromptData: {byteItem: {byteDataType: "IMAGE", 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: מזהה הפרויקט שמכיל את התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_ID: מזהה התבנית. -
IMAGE: התמונה בפורמט נתמך.
התגובה אמורה להיראות כך:
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "inspectResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND" } } } }, } }
צנזור תמונות
במצב המתקדם של Sensitive Data Protection, הגנה מוגברת על המודל מצנזר תמונות רק אם הגדרתם מסנני הגנה מוגברת על המודל עם תבנית בדיקה של Sensitive Data Protection ותבנית הסרת פרטים מזהים של Sensitive Data Protection. מידע נוסף זמין במאמר בנושא הגדרת הגדרות להגנה על נתונים רגישים. מוודאים שהגדרתם הסרת מידע אישי מתמונות בתבנית להסרת מידע אישי.
כשמשתמשים במצב המתקדם של Sensitive Data Protection, יכול להיות שסוג המידע BASIC_AUTH_HEADER ידווח בתוצאות הגילוי גם אם הוא לא נכלל באופן מפורש בתבנית הבדיקה שהוגדרה.
בדוגמה הבאה מוצגת הגדרת המסנן עם Sensitive Data Protection מופעל.
{ "filterConfig": { "sdpSettings": { "advancedConfig": { "inspectTemplate": "projects/PROJECT_ID/locations/LOCATION/inspectTemplates/TEMPLATE_ID", "deidentifyTemplate": "projects/PROJECT_ID/locations/LOCATION/deidentifyTemplates/TEMPLATE_ID" } } } }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט שמכיל את התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_ID: מזהה התבנית.
זו התגובה שמתקבלת.
{ "sanitizationResult": { "filterMatchState": "MATCH_FOUND", "invocationResult": "SUCCESS", "filterResults": { "csam": { "csamFilterFilterResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "NO_MATCH_FOUND" } }, "sdp": { "sdpFilterResult": { "redactResult": { "executionState": "EXECUTION_SUCCESS", "matchState": "MATCH_FOUND", "redactedImage": "[REDACTED_IMAGE]", "findings": [ { "infoType": "EMAIL_ADDRESS", "likelihood": "LIKELY", "location": { "contentLocations": [ { "imageFindingLocation": { "boundingBox": { "top": 16, "left": 121, "width": 620, "height": 90 } } } ] } } ] } } } } } }
ניקוי של הנחיות טקסט לסטרימינג
שיטות הסטרימינג של Model Armor מנקות את ההנחיות והתשובות בזמן אמת כזרמי טקסט, בלי לחכות עד שכל התוכן יהיה זמין. היכולת הזו שימושית במיוחד לאפליקציות שמטפלות במטענים ייעודיים (payloads) גדולים של טקסט או שמצריכות אינטראקציות עם מודלים גדולים של שפה (LLM) עם השהיה נמוכה.
אפשר להשתמש בשיטות האלה כדי להפעיל סטרימינג:
- StreamSanitizeUserPrompt: מעביר בסטרימינג ומבצע סניטציה של טקסט שסופק על ידי המשתמש.
- StreamSanitizeModelResponse: מעביר בסטרימינג ומבצע סניטציה של טקסט שנוצר על ידי מודל שפה גדול (LLM).
Model Armor מציע את מצבי הסטרימינג הבאים:
- מצב עם מאגר זמני: כל המקטעים שמוזרמים נאספים ומעובדים יחד כיחידה אחת.
- מצב בזמן אמת: כל חלק מעובד בנפרד כשהוא מתקבל, ומתקבל משוב רציף.
Model Armor תומך בטוקנים ללא הגבלה כשמשתמשים במצב סטרימינג בזמן אמת, אבל במצב מאגרי נתונים יש מגבלות על טוקנים.
כך פועל הסטרימינג:
- קלט מחולק לחלקים: האפליקציה שולחת טקסט ל-Model Armor בחלקים קטנים (chunks) במקום לשלוח את כל הטקסט בבת אחת.
- עיבוד בזמן אמת: Model Armor מעבד את המקטעים האלה כשהם מגיעים ומחיל את מסנני האבטחה והבטיחות שהוגדרו בתבנית.
- משוב רציף: בהתאם למצב (מצב בזמן אמת או מצב עם מאגר זמני), Model Armor מחזיר תוצאות לכל נתח שעבר עיבוד או אחרי שמתקבלים כל הנתחים.
משתמשים בפקודה הבאה כדי לבצע סניטציה של הנחיה לטקסט בסטרימינג.
המשך
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של 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 := "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
}
}
C#
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח בשפת C# ולהתקין את Model Armor C# SDK.
using Google.Api.Gax.Grpc;
using Google.Cloud.ModelArmor.V1Beta;
using Grpc.Core;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
public class StreamSanitizeUserPromptExample
{
public static async Task Main(string[] args)
{
try
{
await RunStreamSanitizeUserPromptExample();
}
catch (Exception e)
{
Console.WriteLine($"An error occurred: {e}");
}
}
public static async Task RunStreamSanitizeUserPromptExample()
{
string projectId = "YOUR_PROJECT_ID";
string location = "LOCATION_ID";
string templateId = "YOUR_TEMPLATE_ID";
var promptChunks = new List<string>
{
"This is the first part of the user prompt. ",
"This is the second part. ",
"And this is the final part."
};
// Construct the regional REP endpoint (without port)
string regionalEndpoint = $"modelarmor.{location}.rep.googleapis.com";
Console.WriteLine($"Using endpoint: {regionalEndpoint}");
// Initialize the Model Armor client using Application Default Credentials.
var client = new ModelArmorClientBuilder
{
Endpoint = regionalEndpoint
}.Build();
// Construct the resource name.
var resourceName = TemplateName.FromProjectLocationTemplate(projectId, location, templateId);
// Get the bi-directional streaming call object
using var stream = client.StreamSanitizeUserPrompt();
Console.WriteLine("Sending requests...");
// --- Send First Request ---
var firstRequest = new SanitizeUserPromptRequest
{
Name = resourceName.ToString(),
UserPromptData = new DataItem { Text = promptChunks[0] },
StreamingMode = StreamingMode.Buffered // Or StreamingMode.Realtime
};
await stream.WriteAsync(firstRequest);
Console.WriteLine($"Sent chunk 1: \"{promptChunks[0]}\"");
// --- Send Subsequent Requests ---
for (int i = 1; i < promptChunks.Count; i++)
{
var subsequentRequest = new SanitizeUserPromptRequest
{
Name = resourceName.ToString(),
UserPromptData = new DataItem { Text = promptChunks[i] }
};
await stream.WriteAsync(subsequentRequest);
Console.WriteLine($"Sent chunk {i + 1}: \"{promptChunks[i]}\"");
}
// Signal that the client has finished sending requests.
await stream.WriteCompleteAsync();
Console.WriteLine("Client finished sending.");
// --- Receive Responses ---
Console.WriteLine("Receiving responses...");
// This loop waits for responses until the server closes the stream.
while (await stream.GetResponseStream().MoveNextAsync())
{
SanitizeUserPromptResponse response = stream.GetResponseStream().Current;
if (response.SanitizationResult != null)
{
var result = response.SanitizationResult;
Console.WriteLine("Received response:");
Console.WriteLine($" Match State: {result.FilterMatchState}");
Console.WriteLine($" Invocation Result: {result.InvocationResult}");
}
else
{
Console.WriteLine("Received empty response.");
}
}
Console.WriteLine("Stream finished and closed.");
}
}
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 = "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();
}
}
}
Node.js
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של Node.js ולהתקין את Model Armor Node.js SDK.
const { ModelArmorClient } = require('@google-cloud/modelarmor').v1beta;
async function streamSanitizeUserPromptExample() {
const projectId = 'YOUR_PROJECT_ID';
const location = 'LOCATION_ID';
const templateId = 'YOUR_TEMPLATE_ID';
const promptChunks = [
'This is the first part of the user prompt. ',
'This is the second part. ',
'And this is the final part.'
];
// Construct the regional REP endpoint
const regionalEndpoint = `modelarmor.${location}.rep.googleapis.com`;
console.log(`Using endpoint: ${regionalEndpoint}`);
// Initialize the Model Armor client with options
const modelArmorClient = new ModelArmorClient({
apiEndpoint: regionalEndpoint,
});
const resourceName = `projects/${projectId}/locations/${location}/templates/${templateId}`;
try {
// Obtain the bidirectional stream object
const stream = modelArmorClient.streamSanitizeUserPrompt();
// Setup events for receiving responses
stream.on('data', (response) => {
if (response.sanitizationResult) {
const result = response.sanitizationResult;
console.log('Received response:');
console.log(` Match State: ${result.filterMatchState}`);
console.log(` Invocation Result: ${result.invocationResult}`);
} else {
console.log('Received empty response.');
}
});
stream.on('error', (err) => {
console.error('Stream error occurred:', err);
});
stream.on('end', () => {
console.log('Stream finished and closed.');
});
console.log('Sending requests...');
// --- Send First Request ---
const firstRequest = {
name: resourceName,
userPromptData: {
text: promptChunks[0]
},
streamingMode: 'STREAMING_MODE_BUFFERED' // Or 'STREAMING_MODE_REALTIME'
};
stream.write(firstRequest);
console.log(`Sent chunk 1: "${promptChunks[0]}"`);
// --- Send Subsequent Requests ---
for (let i = 1; i < promptChunks.length; i++) {
const subsequentRequest = {
name: resourceName,
userPromptData: {
text: promptChunks[i]
}
};
stream.write(subsequentRequest);
console.log(`Sent chunk ${i + 1}: "${promptChunks[i]}"`);
}
// Signals gRPC end-of-writing from client
stream.end();
console.log('Client finished sending.');
} catch (e) {
console.error('Error during stream initialization:', e);
}
}
// Execute logic
streamSanitizeUserPromptExample();
```
PHP
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של PHP ולהתקין את Model Armor PHP SDK.
use Google\ApiCore\ApiException;
use Google\ApiCore\BidiStream;
use Google\Cloud\ModelArmor\V1beta\Client\ModelArmorClient;
use Google\Cloud\ModelArmor\V1beta\DataItem;
use Google\Cloud\ModelArmor\V1beta\SanitizeUserPromptRequest;
use Google\Cloud\ModelArmor\V1beta\SanitizeUserPromptResponse;
use Google\Cloud\ModelArmor\V1beta\StreamingMode;
use Google\Cloud\ModelArmor\V1beta\FilterMatchState;
use Google\Cloud\ModelArmor\V1beta\InvocationResult;
function stream_sanitize_user_prompt_example()
{
$projectId = 'YOUR_PROJECT_ID';
$location = 'LOCATION_ID';
$templateId = 'YOUR_TEMPLATE_ID';
$promptChunks = [
"This is the first part of the user prompt. ",
"This is the second part. ",
"And this is the final part."
];
// Construct the regional REP endpoint (without port)
$regionalEndpoint = sprintf('modelarmor.%s.rep.googleapis.com', $location);
echo "Using endpoint: " . $regionalEndpoint . PHP_EOL;
try {
// Initialize the Model Armor client
$modelArmorClient = new ModelArmorClient([
'apiEndpoint' => $regionalEndpoint,
]);
// Construct the resource name.
$resourceName = sprintf('projects/%s/locations/%s/templates/%s', $projectId, $location, $templateId);
// Get a stream object for the StreamSanitizeUserPrompt API method.
$stream = $modelArmorClient->streamSanitizeUserPrompt();
echo "Sending requests..." . PHP_EOL;
// --- Send First Request ---
$firstRequest = (new SanitizeUserPromptRequest())
->setName($resourceName)
->setUserPromptData((new DataItem())->setText($promptChunks[0]))
->setStreamingMode(StreamingMode::STREAMING_MODE_BUFFERED); // Or STREAMING_MODE_REALTIME
$stream->write($firstRequest);
echo "Sent chunk 1: \"" . $promptChunks[0] . "\"" . PHP_EOL;
// --- Send Subsequent Requests ---
for ($i = 1; $i < count($promptChunks); $i++) {
$subsequentRequest = (new SanitizeUserPromptRequest())
->setName($resourceName)
->setUserPromptData((new DataItem())->setText($promptChunks[$i]));
$stream->write($subsequentRequest);
echo "Sent chunk " . ($i + 1) . ": \"" . $promptChunks[$i] . "\"" . PHP_EOL;
}
// Signal that the client has finished sending requests.
$stream->closeWrite();
echo "Client finished sending." . PHP_EOL;
// --- Receive Responses ---
echo "Receiving responses..." . PHP_EOL;
/** @var SanitizeUserPromptResponse $response */
foreach ($stream->closeWriteAndReadAll() as $response) {
if ($response->hasSanitizationResult()) {
$result = $response->getSanitizationResult();
echo "Received response:" . PHP_EOL;
echo " Match State: " . FilterMatchState::name($result->getFilterMatchState()) . PHP_EOL;
echo " Invocation Result: " . InvocationResult::name($result->getInvocationResult()) . PHP_EOL;
} else {
echo "Received empty response." . PHP_EOL;
}
}
echo "Stream finished and closed." . PHP_EOL;
} catch (ApiException $e) {
echo "Error during streaming: " . $e->getMessage() . PHP_EOL;
foreach ($e->getMetadata() as $key => $value) {
echo $key . ": " . print_r($value, true) . PHP_EOL;
}
} catch (Exception $e) {
echo "An unexpected error occurred: " . $e->getMessage() . PHP_EOL;
} finally {
if (isset($modelArmorClient)) {
$modelArmorClient->close();
}
}
}
stream_sanitize_user_prompt_example();
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 = "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 תומכות רק בקלט טקסטואלי, ולא בקבצים מצורפים כמו תמונות וקבצים.
- אפשר להשתמש במזהה קורלציה כדי לעקוב אחרי יומני ניקוי של סטרימינג עבור בקשה מסוימת.
- שיטות הסטרימינג של Model Armor לא תומכות בהסרת פרטים מזהים של נתונים רגישים.
הנחיות מבוססות-קבצים
כדי לנקות הנחיה שמאוחסנת בקובץ, צריך לספק את תוכן הקובץ בפורמט base64. Model Armor לא מזהה אוטומטית את סוג הקובץ. צריך להגדיר במפורש את השדה byteDataType כדי לציין את פורמט הקובץ. אם השדה חסר או לא צוין, הבקשה תיכשל. הערכים האפשריים של byteDataType הם PLAINTEXT_UTF8, PDF, WORD_DOCUMENT, EXCEL_DOCUMENT, POWERPOINT_DOCUMENT, TXT ו-CSV.
הסרת הפרטים המזהים של מידע אישי רגיש לא נתמכת בהנחיות שמבוססות על קבצים.
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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_ID: מזהה התבנית. FILE_TYPE: הפורמט של קובץ הקלט.
המשך
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של 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 עוזרת לכם לסרוק קבוצה קבועה של infoTypes של Sensitive Data Protection.
ה-infoTypes הבאים של Sensitive Data Protection נסרקים בהנחיה בכל האזורים:
-
CREDIT_CARD_NUMBER: מספר כרטיס אשראי הוא באורך 12 עד 19 ספרות. הוא משמש לתשלום עסקאות בכל העולם. -
FINANCIAL_ACCOUNT_NUMBER: מספר שמתייחס לחשבון פיננסי ספציפי, למשל מספר חשבון בנק או מספר חשבון פנסיה. -
GCP_CREDENTIALS: Google Cloud פרטי כניסה לחשבון שירות. פרטי כניסה שאפשר להשתמש בהם לאימות מול {api_client_lib_name} וחשבונות שירות. -
GCP_API_KEY: Google Cloud מפתח API. מחרוזת מוצפנת שמשמשת לקריאה ל-API שלא דורשת גישה לנתונים פרטיים של משתמשים. Google Cloud -
PASSWORD: סיסמאות טקסט ברורות בהגדרות, קוד וטקסט אחר.
בפרומפט נסרקים סוגי המידע הבאים של Sensitive Data Protection באזורים שמבוססים בארה"ב:
-
US_SOCIAL_SECURITY_NUMBER: מספר תעודת זהות (SSN) בארצות הברית הוא מספר בן 9 ספרות שמונפק לאזרחי ארה"ב, לתושבי קבע ולתושבים ארעיים. הגלאי הזה לא יזהה מספרים שכוללים רק אפסים בכל קבוצת ספרות (כלומר, 000-##-####, ###-00-#### או ###-##-0000), מספרים שכוללים 666 בקבוצת הספרות הראשונה או מספרים שהספרה הראשונה שלהם היא 9. -
US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER: מספר זיהוי לצורכי מס ליחידים בארה"ב (ITIN) הוא סוג של מספר זיהוי לצורכי מס (TIN) שמנפיק ה-Internal Revenue Service (IRS). מספר ITIN הוא מספר לצורך תשלום מס שזמין רק לתושבים זרים ולתושבי קבע מסוימים, לבני הזוג ולתלויים שלהם שאין להם אפשרות לקבל מספר תעודת זהות (SSN).
דוגמה להגדרה בסיסית של Sensitive Data Protection:
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --project=PROJECT_ID \ --basic-config-filter-enforcement=enabled
מחליפים את מה שכתוב בשדות הבאים:
-
TEMPLATE_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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_ID: מזהה התבנית.
המשך
כדי להריץ את הקוד הזה, קודם צריך להגדיר סביבת פיתוח של 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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_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 סורק את ההנחיות והתשובות של ה-LLM באמצעות הגדרת התצורה המתקדמת של הגנה על נתונים רגישים. כך תוכלו להשתמש ביכולות של Sensitive Data Protection מעבר לסוגי המידע (infoTypes) שמוצעים בהגדרה הבסיסית של Sensitive Data Protection.
כדי להשתמש במסנן המתקדם של Sensitive Data Protection ב-Model Armor, התבניות של Sensitive Data Protection צריכות להיות באותו מיקום בענן כמו התבנית של Model Armor.
gcloud
gcloud model-armor templates create TEMPLATE_ID \ --location=LOCATION \ --advanced-config-inspect-template="path/to/template" \
מחליפים את מה שכתוב בשדות הבאים:
-
TEMPLATE_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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_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 ולהתקין את 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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_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 יכולים ליצור תשובות מזיקות. כדי לצמצם את הסיכונים שקשורים לשימוש במודלים של שפה גדולה באפליקציות, חשוב לבצע סניטציה של התשובות שלהם.
הנה דוגמה לפקודה לניקוי תשובה של מודל ב-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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית.
TEMPLATE_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 ולהתקין את 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: מזהה הפרויקט שאליו שייך התבנית. -
LOCATION: המיקום של התבנית. -
TEMPLATE_ID: מזהה התבנית.
ניקוי התשובה של המודל בכל הפרויקטים
כדי להפעיל ניהול מרכזי של בטיחות ה-AI, ארגונים מאחסנים לעיתים קרובות תבניות של Model Armor בפרויקט ייעודי (פרויקט א': TEMPLATE_PROJECT_ID), בזמן שהאפליקציות שלהם פועלות בפרויקטים נפרדים (פרויקט ב').
כדי לאפשר לחשבון שירות (CALLER_SERVICE_ACCOUNT) מפרויקט ב לגשת לתבנית בפרויקט א, צריך להוסיף מדיניות IAM שמקושרת לפרויקט התבנית.
כדי להעניק את ההרשאות הנדרשות בין פרויקטים, מריצים את הפקודה הבאה:
gcloud projects add-iam-policy-binding TEMPLATE_PROJECT_ID \ --member='serviceAccount:CALLER_SERVICE_ACCOUNT' \ --role='roles/modelarmor.user'
מחליפים את מה שכתוב בשדות הבאים:
-
TEMPLATE_PROJECT_ID: מזהה הפרויקט שבו מתארח התבנית. -
CALLER_SERVICE_ACCOUNT: חשבון השירות מהפרויקט ששולח את בקשת ה-API.
המאמרים הבאים
- מידע נוסף על Model Armor
- מידע נוסף על הגדרות הסף של Model Armor
- מידע נוסף על תבניות Model Armor
- פתרון בעיות ב-Model Armor