|

Устранение ошибки 400 thought_signature в Nano Banana 2: для многоходового редактирования изображений необходимо возвращать мыслительную подпись

Авторская заметка: Столкнулись с ошибкой «Image part is missing a thought_signature» в Nano Banana 2? Это ошибка 400, возникающая из-за того, что при многоходовом диалоге не был передан «сигнатурный след мышления». В этой статье мы подробно разберем причины, способы исправления и приведем примеры кода.

Если при редактировании изображений с помощью Nano Banana 2 (gemini-3.1-flash-image-preview) вы получили такую ошибку:

{
  "status_code": 400,
  "error": {
    "message": "Image part is missing a thought_signature in content position 2, part position 1."
  }
}

Не паникуйте — это требование механизма многоходового диалога моделей серии Gemini 3, а не проблема безопасности контента или сбой платформы. Проще говоря: во втором запросе вы отправили ранее сгенерированное изображение, но не приложили к нему thought_signature (сигнатуру мышления).

Основная ценность: Прочитав эту статью, вы поймете принцип работы thought_signature, освоите 3 способа исправления и научитесь правильно обрабатывать сигнатуры мышления в сценариях многоходового редактирования изображений.

nano-banana-2-thought-signature-error-400-fix-guide-ru 图示

Разбор ошибки thought_signature в Nano Banana 2

Что на самом деле означает эта ошибка

Давайте разберем сообщение об ошибке по частям:

Поле Значение Пояснение
status_code: 400 Ошибка параметров запроса Это не ошибка сервера, а проблема с передачей данных клиентом
Image part Данные изображения в запросе Вы отправили изображение во 2-м раунде запроса
missing a thought_signature Отсутствует «подпись мышления» Это изображение было создано моделью ранее, нужна подпись
content position 2, part position 1 2-е сообщение в истории, 1-я часть Точное указание места, где не хватает подписи

Краткий итог: API Gemini не имеет состояния (stateless), и модель использует thought_signature (подпись мышления) для сохранения контекста рассуждений между раундами диалога. Когда вы отправляете второй запрос на редактирование изображения, вы обязаны вернуть thought_signature, полученную от модели в предыдущем ответе, иначе получите ошибку 400.

Почему серия Gemini 3 требует thought_signature

Сравнение Серия Gemini 2.x Серия Gemini 3 (вкл. NB2)
Подпись мышления Опционально в ряде сценариев Обязательна для всех типов part
Строгость проверки Мягкая Строгая (отсутствие = 400)
Область применения В основном вызов функций Текст, изображения, вызов функций
Автоматизация Официальный SDK Официальный SDK

Модели серии Gemini 3 (включая gemini-3.1-flash, на базе которой работает Nano Banana 2) требуют подпись мышления по следующим причинам:

  1. Восстановление состояния рассуждений: Подпись — это зашифрованное представление внутреннего процесса мышления модели, позволяющее ей «вспомнить» ход своих мыслей в следующем раунде.
  2. Непрерывность редактирования: Для многошагового редактирования модели нужно понимать: «это изображение создала я на предыдущем шаге», чтобы корректно выполнить правки.
  3. Безопасность и согласованность: Механизм подписи гарантирует, что история диалога не была подделана, что повышает надежность многоходового взаимодействия.

🎯 Важный вывод: Эта ошибка 400 никак не связана с политиками безопасности контента (IMAGE_SAFETY) и не является проблемой платформы APIYI. Это стандартный механизм работы моделей серии Gemini 3, который нужно учитывать при написании кода.


3 способа исправления ошибки thought_signature в Nano Banana 2

nano-banana-2-thought-signature-error-400-fix-guide-ru 图示

Способ 1: Использование функции chat в официальном SDK (рекомендуется)

Если вы используете официальный SDK от Google (Python / Node.js / Java), проще всего использовать функцию chat — SDK автоматически управляет thought_signature:

from google import genai

client = genai.Client(api_key="ВАШ_API_КЛЮЧ")

# Используем функцию chat, SDK сам обрабатывает thought_signature
chat = client.chats.create(model="gemini-3.1-flash-image-preview")

# 1-й раунд: генерация изображения
response1 = chat.send_message("Нарисуй рыжего кота на подоконнике")

# 2-й раунд: редактирование (signature передается автоматически)
response2 = chat.send_message("Надень на кота новогоднюю шапку")

Способ 2: Ручное извлечение и передача thought_signature

Если вы используете кастомные HTTP-запросы или OpenAI-совместимый интерфейс, нужно обрабатывать подпись вручную. Ключевая логика: извлечь thought_signature из ответа предыдущего раунда и передать её в неизменном виде в соответствующей части (part) следующего запроса.

import openai

client = openai.OpenAI(
    api_key="ВАШ_API_КЛЮЧ",
    base_url="https://vip.apiyi.com/v1"
)

# 1-й раунд: генерация изображения
response1 = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[{"role": "user", "content": "Нарисуй рыжего кота"}]
)

# Ключевой момент: сохраняем полный ответ модели
# Включая данные изображения и thought_signature
model_reply = response1.choices[0].message

# 2-й раунд: редактирование
# Передаем полный ответ модели как часть истории диалога
response2 = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[
        {"role": "user", "content": "Нарисуй рыжего кота"},
        model_reply,  # Передаем полностью, включая thought_signature
        {"role": "user", "content": "Надень на кота шапку"}
    ]
)

Способ 3: Переход на однораундовые запросы

Если ваш сценарий не требует многоходового редактирования, можно каждый раз отправлять независимые запросы, полностью избегая проблемы с thought_signature:

# Однораундовое редактирование: напрямую передаем исходное изображение + инструкцию
response = client.chat.completions.create(
    model="gemini-3.1-flash-image-preview",
    messages=[{
        "role": "user",
        "content": [
            {"type": "image_url", "image_url": {"url": "data:image/png;base64,/9j/..."}},
            {"type": "text", "text": "Надень на этого кота новогоднюю шапку"}
        ]
    }]
)

🎯 Совет: Для новых проектов рекомендуем Способ 1 (функция chat в официальном SDK). Для существующих проектов выбирайте Способ 2 или 3 в зависимости от объема изменений. При вызове Nano Banana 2 через APIYI (apiyi.com) способы 2 и 3 будут работать корректно.

Распространенные заблуждения о thought_signature в Nano Banana 2

Заблуждение Факты
Это проблема безопасности контента Нет. Ошибка 400 означает сбой проверки параметров, это не связано с IMAGE_SAFETY
Это проблема платформы API Нет. Это требование механизма моделей серии Gemini 3
Можно сгенерировать подпись самостоятельно Нельзя. Подпись зашифрована, необходимо возвращать значение, полученное от модели, в исходном виде
Нужно только для вызова функций Может потребоваться для всех типов part в серии Gemini 3
Можно избежать, установив thinking: off Нельзя. Даже если уровень мышления установлен на minimal, подпись все равно будет возвращена и её необходимо вернуть

Расположение thought_signature в ответе Nano Banana 2

В данных ответа Nano Banana 2 следует обратить внимание на два особых типа part:

Временные изображения (thought: true): промежуточные изображения, созданные в процессе рассуждения модели, помечены как thought: true. Это временные данные, их не нужно показывать пользователю.

Финальные изображения (содержащие thought_signature): итоговое сгенерированное изображение будет содержать поле thought_signature. Именно эту подпись вам нужно вернуть в следующем запросе.

{
  "candidates": [{
    "content": {
      "parts": [
        {
          "inlineData": {"mimeType": "image/png", "data": "..."},
          "thought_signature": "CkYKRAo..."
        }
      ]
    }
  }]
}

🎯 Технические детали: thought_signature — это зашифрованная строка длиной обычно от 200 до 500 символов. Не пытайтесь её анализировать, изменять или создавать самостоятельно — просто возвращайте то, что получили. При вызове через сервис-прокси API APIYI (apiyi.com) формат ответа полностью совпадает с оригинальным API Google.


Чек-лист для устранения ошибок thought_signature в Nano Banana 2

nano-banana-2-thought-signature-error-400-fix-guide-ru 图示

4 шага для быстрой диагностики:

  1. Проверьте, является ли запрос многоходовым: если ваш массив messages содержит предыдущие ответы роли model (особенно данные изображений), значит, это многоходовый запрос.
  2. Проверьте, сохранен ли полный ответ: содержит ли response от предыдущего шага поле thought_signature? Было ли оно сохранено полностью?
  3. Проверьте, не была ли изменена подпись: не была ли строка подписи усечена или экранирована в процессе сериализации/десериализации JSON?
  4. Проверьте выравнивание позиций part: сообщение об ошибке с указанием content position X, part position Y поможет вам точно определить, в каком именно part отсутствует подпись.

Часто задаваемые вопросы

Q1: Возникает ли эта ошибка при генерации изображений за один проход?

Обычно нет. Ошибка thought_signature встречается почти исключительно в многоходовых диалогах — она срабатывает, когда вы включаете изображение, полученное от модели ранее, в историю диалога и отправляете новый запрос. Одноходовая генерация «текст-в-изображение» или «изображение-в-изображение» (с прямой передачей исходного изображения) не затрагивает историю диалога, поэтому подпись обрабатывать не нужно.

Q2: Как быть при вызове через совместимый API OpenAI?

При вызове Nano Banana 2 через совместимый с OpenAI сервис-прокси API от APIYI (apiyi.com) важно сохранять полный объект ответа модели из предыдущего шага и передавать его как часть истории диалога в следующем запросе. Не сохраняйте только данные изображения, отбрасывая остальные поля. Если ваш фреймворк (например, Dify или Cherry Studio) автоматически управляет историей диалога, убедитесь, что он полностью сохраняет thought_signature.

Q3: Нужно ли возвращать временные изображения с параметром thought: true?

Да, нужно. В процессе рассуждений Nano Banana 2 может возвращать временные изображения, помеченные как thought: true — это часть «процесса мышления» модели. При формировании истории диалога необходимо полностью возвращать все части (parts), полученные от модели (включая временные изображения). Самый надежный способ — просто возвращать полный объект ответа модели.


Резюме

Основные моменты, касающиеся ошибки 400 thought_signature в Nano Banana 2:

  1. Это не проблема безопасности контента: это требование механизма многоходовых диалогов моделей серии Gemini 3, оно не связано с IMAGE_SAFETY.
  2. Причина ясна: при многоходовых запросах вы не передали обратно thought_signature, полученную от модели на предыдущем этапе.
  3. Решение: используйте функцию чата в официальном SDK (она обрабатывает это автоматически), вручную извлекайте и возвращайте подпись или перейдите на одноходовые запросы.

Помните главное правило: не меняйте, не отбрасывайте и не пытайтесь самостоятельно конструировать thought_signature, полученную от модели — возвращайте её в исходном виде.

Если вам нужно вызывать Nano Banana 2 через сторонние платформы, рекомендуем использовать APIYI (apiyi.com). Формат ответов полностью совпадает с оригинальным API Google, стоимость составляет $0,05 за запрос, ограничений по количеству одновременных подключений нет.

📚 Справочные материалы

  1. Официальная документация Google по Thought Signatures: Подробный разбор механизма «подписей мышления».

    • Ссылка: ai.google.dev/gemini-api/docs/thought-signatures
    • Описание: Официальная документация, включающая принципы работы, поведение моделей и способы обработки через SDK.
  2. Руководство разработчика Google Gemini 3: Новые функции серии Gemini 3.

    • Ссылка: ai.google.dev/gemini-api/docs/gemini-3
    • Описание: Требования к обязательной подписи и описание новых функций серии Gemini 3.
  3. Документация Google по генерации изображений: Лучшие практики генерации изображений Nano Banana.

    • Ссылка: ai.google.dev/gemini-api/docs/image-generation
    • Описание: Рекомендации по использованию thought_signature при многоэтапном редактировании изображений.
  4. Документация Google Cloud Vertex AI: Описание «подписей мышления» корпоративного уровня.

    • Ссылка: docs.google.com/vertex-ai/generative-ai/docs/thought-signatures
    • Описание: Способы обработки и настройки подписей в среде Vertex AI.

Автор: Техническая команда APIYI
Техническое обсуждение: Приглашаем обсудить в комментариях ваш опыт реализации многоэтапного редактирования в Nano Banana 2. Дополнительные материалы доступны в центре документации APIYI по адресу docs.apiyi.com.

Похожие записи