Обзор
gemini-3-pro-image (то есть Nano Banana Pro) применяет строгие меры контроля безопасности контента и отклоняет несоответствующие запросы на нескольких уровнях. Простое сообщение «Не удалось выполнить генерацию» не помогает пользователям понять причину. Для качественной обработки ошибок необходимо:
- Точно определять причину отклонения — различать нарушения правил в отношении контента, ограничения базы знаний и технические ошибки
- Предоставлять понятные и доброжелательные сообщения — преобразовывать технические ошибки в понятные объяснения
- Предлагать конкретные решения — объяснять пользователям, как скорректировать запрос, чтобы он был выполнен
- Сохранять полные технические сведения — для отладки разработчиками
Политика модерации контента Google (Обновление 2026)
Генерация изображений Google использует двухуровневый механизм безопасности:- Настраиваемые фильтры: охватывают четыре категории — домогательства, разжигание ненависти, контент сексуально откровенного характера и опасный контент — и настраиваются через
safetySettings - Встроенные защиты: всегда активны для базовых вредоносных сценариев (например, безопасности детей) и не могут быть отключены через параметры
- Запрещенная политика использования Generative AI:
policies.google.com/terms/generative-ai/use-policy - Справочник по распространенным ошибкам генеративного контента:
ai.google.dev/api/generate-content
Три основных диагностических показателя
Проверяйте в порядке приоритета, от наивысшего к наинизшему:1. candidatesTokenCount (наивысший приоритет) ⭐
- Расположение:
response.usageMetadata.candidatesTokenCount - Значение: количество tokens в контенте-кандидате, сгенерированном API
- Правило: значение
0означает, что запрос был полностью отклонен на этапе модерации контента — контент-кандидат даже не был сгенерирован. Это самый строгий отказ.
candidatesTokenCount, равное 0, не всегда означает нарушение политик. Следует различать два других распространенных случая:- В ответе есть
promptFeedback.blockReasonи отсутствуетcandidates: входные данные были заблокированы проверкой провайдера до генерации.OTHERчасто вызывается одним референсным изображением; см. Устранение неполадок blockReason: OTHER finishReasonимеет значениеNO_IMAGE: обычно в prompt модель просят написать предложение или анализ, поэтому намерение получить изображение неясно; см. Устранение неполадок NO_IMAGE
2. finishReason (второй приоритет)
- Расположение:
response.candidates[0].finishReason - Правило: любое значение, кроме
STOP, указывает на нештатное завершение, требующее специальной обработки
finishReason, связанные с изображениями (обратите внимание, что в серии Nano Banana были добавлены специальные значения для изображений с префиксом IMAGE_):
3. Текстовое объяснение отказа (важно)
- Расположение:
response.candidates[0].content.parts[].text - Правило: когда
finishReasonимеет значениеSTOP, ноpartsсодержит толькоtextи не содержит данных изображения, API вернул объяснение отказа вместо изображения. Текст может быть на китайском или английском языке, например:
Краткое руководство по сценариям ошибок
Порядок обработки (порядок принятия решений)
Реализация кода (основное)
Объедините проверки выше в одну функцию парсинга:Сообщения для конечных пользователей
Принципы оформления: ясно и кратко, позитивные рекомендации, практичность, без обвинений. Рекомендуемые шаблоны:- Конечные пользователи: по умолчанию показывайте только дружелюбное объяснение + предложение по исправлению
- Бизнес / поставщики инструментов: по умолчанию раскрывайте технические подробности (
finishReason,candidatesTokenCountи т. д.) - Разработчики: предоставьте переключатель «развернуть/свернуть» для просмотра полного ответа JSON
Лучшие практики
- Проверяйте строго по приоритету:
candidatesTokenCount→finishReason→parts→ извлечение данных → обнаружение ключевых слов - Собирайте текст до проверки thoughtSignature, чтобы не потерять объяснение отказа
- Сохраняйте полный ответ: инструменты разработки и тестирования всегда должны сохранять необработанный JSON для устранения неполадок
- Поддерживайте текст отказа на китайском и английском языках: Google может вернуть текст на китайском или английском, поэтому сопоставление по ключевым словам должно покрывать оба варианта
- Плавная деградация: выдавайте конкретное сообщение, когда интеллектуальное обнаружение успешно срабатывает; иначе показывайте текст API напрямую; иначе используйте дружественное имя
finishReason; и только затем переходите к общему сообщению - Никогда не показывайте «неизвестная ошибка»: всегда включайте практическую рекомендацию или полный ответ
Частые вопросы
Почему один и тот же prompt иногда проходит, а иногда не проходит?
Почему один и тот же prompt иногда проходит, а иногда не проходит?
Как понять, это проблема с контентом или техническая проблема?
Как понять, это проблема с контентом или техническая проблема?
candidatesTokenCount: 0 или finishReason: PROHIBITED_CONTENT → проблема с контентом; Failed to fetch или HTTP-ошибка → техническая проблема; текстовое объяснение API → обычно проблема с контентом.Сколько технической информации должны видеть пользователи-консьюмеры?
Сколько технической информации должны видеть пользователи-консьюмеры?
Нужно ли писать отдельную обработку для каждого finishReason?
Нужно ли писать отдельную обработку для каждого finishReason?
reasonMessages[finishReason] || , а затем отображайте исходное значение.