Nota do autor: uma análise profunda da essência do campo thoughtSignature nas respostas da API Nano Banana 2: não se trata de uma imagem, mas de uma assinatura de pensamento criptografada. Explicaremos detalhadamente a estrutura de resposta do modo Thinking, a forma correta de processá-la e os erros mais comuns.
Muitos desenvolvedores, ao invocar a API Nano Banana 2 para gerar imagens, notam que, além dos dados da imagem, a resposta contém um campo thoughtSignature — que também é uma longa string codificada em base64, parecendo dados de imagem. Após tentar decodificá-la, percebe-se que é impossível convertê-la em uma imagem. Afinal, o que é isso? Este artigo esclarecerá a natureza do thoughtSignature, por que ele não é uma imagem e como lidar com ele corretamente em diálogos de múltiplas rodadas.
Valor central: Ao terminar de ler este artigo, você entenderá o princípio técnico do thoughtSignature, evitará tratá-lo erroneamente como uma imagem e dominará a maneira correta de transmitir a assinatura em diálogos de múltiplas rodadas.

Pontos principais sobre a thoughtSignature da API Nano Banana 2
Vamos direto ao ponto com a dúvida mais frequente: a thoughtSignature não é uma imagem e não pode ser decodificada como tal; ela é uma assinatura criptografada do processo de raciocínio do modelo.
| Ponto | Descrição | Nota para o desenvolvedor |
|---|---|---|
| Essência | Dados binários codificados em base64 de uma assinatura criptografada | Não pode ser decodificada, modificada ou falsificada |
| Conteúdo | Snapshot do estado interno do processo de inferência do modelo | Totalmente opaco para o desenvolvedor |
| Uso | Manter a continuidade do raciocínio em conversas de múltiplos turnos | Deve ser reenviada exatamente como está na próxima requisição |
| Formato | Parece uma imagem em base64, mas não é | Sem magic bytes, não pode ser reconhecida como nenhum formato de imagem |
| Obrigatório | Deve ser transmitida em cenários de invocação de ferramentas (caso contrário, erro 400) | Pode ser omitida em cenários de texto puro, mas reduzirá a qualidade |
Como é a thoughtSignature na resposta da API Nano Banana 2?
Ao chamar a API Nano Banana 2 para geração de imagens, o array parts na resposta pode conter vários elementos. A estrutura típica da resposta é esta:
{
"candidates": [{
"content": {
"role": "model",
"parts": [
{
"text": "Deixe-me pensar sobre como gerar esta imagem...",
"thought": true
},
{
"text": "",
"thoughtSignature": "CpcHAdHtim9+q4rstcbvQC0ic4x1/vqQlCJ..."
},
{
"inlineData": {
"mime_type": "image/png",
"data": "iVBORw0KGgoAAAANSUhEUg..."
}
}
]
}
}]
}
Aqui temos três parts, que são:
- Resumo do pensamento (
thought: true): uma visão geral textual do processo de inferência do modelo. - Assinatura de pensamento (
thoughtSignature): um snapshot criptografado do estado de inferência. - Dados da imagem (
inlineData): os dados reais da imagem em base64.
O problema principal é que tanto a segunda quanto a terceira parte contêm dados codificados em base64. Se o seu código não fizer a distinção correta, ele tratará a thoughtSignature erroneamente como dados de imagem para decodificação — e você descobrirá que é impossível convertê-la em uma imagem.

Princípios técnicos da thoughtSignature na API Nano Banana 2
Agora que entendemos que thoughtSignature não é uma imagem, vamos analisar o que ela realmente é.
A essência da thoughtSignature
De acordo com a definição oficial do Google:
thoughtSignature (string, opcional): "Uma assinatura opaca para o pensamento, permitindo que seja reutilizada em solicitações subsequentes. Uma string codificada em base64."
Em termos simples: a thoughtSignature é um "snapshot de memória" do processo de raciocínio do modelo, retornado como uma string codificada em base64 após uma assinatura criptográfica. Sua função é permitir que o modelo "se lembre" do processo de inferência anterior em diálogos de várias rodadas, mantendo assim a coerência do pensamento.
Algumas características principais:
- Opaca: Os desenvolvedores não podem interpretar seu conteúdo e não precisam se preocupar com sua estrutura interna.
- Assinatura criptográfica: Assinada pelo servidor do Google, é impossível de falsificar — passar uma string base64 aleatória resultará em um erro de "assinatura inválida".
- Com estado: Contém a cadeia de raciocínio e os resultados de cálculos intermediários que o modelo utilizou ao gerar a resposta atual.
Diferença entre thoughtSignature e thought
Esses dois campos são frequentemente confundidos, mas são completamente diferentes:
| Campo | Tipo | Significado | Legibilidade | Uso |
|---|---|---|---|---|
| thought | boolean | Marca se a parte atual é um resumo do pensamento | Legível (texto) | Exibir o processo de inferência do modelo |
| thoughtSignature | string (base64) | Snapshot criptografado do estado de inferência | Ilegível (cifra) | Transmitir o estado de inferência em diálogos |
thought é o resumo de inferência para humanos, enquanto thoughtSignature é a memória de inferência para o modelo "ler".
Por que a API Nano Banana 2 precisa da thoughtSignature?
O Nano Banana 2 pertence à série Gemini 3.1 e suporta o modo Thinking (pensamento). Antes de gerar uma imagem, o modelo realiza um raciocínio interno — analisando a intenção do comando, planejando a composição, escolhendo esquemas de cores, etc.
O estado completo desse processo de raciocínio é compactado e criptografado na thoughtSignature. Quando você realiza edições de imagem em um diálogo de várias rodadas (como "mude o fundo para azul"), o modelo precisa restaurar o estado de raciocínio anterior para entender com precisão a sua intenção de modificação.
Se você não retornar a thoughtSignature:
- Cenários de texto puro: Não gera erro, mas a qualidade da inferência e a coerência diminuem.
- Cenários de chamada de ferramenta/função: Retorna diretamente um erro HTTP 400.
- Diálogos de edição de imagem: Pode perder o contexto, resultando em edições imprecisas.
🎯 Dica de desenvolvimento: Em qualquer cenário de diálogo de várias rodadas, você deve preservar e retornar a
thoughtSignatureintegralmente. Ao utilizar a APIYI (apiyi.com), a plataforma gerencia automaticamente a transmissão e a compatibilidade de formato da assinatura, sem que o desenvolvedor precise gerenciá-la manualmente.
Como lidar corretamente com a thoughtSignature na API Nano Banana 2
Exemplo minimalista: analisando corretamente a resposta e distinguindo imagem de assinatura
O código a seguir mostra como extrair corretamente a imagem da resposta do Nano Banana 2, salvando a thoughtSignature para uso posterior:
from google import genai
from google.genai import types
client = genai.Client(api_key="SUA_CHAVE_API")
response = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=["Desenhe um gato branco sob uma cerejeira"],
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"Processo de pensamento: {part.text[:100]}...")
elif hasattr(part, 'thought_signature') and part.thought_signature:
saved_signature = part.thought_signature # Salve, não decodifique!
print("thoughtSignature salva (não é uma imagem)")
elif image := part.as_image():
image.save("gato_cerejeira.png", format="PNG")
print("Imagem salva")
Ver código completo para retornar a thoughtSignature em diálogos de várias rodadas
from google import genai
from google.genai import types
client = genai.Client(api_key="SUA_CHAVE_API")
# Primeira rodada: gerar imagem
response1 = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=["Desenhe um gato branco sob uma cerejeira"],
config=types.GenerateContentConfig(
response_modalities=["TEXT", "IMAGE"],
image_config=types.ImageConfig(image_size="2K"),
thinking_config=types.ThinkingConfig(
include_thoughts=True
),
)
)
# Extrair imagem e assinatura
image_data = None
thought_signature = None
model_parts = []
for part in response1.parts:
model_parts.append(part) # Manter as partes completas
if hasattr(part, 'thought_signature') and part.thought_signature:
thought_signature = part.thought_signature
elif image := part.as_image():
image.save("rodada1.png", format="PNG")
# Segunda rodada: editar com base no resultado anterior
# Fundamental: passe as partes completas da rodada anterior (incluindo a thoughtSignature) como histórico
history = [
{"role": "user", "parts": [{"text": "Desenhe um gato branco sob uma cerejeira"}]},
{"role": "model", "parts": model_parts}, # Contém a thoughtSignature
]
response2 = client.models.generate_content(
model="gemini-3.1-flash-image-preview",
contents=history + [
{"role": "user", "parts": [{"text": "Mude o fundo para um céu noturno e adicione a lua"}]}
],
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("rodada2_editada.png", format="PNG")
print("Imagem editada salva")
Dica: Ao utilizar o Nano Banana 2 via APIYI (apiyi.com), a plataforma fornece uma interface compatível com OpenAI que gerencia automaticamente a transmissão da
thoughtSignature, eliminando a necessidade de gerenciar manualmente o estado da assinatura em diálogos de várias rodadas.
title: "Erros comuns e soluções para o thoughtSignature da API Nano Banana 2"
description: "Guia prático sobre como lidar com o campo thoughtSignature na API Nano Banana 2, evitando erros comuns e mantendo o histórico de conversação."
Erros comuns e soluções para o thoughtSignature da API Nano Banana 2
Resumo de cenários de erro
| Cenário | Problema | Causa | Solução |
|---|---|---|---|
| Decodificar assinatura como imagem | Erro após decodificação base64 | thoughtSignature é dado criptografado, não uma imagem |
Verifique se existe o campo inlineData antes de decodificar |
| Perda de assinatura em conversas | Queda na qualidade ou erro 400 | Não houve o reenvio do thoughtSignature |
Salve todos os parts incluindo a assinatura para a próxima rodada |
| Forjar assinatura | Erro "invalid signature" | A assinatura possui validação de hash | Use exatamente o valor retornado pela API |
| Nomes de campos inconsistentes | Diferenças entre Python e REST | REST usa camelCase, SDK usa snake_case | REST: thoughtSignature, Python: thought_signature |
| Omissão em respostas de streaming | Dados de assinatura perdidos | A assinatura pode estar em um text part vazio no último chunk |
Verifique o campo de assinatura mesmo se o texto estiver vazio |
Comparação de nomenclatura do campo thoughtSignature na API Nano Banana 2
A nomenclatura do campo varia conforme o método de invocação, o que é outra armadilha comum:
| Método de invocação | Nome do campo | Localização |
|---|---|---|
| REST API (JSON original) | thoughtSignature |
parts[].thoughtSignature |
| Python SDK | thought_signature |
part.thought_signature |
| Formato compatível com OpenAI (proxy) | thought_signature |
provider_specific_fields.thought_signature |
Solução de emergência para a API Nano Banana 2: assinatura dummy
Se você estiver migrando um histórico de conversas antigo e não possuir um thoughtSignature válido, o Google disponibiliza um valor especial para contornar a situação:
DUMMY_SIGNATURE = "context_engineering_is_the_way_to_go"
Passar essa string como valor de thoughtSignature evita o erro 400. No entanto, esta é apenas uma solução de emergência, e a coerência do raciocínio do Modelo de Linguagem Grande será afetada.
🎯 Melhor prática: Salve todos os
thoughtSignaturedesde a primeira invocação para construir uma cadeia de histórico de conversação correta.
Se o gerenciamento manual parecer complexo demais, utilizar a interface compatível com OpenAI através da APIYI (apiyi.com) pode reduzir drasticamente a complexidade.

Perguntas Frequentes
Q1: O que pode ser decodificado a partir dos dados base64 de thoughtSignature?
Não é possível decodificar nada com significado. Trata-se de dados binários com assinatura criptografada, projetados para serem opacos. Você pode decodificar o base64 para obter uma sequência de bytes binários, mas esses bytes não correspondem a nenhum formato de arquivo conhecido — não são imagens, textos ou JSON. A única forma correta de lidar com isso é salvar e reenviar os dados exatamente como estão.
Q2: O que acontece se eu não reenviar a thoughtSignature?
Existem dois cenários: 1) Em conversas apenas de texto, não haverá erro, mas a coerência do raciocínio do Modelo de Linguagem Grande diminuirá e a qualidade das respostas subsequentes pode ficar abaixo do esperado; 2) Em cenários de invocação do modelo (function calling), os modelos da série Gemini 3 retornarão diretamente um erro HTTP 400. Para conversas de múltiplas rodadas de edição de imagem no Nano Banana 2, a perda da assinatura impedirá que o modelo recupere o contexto corretamente, podendo resultar em edições imprecisas. Recomendamos utilizar a interface compatível com OpenAI via APIYI (apiyi.com), onde a plataforma gerencia automaticamente a transmissão da assinatura.
Q3: Como distinguir o que é imagem e o que é assinatura na resposta?
Basta verificar o tipo de campo: partes que contêm inlineData (incluindo mime_type e data) são dados de imagem; partes com campos thoughtSignature / thought_signature são assinaturas; e partes com thought: true são textos de resumo de pensamento. Ao implementar o código, verifique primeiro a existência de inlineData e, em seguida, verifique os outros campos.
Q4: Como proceder se o histórico de conversas antigo não possuir thoughtSignature?
O Google disponibiliza um valor de assinatura fictício especial: "context_engineering_is_the_way_to_go". Ele pode ser usado como um valor temporário para thoughtSignature para evitar erros 400. No entanto, esta é apenas uma solução de compatibilidade e não possui a capacidade real de recuperação de raciocínio. A recomendação a longo prazo é salvar todas as assinaturas integralmente desde o início de cada nova conversa.
Resumo
Pontos principais sobre a thoughtSignature na API do Nano Banana 2:
- Não é uma imagem:
thoughtSignatureé uma assinatura criptografada do processo de pensamento, não dados de imagem em base64, e não pode ser decodificada em nenhum formato de imagem. - Deve ser reenviada exatamente como está: Salve e reenvie a
thoughtSignatureem conversas de múltiplas rodadas; caso contrário, a invocação do modelo resultará em erro 400 e a qualidade da conversa textual será prejudicada. - Diferencie corretamente os três tipos de partes: Partes com
inlineDatasão imagens, partes comthoughtSignaturesão assinaturas e partes comthought: truesão resumos de pensamento.
Ao compreender a natureza deste campo, você evitará cair na armadilha de tentar decodificar a assinatura como se fosse uma imagem ao processar as respostas da API do Nano Banana 2.
Recomendamos utilizar a APIYI (apiyi.com) para verificar rapidamente a funcionalidade de edição de imagem em múltiplas rodadas do Nano Banana 2. A plataforma gerencia automaticamente a transmissão da thoughtSignature, oferecendo créditos gratuitos e uma interface unificada.
📚 Referências
-
Documentação oficial do Thought Signatures: Explicação completa do Google sobre o mecanismo thoughtSignature.
- Link:
ai.google.dev/gemini-api/docs/thought-signatures - Descrição: Contém definições de campos, regras de transmissão e exemplos de conversas em múltiplos turnos.
- Link:
-
Documentação do modo Gemini Thinking: Como ativar e configurar os parâmetros da função Thinking.
- Link:
ai.google.dev/gemini-api/docs/thinking - Descrição: Entenda configurações como
include_thoughtsethinking_level.
- Link:
-
Referência da API de inferência do Vertex AI: Definição completa dos campos do objeto Part na API REST.
- Link:
docs.cloud.google.com/vertex-ai/generative-ai/docs/model-reference/inference - Descrição: Inclui definições de tipo e restrições de uso para o thoughtSignature.
- Link:
-
Central de Documentação APIYI: Solução simplificada para invocar o Nano Banana 2 via interface compatível com OpenAI.
- Link:
docs.apiyi.com - Descrição: Processamento automático da transmissão de thoughtSignature, reduzindo a complexidade do desenvolvimento.
- Link:
Autor: Equipe técnica da APIYI
Troca de conhecimentos: Sinta-se à vontade para discutir na seção de comentários. Para mais materiais, visite a central de documentação da APIYI em docs.apiyi.com
