ทำความเข้าใจและกำหนดค่าการตั้งค่าความปลอดภัย

โมเดล Gemini ออกแบบมาเพื่อให้ความสำคัญกับความปลอดภัย อย่างไรก็ตาม โมเดลเหล่านี้ยังคงสร้างคำตอบที่เป็นอันตรายได้ โดยเฉพาะเมื่อได้รับพรอมต์อย่างชัดแจ้ง หากต้องการเพิ่มความปลอดภัยและลดการใช้ในทางที่ผิด คุณสามารถกำหนดค่าตัวกรองความปลอดภัยเพื่อบล็อกคำตอบที่อาจเป็นอันตรายได้

การป้องกันความปลอดภัยมี 2 ชั้น ดังนี้

  • การป้องกันหลักในตัว:

    • โมเดล Gemini ทั้งหมดมีการป้องกันในตัวต่ออันตรายร้ายแรง (เช่น การแสวงหาประโยชน์จากเด็ก การโจมตีทางไซเบอร์ และอาวุธที่เป็นอันตราย)
    • การป้องกันเหล่านี้ทำงานอยู่เสมอ โดยจะใช้กับพรอมต์และคำตอบทั้งหมดโดยอัตโนมัติ และไม่สามารถแก้ไขหรือปิดใช้ได้
  • ตัวกรองความปลอดภัยที่กำหนดค่าได้

    • Gemini API มีตัวกรองความปลอดภัยที่กำหนดค่าได้เพิ่มเติม ซึ่งคุณกำหนดได้โดยใช้การตั้งค่าความปลอดภัยในแอป
    • การตั้งค่าเหล่านี้ช่วยให้คุณควบคุมเกณฑ์ในการบล็อกเนื้อหาในหมวดหมู่เนื้อหาที่ก่อให้เกิดอันตราย 4 หมวดหมู่หลัก ได้แก่ การคุกคาม วาจาสร้างความเกลียดชัง เนื้อหาเกี่ยวกับเรื่องเพศอย่างโจ่งแจ้ง และเนื้อหาที่เป็นอันตราย

ข้ามไปยังตัวอย่างโค้ด

แนวคิดสำคัญเกี่ยวกับความปลอดภัย

เมื่อทำงานด้านความปลอดภัยสำหรับโมเดล 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

กำหนดค่า SafetySetting เมื่อสร้างอินสแตนซ์ GenerativeModel ดังนี้


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

กำหนดค่า SafetySetting เมื่อสร้างอินสแตนซ์ GenerativeModel ดังนี้


// ...

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

กำหนดค่า SafetySetting เมื่อสร้างอินสแตนซ์ GenerativeModel ดังนี้


// ...

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

กำหนดค่า SafetySetting เมื่อสร้างอินสแตนซ์ GenerativeModel ดังนี้


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

กำหนดค่า SafetySetting เมื่อสร้างอินสแตนซ์ GenerativeModel ดังนี้


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

กำหนดค่า SafetySetting เมื่อสร้างอินสแตนซ์ GenerativeModel ดังนี้


// ...

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 เนื้อหาที่อาจใช้เพื่อทำให้ผู้มีสิทธิเลือกตั้งเข้าใจผิดหรือบ่อนทำลายกระบวนการพลเมืองและการเลือกตั้ง (รองรับในบางรุ่นและบางภูมิภาค)

ตัวกรองความปลอดภัยที่กำหนดค่าไม่ได้

นอกเหนือจากหมวดหมู่ที่กำหนดค่าได้แล้ว คำขอทั้งหมดจะผ่านตัวกรองระดับระบบที่ปรับไม่ได้ ดังนี้

  • สื่อที่มีการล่วงละเมิดทางเพศเด็ก (CSAM) / เนื้อหาที่ไม่อนุญาต: ระบบจะบล็อกพรอมต์หรือคำตอบที่ถูกแจ้งว่ามีเนื้อหาที่ไม่อนุญาตทันที (PROHIBITED_CONTENT)

  • ข้อมูลส่วนบุคคลที่ละเอียดอ่อนและระบุตัวบุคคลนั้นได้ (SPII): ระบบจะบล็อกคำตอบที่มีความเสี่ยงต่อการเปิดเผยข้อมูลส่วนตัวที่ละเอียดอ่อน (เช่น หมายเลขบัญชีการเงินหรือหมายเลขประจำตัวประชาชน) (SPII)



กำหนดเกณฑ์

สำหรับอันตรายแต่ละหมวดหมู่ที่คุณต้องการควบคุมในแอป คุณต้องตั้งค่าเกณฑ์ หากเนื้อหาที่ประเมินมีคะแนนถึงหรือเกินเกณฑ์ดังกล่าว ระบบจะบล็อกเนื้อหานั้น

วิธีการทำงานของการประเมินความปลอดภัย: ความน่าจะเป็นเทียบกับความรุนแรง

ตัวกรองความปลอดภัยจะประเมินเนื้อหาใน 2 มิติที่แตกต่างกัน ดังนี้

  • ความน่าจะเป็น: ความมั่นใจของโมเดลว่าเนื้อหาจัดอยู่ในหมวดหมู่ที่เป็นอันตรายที่ระบุ

  • ความรุนแรง: ขนาดหรือระดับของอันตรายที่อาจเกิดขึ้นหากเนื้อหาเป็นอันตราย

มิติข้อมูลแต่ละรายการจะได้รับการกำหนดระดับใดระดับหนึ่งต่อไปนี้ 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 ปิดตัวกรองความปลอดภัยสำหรับหมวดหมู่นี้โดยสมบูรณ์ จะไม่มีการบล็อกอัตโนมัติเกิดขึ้นและไม่มีการแสดงผลข้อมูลเมตาของการจัดประเภทความปลอดภัย อนุญาตเนื้อหาทั้งหมด



ตรวจสอบการจัดประเภทความปลอดภัยและจัดการเนื้อหาที่ถูกบล็อก

เนื้อหาอาจถูกบล็อกได้ 2 ขั้นตอนในระหว่างที่มีคำขอ ดังนี้

  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
  }
}

ตรวจจับข้อผิดพลาดด้านความปลอดภัยในโค้ด

เมื่อเนื้อหาถูกบล็อก SDK ของไคลเอ็นต์จะแสดงการบล็อกเป็นข้อยกเว้นหรือรหัสข้อผิดพลาดเพื่อให้แอปของคุณจัดการได้อย่างราบรื่น

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 แต่ก็ใช้สำหรับงานการแยกประเภทได้เช่นกัน (เช่น เมื่อต้องการให้โมเดลใช้ป้ายกำกับหรือแท็กที่เฉพาะเจาะจง)