הגדרות בטיחות

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

במדריך הזה נסביר איך ממשק ה-API של Gemini מטפל בהגדרות הבטיחות ובסינון, ואיך אפשר לשנות את הגדרות הבטיחות של האפליקציה.

מסנני בטיחות

מסנני הבטיחות המתכווננים של Gemini API מכסים את הקטגוריות הבאות:

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

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

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

רמת הסינון של תוכן בטוח

‏Gemini API מסווג את רמת הסבירות שהתוכן לא בטוח בתור HIGH,‏ MEDIUM,‏ LOW או NEGLIGIBLE.

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

  1. הרובוט הכה אותי.
  2. הרובוט חתך אותי.

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

סינון בטיחות לפי בקשה

אתם יכולים לשנות את הגדרות הבטיחות לכל בקשה שאתם שולחים ל-API. כששולחים בקשה, התוכן מנותח ומוקצה לו דירוג בטיחות. דירוג הבטיחות כולל את הקטגוריה ואת ההסתברות לסיווג הנזק. לדוגמה, אם התוכן נחסם בגלל שקטגוריית ההטרדה נחשבה כבעלת סבירות גבוהה, סיווג הבטיחות שהמערכת תחזיר יהיה HARASSMENT והסבירות לנזק תהיה HIGH.

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

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

סף (Google AI Studio) סף (API) תיאור
ללא חסימה BLOCK_NONE תמיד להציג את המודעות, ללא קשר לסבירות לכך שהן מכילות תוכן לא בטוח
חסימת מספר קטן BLOCK_ONLY_HIGH חסימת תוכן שיש סיכוי גבוה שהוא לא בטוח
חסימת חלק מהם BLOCK_MEDIUM_AND_ABOVE חסימה כשיש סיכוי בינוני או גבוה לתוכן לא בטוח
חסימה של רוב המודעות BLOCK_LOW_AND_ABOVE חסימה כשיש סיכוי נמוך, בינוני או גבוה לתוכן לא בטוח
לא רלוונטי HARM_BLOCK_THRESHOLD_UNSPECIFIED לא צוין ערך סף, חסימה באמצעות ערך הסף שמוגדר כברירת מחדל

אם לא מגדירים ערך סף, ערך הסף שמוגדר כברירת מחדל לחסימה הוא חסימה של רוב (למודלים gemini-1.5-pro-002 ו-gemini-1.5-flash-002 בלבד) או חסימה של חלק (בכל שאר המודלים) בכל הקטגוריות למעט הקטגוריה תקינות פוליטית.

ערך ברירת המחדל של סף החסימה בקטגוריה תקינות פוליטית הוא חסימה של רוב ההנחיות כששולחים הנחיות באמצעות Google AI Studio, וללא חסימה כשמשתמשים ישירות ב-Gemini API.

אפשר להגדיר את ההגדרות האלה לכל בקשה ששולחים לשירות הגנרטיבי. לפרטים נוספים עיינו במפרט של השיטה ב-HarmBlockThreshold.

משוב בנושא בטיחות

הפונקציה generateContent מחזירה את הערך GenerateContentResponse שכולל משוב בנושא בטיחות.

המשוב על ההנחיה כלול ב-promptFeedback. אם הערך של promptFeedback.blockReason מוגדר, המשמעות היא שתוכן ההנחיה נחסם.

המשוב על מועמדים לתשובות נכלל ב-Candidate.finishReason וב-Candidate.safetyRatings. אם תוכן התגובה נחסם והערך של finishReason היה SAFETY, תוכלו לבדוק את safetyRatings כדי לקבל פרטים נוספים. התוכן שנחסם לא מוחזר.

שינוי הגדרות הבטיחות

בקטע הזה נסביר איך לשנות את הגדרות הבטיחות גם ב-Google AI Studio וגם בקוד.

‏Google AI Studio

אפשר לשנות את הגדרות הבטיחות ב-Google AI Studio, אבל אי אפשר להשבית אותן.

לוחצים על Edit safety settings בחלונית Run settings כדי לפתוח את החלונית הדו-שיחית Run safety settings. בחלון הדו-שיח, אפשר להשתמש בפס ההזזה כדי לשנות את רמת סינון התוכן לפי קטגוריית בטיחות:

כששולחים בקשה (למשל, שואלים את המודל שאלה), מופיעה ההודעה No Content (אין תוכן) אם תוכן הבקשה חסום. כדי לראות פרטים נוספים, מחזיקים את הסמן מעל הטקסט אין תוכן ולוחצים על בטיחות.

ערכות SDK של Gemini API

בקטע הקוד הבא מוסבר איך להגדיר את הגדרות הבטיחות בקריאה ל-GenerateContent. כך מגדירים את ערכי הסף לקטגוריות 'הטרדה' (HARM_CATEGORY_HARASSMENT) ו'דברי שטנה' (HARM_CATEGORY_HATE_SPEECH). לדוגמה, הגדרת הקטגוריות האלה ל-BLOCK_LOW_AND_ABOVE תמנע הצגה של תוכן שיש סיכוי נמוך או גבוה שהוא תוכן הטרדה או דברי שטנה. במאמר סינון בטיחות לפי בקשה מוסבר איך מגדירים את ערכי הסף.

Python

from google.generativeai.types import HarmCategory, HarmBlockThreshold

model = genai.GenerativeModel(model_name='gemini-1.5-flash')
response = model.generate_content(
    ['Do these look store-bought or homemade?', img],
    safety_settings={
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    }
)

Go

model := client.GenerativeModel("gemini-1.5-flash")

model.SafetySettings = []*genai.SafetySetting{
  {
    Category:  genai.HarmCategoryHarassment,
    Threshold: genai.HarmBlockLowAndAbove,
  },
  {
    Category:  genai.HarmCategoryHateSpeech,
    Threshold: genai.HarmBlockLowAndAbove,
  },
}

Node.js

import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";

// ...

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
  },
  {
    category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
    threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
  },
];

const model = genAi.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings: safetySettings });

פיתוח אתרים

import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";

// ...

const safetySettings = [
  {
    category: HarmCategory.HARM_CATEGORY_HARASSMENT,
    threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
  },
  {
    category: HarmCategory.HARM_CATEGORY_HATE_SPEECH,
    threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
  },
];

const model = genAi.getGenerativeModel({ model: "gemini-1.5-flash", safetySettings });

Dart‏ (Flutter)

final safetySettings = [
  SafetySetting(HarmCategory.harassment, HarmBlockThreshold.low),
  SafetySetting(HarmCategory.hateSpeech, HarmBlockThreshold.low),
];
final model = GenerativeModel(
  model: 'gemini-1.5-flash',
  apiKey: apiKey,
  safetySettings: safetySettings,
);

Kotlin

val harassmentSafety = SafetySetting(HarmCategory.HARASSMENT, BlockThreshold.LOW_AND_ABOVE)

val hateSpeechSafety = SafetySetting(HarmCategory.HATE_SPEECH, BlockThreshold.LOW_AND_ABOVE)

val generativeModel = GenerativeModel(
    modelName = "gemini-1.5-flash",
    apiKey = BuildConfig.apiKey,
    safetySettings = listOf(harassmentSafety, hateSpeechSafety)
)

Java

SafetySetting harassmentSafety = new SafetySetting(HarmCategory.HARASSMENT,
    BlockThreshold.LOW_AND_ABOVE);

SafetySetting hateSpeechSafety = new SafetySetting(HarmCategory.HATE_SPEECH,
    BlockThreshold.LOW_AND_ABOVE);

GenerativeModel gm = new GenerativeModel(
    "gemini-1.5-flash",
    BuildConfig.apiKey,
    null, // generation config is optional
    Arrays.asList(harassmentSafety, hateSpeechSafety)
);

GenerativeModelFutures model = GenerativeModelFutures.from(gm);

REST

    echo '{
    "safetySettings": [
        {"category": "HARM_CATEGORY_HARASSMENT", "threshold": "BLOCK_ONLY_HIGH"},
        {"category": "HARM_CATEGORY_HATE_SPEECH", "threshold": "BLOCK_MEDIUM_AND_ABOVE"}
    ],
    "contents": [{
        "parts":[{
            "text": "'I support Martians Soccer Club and I think Jupiterians Football Club sucks! Write a ironic phrase about them.'"}]}]}' > request.json

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-1.5-flash:generateContent?key=$GOOGLE_API_KEY" \
    -H 'Content-Type: application/json' \
    -X POST \
    -d @request.json 2> /dev/null

השלבים הבאים

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