सुरक्षा सेटिंग को समझना और उन्हें कॉन्फ़िगर करना

Gemini के मॉडल, सुरक्षा को ध्यान में रखकर बनाए गए हैं. हालांकि, ये अब भी नुकसान पहुंचाने वाले जवाब जनरेट कर सकते हैं. ख़ास तौर पर, जब इन्हें साफ़ तौर पर प्रॉम्प्ट दिया जाए. सुरक्षा को और बेहतर बनाने और गलत इस्तेमाल को कम करने के लिए, सुरक्षा फ़िल्टर कॉन्फ़िगर किए जा सकते हैं. इससे नुकसान पहुंचाने वाले जवाबों को ब्लॉक किया जा सकता है.

सुरक्षा के दो लेयर उपलब्ध कराए जाते हैं:

  • पहले से मौजूद मुख्य सुरक्षा सुविधाएं:

    • सभी Gemini मॉडल में, गंभीर नुकसान (जैसे, बच्चों का शोषण, साइबर हमले, और खतरनाक हथियार) से बचाने के लिए पहले से मौजूद सुरक्षा सुविधाएं होती हैं.
    • ये सुरक्षा सुविधाएं हमेशा चालू रहती हैं और सभी प्रॉम्प्ट और जवाबों पर अपने-आप लागू होती हैं. इन्हें बदला या बंद नहीं किया जा सकता.
  • कॉन्फ़िगर किए जा सकने वाले सेफ़्टी फ़िल्टर:

    • Gemini API, कॉन्फ़िगर किए जा सकने वाले अतिरिक्त सेफ़्टी फ़िल्टर उपलब्ध कराता है. इन्हें ऐप्लिकेशन में सुरक्षा सेटिंग का इस्तेमाल करके तय किया जाता है.
    • इन सेटिंग की मदद से, कॉन्टेंट को ब्लॉक करने के लिए थ्रेशोल्ड को कंट्रोल किया जा सकता है. यह थ्रेशोल्ड, नुकसान पहुंचाने वाले कॉन्टेंट की चार मुख्य कैटगरी के लिए सेट किया जा सकता है: उत्पीड़न, नफ़रत फैलाने वाली भाषा, साफ़ तौर पर सेक्शुअल ऐक्ट दिखाने वाला कॉन्टेंट, और खतरनाक कॉन्टेंट.

कोड सैंपल पर जाएं

सुरक्षा से जुड़े अहम सिद्धांत

Gemini मॉडल के लिए सुरक्षा से जुड़ी सुविधाओं का इस्तेमाल करते समय, इन अहम बातों को समझना ज़रूरी है:

  • सुरक्षा सेटिंग: आपके ऐप्लिकेशन के कोड में तय किया गया कॉन्फ़िगरेशन, जिससे यह पता चलता है कि नुकसान पहुंचाने वाली किन कैटगरी पर नज़र रखनी है और किस थ्रेशोल्ड पर कॉन्टेंट को ब्लॉक करना है.

  • सुरक्षा फ़िल्टर: सर्वर-साइड क्लासिफ़ायर, जो Google के सुरक्षा डाइमेंशन के हिसाब से प्रॉम्प्ट और मॉडल के जवाबों का आकलन करते हैं. फ़िल्टर, कॉन्फ़िगर की गई सुरक्षा सेटिंग के आधार पर कॉन्टेंट को ब्लॉक करते हैं.

  • सुरक्षा रेटिंग: रिस्पॉन्स ऑब्जेक्ट में, मॉडल से मिला आकलन का मेटाडेटा. रेटिंग से, नुकसान पहुंचाने वाली हर कैटगरी के लिए, संभावित नुकसान की संभावना और गंभीरता का पता चलता है.

इस्तेमाल किए जा सकने वाले मॉडल

  • gemini-4-argon
  • gemini-3.8-flash (और पुराने gemini-3.7-flash, gemini-3.6-flash, और gemini-3.5-flash)
  • gemini-3.5-flash-lite (और gemini-3.1-flash-lite का पुराना वर्शन)
  • gemini-nano-banana-2.1 (Nano Banana 2.1)
  • gemini-3.1-flash-image (Nano Banana 2)
  • gemini-3.1-flash-lite-image (Nano Banana 2 Lite)
  • gemini-3-pro-image (Nano Banana Pro)

gemini-3.1-pro-preview मॉडल के साथ-साथ, सामान्य इस्तेमाल और इमेज जनरेट करने वाले Gemini 2.5 मॉडल (जो अब काम नहीं करते) भी इस सुविधा के साथ काम करते हैं.



अपने ऐप्लिकेशन में सुरक्षा सेटिंग कॉन्फ़िगर करना

इस पेज पर, सेवा देने वाली कंपनी के हिसाब से कॉन्टेंट और कोड देखने के लिए, Gemini API सेवा देने वाली कंपनी पर क्लिक करें.

GenerativeModel इंस्टेंस को शुरू करने के दौरान, सुरक्षा सेटिंग कॉन्फ़िगर की जाती हैं. कॉन्फ़िगरेशन को उस मॉडल इंस्टेंस के लाइफ़टाइम के लिए बनाए रखा जाता है.

इस पेज पर, उपलब्ध नुकसान पहुंचाने वाले कॉन्टेंट की कैटगरी और हर कैटगरी के लिए सेट किए जा सकने वाले थ्रेशोल्ड के बारे में जानें.

Swift

GenerativeModel इंस्टेंस बनाते समय, SafetySetting को कॉन्फ़िगर करें:


import FirebaseAILogic

let safetySettings = [
  SafetySetting(harmCategory: .harassment, threshold: .blockOnlyHigh),
  SafetySetting(harmCategory: .hateSpeech, threshold: .blockMediumAndAbove)
]

// Specify the safety settings as part of creating the `GenerativeModel` instance.
let model = FirebaseAI.firebaseAI(backend: .googleAI()).generativeModel(
  modelName: "GEMINI_MODEL_NAME",
  safetySettings: safetySettings
)

// ...

Kotlin

GenerativeModel इंस्टेंस बनाते समय, SafetySetting को कॉन्फ़िगर करें:


// ...

val safetySettings = listOf(
    SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.ONLY_HIGH),
    SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.MEDIUM_AND_ABOVE)
)

// Specify the safety settings as part of creating the `GenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
    modelName = "GEMINI_MODEL_NAME",
    safetySettings = safetySettings
)

// ...

Java

GenerativeModel इंस्टेंस बनाते समय, SafetySetting को कॉन्फ़िगर करें:


// ...

List safetySettings = List.of(
    new SafetySetting(HarmCategory.HARASSMENT, HarmBlockThreshold.ONLY_HIGH),
    new SafetySetting(HarmCategory.HATE_SPEECH, HarmBlockThreshold.MEDIUM_AND_ABOVE)
);

// Specify the safety settings as part of creating the `GenerativeModel` instance.
GenerativeModelFutures model = GenerativeModelFutures.from(
    FirebaseAI.getInstance(GenerativeBackend.googleAI())
        .generativeModel(
            /* modelName */ "GEMINI_MODEL_NAME",
            /* generationConfig is optional */ null,
            safetySettings
        )
);

// ...

Web

GenerativeModel इंस्टेंस बनाते समय, SafetySetting को कॉन्फ़िगर करें:


import { HarmBlockThreshold, HarmCategory, getAI, getGenerativeModel, GoogleAIBackend } from "firebase/ai";

// ...

const ai = getAI(firebaseApp, { backend: new GoogleAIBackend() });

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

// Specify the safety settings as part of creating the `GenerativeModel` instance.
const model = getGenerativeModel(ai, {
  model: "GEMINI_MODEL_NAME",
  safetySettings,
});

// ...

Dart

GenerativeModel इंस्टेंस बनाते समय, SafetySetting को कॉन्फ़िगर करें:


import 'package:firebase_ai/firebase_ai.dart';

final safetySettings = [
  SafetySetting(HarmCategory.harassment, HarmBlockThreshold.high),
  SafetySetting(HarmCategory.hateSpeech, HarmBlockThreshold.medium),
];

// Specify the safety settings as part of creating the `GenerativeModel` instance.
final model = FirebaseAI.googleAI().generativeModel(
  model: 'GEMINI_MODEL_NAME',
  safetySettings: safetySettings,
);

// ...

Unity

GenerativeModel इंस्टेंस बनाते समय, SafetySetting को कॉन्फ़िगर करें:


// ...

var safetySettings = new SafetySetting[] {
  new SafetySetting(HarmCategory.Harassment, SafetySetting.HarmBlockThreshold.OnlyHigh),
  new SafetySetting(HarmCategory.HateSpeech, SafetySetting.HarmBlockThreshold.MediumAndAbove)
};

// Specify the safety settings as part of creating the `GenerativeModel` instance.
var ai = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
var model = ai.GetGenerativeModel(
  modelName: "GEMINI_MODEL_NAME",
  safetySettings: safetySettings
);

// ...



नुकसान पहुंचाने वाले कॉन्टेंट की उपलब्ध कैटगरी

सेफ़्टी फ़िल्टर, प्रॉम्प्ट और मॉडल के जवाबों का आकलन, कॉन्फ़िगर की जा सकने वाली नुकसान पहुंचाने वाली कैटगरी के आधार पर करते हैं:

नुकसान पहुंचाने वाले कॉन्टेंट की कैटगरी ब्यौरा
HARM_CATEGORY_HARASSMENT किसी व्यक्ति या उसकी पहचान को टारगेट करके की गई नकारात्मक, डराने-धमकाने वाली, परेशान करने वाली या अपमानजनक टिप्पणियां.
HARM_CATEGORY_HATE_SPEECH ऐसा कॉन्टेंट जो सुरक्षित ग्रुप या व्यक्ति पर हमला करता हो, उसे नीचा दिखाता हो, उसके ख़िलाफ़ नफ़रत को बढ़ावा देता हो या हिंसा भड़काता हो. सुरक्षित ग्रुप या व्यक्ति में, वे लोग शामिल हैं जिनकी पहचान नस्ल, जातीय मूल, धर्म, दिव्यांगता, उम्र, राष्ट्रीयता, पूर्व सैनिक होने, लिंग की पहचान या सेक्शुअल ओरिएंटेशन (यौन रुझान) के आधार पर की जाती है.
HARM_CATEGORY_SEXUALLY_EXPLICIT ऐसी टिप्पणी जिसमें यौन गतिविधियों, पॉर्नोग्राफ़ी या अश्लील और कामुक कॉन्टेंट का इस्तेमाल किया गया हो.
HARM_CATEGORY_DANGEROUS_CONTENT नुकसान पहुंचाने वाली गतिविधियों, गैर-कानूनी सामान और सेवाओं, हथियारों, खुद को नुकसान पहुंचाने या खतरनाक गतिविधियों को बढ़ावा दिया गया हो, उन्हें करने में मदद की गई हो, उन्हें करने के लिए उकसाया गया हो या उन्हें करने के तरीके के बारे में बताया गया हो.
HARM_CATEGORY_CIVIC_INTEGRITY ऐसा कॉन्टेंट जिसका इस्तेमाल मतदाताओं को गुमराह करने या नागरिक और चुनावी प्रक्रियाओं को कमज़ोर करने के लिए किया जा सकता है. (यह सुविधा चुनिंदा मॉडल और इलाकों में उपलब्ध है).

कॉन्फ़िगर न किए जा सकने वाले सेफ़्टी फ़िल्टर

कॉन्फ़िगर की जा सकने वाली कैटगरी के अलावा, सभी अनुरोध सिस्टम-लेवल के फ़िल्टर से गुज़रते हैं. इन फ़िल्टर में बदलाव नहीं किया जा सकता:

  • बच्चों का यौन शोषण दिखाने वाला कॉन्टेंट (सीएसएएम) / पाबंदी वाला कॉन्टेंट: पाबंदी वाले कॉन्टेंट के तौर पर फ़्लैग किए गए प्रॉम्प्ट या जवाबों को तुरंत ब्लॉक कर दिया जाता है (PROHIBITED_CONTENT).

  • व्यक्तिगत पहचान ज़ाहिर करने वाली संवेदनशील जानकारी (एसपीआईआई): ऐसे जवाब ब्लॉक कर दिए जाते हैं जिनसे व्यक्तिगत पहचान ज़ाहिर करने वाली संवेदनशील जानकारी (जैसे, वित्तीय खाते के नंबर या नैशनल आईडी) ज़ाहिर होने का खतरा हो (SPII).



थ्रेशोल्ड सेट करना

आपको अपने ऐप्लिकेशन में नुकसान पहुंचाने वाले कॉन्टेंट की जिस कैटगरी को कंट्रोल करना है उसके लिए, आपको एक थ्रेशोल्ड सेट करना होगा. अगर समीक्षा के बाद कॉन्टेंट उस थ्रेशोल्ड को पूरा करता है या उससे ज़्यादा होता है, तो कॉन्टेंट को ब्लॉक कर दिया जाता है.

सुरक्षा की जांच कैसे की जाती है: संभावना बनाम गंभीरता

सुरक्षा फ़िल्टर, कॉन्टेंट का आकलन दो अलग-अलग डाइमेंशन के आधार पर करते हैं:

  • संभावना: मॉडल को कितना भरोसा है कि कॉन्टेंट, नुकसान पहुंचाने वाली किसी कैटगरी में आता है.

  • गंभीरता: कॉन्टेंट से होने वाले नुकसान की गंभीरता या स्तर.

हर डाइमेंशन को इनमें से कोई एक लेवल असाइन किया जाता है: NEGLIGIBLE, LOW, MEDIUM या HIGH.

कॉन्टेंट में हल्की-फुल्की गाली-गलौज या अपमानजनक भाषा का इस्तेमाल ज़्यादा बार किया गया हो (जैसे, कॉमेडी के लिए हल्की-फुल्की गाली-गलौज या दोस्तों के बीच हंसी-मज़ाक़ में अपमानजनक भाषा का इस्तेमाल) या गंभीर गाली-गलौज या अपमानजनक भाषा का इस्तेमाल कम बार किया गया हो (जैसे, चिकित्सा या इतिहास से जुड़ी चर्चाओं में हिंसा का ज़िक्र).

नुकसान पहुंचाने वाले कॉन्टेंट को ब्लॉक करने के लिए उपलब्ध थ्रेशोल्ड

अपने ऐप्लिकेशन में नुकसान पहुंचाने वाले कॉन्टेंट की कैटगरी को कंट्रोल करने के लिए, इनमें से कोई भी थ्रेशोल्ड सेट किया जा सकता है:

थ्रेशोल्ड ब्यौरा अनुमति वाले लेवल
BLOCK_LOW_AND_ABOVE सबसे ज़्यादा पाबंदी.
कॉन्टेंट को तब ब्लॉक करता है, जब बुरे बर्ताव की संभावना (या गंभीरता) LOW, MEDIUM या HIGH हो.
सिर्फ़ NEGLIGIBLE की अनुमति देता है
BLOCK_MEDIUM_AND_ABOVE मध्यम स्तर की पाबंदी.
कॉन्टेंट को तब ब्लॉक करता है, जब बुरे बर्ताव की संभावना (या गंभीरता) MEDIUM या HIGH हो.
NEGLIGIBLE और LOW की अनुमति देता है
BLOCK_ONLY_HIGH सबसे कम पाबंदी वाला ऐक्टिव फ़िल्टर.
कॉन्टेंट को सिर्फ़ तब ब्लॉक करता है, जब बुरे बर्ताव की संभावना (या गंभीरता) HIGH हो.
NEGLIGIBLE, LOW, और MEDIUM को अनुमति देता है
BLOCK_NONE इस कैटगरी के लिए, अपने-आप जवाब देने की सुविधा बंद है. सुरक्षा रेटिंग का मेटाडेटा अब भी कैलकुलेट किया जाता है और जवाब के साथ दिखाया जाता है, ताकि आपका ऐप्लिकेशन कस्टम मॉडरेशन कर सके. हर रेटिंग वाला कॉन्टेंट दिखाने की अनुमति दें
OFF इस कैटगरी के लिए, सुरक्षा फ़िल्टर को पूरी तरह से बंद कर देता है. अपने-आप ब्लॉक होने की सुविधा काम नहीं करती और सुरक्षा रेटिंग का कोई मेटाडेटा नहीं दिखता. हर रेटिंग वाला कॉन्टेंट दिखाने की अनुमति दें



सुरक्षा रेटिंग की जांच करना और ब्लॉक किए गए कॉन्टेंट को मैनेज करना

अनुरोध के दौरान, कॉन्टेंट को दो चरणों में ब्लॉक किया जा सकता है:

  1. प्रॉम्प्ट ब्लॉक किया गया (PromptFeedback): मॉडल के कोई आउटपुट जनरेट करने से पहले, इनपुट प्रॉम्प्ट ने सुरक्षा फ़िल्टर का उल्लंघन किया. कोई जवाब नहीं मिला.

  2. जवाब का विकल्प ब्लॉक किया गया (finishReason == SAFETY): मॉडल ने जवाब के ऐसे विकल्प का आकलन किया या उसे जनरेट किया जो आपकी कॉन्फ़िगर की गई थ्रेशोल्ड से ज़्यादा था. जनरेट किए गए टेक्स्ट को मिटा दिया गया है या उसमें बदलाव किया गया है.

SafetyRating ऑब्जेक्ट

आकलन किए गए हर प्रॉम्प्ट या जवाब के कैंडिडेट में, SafetyRating ऑब्जेक्ट का एक कलेक्शन होता है. हर रेटिंग से यह जानकारी मिलती है:

  • Gemini Developer API और Agent Platform Gemini API (formerly Vertex AI), दोनों के साथ उपलब्ध प्रॉपर्टी:

    • category: आकलन किया गया HarmCategory.

    • probability: अलग-अलग रेटिंग (NEGLIGIBLE, LOW, MEDIUM या HIGH).

    • blocked: true अगर इस रेटिंग की वजह से कॉन्टेंट को ब्लॉक किया गया है.

  • Agent Platform Gemini API (formerly Vertex AI) के साथ उपलब्ध अन्य प्रॉपर्टी:

    • probabilityScore: 0.0 से 1.0 के बीच का फ़्लोटिंग-पॉइंट कॉन्फ़िडेंस स्कोर.

    • severity: समस्या की गंभीरता का लेवल (NEGLIGIBLE, LOW, MEDIUM या HIGH).

    • severityScore: 0.0 से 1.0 के बीच का फ़्लोटिंग-पॉइंट सीवियरिटी स्कोर.

SafetyRating ऑब्जेक्ट का उदाहरण

यहां दिए गए उदाहरण में, रॉ JSON रिस्पॉन्स पेलोड दिखाया गया है. ऐसा तब होता है, जब सुरक्षा फ़िल्टर की वजह से किसी कैंडिडेट को ब्लॉक किया जाता है:

{
  "candidates": [
    {
      "finishReason": "SAFETY",
      "safetyRatings": [
        {
          "category": "HARM_CATEGORY_HARASSMENT",
          "probability": "NEGLIGIBLE",
          "blocked": false
        },
        {
          "category": "HARM_CATEGORY_HATE_SPEECH",
          "probability": "NEGLIGIBLE",
          "blocked": false
        },
        {
          "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
          "probability": "NEGLIGIBLE",
          "blocked": false
        },
        {
          "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
          "probability": "HIGH",
          "blocked": true
        }
      ]
    }
  ],
  "usageMetadata": {
    "promptTokenCount": 24,
    "totalTokenCount": 24
  }
}

कोड में सुरक्षा से जुड़ी गड़बड़ियों का पता लगाना

कॉन्टेंट ब्लॉक होने पर, क्लाइंट एसडीके उसे अपवाद या गड़बड़ी के कोड के तौर पर दिखाते हैं, ताकि आपका ऐप्लिकेशन उसे आसानी से मैनेज कर सके.

Swift

GenerateContentError.promptBlocked या GenerateContentError.responseStoppedEarly को पकड़ने के लिए:

do {
  let response = try await model.generateContent("Your prompt here")
  print(response.text ?? "No text generated.")
} catch GenerateContentError.promptBlocked(let response) {
  // The input prompt was blocked
  if let feedback = response.promptFeedback {
    let reason = feedback.blockReason?.rawValue ?? "unknown"
    print("Prompt blocked for reason: \(reason)")
    for rating in feedback.safetyRatings {
      let cat = rating.category.rawValue
      let prob = rating.probability.rawValue
      print("Category: \(cat), probability: \(prob)")
    }
  }
} catch GenerateContentError.responseStoppedEarly(let reason, let response) {
  // Candidate response was blocked or stopped early
  if reason == .safety {
    print("Response blocked due to safety.")
    if let candidate = response.candidates.first {
      for rating in candidate.safetyRatings where rating.blocked {
        print("Blocked by category: \(rating.category.rawValue)")
      }
    }
  }
} catch {
  print("Unexpected error: \(error)")
}

Kotlin

PromptBlockedException को पकड़ा जा सकता है या candidate.finishReason की जांच की जा सकती है:

try {
  val response = model.generateContent("Your prompt here")
  val candidate = response.candidates.firstOrNull()

  if (candidate?.finishReason == FinishReason.SAFETY) {
    val blockedRating =
      candidate.safetyRatings.firstOrNull { it.blocked }
    println("Response blocked by category: ${blockedRating?.category}")
  } else {
    println(response.text)
  }
} catch (e: PromptBlockedException) {
  val reason = e.response?.promptFeedback?.blockReason
  println("Prompt was blocked: $reason")
} catch (e: Exception) {
  println("Error generating content: ${e.message}")
}

Java

PromptBlockedException को पकड़ा जा सकता है या candidate.getFinishReason() की जांच की जा सकती है:

try {
  GenerateContentResponse response = model.generateContent("Your prompt here").get();
  Candidate candidate = response.getCandidates().isEmpty() ? null : response.getCandidates().get(0);

  if (candidate != null && candidate.getFinishReason() == FinishReason.SAFETY) {
    SafetyRating blockedRating = null;
    for (SafetyRating rating : candidate.getSafetyRatings()) {
      if (Boolean.TRUE.equals(rating.getBlocked())) {
        blockedRating = rating;
        break;
      }
    }
    System.out.println("Response blocked by category: " +
        (blockedRating != null ? blockedRating.getCategory() : "unknown"));
  } else {
    System.out.println(response.getText());
  }
} catch (ExecutionException e) {
  if (e.getCause() instanceof PromptBlockedException) {
    PromptBlockedException pbe = (PromptBlockedException) e.getCause();
    GenerateContentResponse blockedResponse = pbe.getResponse();
    String reason = (blockedResponse != null && blockedResponse.getPromptFeedback() != null)
        ? String.valueOf(blockedResponse.getPromptFeedback().getBlockReason())
        : "unknown";
    System.out.println("Prompt was blocked: " + reason);
  } else {
    System.out.println("Error generating content: " + e.getMessage());
  }
} catch (InterruptedException e) {
  System.out.println("Generation was interrupted: " + e.getMessage());
}

Web

promptFeedback और candidate.finishReason की जांच की जा सकती है:

try {
  const response = await model.generateContent("Your prompt here");

  // Check if the prompt was blocked
  if (response.promptFeedback?.blockReason) {
    console.warn(`Prompt blocked: ${response.promptFeedback.blockReason}`);
    return;
  }

  const candidate = response.candidates?.[0];
  if (candidate?.finishReason === "SAFETY") {
    const blockedRating = candidate.safetyRatings?.find((r) => r.blocked);
    console.warn(`Response blocked by category: ${blockedRating?.category}`);
  } else {
    console.log(response.text);
  }
} catch (error) {
  console.error("Error generating content:", error);
}

Dart

promptFeedback और candidate.finishReason की जांच की जा सकती है:

try {
  final response = await model.generateContent([Content.text('Your prompt here')]);

  // Check if the prompt was blocked
  if (response.promptFeedback?.blockReason != null) {
    print('Prompt blocked: ${response.promptFeedback?.blockReason}');
    return;
  }

  final candidate = response.candidates.firstOrNull;
  if (candidate?.finishReason == FinishReason.safety) {
    final blockedRating =
        candidate?.safetyRatings?.where((r) => r.isBlocked == true).firstOrNull;
    print('Response blocked by category: ${blockedRating?.category.name}');
  } else {
    print(response.text);
  }
} catch (e) {
  print('Error generating content: $e');
}

Unity

PromptFeedback और candidate.FinishReason की जांच की जा सकती है:

try {
  var response = await model.GenerateContentAsync("Your prompt here");

  // Check if the prompt was blocked
  if (response.PromptFeedback?.BlockReason != null) {
    Debug.LogWarning($"Prompt blocked: {response.PromptFeedback.BlockReason}");
    return;
  }

  var candidate = response.Candidates.FirstOrDefault();
  if (candidate?.FinishReason == FinishReason.Safety) {
    var blockedRating = candidate.SafetyRatings?.FirstOrDefault(r => r.Blocked);
    Debug.LogWarning($"Response blocked by category: {blockedRating?.Category}");
  } else {
    Debug.Log(response.Text);
  }
} catch (Exception ex) {
  Debug.LogError($"Error generating content: {ex.Message}");
}



ज़िम्मेदारी के साथ ऐप्लिकेशन डिज़ाइन करने के सबसे सही तरीके

  • मज़बूत सुरक्षा: सुरक्षा फ़िल्टर, सुरक्षा के लिए होते हैं, न कि निर्देश देने के लिए. सुरक्षा सेटिंग को साफ़ तौर पर दिए गए सिस्टम के निर्देशों और टारगेट किए गए प्रॉम्प्ट डिज़ाइन के साथ जोड़ें, ताकि टोन और स्कोप को गाइड किया जा सके.

  • उपयोगकर्ता को बेहतर अनुभव देना: कॉन्टेंट ब्लॉक होने पर, कभी भी ऐप्लिकेशन क्रैश न हो या खाली स्क्रीन न दिखे. finishReason == SAFETY या PromptBlockedException का पता लगाएं और उपयोगकर्ता को एक दोस्ताना मैसेज दिखाएं. इसमें बताएं कि कॉन्टेंट के लिए दिशा-निर्देशों के तहत, अनुरोध को पूरा नहीं किया जा सकता.

  • कॉन्टेंट को अपनी ज़रूरत के मुताबिक मॉडरेट करने के लिए, BLOCK_NONE का इस्तेमाल करें: अगर आपके पास पहले से ही क्लाइंट-साइड या सर्वर-साइड मॉडरेशन पाइपलाइन है, तो थ्रेशोल्ड को BLOCK_NONE पर सेट करें. इससे आपको मॉडल के safetyRatings अपने-आप ब्लॉक हुए बिना मिलेंगे. साथ ही, आपका ऐप्लिकेशन, कॉन्टेंट को अपनी ज़रूरत के मुताबिक मॉडरेट करने की नीतियां लागू कर पाएगा.

  • सेवा की शर्तें देखें: अगर आपने कम पाबंदी वाली सेटिंग (BLOCK_ONLY_HIGH या BLOCK_NONE) का इस्तेमाल किया है, तो पक्का करें कि आपका ऐप्लिकेशन, Google की इस्तेमाल से जुड़ी पाबंदी की नीति का पालन करता रहे.

कॉन्टेंट जनरेट करने की सुविधा को कंट्रोल करने के अन्य विकल्प

  • प्रॉम्प्ट डिज़ाइन के बारे में ज़्यादा जानें, ताकि आप मॉडल को अपनी ज़रूरत के हिसाब से आउटपुट जनरेट करने के लिए निर्देश दे सकें.
  • मॉडल पैरामीटर कॉन्फ़िगर करें, ताकि यह कंट्रोल किया जा सके कि मॉडल जवाब कैसे जनरेट करे. जैसे, ज़्यादा से ज़्यादा आउटपुट टोकन, आउटपुट टोकन के दोहराए जाने की संभावना वगैरह.
  • मॉडल के व्यवहार को कंट्रोल करने के लिए, सिस्टम इंस्ट्रक्शन सेट करें. यह सुविधा, मॉडल को असली उपयोगकर्ता से कोई निर्देश मिलने से पहले, उसे दिए जाने वाले शुरुआती निर्देश की तरह है.
  • प्रॉम्प्ट के साथ रिस्पॉन्स स्कीमा पास करें, ताकि कोई आउटपुट स्कीमा तय किया जा सके. इस सुविधा का इस्तेमाल, आम तौर पर JSON आउटपुट जनरेट करने के लिए किया जाता है. हालांकि, इसका इस्तेमाल क्लासिफ़िकेशन टास्क के लिए भी किया जा सकता है. जैसे, जब आपको मॉडल से खास लेबल या टैग इस्तेमाल करने हों.