title: "Разбор Nano Banana 2 API: что такое thoughtSignature и как с ним работать"
description: "Разбираемся, почему thoughtSignature в API Nano Banana 2 — это не картинка, а важный элемент логики модели, и как правильно использовать его в многошаговых диалогах."
Авторская заметка: Глубокий разбор сути поля thoughtSignature в ответе API Nano Banana 2: это не изображение, а зашифрованная подпись процесса мышления. Подробно разбираем структуру ответа в режиме Thinking, правильные способы обработки и типичные ошибки.
Многие разработчики при вызове API Nano Banana 2 для генерации изображений замечают, что помимо самих данных изображения в ответе присутствует поле thoughtSignature. Оно также представляет собой длинную строку в формате base64 и внешне напоминает данные картинки. Попытки декодировать его приводят к ошибкам, так как это вовсе не изображение. Что же это такое? В этой статье мы подробно разберем суть thoughtSignature, объясним, почему это не картинка и как правильно обрабатывать это поле в многошаговых диалогах.
Основная ценность: Прочитав эту статью, вы поймете технические принципы работы thoughtSignature, перестанете путать его с данными изображения и научитесь корректно передавать подпись в последующих запросах.

Основные моменты API Nano Banana 2: thoughtSignature
Давайте сразу ответим на самый частый вопрос: thoughtSignature — это не изображение, его нельзя декодировать как картинку. Это зашифрованная подпись процесса «мышления» модели.
| Пункт | Описание | Что нужно знать разработчику |
|---|---|---|
| Суть | Бинарные данные в формате base64 (криптографическая подпись) | Нельзя декодировать, изменять или подделать |
| Содержимое | Снимок внутреннего состояния процесса логического вывода модели | Полностью непрозрачно для разработчика |
| Назначение | Поддержание непрерывности рассуждений в многоходовых диалогах | Обязательно передавать обратно в следующем запросе в неизменном виде |
| Формат | Выглядит как base64-изображение, но им не является | Нет «магических байтов» (magic bytes), не распознается как формат изображения |
| Обязательность | Необходимо при вызове инструментов (иначе будет ошибка 400) | В чисто текстовых сценариях можно опустить, но это снизит качество |
Как выглядит thoughtSignature в ответе API Nano Banana 2
Когда вы вызываете Nano Banana 2 для генерации изображения, массив parts в ответе API может содержать несколько элементов. Типичная структура ответа выглядит так:
{
"candidates": [{
"content": {
"role": "model",
"parts": [
{
"text": "Давай подумаю, как лучше сгенерировать это изображение...",
"thought": true
},
{
"text": "",
"thoughtSignature": "CpcHAdHtim9+q4rstcbvQC0ic4x1/vqQlCJ..."
},
{
"inlineData": {
"mime_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUg..."
}
}
]
}
}]
}
Здесь три части (part):
- Резюме рассуждений (
thought: true): текстовое описание процесса логического вывода модели. - Подпись рассуждений (
thoughtSignature): зашифрованный снимок состояния логического вывода. - Данные изображения (
inlineData): собственно base64-данные самого изображения.
Главная проблема в том, что и вторая, и третья части содержат данные в формате base64. Если ваш код не различает их правильно, он может ошибочно принять thoughtSignature за данные изображения и попытаться их декодировать — и, разумеется, ничего не получится.

Технические принципы thoughtSignature в API Nano Banana 2
Разобравшись с тем, что thoughtSignature — это вовсе не изображение, давайте детально рассмотрим, что же это такое на самом деле.
Суть thoughtSignature
Согласно официальной документации Google:
thoughtSignature (строка, необязательно): «Непрозрачная подпись для процесса мышления, позволяющая повторно использовать его в последующих запросах. Строка в кодировке base64».
Простыми словами: thoughtSignature — это «снимок памяти» процесса мышления модели, который возвращается в виде зашифрованной подписи в формате base64. Его задача — позволить модели «запоминать» ход своих рассуждений в многоходовых диалогах, обеспечивая логическую связность.
Ключевые характеристики:
- Непрозрачность (Opaque): разработчик не может прочитать содержимое и не должен вникать во внутреннюю структуру.
- Криптографическая подпись: подписывается на стороне сервера Google, подделать её невозможно — при передаче случайной строки base64 вы получите ошибку «недействительная подпись».
- Состояние (Stateful): содержит цепочку рассуждений и промежуточные вычисления, которые модель выполнила при генерации текущего ответа.
Разница между thoughtSignature и thought
Эти поля часто путают, но они выполняют совершенно разные функции:
| Поле | Тип | Значение | Читаемость | Назначение |
|---|---|---|---|---|
| thought | boolean | Помечает, является ли текущая часть кратким содержанием мысли | Читаемо (текст) | Демонстрация процесса рассуждения модели |
| thoughtSignature | string (base64) | Зашифрованный снимок состояния рассуждений | Нечитаемо (шифр) | Передача состояния рассуждений в диалоге |
thought — это краткое изложение рассуждений для человека, а thoughtSignature — это «воспоминания» о рассуждениях для самой модели.
Зачем API Nano Banana 2 нужен thoughtSignature
Nano Banana 2 относится к серии Gemini 3.1 и поддерживает режим Thinking (мышление). Перед генерацией изображения модель проводит внутренний анализ: оценивает намерение промпта, планирует композицию, подбирает цветовую схему и т.д.
Полное состояние этого процесса сжимается и шифруется в thoughtSignature. Когда вы редактируете изображение в ходе диалога (например, просите «смени фон на синий»), модели необходимо восстановить предыдущее состояние рассуждений, чтобы точно понять, что именно нужно изменить.
Если не передавать thoughtSignature обратно:
- В чисто текстовых сценариях: ошибки не будет, но качество рассуждений и связность упадут.
- В сценариях вызова инструментов/функций: вернется ошибка HTTP 400.
- В многоходовых диалогах по редактированию изображений: контекст может потеряться, и результат редактирования будет неточным.
🎯 Совет для разработчиков: в любых сценариях многоходового диалога всегда сохраняйте и передавайте
thoughtSignatureобратно. При использовании APIYI (apiyi.com) платформа автоматически берет на себя передачу подписей и совместимость форматов, поэтому вам не нужно управлять этим вручную.
Как правильно работать с thoughtSignature в API Nano Banana 2
Минималистичный пример: корректный разбор ответа и разделение изображения и подписи
Следующий код показывает, как правильно извлечь изображение из ответа Nano Banana 2 и сохранить thoughtSignature для последующего использования:
from google import genai
from google.genai import types
client = genai.Client(api_key="YOUR_API_KEY")
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=["Нарисуй белого кота под сакурой"],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(image_size="2K"),
thinking_config=types.ThinkingConfig(
include_thoughts=True
),
)
)
saved_signature = None
for part in response.parts:
if hasattr(part, 'thought') and part.thought:
print(f"Процесс мышления: {part.text[:100]}...")
elif hasattr(part, 'thought_signature') and part.thought_signature:
saved_signature = part.thought_signature # Сохраняем, НЕ декодируем!
print("thoughtSignature сохранена (это не изображение)")
elif image := part.as_image():
image.save("cat_sakura.png", format="PNG")
print("Изображение сохранено")
Посмотреть полный код для передачи thoughtSignature в многоходовом диалоге
from google import genai
from google.genai import types
client = genai.Client(api_key="YOUR_API_KEY")
# Первый шаг: генерация изображения
response1 = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=["Нарисуй белого кота под сакурой"],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(image_size="2K"),
thinking_config=types.ThinkingConfig(
include_thoughts=True
),
)
)
# Извлекаем изображение и подпись
image_data = None
thought_signature = None
model_parts = []
for part in response1.parts:
model_parts.append(part) # Сохраняем полные части ответа
if hasattr(part, 'thought_signature') and part.thought_signature:
thought_signature = part.thought_signature
elif image := part.as_image():
image.save("round1.png", format="PNG")
# Второй шаг: редактирование на основе предыдущего результата
# Ключевой момент: передаем полные части (включая thoughtSignature) как историю
history = [
{"role": "user", "parts": [{"text": "Нарисуй белого кота под сакурой"}]},
{"role": "model", "parts": model_parts}, # Содержит thoughtSignature
]
response2 = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=history + [
{"role": "user", "parts": [{"text": "Смени фон на ночное небо и добавь луну"}]}
],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(image_size="2K"),
)
)
for part in response2.parts:
if image := part.as_image():
image.save("round2_edited.png", format="PNG")
print("Отредактированное изображение сохранено")
Совет: при вызове Nano Banana 2 через APIYI (apiyi.com) платформа предоставляет интерфейс, совместимый с OpenAI, и автоматически обрабатывает передачу
thoughtSignature, избавляя вас от необходимости вручную управлять состоянием подписи в диалогах.
Распространенные ошибки и решения при работе с thoughtSignature в API Nano Banana 2
Сводная таблица типичных проблем
| Сценарий | Проблема | Причина | Решение |
|---|---|---|---|
| Декодирование подписи как изображения | Ошибка при декодировании base64 | thoughtSignature — это зашифрованные данные, а не картинка |
Проверяйте наличие поля inlineData перед декодированием |
| Потеря подписи в многоходовом диалоге | Снижение качества ответов или ошибка 400 | Подпись не была передана обратно | Сохраняйте полные parts, включая подпись, для следующего запроса |
| Подделка подписи | Ошибка "invalid signature" | Подпись проходит проверку на стороне сервера | Используйте только то значение, которое API вернуло изначально |
| Различия в именовании полей | Ошибки доступа к полям | В REST используется camelCase, в SDK — snake_case | REST: thoughtSignature, Python: thought_signature |
| Пропуск в потоковом ответе | Подпись не получена | Она может находиться в пустом текстовом блоке последнего чанка | Проверяйте поле подписи, даже если text пуст |
Соответствие имен полей thoughtSignature в API Nano Banana 2
Именование полей зависит от способа вызова, что часто сбивает с толку:
| Способ вызова | Имя поля | Расположение |
|---|---|---|
| REST API (исходный JSON) | thoughtSignature |
parts[].thoughtSignature |
| Python SDK | thought_signature |
part.thought_signature |
| OpenAI-совместимый формат (прокси) | thought_signature |
provider_specific_fields.thought_signature |
Аварийное решение для API Nano Banana 2: фиктивная (dummy) подпись
Если вы переносите старую историю диалогов и у вас нет валидной thoughtSignature, Google предоставляет специальное значение для обхода:
DUMMY_SIGNATURE = "context_engineering_is_the_way_to_go"
Передача этой строки в качестве значения thoughtSignature поможет избежать ошибки 400. Однако это лишь временная мера, которая может негативно повлиять на логическую связность ответов модели.
🎯 Лучшая практика: Сохраняйте все
thoughtSignatureс самого первого вызова, чтобы выстроить корректную цепочку истории диалога.
Если ручное управление кажется слишком сложным, использование OpenAI-совместимого интерфейса через APIYI (apiyi.com) поможет значительно упростить процесс.

Часто задаваемые вопросы
Q1: Что можно получить при декодировании base64-данных thoughtSignature?
Ничего осмысленного. Это зашифрованные бинарные данные с цифровой подписью, которые по своей сути являются «непрозрачными» (opaque). Вы можете декодировать base64 в последовательность байтов, но они не соответствуют ни одному известному формату файлов — это не изображения, не текст и не JSON. Единственный правильный способ работы с ними — сохранять и передавать обратно в исходном виде.
Q2: Что будет, если не передавать thoughtSignature обратно?
Возможны два сценария: 1) В обычном текстовом диалоге ошибки не возникнет, но связность рассуждений модели снизится, и качество последующих ответов может оказаться хуже ожидаемого; 2) В сценариях вызова функций (function calling) модели серии Gemini 3 будут возвращать ошибку HTTP 400. В многоходовых диалогах по редактированию изображений в Nano Banana 2 потеря подписи приведет к тому, что модель не сможет корректно восстановить контекст, и результат редактирования может быть неточным. Рекомендуем использовать APIYI (apiyi.com) через совместимый с OpenAI интерфейс — платформа автоматически обрабатывает передачу подписей.
Q3: Как отличить в ответе изображения от подписей?
Проверяйте типы полей: части с inlineData (содержащие mime_type и data) — это данные изображений; части с полями thoughtSignature / thought_signature — это подписи; части с thought: true — это текст с кратким изложением хода мыслей. При написании кода сначала проверяйте наличие inlineData, а затем — остальные поля.
Q4: Как быть, если в старой истории диалогов нет thoughtSignature?
Google предоставляет специальное фиктивное значение подписи "context_engineering_is_the_way_to_go", которое можно использовать в качестве временного значения thoughtSignature, чтобы избежать ошибки 400. Однако это лишь способ обеспечения совместимости, он не обладает реальной способностью восстанавливать логику рассуждений. В долгосрочной перспективе рекомендуется сохранять все подписи с самого начала нового диалога.
Резюме
Ключевые моменты о thoughtSignature в API Nano Banana 2:
- Это не изображение:
thoughtSignature— это зашифрованная подпись процесса рассуждений, а не base64-данные изображения; её невозможно декодировать в какой-либо графический формат. - Необходимо передавать обратно в исходном виде: Сохраняйте и возвращайте
thoughtSignatureв многоходовых диалогах, иначе вызов инструментов приведет к ошибке 400, а качество текстового диалога упадет. - Правильно различайте три типа частей (part): с
inlineData— изображения, сthoughtSignature— подписи, сthought: true— краткое изложение мыслей.
Поняв суть этого поля, вы больше не попадете в ловушку «декодирования подписи как изображения» при работе с ответами API Nano Banana 2.
Рекомендуем использовать APIYI (apiyi.com) для быстрой проверки функций редактирования изображений в многоходовых диалогах Nano Banana 2: платформа автоматически обрабатывает передачу thoughtSignature, предоставляет бесплатные лимиты и унифицированный интерфейс.
📚 Справочные материалы
-
Официальная документация Thought Signatures: Полное описание механизма thoughtSignature от Google.
- Ссылка:
ai.google.dev/gemini-api/docs/thought-signatures - Описание: содержит определения полей, правила передачи данных и примеры многоходовых диалогов.
- Ссылка:
-
Документация режима Gemini Thinking: Способы активации и параметры конфигурации функции Thinking.
- Ссылка:
ai.google.dev/gemini-api/docs/thinking - Описание: разбор конфигураций
include_thoughts,thinking_levelи других.
- Ссылка:
-
Справочник API логических выводов Vertex AI: Полное определение полей объекта Part в REST API.
- Ссылка:
docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/inference - Описание: включает определения типов и ограничения использования
thoughtSignature.
- Ссылка:
-
Центр документации APIYI: Упрощенная схема вызова Nano Banana 2 через совместимый с OpenAI интерфейс.
- Ссылка:
docs.apiyi.com - Описание: автоматическая обработка передачи
thoughtSignatureдля снижения сложности разработки.
- Ссылка:
Автор: Техническая команда APIYI
Техническое обсуждение: Приглашаем к дискуссии в комментариях. Больше материалов можно найти в центре документации APIYI по адресу docs.apiyi.com.
