בדף הזה מוסבר בפירוט איך לבצע סניטציה של הנחיות ותשובות. Model Armor מציע קבוצה של מסננים להגנה על אפליקציות AI. הגנה מוגברת על המודל בודקת את ההנחיות ואת התשובות לפי רמות הסמך של הסינון שהוגדרו.
לפני שמתחילים
יוצרים תבנית לפי ההוראות במאמר יצירת תבניות.
קבלת ההרשאות הנדרשות
כדי לקבל את ההרשאות שדרושות בשביל לנקות את ההנחיות והתשובות, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בהגנה מוגברת על המודל:
- משתמש בהגנה מוגברת על המודל (
roles/modelarmor.user) - צפייה ב-Model Armor (
roles/modelarmor.viewer)
להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.
יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.
בפרויקט שמכיל את תבנית Sensitive Data Protection, מעניקים את תפקיד משתמש DLP (roles/dlp.user) ואת תפקיד קורא DLP (roles/dlp.reader) לסוכן השירות שנוצר כחלק מהשלב Advanced Sensitive Data Protection של Create templates. אם תבנית Sensitive Data Protection נמצאת באותו פרויקט כמו תבנית הגנה מוגברת על המודל, מדלגים על השלב הזה.
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 API.
המסוף
מפעילים את הגנה מוגברת על המודל API.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, צריך את תפקיד ה-IAM 'אדמין של Service Usage' (
roles/serviceusage.serviceUsageAdmin), שכולל את ההרשאהserviceusage.services.enable. איך מקצים תפקידיםבוחרים את הפרויקט שבו רוצים להפעיל את הגנה מוגברת על המודל.
gcloud
לפני שמתחילים, צריך לבצע את השלבים הבאים באמצעות Google Cloud CLI עם Model Armor API:
במסוף Google Cloud , מפעילים את Cloud Shell.
בחלק התחתון של Google Cloud המסוף יתחיל סשן של Cloud Shell ותופיע הודעה של שורת הפקודה. Cloud Shell היא סביבת מעטפת שבה ה-CLI של Google Cloud מותקן ומוגדרים ערכים לפרויקט הקיים. הסשן יופעל תוך כמה שניות.
הגדרת שינוי מברירת המחדל של נקודת קצה ל-API באמצעות ה-CLI של gcloud
הגדרת שינוי מברירת המחדל של נקודת קצה ל-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
השתמש בפקודה הבאה כדי לנקות הנחיה טקסטואלית ב-הגנה מוגברת על המודל.
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 נמצא בקטגוריה Dangerous (מסוכן).
{ "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.
צריך לבצע סניטציה לכל קלט של משתמשים בנפרד: קוראים ל-API
SanitizeUserPromptלכל הודעה חדשה שמתקבלת מהמשתמש. כך מוודאים שכל קלט של משתמשים נבדק לאיתור איומים פוטנציאליים לפני שהוא מעובד על ידי LLM. השדהuserPromptDataצריך להכיל רק את התוכן של ההודעה האחרונה מהמשתמש בשיחה הנוכחית.לא לכלול את היסטוריית השיחה: לא לשרשר את כל היסטוריית הצ'אט לשדה
userPromptData.לא לכלול הנחיות מערכת: לא לכלול את הנחיית המערכת בשדה
userPromptData. המודל Model Armor מתמקד בזיהוי איומים רק בקלט שסופק על ידי המשתמש.
ניקוי הנחיות טקסט עם הפעלה של זיהוי רב-לשוני
כדי להפעיל זיהוי של כמה שפות על בסיס כל בקשה בנפרד, צריך להגדיר את הדגל enableMultiLanguageDetection לערך true בכל בקשה בנפרד.
אפשר גם לציין את שפת המקור כדי לקבל תוצאות מדויקות יותר.
- אם לא מציינים את שפת המקור, הגנה מוגברת על המודל מזהה אוטומטית את השפה כדי לספק תמיכה בכמה שפות.
- אם מציינים את שפת המקור, הגנה מוגברת על המודל משתמשת בשפה הזו כדי להעריך את ההנחייה הטקסטואלית ולא מבצעת זיהוי שפה אוטומטי.
כדי לבצע סניטציה של הנחייה טקסטואלית ב-הגנה מוגברת על המודל עם זיהוי רב-לשוני מופעל ברמת הבקשה, משתמשים בפקודה הבאה:
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: מזהה התבנית.
ניקוי של הנחיות טקסט לסטרימינג
שיטות הסטרימינג של הגנה מוגברת על המודל מנקות את ההנחיות והתשובות בזמן אמת כזרמי טקסט, בלי לחכות שכל התוכן יהיה זמין. היכולת הזו שימושית במיוחד לאפליקציות שמטפלות במטענים גדולים של טקסט או שדורשות אינטראקציות עם זמן אחזור נמוך עם מודלים גדולים של שפה (LLM).
אפשר להשתמש בשיטות האלה כדי להפעיל סטרימינג:
- StreamSanitizeUserPrompt: מעביר בסטרימינג ומבצע סניטציה של טקסט שסופק על ידי המשתמש.
- StreamSanitizeModelResponse: מעביר בסטרימינג ומבצע סניטציה של טקסט שנוצר על ידי מודל שפה גדול (LLM).
Model Armor מציע את מצבי הסטרימינג הבאים:
- מצב עם מאגר זמני: כל חלקי הנתונים שמוזרמים נאספים ומעובדים יחד כיחידה אחת.
- מצב בזמן אמת: כל חלק מעובד בנפרד כשהוא מתקבל, ומתקבל משוב רציף.
Model Armor תומך בטוקנים ללא הגבלה כשמשתמשים במצב סטרימינג בזמן אמת, אבל במצב מאגרי נתונים יש מגבלות על טוקנים.
כך פועל הסטרימינג:
- קלט מחולק לחלקים: האפליקציה שולחת טקסט להגנה מוגברת על המודל בחלקים קטנים במקום לשלוח את כל הטקסט בבת אחת.
- עיבוד בזמן אמת: 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 := "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 תומכות רק בקלט טקסטואלי, ולא בקבצים מצורפים כמו תמונות וקבצים.
- אפשר להשתמש במזהה קורלציה כדי לעקוב אחרי יומני ניקוי של סטרימינג עבור בקשה מסוימת.
- שיטות הסטרימינג של הגנה מוגברת על המודל לא תומכות בביטול הזיהוי של 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: מזהה הפרויקט שאליו שייך התבנית. -
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: מספר תעודת זהות (ת"ז) בארצות הברית הוא מספר בן 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
הגנה מוגברת על המודל מסנן את ההנחיות והתשובות של LLM באמצעות הגדרת התצורה המתקדמת של Sensitive Data Protection. כך אפשר להשתמש ביכולות של Sensitive Data Protection מעבר ל-infoTypes שמוצעים בהגדרה הבסיסית של Sensitive Data Protection.
כדי להשתמש במסנן המתקדם של Sensitive Data Protection ב-הגנה מוגברת על המודל, התבניות של Sensitive Data Protection צריכות להיות באותו מיקום בענן כמו התבנית של הגנה מוגברת על המודל.
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 לכל תגובה בנפרד.
אפשר גם לציין את שפת המקור כדי לקבל תוצאות מדויקות יותר.
- אם לא מציינים את שפת המקור, הגנה מוגברת על המודל מזהה אוטומטית את השפה כדי לספק תמיכה בכמה שפות.
- אם מציינים את שפת המקור, הגנה מוגברת על המודל משתמשת בשפה הזו כדי להעריך את התשובה של המודל ולא מבצעת זיהוי שפה אוטומטי.
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