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

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

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

מסנני בטיחות

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

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

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

בנוסף למסנני הבטיחות שניתנים להתאמה, 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 });

הטלת חיצים (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

השלבים הבאים