|

Interpretando a thoughtSignature da API Nano Banana 2: por que não é uma imagem após a decodificação base64?

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.

nano-banana-2-api-thoughtsignature-explained-thinking-mode-guide-pt-pt 图示

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:

  1. Resumo do pensamento (thought: true): uma visão geral textual do processo de inferência do modelo.
  2. Assinatura de pensamento (thoughtSignature): um snapshot criptografado do estado de inferência.
  3. 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.

nano-banana-2-api-thoughtsignature-explained-thinking-mode-guide-pt-pt 图示

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 thoughtSignature integralmente. 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 thoughtSignature desde 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.

nano-banana-2-api-thoughtsignature-explained-thinking-mode-guide-pt-pt 图示

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:

  1. 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.
  2. Deve ser reenviada exatamente como está: Salve e reenvie a thoughtSignature em 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.
  3. Diferencie corretamente os três tipos de partes: Partes com inlineData são imagens, partes com thoughtSignature são assinaturas e partes com thought: true sã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

  1. 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.
  2. 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_thoughts e thinking_level.
  3. 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.
  4. 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.

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

Similar Posts