Перейти к основному содержанию

Обзор

gemini-3-pro-image (то есть Nano Banana Pro) применяет строгие меры контроля безопасности контента и отклоняет несоответствующие запросы на нескольких уровнях. Простое сообщение «Не удалось выполнить генерацию» не помогает пользователям понять причину. Для качественной обработки ошибок необходимо:
  • Точно определять причину отклонения — различать нарушения правил в отношении контента, ограничения базы знаний и технические ошибки
  • Предоставлять понятные и доброжелательные сообщения — преобразовывать технические ошибки в понятные объяснения
  • Предлагать конкретные решения — объяснять пользователям, как скорректировать запрос, чтобы он был выполнен
  • Сохранять полные технические сведения — для отладки разработчиками
Если запрос возвращает HTTP 200, но изображение отсутствует, обычно это означает, что Google применил проверку безопасности. Прозрачный прокси APIYI просто передаёт результат без изменений — мы тоже хотим, чтобы наши клиенты могли успешно генерировать изображения. Логику обнаружения и отображения сообщений необходимо реализовать на стороне вашего приложения.

Политика модерации контента Google (Обновление 2026)

Генерация изображений Google использует двухуровневый механизм безопасности:
  1. Настраиваемые фильтры: охватывают четыре категории — домогательства, разжигание ненависти, контент сексуально откровенного характера и опасный контент — и настраиваются через safetySettings
  2. Встроенные защиты: всегда активны для базовых вредоносных сценариев (например, безопасности детей) и не могут быть отключены через параметры
Явно запрещенный контент включает: сексуальное насилие и эксплуатацию детей (CSAE), насильственный экстремизм/терроризм, интимные изображения без согласия (NCII), самоповреждение, контент сексуально откровенного характера, разжигание ненависти, а также домогательства и травлю.
В феврале 2026 года, после запуска Nano Banana 2, Google значительно ужесточила свои политики в отношении людей и авторского права, добавив/усилив следующие частые сценарии отклонения (данные по состоянию на май 2026 года (UTC+8)):
  • Публичные фигуры / знаменитости: фотореалистичные, узнаваемые реальные люди
  • Подмена лица (faceswap)
  • Переодевание / изменение внешности реальных людей
  • Подделка финансовой информации или информации о заказе
  • Известные объекты интеллектуальной собственности (например, Disney, начиная с 23 января 2026 года)
  • Удаление водяных знаков и контент, связанный с несовершеннолетними
По-прежнему разрешены: вымышленные персонажи, стилизованные портреты и иллюстрированные фигуры.
Официальные документы политики Google (скопируйте и откройте их самостоятельно):
  • Запрещенная политика использования 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 вернул объяснение отказа вместо изображения. Текст может быть на китайском или английском языке, например:

Краткое руководство по сценариям ошибок

Порядок обработки (порядок принятия решений)

Реализация кода (основное)

Объедините проверки выше в одну функцию парсинга:
Умное определение ключевых слов (необязательно, для более точных сообщений):
Самая распространенная ошибка: часть, содержащая thoughtSignature, все еще может содержать важные text. Всегда сначала собирайте текст, а затем решайте, нужно ли пропускать — иначе пояснение причины отклонения теряется, и пользователи видят только «сбой генерации».

Сообщения для конечных пользователей

Принципы оформления: ясно и кратко, позитивные рекомендации, практичность, без обвинений. Рекомендуемые шаблоны:
Рекомендации по поэтапному отображению:
  • Конечные пользователи: по умолчанию показывайте только дружелюбное объяснение + предложение по исправлению
  • Бизнес / поставщики инструментов: по умолчанию раскрывайте технические подробности (finishReason, candidatesTokenCount и т. д.)
  • Разработчики: предоставьте переключатель «развернуть/свернуть» для просмотра полного ответа JSON

Лучшие практики

  1. Проверяйте строго по приоритету: candidatesTokenCount → finishReason → parts → извлечение данных → обнаружение ключевых слов
  2. Собирайте текст до проверки thoughtSignature, чтобы не потерять объяснение отказа
  3. Сохраняйте полный ответ: инструменты разработки и тестирования всегда должны сохранять необработанный JSON для устранения неполадок
  4. Поддерживайте текст отказа на китайском и английском языках: Google может вернуть текст на китайском или английском, поэтому сопоставление по ключевым словам должно покрывать оба варианта
  5. Плавная деградация: выдавайте конкретное сообщение, когда интеллектуальное обнаружение успешно срабатывает; иначе показывайте текст API напрямую; иначе используйте дружественное имя finishReason; и только затем переходите к общему сообщению
  6. Никогда не показывайте «неизвестная ошибка»: всегда включайте практическую рекомендацию или полный ответ

Частые вопросы

Фильтрация безопасности Google имеет элемент случайности и зависит от контекста: содержимое reference image и способ объединения prompt влияют на решение. Попробуйте изменить формулировку или использовать более косвенное выражение.
candidatesTokenCount: 0 или finishReason: PROHIBITED_CONTENT → проблема с контентом; Failed to fetch или HTTP-ошибка → техническая проблема; текстовое объяснение API → обычно проблема с контентом.
Многоуровневое отображение: по умолчанию показывайте дружелюбное объяснение + предложение по исправлению; при необходимости раскрывайте технические детали; в режиме разработки показывайте полный JSON-ответ.
Нет. Достаточно таблицы сопоставления и универсального fallback: reasonMessages[finishReason] || , а затем отображайте исходное значение.

Связанное чтение