Các mô hình Gemini được thiết kế để ưu tiên sự an toàn. Tuy nhiên, các mô hình này vẫn có thể tạo ra câu trả lời gây hại, đặc biệt là khi được nhắc một cách rõ ràng. Để tăng cường hơn nữa tính an toàn và giảm thiểu việc sử dụng sai mục đích, bạn có thể định cấu hình bộ lọc an toàn để chặn các câu trả lời có thể gây hại.
Có hai lớp bảo vệ an toàn:
Các biện pháp bảo vệ cốt lõi được tích hợp sẵn:
- Tất cả các mô hình Gemini đều có các biện pháp bảo vệ tích hợp sẵn để chống lại các tác hại nghiêm trọng (chẳng hạn như bóc lột trẻ em, tấn công mạng và vũ khí nguy hiểm).
- Các biện pháp bảo vệ này luôn hoạt động, được áp dụng tự động cho tất cả câu lệnh và câu trả lời, đồng thời không thể sửa đổi hoặc tắt.
Bộ lọc an toàn có thể tuỳ chỉnh:
- Gemini API cung cấp thêm bộ lọc an toàn có thể định cấu hình mà bạn xác định bằng chế độ cài đặt an toàn trong ứng dụng.
- Các chế độ cài đặt này cho phép bạn kiểm soát ngưỡng chặn nội dung đối với bốn danh mục gây hại chính: Quấy rối, Lời nói hận thù, Nội dung khiêu dâm và Nội dung nguy hiểm.
Các khái niệm quan trọng về an toàn
Khi làm việc với tính năng an toàn cho các mô hình Gemini, bạn cần hiểu một số khái niệm quan trọng sau:
Chế độ cài đặt an toàn: Cấu hình mà bạn xác định trong mã ứng dụng, chỉ định danh mục gây hại cần theo dõi và ngưỡng chặn nội dung.
Bộ lọc an toàn: Các thuật toán phân loại phía máy chủ đánh giá câu lệnh và phản hồi của mô hình theo các khía cạnh an toàn của Google. Bộ lọc chặn nội dung dựa trên chế độ cài đặt an toàn mà bạn đã định cấu hình.
Mức phân loại về độ an toàn: Siêu dữ liệu đánh giá do mô hình trả về trong đối tượng phản hồi. Điểm xếp hạng cho biết xác suất và mức độ nghiêm trọng của mối nguy hại tiềm ẩn được phát hiện cho từng danh mục gây hại.
Mô hình được hỗ trợ
gemini-4-argongemini-3.8-flash(và các phiên bản cũ hơn làgemini-3.7-flash,gemini-3.6-flashvàgemini-3.5-flash)gemini-3.5-flash-lite(vàgemini-3.1-flash-litecũ hơn)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)
Mô hình gemini-3.1-pro-preview cũng như các mô hình Gemini 2.5 đa năng và tạo hình ảnh (đã ngừng hoạt động) cũng hỗ trợ tính năng này.
Định cấu hình chế độ cài đặt an toàn trong ứng dụng
|
Nhấp vào nhà cung cấp Gemini API của bạn để xem nội dung và mã dành riêng cho nhà cung cấp trên trang này. |
Bạn định cấu hình chế độ cài đặt an toàn trong quá trình khởi chạy một thực thể GenerativeModel. Cấu hình được duy trì trong suốt thời gian hoạt động của thực thể mô hình đó.
Tìm hiểu về các danh mục gây hại hiện có và ngưỡng mà bạn có thể đặt cho từng danh mục ở phần sau của trang này.
Swift
Định cấu hình SafetySetting khi tạo một thực thể 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
Định cấu hình SafetySetting khi tạo một thực thể 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
Định cấu hình SafetySetting khi tạo một thực thể 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
Định cấu hình SafetySetting khi tạo một thực thể 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
Định cấu hình SafetySetting khi tạo một thực thể 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
Định cấu hình SafetySetting khi tạo một thực thể 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
);
// ...
Các danh mục gây hại hiện có
Bộ lọc an toàn đánh giá câu lệnh và phản hồi của mô hình dựa trên các danh mục gây hại có thể định cấu hình sau đây:
| Danh mục gây hại | Mô tả |
|---|---|
HARM_CATEGORY_HARASSMENT |
Bình luận tiêu cực, đe doạ, hăm doạ, bắt nạt hoặc lăng mạ nhắm đến một cá nhân hoặc danh tính. |
HARM_CATEGORY_HATE_SPEECH |
Nội dung công kích, hạ thấp, kích động thù địch hoặc kích động bạo lực chống lại các cá nhân hoặc nhóm người dựa trên các đặc điểm được bảo vệ (chẳng hạn như chủng tộc, nguồn gốc dân tộc, tôn giáo, tình trạng khuyết tật, độ tuổi, quốc tịch, thân thế cựu chiến binh, khuynh hướng tính dục hoặc bản dạng giới). |
HARM_CATEGORY_SEXUALLY_EXPLICIT |
Chứa nội dung đề cập đến hành vi tình dục, nội dung khiêu dâm hoặc nội dung dâm ô và gợi dục khác. |
HARM_CATEGORY_DANGEROUS_CONTENT |
Cổ xuý, tạo điều kiện, khuyến khích hoặc hướng dẫn thực hiện các hành vi gây hại, hàng hoá và dịch vụ bất hợp pháp, vũ khí, hành vi tự huỷ hoại bản thân hoặc các hoạt động nguy hiểm. |
HARM_CATEGORY_CIVIC_INTEGRITY |
Nội dung có thể được dùng để gây hiểu lầm cho cử tri hoặc phá hoại các quy trình dân sự và bầu cử. (Được hỗ trợ trên một số kiểu máy và ở một số khu vực). |
Bộ lọc an toàn không thể tuỳ chỉnh
Ngoài các danh mục có thể định cấu hình, tất cả yêu cầu đều phải vượt qua các bộ lọc cấp hệ thống không thể điều chỉnh:
Nội dung xâm hại tình dục trẻ em (CSAM) / Nội dung bị cấm: Câu lệnh hoặc câu trả lời bị gắn cờ là nội dung bị cấm sẽ bị chặn ngay lập tức (
PROHIBITED_CONTENT).Thông tin nhạy cảm có thể nhận dạng cá nhân (SPII): Những câu trả lời có nguy cơ làm lộ dữ liệu cá nhân nhạy cảm (chẳng hạn như số tài khoản tài chính hoặc số căn cước quốc gia) sẽ bị chặn (
SPII).
Đặt ngưỡng
Đối với mỗi danh mục gây hại mà bạn muốn kiểm soát trong ứng dụng, bạn cần đặt một ngưỡng. Nếu nội dung được đánh giá đạt hoặc vượt ngưỡng đó, thì nội dung đó sẽ bị chặn.
Cách hoạt động của quy trình đánh giá mức độ an toàn: Xác suất so với mức độ nghiêm trọng
Bộ lọc an toàn đánh giá nội dung theo hai khía cạnh riêng biệt:
Xác suất: Mức độ tin tưởng của mô hình rằng nội dung thuộc một danh mục gây hại nhất định.
Mức độ nghiêm trọng: Mức độ hoặc phạm vi gây hại tiềm ẩn nếu nội dung đó gây hại.
Mỗi phương diện được chỉ định một trong các cấp sau:
NEGLIGIBLE, LOW, MEDIUM hoặc HIGH.
Nội dung có thể có xác suất cao nhưng mức độ nghiêm trọng thấp (ví dụ: lời nói đùa nhẹ nhàng hoặc lời lăng mạ thân thiện) hoặc xác suất thấp nhưng mức độ nghiêm trọng cao (ví dụ: cuộc thảo luận về y tế hoặc lịch sử có đề cập đến bạo lực).
Các ngưỡng chặn nội dung gây hại hiện có
Bạn có thể đặt bất kỳ ngưỡng nào sau đây cho các danh mục gây hại mà bạn muốn kiểm soát trong ứng dụng của mình:
| Ngưỡng | Mô tả | Các cấp độ được cho phép |
|---|---|---|
BLOCK_LOW_AND_ABOVE |
Hạn chế nhất. Chặn nội dung khi xác suất (hoặc mức độ nghiêm trọng) là LOW, MEDIUM hoặc HIGH.
|
Chỉ cho phép
NEGLIGIBLE
|
BLOCK_MEDIUM_AND_ABOVE |
Hạn chế ở mức trung bình. Chặn nội dung khi xác suất (hoặc mức độ nghiêm trọng) là MEDIUM hoặc HIGH.
|
Cho phép
NEGLIGIBLE và LOW |
BLOCK_ONLY_HIGH |
Bộ lọc đang hoạt động ít hạn chế nhất. Chỉ chặn nội dung khi xác suất (hoặc mức độ nghiêm trọng) là HIGH.
|
Cho phép
NEGLIGIBLE, LOW và MEDIUM
|
BLOCK_NONE |
Tính năng tự động chặn phản hồi bị tắt cho danh mục này. Siêu dữ liệu về điểm xếp hạng an toàn vẫn được tính toán và trả về cùng với phản hồi để ứng dụng của bạn có thể thực hiện quy trình kiểm duyệt tuỳ chỉnh. | Cho phép tất cả nội dung |
OFF |
Tắt hoàn toàn bộ lọc an toàn cho danh mục này. Không có hoạt động chặn tự động nào xảy ra và không có siêu dữ liệu về mức độ an toàn nào được trả về. | Cho phép tất cả nội dung |
Kiểm tra mức phân loại an toàn và xử lý nội dung bị chặn
Nội dung có thể bị chặn ở hai giai đoạn trong một yêu cầu:
Câu lệnh bị chặn (
PromptFeedback): Câu lệnh đầu vào vi phạm bộ lọc an toàn trước khi mô hình tạo ra kết quả. Không có câu trả lời nào được trả về.Đã chặn câu trả lời đề xuất (
finishReason == SAFETY): Mô hình đã đánh giá hoặc tạo một câu trả lời đề xuất vượt quá ngưỡng bạn đã định cấu hình. Văn bản đề xuất được tạo sẽ bị xoá hoặc loại bỏ.
Đối tượng SafetyRating
Mỗi câu lệnh hoặc câu trả lời được đánh giá đều chứa một mảng các đối tượng SafetyRating. Mỗi mức phân loại cung cấp những thông tin sau:
Các thuộc tính có sẵn cho cả Gemini Developer API và Agent Platform Gemini API (formerly Vertex AI):
category:HarmCategoryđược đánh giá.probability: Điểm xếp hạng riêng biệt (NEGLIGIBLE,LOW,MEDIUMhoặcHIGH).blocked:truenếu mức phân loại cụ thể này khiến nội dung bị chặn.
Các thuộc tính khác có trong Agent Platform Gemini API (formerly Vertex AI):
probabilityScore: Điểm tin cậy dấu phẩy động từ0.0đến1.0.severity: Mức độ nghiêm trọng riêng biệt (NEGLIGIBLE,LOW,MEDIUMhoặcHIGH).severityScore: Điểm mức độ nghiêm trọng có dấu phẩy động từ0.0đến1.0.
Ví dụ về đối tượng SafetyRating
Ví dụ sau đây minh hoạ tải trọng phản hồi JSON thô khi một đề xuất bị bộ lọc an toàn chặn:
{
"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
}
}
Phát hiện lỗi an toàn trong mã
Khi nội dung bị chặn, SDK ứng dụng sẽ hiển thị lệnh chặn dưới dạng một ngoại lệ hoặc mã lỗi để ứng dụng của bạn có thể xử lý một cách linh hoạt.
Swift
Bạn có thể bắt GenerateContentError.promptBlocked hoặc
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
Bạn có thể bắt PromptBlockedException hoặc kiểm tra 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
Bạn có thể bắt PromptBlockedException hoặc kiểm tra 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
Bạn có thể kiểm tra promptFeedback và 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
Bạn có thể kiểm tra promptFeedback và 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
Bạn có thể kiểm tra PromptFeedback và 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}");
}
Các phương pháp hay nhất để thiết kế ứng dụng có trách nhiệm
Phòng thủ theo chiều sâu: Bộ lọc an toàn là một biện pháp bảo vệ, không phải là một chỉ dẫn. Kết hợp chế độ cài đặt an toàn với chỉ dẫn rõ ràng cho hệ thống và thiết kế câu lệnh có mục tiêu để định hướng giọng điệu và phạm vi.
Phản hồi người dùng một cách khéo léo: Không bao giờ gặp sự cố hoặc hiển thị màn hình trống khi nội dung bị chặn. Phát hiện
finishReason == SAFETYhoặcPromptBlockedExceptionvà hiển thị một thông báo thân thiện cho người dùng biết rằng yêu cầu không thể được thực hiện theo nguyên tắc về nội dung của bạn.Sử dụng
BLOCK_NONEđể kiểm duyệt tuỳ chỉnh: Nếu bạn đã có quy trình kiểm duyệt phía máy khách hoặc phía máy chủ, hãy đặt ngưỡng thànhBLOCK_NONEđể nhậnsafetyRatingscủa mô hình mà không cần chặn tự động, cho phép ứng dụng của bạn thực thi các chính sách kiểm duyệt tuỳ chỉnh.Xem lại Điều khoản dịch vụ: Nếu bạn sử dụng các chế độ cài đặt ít hạn chế hơn (
BLOCK_ONLY_HIGHhoặcBLOCK_NONE), hãy đảm bảo ứng dụng của bạn tiếp tục tuân thủ Chính sách về các hành vi bị cấm của Google.
Các lựa chọn khác để kiểm soát việc tạo nội dung
- Tìm hiểu thêm về thiết kế câu lệnh để có thể tác động đến mô hình nhằm tạo ra kết quả cụ thể theo nhu cầu của bạn.
- Định cấu hình tham số mô hình để kiểm soát cách mô hình tạo phản hồi, chẳng hạn như số mã thông báo đầu ra tối đa, xác suất mã thông báo đầu ra lặp lại, v.v.
- Đặt chỉ dẫn hệ thống để điều chỉnh hành vi của mô hình. Tính năng này giống như một chỉ dẫn mở đầu mà bạn thêm vào trước khi mô hình nhận được bất kỳ chỉ dẫn nào khác từ người dùng cuối.
- Truyền giản đồ phản hồi cùng với câu lệnh để chỉ định một giản đồ đầu ra cụ thể. Tính năng này thường được dùng nhất khi tạo kết quả JSON, nhưng cũng có thể dùng cho các nhiệm vụ phân loại (chẳng hạn như khi bạn muốn mô hình sử dụng các nhãn hoặc thẻ cụ thể).