מסנני תוכן ואמצעי בטיחות

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

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

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

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

הנחיות לא בטוחות

‫Gemini API מספק אחד מהקודים הבאים של enum כדי להסביר למה נדחתה הנחיה:

ספירה סוג מסנן תיאור
PROHIBITED_CONTENT מסנן בטיחות שלא ניתן להגדרה ההנחיה נחסמה כי היא סומנה כהנחיה שמכילה תוכן אסור, בדרך כלל CSAM.
BLOCKED_REASON_UNSPECIFIED לא רלוונטי לא צוינה סיבה לחסימת ההנחיה.
OTHER לא רלוונטי ה-enum הזה מתייחס לכל הסיבות האחרות לחסימת הנחיה. שימו לב ש-Gemini API לא תומך בכל השפות. כאן אפשר לעיין ברשימת השפות הנתמכות ב-Gemini.

מידע נוסף זמין במאמר בנושא BlockedReasonמאמרי העזרה של ה-API.

הדוגמאות הבאות מציגות פלט של Gemini API למשוב על הנחיות. אם הנחיה נחסמת, promptFeedback מכיל blockReason. אם לא חוסמים הנחיה, promptFeedback ריק, כמו בדוגמה הבאה:

{
  "promptFeedback": {
  },
  "usageMetadata": {
    "promptTokenCount": 7,
    "totalTokenCount": 7
  }
}

בדוגמה הבאה מוצגת הנחיה שנחסמה כי היא מכילה PROHIBITED_CONTENT:

{
  "promptFeedback": {
    "blockReason": "PROHIBITED_CONTENT"
  },
  "usageMetadata": {
    "promptTokenCount": 7,
    "totalTokenCount": 7
  }
}

בדוגמה הבאה מוצגת הנחיה שנחסמה מסיבה לא מוגדרת:

{
  "promptFeedback": {
    "blockReason": "BLOCKED_REASON_UNSPECIFIED"
  },
  "usageMetadata": {
    "promptTokenCount": 7,
    "totalTokenCount": 7
  }
}

תשובות לא בטוחות

המסננים הבאים יכולים לזהות ולחסום תשובות שעלולות להיות לא בטוחות:

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

מודל שפה גדול (LLM) יוצר תשובות ביחידות של טקסט שנקראות טוקנים. מודל מפסיק ליצור טוקנים כי הוא מגיע לנקודת עצירה טבעית או כי אחד מהמסננים חוסם את התשובה. ‫Gemini API מספק אחד מקודי enum הבאים כדי להסביר למה יצירת הטוקנים נעצרה:

ספירה סוג מסנן תיאור
STOP לא רלוונטי ה-enum הזה מציין שהמודל הגיע לנקודת עצירה טבעית או לרצף העצירה שסופק.
MAX_TOKENS לא רלוונטי יצירת האסימון הופסקה כי המודל הגיע למספר המקסימלי של האסימונים שצוין בבקשה.
SAFETY מסנן תוכן שניתן להגדרה יצירת הטוקנים הופסקה כי התשובה סומנה כתוכן פוגעני.
RECITATION מסנן ציטוטים יצירת הטוקן הופסקה בגלל אפשרות להקראה.
SPII מסנן בטיחות שלא ניתן להגדרה יצירת האסימון הופסקה כי התגובה סומנה כתוכן שכולל מידע אישי רגיש (SPII).
PROHIBITED_CONTENT מסנן בטיחות שלא ניתן להגדרה יצירת האסימון הופסקה כי התשובה סומנה ככזו שמכילה תוכן אסור, בדרך כלל CSAM.
FINISH_REASON_UNSPECIFIED לא רלוונטי לא צוינה סיבת הסיום.
OTHER לא רלוונטי ה-enum הזה מתייחס לכל הסיבות האחרות להפסקת יצירת הטוקן. חשוב לזכור שלא כל השפות נתמכות ביצירת טוקנים. כאן אפשר לעיין ברשימת השפות הנתמכות ב-Gemini.

מידע נוסף זמין במאמר בנושא FinishReasonמאמרי העזרה של ה-API.

אם מסנן חוסם את התשובה, הוא מוחק את השדה Candidate.contentשל התשובה. המשוב לא מועבר למודל.

מסנני תוכן שאפשר להגדיר

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

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

קטגוריות של נזק

מסנני התוכן מעריכים את התוכן על סמך קטגוריות הנזק הבאות:

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

השוואה בין ציוני הסתברות וציוני חומרה

ציון הבטיחות probability משקף את הסבירות שתשובת המודל קשורה לנזק הרלוונטי. לכל תגית יש ציון אמינות משויך בין 0.0 ל-1.0, מעוגל לספרה עשרונית אחת. ציון המהימנות מחולק לארבע רמות מהימנות: NEGLIGIBLE,‏ LOW,‏ MEDIUM ו-HIGH.

הציון של חומרת התשובה משקף את מידת הנזק הפוטנציאלי של תשובת המודל. לכל בעיה משויך ציון חומרה שנע בין 0.0 ל-1.0, מעוגל לספרה עשרונית אחת. ניקוד החומרה מחולק לארבע רמות: NEGLIGIBLE,‏ LOW,‏ MEDIUM ו-HIGH.

יכול להיות שלתוכן יהיה ציון הסתברות נמוך וציון חומרה גבוה, או ציון הסתברות גבוה וציון חומרה נמוך.

אפשרויות ההגדרה של מסנן התוכן

אפשר להשתמש ב-Gemini API או במסוף Google Cloud כדי להגדיר מסנני תוכן.

‏Gemini API

‫Gemini API מספק שתי שיטות לחסימת תוכן פוגעני:

  • SEVERITY: השיטה הזו משתמשת גם בהסתברות וגם בציוני חומרה.
  • PROBABILITY: בשיטה הזו נעשה שימוש רק בציון ההסתברות.

שיטת ברירת המחדל היא SEVERITY.

‫Gemini API מספק את ספי החסימה הבאים של תוכן מזיק:

  • ‫BLOCK_LOW_AND_ABOVE: חסימה כשהציון של הסבירות או של חומרת האיום הוא LOW, MEDIUM או HIGH.
  • ‫BLOCK_MEDIUM_AND_ABOVE: חסימה כשציון ההסתברות או ציון החומרה הוא MEDIUM או HIGH.
  • ‫BLOCK_ONLY_HIGH: חסימה כשהציון הסתברותי או ציון החומרה הוא HIGH.
  • ‫HARM_BLOCK_THRESHOLD_UNSPECIFIED: חסימה באמצעות ערך הסף שמוגדר כברירת מחדל.
  • ‫OFF: אין חסימה אוטומטית של תגובות ולא מוחזרים מטא-נתונים. במודל gemini-3.5-flash ובמודלים הבאים, ערך ברירת המחדל הוא OFF.
  • ‫BLOCK_NONE: ההגדרה BLOCK_NONE מסירה את החסימה של תגובות אוטומטיות. במקום זאת, אתם יכולים להגדיר הנחיות משלכם לגבי התוכן בעזרת הניקוד שמתקבל.

לדוגמה, קוד Python הבא מראה איך אפשר להגדיר את סף החסימה של תוכן מזיק ל-BLOCK_ONLY_HIGH עבור קטגוריית התוכן המסוכן:

generative_models.SafetySetting(
  category=generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
  threshold=generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
),

כך ייחסם רוב התוכן שמסווג כתוכן מסוכן. מידע נוסף זמין במאמר HarmBlockThreshold מאמרי העזרה של ה-API.

דוגמאות מקצה לקצה ב-Python,‏ Node.js,‏ Java,‏ Go,‏ C# ו-REST מופיעות במאמר דוגמאות להגדרת מסנן תוכן.

מסוף Google Cloud

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

במסוף Google Cloud מוצגים ערכי הסף הבאים:

  • מושבתת (ברירת מחדל): לא מתבצעת חסימה אוטומטית של תשובות.
  • חסימה של חלק מההודעות: חסימה כשהציון של הסבירות הוא HIGH.
  • חסימה של חלק מההודעות: חסימה כשהציון של הסבירות הוא MEDIUM או HIGH.
  • חסימה של רוב ההודעות: חסימה כשהציון של הסבירות הוא LOW, MEDIUM או HIGH.

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

כדי להגדיר את ערכי הסף, פועלים לפי השלבים הבאים:

  1. בקטע Agent Platform במסוף Google Cloud , עוברים לדף Agent Studio.

    מעבר ל-Agent Studio

  2. בקטע יצירת הנחיה חדשה, לוחצים על אחד מהלחצנים כדי לפתוח את דף עיצוב ההנחיה.

  3. לוחצים על הגדרות הבטיחות.

    תיבת הדו-שיח הגדרות בטיחות תיפתח.

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

  5. לוחצים על Save.

פלט לדוגמה של תגובה חסומה

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

{
  "candidates": [{
    "finishReason": "SAFETY",
    "safetyRatings": [{
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.11027937,
      "severity": "HARM_SEVERITY_LOW",
      "severityScore": 0.28487435
    }, {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "probability": "HIGH",
      "blocked": true,
      "probabilityScore": 0.95422274,
      "severity": "HARM_SEVERITY_MEDIUM",
      "severityScore": 0.43398145
    }, {
      "category": "HARM_CATEGORY_HARASSMENT",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.11085559,
      "severity": "HARM_SEVERITY_NEGLIGIBLE",
      "severityScore": 0.19027223
    }, {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "probability": "NEGLIGIBLE",
      "probabilityScore": 0.22901751,
      "severity": "HARM_SEVERITY_NEGLIGIBLE",
      "severityScore": 0.09089675
    }]
  }],
  "usageMetadata": {
    "promptTokenCount": 38,
    "totalTokenCount": 38
  }
}

הטמעה של הגדרות מסנן תוכן

בדוגמאות הבאות מוסבר איך להגדיר את מסנן התוכן באמצעות Gemini API:

Python

התקנה

pip install --upgrade google-genai

מידע נוסף מופיע ב מאמרי העזרה בנושא SDK.

מגדירים משתני סביבה כדי להשתמש ב-Google Gen AI SDK עם Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

from google import genai
from google.genai.types import (
    GenerateContentConfig,
    HarmBlockThreshold,
    HarmCategory,
    HttpOptions,
    SafetySetting,
)

client = genai.Client(http_options=HttpOptions(api_version="v1"))

system_instruction = "Be as mean as possible."

prompt = """
    Write a list of 5 disrespectful things that I might say to the universe after stubbing my toe in the dark.
"""

safety_settings = [
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HARASSMENT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_HATE_SPEECH,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
    SafetySetting(
        category=HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT,
        threshold=HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
    ),
]

response = client.models.generate_content(
    model="gemini-3.5-flash",
    contents=prompt,
    config=GenerateContentConfig(
        system_instruction=system_instruction,
        safety_settings=safety_settings,
    ),
)

# Response will be `None` if it is blocked.
print(response.text)
# Example response:
#     None

# Finish Reason will be `SAFETY` if it is blocked.
print(response.candidates[0].finish_reason)
# Example response:
#     FinishReason.SAFETY

# For details on all the fields in the response
for each in response.candidates[0].safety_ratings:
    print('\nCategory: ', str(each.category))
    print('Is Blocked:', True if each.blocked else False)
    print('Probability: ', each.probability)
    print('Probability Score: ', each.probability_score)
    print('Severity:', each.severity)
    print('Severity Score:', each.severity_score)
# Example response:
#
#     Category:  HarmCategory.HARM_CATEGORY_HATE_SPEECH
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  2.547714e-05
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None
#
#     Category:  HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  3.6103818e-06
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None
#
#     Category:  HarmCategory.HARM_CATEGORY_HARASSMENT
#     Is Blocked: True
#     Probability:  HarmProbability.MEDIUM
#     Probability Score:  0.71599233
#     Severity: HarmSeverity.HARM_SEVERITY_MEDIUM
#     Severity Score: 0.30782545
#
#     Category:  HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT
#     Is Blocked: False
#     Probability:  HarmProbability.NEGLIGIBLE
#     Probability Score:  1.5624657e-05
#     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
#     Severity Score: None

Go

כך מתקינים או מעדכנים את Go.

מידע נוסף מופיע ב מאמרי העזרה בנושא SDK.

מגדירים משתני סביבה כדי להשתמש ב-Google Gen AI SDK עם Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

import (
	"context"
	"fmt"
	"io"

	"google.golang.org/genai"
)

// generateTextWithSafety shows how to apply safety settings to a text generation request.
func generateTextWithSafety(w io.Writer) error {
	ctx := context.Background()

	client, err := genai.NewClient(ctx, &genai.ClientConfig{
		HTTPOptions: genai.HTTPOptions{APIVersion: "v1"},
	})
	if err != nil {
		return fmt.Errorf("failed to create genai client: %w", err)
	}

	systemInstruction := &genai.Content{
		Parts: []*genai.Part{
			{Text: "Be as mean as possible."},
		},
		Role: genai.RoleUser,
	}

	prompt := "Write a list of 5 disrespectful things that I might say to the universe after stubbing my toe in the dark."

	safetySettings := []*genai.SafetySetting{
		{Category: genai.HarmCategoryDangerousContent, Threshold: genai.HarmBlockThresholdBlockLowAndAbove},
		{Category: genai.HarmCategoryHarassment, Threshold: genai.HarmBlockThresholdBlockLowAndAbove},
		{Category: genai.HarmCategoryHateSpeech, Threshold: genai.HarmBlockThresholdBlockLowAndAbove},
		{Category: genai.HarmCategorySexuallyExplicit, Threshold: genai.HarmBlockThresholdBlockLowAndAbove},
	}

	config := &genai.GenerateContentConfig{
		SystemInstruction: systemInstruction,
		SafetySettings:    safetySettings,
	}
	modelName := "gemini-2.5-flash"
	resp, err := client.Models.GenerateContent(ctx, modelName,
		[]*genai.Content{{Parts: []*genai.Part{{Text: prompt}}, Role: genai.RoleUser}},
		config,
	)
	if err != nil {
		return fmt.Errorf("failed to generate content: %w", err)
	}

	fmt.Fprintln(w, resp.Text())

	if len(resp.Candidates) > 0 {
		fmt.Fprintln(w, "Finish Reason:", resp.Candidates[0].FinishReason)

		for _, rating := range resp.Candidates[0].SafetyRatings {
			fmt.Fprintf(w, "\nCategory: %v\nIs Blocked: %v\nProbability: %v\nProbability Score: %v\nSeverity: %v\nSeverity Score: %v\n",
				rating.Category,
				rating.Blocked,
				rating.Probability,
				rating.ProbabilityScore,
				rating.Severity,
				rating.SeverityScore,
			)
		}
	}

	// Example response:
	// Category: HARM_CATEGORY_HATE_SPEECH
	// Is Blocked: false
	// Probability: NEGLIGIBLE
	// Probability Score: 8.996795e-06
	// Severity: HARM_SEVERITY_NEGLIGIBLE
	// Severity Score: 0.04771039
	//
	// Category: HARM_CATEGORY_DANGEROUS_CONTENT
	// Is Blocked: false
	// Probability: NEGLIGIBLE
	// Probability Score: 2.2431707e-06
	// Severity: HARM_SEVERITY_NEGLIGIBLE
	// Severity Score: 0
	//
	// Category: HARM_CATEGORY_HARASSMENT
	// Is Blocked: false
	// Probability: NEGLIGIBLE
	// Probability Score: 0.00026123362
	// Severity: HARM_SEVERITY_NEGLIGIBLE
	// Severity Score: 0.022358216
	//
	// Category: HARM_CATEGORY_SEXUALLY_EXPLICIT
	// Is Blocked: false
	// Probability: NEGLIGIBLE
	// Probability Score: 6.1352006e-07
	// Severity: HARM_SEVERITY_NEGLIGIBLE
	// Severity Score: 0.020111412

	return nil
}

REST

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫LOCATION: האזור שבו הבקשה תעובד.
  • ‫PROJECT_ID: מזהה הפרויקט. .
  • ‫MODEL_ID: מזהה המודל של המודל הרב-אופני שרוצים להשתמש בו, כמו gemini-3.5-flash.
  • ‫ROLE: התפקיד בשיחה שמשויך לתוכן. חובה לציין תפקיד גם בתרחישי שימוש בפרומפט אחד. הערכים הקבילים כוללים את האפשרויות הבאות:
    • ‫USER: מציין תוכן שנשלח על ידכם.
    • ‫MODEL: מציין את התשובה של המודל.
  • ‫TEXT: הוראות הטקסט שרוצים לכלול בהנחיה.
  • SAFETY_CATEGORY: קטגוריית הבטיחות שרוצים להגדיר לה ערך סף. הערכים הקבילים כוללים את האפשרויות הבאות:

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

    • HARM_CATEGORY_SEXUALLY_EXPLICIT
    • HARM_CATEGORY_HATE_SPEECH
    • HARM_CATEGORY_HARASSMENT
    • HARM_CATEGORY_DANGEROUS_CONTENT
  • ‫THRESHOLD: ערך הסף לחסימת תשובות שיכולות להשתייך לקטגוריית הבטיחות שצוינה, על סמך הסתברות. הערכים הקבילים כוללים את האפשרויות הבאות:

    לוחצים כדי להרחיב את ספי החסימה

    • BLOCK_NONE
    • BLOCK_ONLY_HIGH
    • BLOCK_MEDIUM_AND_ABOVE (ברירת מחדל)
    • BLOCK_LOW_AND_ABOVE
    האפליקציה BLOCK_LOW_AND_ABOVE חוסמת הכי הרבה, והאפליקציה BLOCK_ONLY_HIGH חוסמת הכי מעט.

ה-method של ה-HTTP וכתובת ה-URL:

POST https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent

גוף בקשת JSON:

{
  "contents": {
    "role": "ROLE",
    "parts": { "text": "TEXT" }
  },
  "safetySettings": {
    "category": "SAFETY_CATEGORY",
    "threshold": "THRESHOLD"
  },
}

כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

curl

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent"

PowerShell

שומרים את גוף הבקשה בקובץ בשם request.json ומריצים את הפקודה הבאה:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/publishers/google/models/MODEL_ID:streamGenerateContent" | Select-Object -Expand Content

אתם אמורים לקבל תגובת JSON שדומה לזו:

דוגמה לפקודת curl

LOCATION="us-central1"
MODEL_ID="gemini-3.5-flash"
PROJECT_ID="test-project"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/publishers/google/models/${MODEL_ID}:streamGenerateContent -d \
$'{
  "contents": {
    "role": "user",
    "parts": { "text": "Hello!" }
  },
  "safety_settings": [
    {
      "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
      "threshold": "OFF"
    },
    {
      "category": "HARM_CATEGORY_HATE_SPEECH",
      "threshold": "BLOCK_LOW_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_HARASSMENT",
      "threshold": "BLOCK_MEDIUM_AND_ABOVE"
    },
    {
      "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
      "threshold": "BLOCK_ONLY_HIGH"
    }
  ]
}'

Node.js

התקנה

npm install @google/genai

מידע נוסף מופיע ב מאמרי העזרה בנושא SDK.

מגדירים משתני סביבה כדי להשתמש ב-Google Gen AI SDK עם Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True

const {GoogleGenAI} = require('@google/genai');

const GOOGLE_CLOUD_PROJECT = process.env.GOOGLE_CLOUD_PROJECT;
const GOOGLE_CLOUD_LOCATION = process.env.GOOGLE_CLOUD_LOCATION || 'global';

async function generateWithSafetySettings(
  projectId = GOOGLE_CLOUD_PROJECT,
  location = GOOGLE_CLOUD_LOCATION
) {
  const client = new GoogleGenAI({
    vertexai: true,
    project: projectId,
    location: location,
  });

  const systemInstruction = 'Be as mean as possible.';

  const prompt =
    'Write a list of 5 disrespectful things that I might say to the universe after stubbing my toe in the dark.';

  const safetySettings = [
    {
      category: 'HARM_CATEGORY_DANGEROUS_CONTENT',
      threshold: 'BLOCK_LOW_AND_ABOVE',
    },
    {
      category: 'HARM_CATEGORY_HARASSMENT',
      threshold: 'BLOCK_LOW_AND_ABOVE',
    },
    {
      category: 'HARM_CATEGORY_HATE_SPEECH',
      threshold: 'BLOCK_LOW_AND_ABOVE',
    },
    {
      category: 'HARM_CATEGORY_SEXUALLY_EXPLICIT',
      threshold: 'BLOCK_LOW_AND_ABOVE',
    },
  ];

  const response = await client.models.generateContent({
    model: 'gemini-2.5-flash',
    contents: prompt,
    config: {
      systemInstruction: systemInstruction,
      safetySettings: safetySettings,
    },
  });

  // console.log(response.text);
  // console.log(response.candidates[0].finishMessage);
  //
  // for (const each of response.candidates[0].safetyRatings) {
  //   console.log('\nCategory:', String(each.category));
  //   console.log('Is Blocked:', each.blocked);
  //   console.log('Probability:', each.probability);
  //   console.log('Probability Score:', each.probabilityScore);
  //   console.log('Severity:', each.severity);
  //   console.log('Severity Score:', each.severityScore);
  // }

  // Example response:
  //
  //     Category:  HarmCategory.HARM_CATEGORY_HATE_SPEECH
  //     Is Blocked: False
  //     Probability:  HarmProbability.NEGLIGIBLE
  //     Probability Score:  2.547714e-05
  //     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
  //     Severity Score: None
  //
  //     Category:  HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT
  //     Is Blocked: False
  //     Probability:  HarmProbability.NEGLIGIBLE
  //     Probability Score:  3.6103818e-06
  //     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
  //     Severity Score: None
  //
  //     Category:  HarmCategory.HARM_CATEGORY_HARASSMENT
  //     Is Blocked: True
  //     Probability:  HarmProbability.MEDIUM
  //     Probability Score:  0.71599233
  //     Severity: HarmSeverity.HARM_SEVERITY_MEDIUM
  //     Severity Score: 0.30782545
  //
  //     Category:  HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT
  //     Is Blocked: False
  //     Probability:  HarmProbability.NEGLIGIBLE
  //     Probability Score:  1.5624657e-05
  //     Severity: HarmSeverity.HARM_SEVERITY_NEGLIGIBLE
  //     Severity Score: None

  return response;
}

Java

כך מתקינים או מעדכנים את Java.

מידע נוסף מופיע ב מאמרי העזרה בנושא SDK.

מגדירים משתני סביבה כדי להשתמש ב-Google Gen AI SDK עם Vertex AI:

# Replace the `GOOGLE_CLOUD_PROJECT` and `GOOGLE_CLOUD_LOCATION` values
# with appropriate values for your project.
export GOOGLE_CLOUD_PROJECT=GOOGLE_CLOUD_PROJECT
export GOOGLE_CLOUD_LOCATION=global
export GOOGLE_GENAI_USE_ENTERPRISE=True


import com.google.genai.Client;
import com.google.genai.types.Candidate;
import com.google.genai.types.Content;
import com.google.genai.types.GenerateContentConfig;
import com.google.genai.types.GenerateContentResponse;
import com.google.genai.types.HarmBlockThreshold;
import com.google.genai.types.HarmCategory;
import com.google.genai.types.HttpOptions;
import com.google.genai.types.Part;
import com.google.genai.types.SafetySetting;
import java.util.List;
import java.util.stream.Collectors;

public class SafetyWithTxt {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String modelId = "gemini-2.5-flash";
    generateContent(modelId);
  }

  // Shows how to generate content with safety settings.
  public static GenerateContentResponse generateContent(String modelId) {
    // Client Initialization. Once created, it can be reused for multiple requests.
    try (Client client =
        Client.builder()
            .location("global")
            .vertexAI(true)
            .httpOptions(HttpOptions.builder().apiVersion("v1").build())
            .build()) {

      String systemInstruction = "Be as mean as possible.";

      String prompt =
          "Write a list of 5 disrespectful things that I might say"
              + " to the universe after stubbing my toe in the dark.";

      // Set safety settings.
      List.Known> categoriesToBlock =
          List.of(
              HarmCategory.Known.HARM_CATEGORY_DANGEROUS_CONTENT,
              HarmCategory.Known.HARM_CATEGORY_HARASSMENT,
              HarmCategory.Known.HARM_CATEGORY_HATE_SPEECH,
              HarmCategory.Known.HARM_CATEGORY_SEXUALLY_EXPLICIT);

      List safetySettings =
          categoriesToBlock.stream()
              .map(
                  category ->
                      SafetySetting.builder()
                          .category(category)
                          .threshold(HarmBlockThreshold.Known.BLOCK_LOW_AND_ABOVE)
                          .build())
                  .collect(Collectors.toList());

      GenerateContentResponse response =
          client.models.generateContent(
              modelId,
              prompt,
              GenerateContentConfig.builder()
                  .systemInstruction(Content.fromParts(Part.fromText(systemInstruction)))
                  .safetySettings(safetySettings)
                  .build());

      // Get response candidate.
      Candidate candidate =
          response
              .candidates()
              .flatMap(candidates -> candidates.stream().findFirst())
              .orElseThrow(
                  () -> new IllegalStateException("No response candidate generated by the model."));

      // Finish Reason will be `SAFETY` if it is blocked.
      System.out.println(candidate.finishReason());
      // Example response:
      // Optional[SAFETY]

      // For details on all the fields in the response.
      candidate
          .safetyRatings()
          .ifPresent(
              safetyRatings ->
                  safetyRatings.forEach(
                      safetyRating -> {
                        System.out.println("\nCategory: " + safetyRating.category());
                        System.out.println("Is Blocked: " + safetyRating.blocked());
                        System.out.println("Probability: " + safetyRating.probability());
                        System.out.println("Probability Score: " + safetyRating.probabilityScore());
                        System.out.println("Severity: " + safetyRating.severity());
                        System.out.println("Severity Score: " + safetyRating.severityScore());
                      }));
      // Example response:
      // Category: Optional[HARM_CATEGORY_HATE_SPEECH]
      // Is Blocked: Optional.empty
      // Probability: Optional[NEGLIGIBLE]
      // Probability Score: Optional[1.9967922E-5]
      // Severity: Optional[HARM_SEVERITY_NEGLIGIBLE]
      // Severity Score: Optional[0.05732864]
      //
      // Category: Optional[HARM_CATEGORY_DANGEROUS_CONTENT]
      // Is Blocked: Optional.empty
      // Probability: Optional[NEGLIGIBLE]
      // Probability Score: Optional[2.9124324E-6]
      // Severity: Optional[HARM_SEVERITY_NEGLIGIBLE]
      // Severity Score: Optional[0.04544826]
      //
      // Category: Optional[HARM_CATEGORY_HARASSMENT]
      // Is Blocked: Optional[true]
      // Probability: Optional[MEDIUM]
      // Probability Score: Optional[0.4593908]
      // Severity: Optional[HARM_SEVERITY_MEDIUM]
      // Severity Score: Optional[0.22082388]
      //
      // Category: Optional[HARM_CATEGORY_SEXUALLY_EXPLICIT]
      // Is Blocked: Optional.empty
      // Probability: Optional[NEGLIGIBLE]
      // Probability Score: Optional[6.453211E-8]
      // Severity: Optional[HARM_SEVERITY_NEGLIGIBLE]
      // Severity Score: Optional[0.023201048]
      return response;
    }
  }
}

מסווג Jailbreak

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

  • BLOCK_NONE
  • BLOCK_LOW_AND_ABOVE
  • BLOCK_MEDIUM_AND_ABOVE
  • BLOCK_ONLY_HIGH

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

generative_models.SafetySetting(
    category=generative_models.HarmCategory.HARM_CATEGORY_JAILBREAK,
    threshold=generative_models.HarmBlockThreshold.BLOCK_ONLY_HIGH,
)

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

{
  prompt_feedback: {
    block_reason: JAILBREAK
    safety_ratings: [
      {
        category: HARM_CATEGORY_JAILBREAK
        blocked: true
        severity: HARM_SEVERITY_MEDIUM
        severity_score: 0.76953125
      }
    ]
  }
}

אם מגדירים את HarmBlockMethod ל-PROBABILITY, אז safety_ratings מכיל את probability ואת probability_score במקום severity ו-severity_score. אם ההנחיה לא נחסמת או מסומנת, המודל עדיין יחזיר דירוגי בטיחות בהתאם לHarmBlockMethod.

חיוב

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

מסנן ציטוטים

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

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

למידע על המטא-נתונים של מסנן הציטוטים, אפשר לעיין במאמרי העזרה של ה-API של Citation.

שיטות מומלצות

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

המאמרים הבאים