המדיניות SanitizeUserPrompt

מדיניות ניתנת להרחבה

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

המדיניות SanitizeUserPrompt מגנה על אפליקציות AI מפני תוכן פוגעני על ידי ניקוי הנחיות משתמש שנשלחות למודלים של AI גנרטיבי. המדיניות משתמשת ב-Model Armor כדי להעריך הנחיות של משתמשים לתוכן מזיק, וכך מאפשרת הגנה מקורית על עומסי עבודה של AI באמצעות Apigee. ‫Model Armor הוא שירות שמציע אמצעי אבטחה ובטיחות ל-AI, כדי לצמצם את הסיכונים שקשורים למודלים גדולים של שפה (LLM). Google Cloud

המדיניות הזו פועלת בשילוב עם המדיניות SanitizeModelResponse.

המדיניות הזו היא מדיניות שניתנת להרחבה, והשימוש בה עשוי להשפיע על העלויות או על הניצול, בהתאם לרישיון Apigee שלכם. מידע על סוגי המדיניות וההשלכות של השימוש זמין במאמר סוגי מדיניות.

לפני שמתחילים

לפני שמשתמשים במדיניות SanitizeUserPrompt, צריך לבצע את המשימות הבאות:

  • יוצרים תבנית Model Armor. צריך להשלים את השלב הזה לפני שיוצרים מדיניות SanitizeUserPrompt.
  • מגדירים את נקודת הקצה ל-API לשירות הגנה מוגברת על המודל.
  • יוצרים מדיניות SanitizeModelResponse. צריך להשלים את המשימה הזו לפני שמפעילים את המדיניות SanitizeUserPrompt.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להחלה ולשימוש במדיניות SanitizeUserPrompt, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים בחשבון השירות שבו אתם משתמשים כדי לפרוס פרוקסי של Apigee:

להסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

יכול להיות שאפשר לקבל את ההרשאות הנדרשות גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש.

הפעלת ממשקי ה-API

מפעילים את Model Armor API.

תפקידים שנדרשים להפעלת ממשקי API

כדי להפעיל ממשקי API, נדרשת ההרשאה serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק 'שימוש בשירות'' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידים

להפעלת ה-API

רכיב <SanitizeUserPrompt>

הגדרת מדיניות SanitizeUserPrompt.

ערך ברירת מחדל מידע נוסף מופיע בכרטיסייה מדיניות ברירת המחדל שבהמשך.
חובה? חובה
סוג אובייקט מורכב
רכיב אב לא רלוונטי
רכיבי צאצא <DisplayName>
<IgnoreUnresolvedVariables>
<TemplateName>
<UserPromptSource>

רכיב <SanitizeUserPrompt> משתמש בתחביר הבא:

תחביר

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</SanitizeUserPrompt>

מדיניות ברירת המחדל

בדוגמה הבאה מוצגות הגדרות ברירת המחדל כשמוסיפים מדיניות SanitizeUserPrompt (ניקוי הנחיות למשתמש) לזרימת הבקשות בממשק המשתמש של Apigee:

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
  <UserPromptSource>{jsonPath('$.contents[-1].parts[-1].text',request.content,true)}</UserPromptSource>
</SanitizeUserPrompt>

כשמוסיפים מדיניות חדשה של SanitizeUserPrompt באמצעות ממשק המשתמש של Apigee, התבנית מכילה placeholders לכל הפעולות האפשריות. בהמשך מפורט מידע על האלמנטים הנדרשים.

לרכיב הזה יש את המאפיינים הבאים שמשותפים לכל המדיניות:

מאפיין ברירת מחדל חובה? תיאור
name לא רלוונטי חובה

השם הפנימי של המדיניות. הערך של מאפיין name יכול להכיל אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול להיות ארוך מ-255 תווים.

אפשר להשתמש ברכיב <DisplayName> כדי לתת למדיניות תווית בשם אחר בשפה טבעית בכלי לעריכת פרוקסי בממשק המשתמש לניהול.

continueOnError FALSE אופציונלי מגדירים את הערך false כדי להחזיר שגיאה אם המדיניות נכשלת. זו התנהגות צפויה ברוב המקרים. הגדרה ל-true מאפשרת להמשיך את הביצוע של התהליך גם אחרי שמדיניות נכשלת. מאמרים קשורים:
enabled TRUE אופציונלי מגדירים את הערך true כדי לאכוף את המדיניות, או את הערך false כדי להשבית את המדיניות. המדיניות לא נאכפת גם אם היא עדיין משויכת לזרימה.
async   FALSE הוצא משימוש המאפיין הזה הוצא משימוש.

בטבלה הבאה מפורט תיאור כללי של רכיבי המשנה של <SanitizeUserPrompt>:

רכיב צאצא חובה? תיאור
<DisplayName> אופציונלי שם המדיניות.

<IgnoreUnresolvedVariables> אופציונלי המדיניות קובעת אם העיבוד ייפסק אם המשתנה שמשמש לשם התבנית או למטען הייעודי (payload) של הגנה מוגברת על המודל לא נפתר.
<ModelArmor> חובה מכיל את המידע הנדרש לציון תבנית הגנה מוגברת על המודל.
<UserPromptSource> אופציונלי המיקום של מטען הייעודי (payload) שבו נמצא הטקסט של הנחיית המשתמש שרוצים לחלץ. יש תמיכה רק בערכי טקסט מסוג מחרוזת.

השדה הזה תומך בתחביר של תבניות הודעות ב-Apigee, כולל שימוש ב משתנים או בפונקציות של JSON Path.

לדוגמה:

{jsonpath('$.input.prompt.text',request.content,false)}

דוגמה

בקטע הזה מופיעה דוגמה לשימוש ב-<SanitizeUserPrompt>.

בדוגמה הזו נעשה שימוש בכל ערכי ברירת המחדל לזיהוי מודלים ולחילוץ הנחיות:

<SanitizeUserPrompt async="false" continueOnError="false" enabled="true" name="sanitize-text">
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <DisplayName>Sanitize-Text-sample</DisplayName>
  <ModelArmor>
    <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
  </ModelArmor>
</SanitizeUserPrompt>

הפניה לרכיב צאצא

בקטע הזה מתוארים רכיבי הבן של <SanitizeUserPrompt>.

<DisplayName>

אפשר להשתמש במאפיין הזה בנוסף למאפיין name כדי לתת למדיניות שם אחר, שנשמע יותר טבעי, ב-UI של עורך ה-proxy לניהול.

הרכיב <DisplayName> משותף לכל סוגי המדיניות.

ערך ברירת המחדל לא רלוונטי
חובה? זה שינוי אופציונלי. אם לא מציינים את <DisplayName>, המערכת משתמשת בערך של מאפיין name של המדיניות.
סוג String
רכיב אב <PolicyElement>
רכיבי צאצא ללא

רכיב <DisplayName> משתמש בתחביר הבא:

תחביר

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

דוגמה

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

לרכיב <DisplayName> אין מאפיינים או רכיבי צאצא.

<IgnoreUnresolvedVariables>

קובעת אם העיבוד ייפסק כשמשתנה לא נפתר. הערך שמוגדר הוא true כדי להתעלם ממשתנים שלא נפתרו ולהמשיך בעיבוד.

ערך ברירת מחדל לא נכון
חובה? אופציונלי
סוג בוליאני
רכיב אב <SanitizeUserPrompt>
רכיבי צאצא ללא

<ModelArmor>

מכיל את המידע הנדרש לציון תבנית הגנה מוגברת על המודל.

ערך ברירת מחדל לא רלוונטי
חובה? חובה
סוג String
רכיב אב
רכיבי צאצא <TemplateName>

רכיב <ModelArmor> משתמש בתחביר הבא:

תחביר

<ModelArmor>
  <TemplateName>projects/{project}/locations/{location}/templates/{template-name}</TemplateName>
</ModelArmor>

דוגמה

בדוגמה הזו נעשה שימוש במשתני זרימה של Apigee כדי לאכלס את המידע הנדרש.

<ModelArmor>
  <TemplateName>projects/{organization.name}/locations/{system.region.name}/templates/{id}</TemplateName>
</ModelArmor>

בטבלה הבאה מופיע תיאור כללי של רכיבי המשנה של <ModelArmor>.

רכיב צאצא חובה? תיאור
<TemplateName> חובה String

תבנית הגנה מוגברת על המודל שמשמשת לניקוי ההנחיה למשתמש.

אפשר להשתמש בתבנית לערך הזה באמצעות משתני הזרימה הבאים של Apigee:

projects/{organization.name}/locations/{system.region.name}/templates/{id}

<UserPromptSource>

המיקום של מטען הייעודי (payload) שבו נמצא הטקסט של הנחיית המשתמש שרוצים לחלץ. השדה הזה תומך בתחביר של תבנית הודעה ב-Apigee, כולל שימוש ב משתנים או בפונקציות של נתיב JSON. לדוגמה:

{jsonpath('$.input.prompt.text',request.content,false)}
ערך ברירת מחדל {jsonPath('$.contents[-1].parts[-1].text',request.content,true)}
חובה? אופציונלי
סוג String
רכיב אב <SanitizeUserPrompt>
רכיבי צאצא ללא

משתנים בתהליך

משתני Flow מגדירים התנהגות דינמית בזמן ריצה עבור מדיניות ו-Flows, על סמך כותרות HTTP או תוכן הודעה, או ההקשר שזמין ב-Flow. מידע נוסף על משתני זרימה זמין במאמר חומר עזר בנושא משתני זרימה.

המדיניות הזו מספקת את קבוצת משתני הזרימה הבאה שהם לקריאה בלבד במהלך ההרצה. אפשר להשתמש במשתני הזרימה האלה עם מדיניות DataCapture כדי ליצור דוחות ניתוח בהתאמה אישית. מידע נוסף זמין במאמר בנושא איסוף נתוני לקוחות בהתאם למדיניות בנושא איסוף נתונים.

שם המשתנה תיאור
SanitizeUserPrompt.POLICY_NAME.templateUsed מציין באיזו תבנית של שריון המודל משתמש. לדוגמה: projects/myproject/locations/us-west1/templates/mytemplate
SanitizeUserPrompt.POLICY_NAME.userPrompt מציינת את תוכן הפרומפט שמשמש לקריאה ל-הגנה מוגברת על המודל כדי לבצע סניטציה של התוכן.
SanitizeUserPrompt.POLICY_NAME.modelResponse מציינת את תוכן התשובה של ה-LLM שמשמש לקריאה ל-הגנה מוגברת על המודל כדי לבצע סניטציה של התוכן.
SanitizeUserPrompt.POLICY_NAME.responseFromModelArmor מציין את תגובת ה-JSON מ-Model Armor.
SanitizeUserPrompt.POLICY_NAME.filterMatchState מציין אם המסנן תאם. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.invocationResult שדה שמציין את התוצאה של הקריאה, ללא קשר לסטטוס ההתאמה. הוא יכול לכלול את הפרטים הבאים:
  • הצלחה: כל המסננים הופעלו בהצלחה.
  • חלקי: חלק מהמסננים דולגו או שההרצה שלהם נכשלה.
  • כשל: כל המסננים דולגו או שהביצוע שלהם נכשל.
SanitizeUserPrompt.POLICY_NAME.raiFilterResult.executionState תוצאת ההרצה של מסנן ה-Rai. הערכים התקפים כוללים את EXECUTION_SUCCESS ואת EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.raiFilterResult.matchState מצב ההתאמה של מסנן ה-Rai. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.inspectResult.executionState מצב ההפעלה של תוצאת הבדיקה של מסנן ה-SDP. הערכים התקפים כוללים את EXECUTION_SUCCESS ואת EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.inspectResult.matchState מצב ההתאמה של תוצאת הבדיקה של מסנן ה-SDP. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.executionState מצב הביצוע של תוצאת ביטול הזיהוי של מסנן ה-SDP. הערכים התקפים כוללים את EXECUTION_SUCCESS ואת EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.sdpFilterResult.deidentifyResult.matchState מצב ההתאמה של תוצאת ביטול הזיהוי של מסנן ה-SDP. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.piAndJailbreakFilterResult.executionState מצב ההפעלה של תוצאות הסינון של החדרה פרומפטים ופריצת הגבלות. הערכים התקפים כוללים את EXECUTION_SUCCESS ואת EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.piAndJailbreakFilterResult.matchState התוצאות של סינון ה-Jailbreak והחדרת פרומפטים תואמות למצב. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.csamFilterFilterResult.executionState מצב הביצוע של מסנן CSAM. הערכים התקפים כוללים את EXECUTION_SUCCESS ואת EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.csamFilterFilterResult.matchState מצב ההתאמה של המסנן CSAM. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.maliciousUriFilterResult.executionState מצב הביצוע של מסנן URI זדוני. הערכים התקפים כוללים את EXECUTION_SUCCESS ואת EXECUTION_SKIPPED.
SanitizeUserPrompt.POLICY_NAME.maliciousUriFilterResult.matchState מצב ההתאמה של מסנן URI זדוני. הערכים התקפים כוללים את MATCH_FOUND ואת NO_MATCH_FOUND.
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorCode קוד שגיאה מותאם אישית שמוחלף אם הוא מופיע בתגובה של הגנה מוגברת על המודל.
SanitizeUserPrompt.POLICY_NAME.sanitizationMetadata.errorMessage קוד שגיאה מותאם אישית שמוחלף אם הוא מופיע בתגובה של הגנה מוגברת על המודל.
SanitizeUserPrompt.POLICY_NAME.csamFilterMatched ערך בוליאני שמציין אם המסנן של CSAM התאים.
SanitizeUserPrompt.POLICY_NAME.maliciousURIs רשימה מצורפת של כתובות URI זדוניות שזוהו על ידי המסנן של כתובות URI זדוניות.
SanitizeUserPrompt.POLICY_NAME.maliciousURIsDetected ערך בוליאני שמציין אם מסנן ה-URI הזדוני תאם.
SanitizeUserPrompt.POLICY_NAME.matchesFound ערך בוליאני שמציין אם יש התאמה לאחד מהמסננים.
SanitizeUserPrompt.POLICY_NAME.promptInjectionDetected ערך בוליאני שמציין אם המסנן של החדרה פרומפטים מצא התאמה.
SanitizeUserPrompt.POLICY_NAME.promptInjectionConfidence רמת הסמך של זיהוי החדרת פרומפטים.
SanitizeUserPrompt.POLICY_NAME.raiMatchesFound ערך בוליאני שמציין אם המסנן של RAI התאים.
SanitizeUserPrompt.POLICY_NAME.requestSentToModelArmor ערך בוליאני שמציין אם בקשה נשלחה להגנה מוגברת על המודל.
SanitizeUserPrompt.POLICY_NAME.sanitizeOperation מציין את הפעולה שמבוצעת על ידי המדיניות. הערכים התקפים כוללים SANITIZE_USER_PROMPT ו-SANITIZE_MODEL_RESPONSE.

הפניה לשגיאה

בקטע הזה מוסבר על קודי השגיאות והודעות השגיאה שמוחזרים מ-Apigee, ועל משתני השגיאה שמוגדרים ב-Apigee למדיניות SanitizeUserPrompt. המידע הזה חשוב אם אתם מפתחים כללי תקלות לטיפול בתקלות. מידע נוסף זמין במאמרים מה צריך לדעת על שגיאות במדיניות וטיפול בתקלות.

שגיאות זמן ריצה

השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.

קוד תקלה סטטוס HTTP מטרה
steps.sanitize.user.prompt.response.FilterMatched 400 השגיאה הזו מתרחשת אם ההנחיה למשתמש לא עוברת את הבדיקה של תבנית הגנה מוגברת על המודל.
steps.sanitize.user.prompt.SanitizationResponseParsingFailed 500 השגיאה הזו מתרחשת אם אי אפשר לנתח את התשובה של Model Armor.
steps.sanitize.user.prompt.FailedToExtractUserPrompt 500 השגיאה הזו מתרחשת אם חילוץ ההנחיה האוטומטית למשתמש עבור ערך ברירת המחדל נכשל.
steps.sanitize.user.prompt.InternalError 500 השגיאה הזו מתרחשת אם יש שגיאת שרת פנימית.
steps.sanitize.modelarmor.ModelArmorTemplateNameExtractionFailed 500 השגיאה הזו מתרחשת אם אי אפשר לפענח את שם התבנית.
steps.sanitize.modelarmor.AuthenticationFailure 500 השגיאה הזו מתרחשת אם לחשבון השירות אין הרשאה לקרוא ל-API של הגנה מוגברת על המודל.
steps.sanitize.modelarmor.ModelArmorAPIFailed 500 השגיאה הזו מתרחשת אם Model Armor API מחזיר שגיאה.
steps.sanitize.modelarmor.ModelArmorCalloutError 500 השגיאה הזו מתרחשת אם קריאה ל-API של הגנה מוגברת על המודל נכשלת.
steps.sanitize.modelarmor.ServiceUnavailable 500 השגיאה הזו מתרחשת אם שירות הגנה מוגברת על המודל לא זמין.

שגיאות בהטמעה

השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שמכיל את המדיניות הזו.

שם השגיאה מטרה
The ModelArmor/TemplateName element is required. השגיאה הזו מתרחשת אם הרכיב <TemplateName> ב-<ModelArmor> לא קיים.
The TemplateName element value is required. השגיאה הזו מתרחשת אם הערך של <TemplateName> ריק.

משתני תקלות

המדיניות הזו מגדירה את המשתנים האלה כשהיא מפעילה שגיאה בזמן הריצה. מידע נוסף על שגיאות שקשורות למדיניות

משתנים כאשר: דוגמה
fault.name="FAULT_NAME" FAULT_NAME הוא שם התקלה, כפי שמופיע בטבלה שגיאות בזמן ריצה שלמעלה. שם התקלה הוא החלק האחרון של קוד התקלה. fault.name Matches "UnresolvedVariable"
SanitizeUserPrompt.POLICY_NAME.failed POLICY_NAME הוא השם שהמשתמש הגדיר למדיניות שגרמה לשגיאה. SanitizeUserPrompt.sanitize-prompt.failed = true

דוגמה לתגובת שגיאה

{
  "fault": {
    "faultstring": "SanitizeUserPrompt[sanitize-prompt]: unable to resolve variable [variable_name]",
    "detail": {
      "errorcode": "steps.sanitizeuserprompt.UnresolvedVariable"
    }
  }
}

דוגמה לכלל שגיאה

<FaultRule name="SanitizeUserPrompt Faults">
    <Step>
        <Name>SUP-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(sanitizeuserprompt.failed = true)</Condition>
</FaultRule>

קוד שגיאה והודעות שגיאה של תבנית הגנה מוגברת על המודל

תבנית הגנה מוגברת על המודל תומכת בביטול של קודי שגיאה והודעות שגיאה שמוחזרים על ידי בקשות API של מדיניות SanitizeUserPrompt. אם המשתמש מגדיר את ההחלפות, קודי השגיאה והודעות השגיאה של הגנה מוגברת על המודל מאכלסים את משתני הזרימה.

לדוגמה, תגובה עם קודי שגיאה והודעות של הגנה מוגברת על המודל יכולה להיראות כך:

{
  "sanitizationResult": {
    "filterMatchState": "MATCH_FOUND",
    "filterResults": {...},
    "sanitizationMetadata": {
      "errorCode": "890",
      "errorMessage": "get out"
      },
    "invocationResult": "SUCCESS"
  }
}

סכימות

כל סוג מדיניות מוגדר על ידי סכימת XML ‏ (.xsd). סכימות מדיניות זמינות ב-GitHub.