|

Explicação detalhada do mecanismo de pensamento visual do Gemini 3: 3 passos para extrair corretamente a imagem final e evitar capturar a imagem de pensamento intermediária

Ao usar a API do Gemini 3 Pro Image para gerar imagens e exibir diretamente a primeira imagem retornada, o resultado costuma parecer "estranho": composição bizarra, detalhes mal acabados ou até partes faltantes na tela. Isso não significa que o desempenho do modelo caiu, mas que você está escolhendo a imagem errada — a primeira imagem provavelmente é apenas um "rascunho de pensamento" do modelo, e a versão final está, na verdade, na última posição da resposta.

gemini-3-image-thinking-process-guide-pt-pt 图示

Este artigo detalha, com base na documentação oficial do Google AI, a estrutura de resposta do mecanismo de pensamento de imagem do Gemini 3, explica por que uma chamada pode retornar de 2 a 3 imagens, como identificar a imagem final com precisão usando o campo part.thought e a assinatura thought_signature, e fornece o código de extração correto em Python, Node.js e cURL. Todos os exemplos baseiam-se no encaminhamento transparente da APIYI (apiyi.com) — a camada de proxy mantém a estrutura de resposta original do Gemini, permitindo que desenvolvedores tratem os dados conforme a especificação oficial.

Princípios fundamentais do mecanismo de pensamento de imagem do Gemini 3

Antes de colocar a mão na massa, vamos entender o problema básico: "por que uma chamada retorna várias imagens?".

Por que o pensamento de imagem do Gemini 3 não pode ser desativado

O Google introduziu no gemini-3-pro-image-preview (nome comercial Nano Banana Pro) um mecanismo de "Thinking" (pensamento) originado do mesmo modelo de texto do Gemini — antes de gerar a imagem final, o modelo usa até 2 imagens temporárias para testar composição, layout e renderização de texto, agindo como um designer que faz um rascunho antes da versão final.

A documentação oficial esclarece 3 fatos fundamentais:

Fato Explicação
Ativado por padrão, impossível desativar A funcionalidade Thinking é forçada na camada da API, não existem parâmetros de controle
Até 2 imagens temporárias O modelo pode gerar até 2 rascunhos de pensamento, mas nem sempre acontece
A última é a imagem final A última imagem da etapa de pensamento é o resultado final renderizado
Tokens de pensamento são cobrados Mesmo que você não peça o conteúdo do pensamento, os tokens são consumidos e cobrados

Em resumo: a resposta que você recebe já contém várias imagens por natureza — isso não é um bug, é o design do produto. A questão não é "como desligar", mas "como pegar apenas a imagem final corretamente".

🎯 Compreensão de Arquitetura: O mecanismo de pensamento do Gemini 3 compartilha o mesmo motor de "Thinking" de cadeia de raciocínio do modelo de texto Gemini 3 Pro. Isso explica por que o Nano Banana Pro supera significativamente o antigo Nano Banana em renderização de textos longos e consistência entre múltiplos sujeitos. Ao usar a APIYI, todos os comportamentos de pensamento são idênticos à conexão direta com o Google; a camada de proxy não descarta nenhum dado de pensamento.

Revisão de erros comuns dos clientes

O cenário de falha mais comum na comunidade de usuários é:

Chamar API → Receber resposta → A resposta contém um array de "parts" → Pegar diretamente a imagem em "parts[0]" → Exibir ao usuário

Esse pseudocódigo funcionava bem na era do Nano Banana anterior (Gemini 2.5 Flash Image), porque aquela versão retornava apenas uma imagem por padrão. Ao atualizar para o Gemini 3 Pro Image, o mesmo código trata o "rascunho de pensamento" como o produto final — resultando em uma imagem que claramente não condiz com a descrição do comando ou apresenta composições estranhas (um "semiproduto").

Esse problema é sorrateiro porque:

  • Não falha sempre: Em comandos simples, o modelo pode não acionar o pensamento e retornar apenas uma imagem.
  • Não gera erros: A estrutura da resposta é válida, e acessar parts[0] não causa exceções.
  • Qualidade baixa, mas existe imagem: O usuário acha que o modelo é ruim, quando na verdade o erro é na seleção da imagem.

title: "Guia detalhado: Entendendo a estrutura de resposta do Gemini 3 com processamento de imagem"

Entender o que pode vir em uma resposta de API é o primeiro passo para processar os dados corretamente.

O array parts de uma resposta completa

Quando o pensamento (thinking) do Gemini 3 Pro Image é acionado, o response.candidates[0].content.parts pode ter este formato:

gemini-3-image-thinking-process-guide-pt-pt 图示

candidates[0].content.parts = [
  { text: "Preciso considerar a composição...", thought: true },
  { inline_data: { mime_type: "image/png", data: "..." }, thought: true },   // Rascunho 1
  { inline_data: { mime_type: "image/png", data: "..." }, thought: true },   // Rascunho 2
  { inline_data: { mime_type: "image/png", data: "..." }, thought_signature: "..." }  // Imagem final
]

O mal-entendido sobre esse array é a fonte da maioria dos bugs. Lembre-se das 3 regras abaixo para escrever um código robusto.

3 Sinais Oficiais para identificar a imagem final

O Google forneceu 3 sinais para identificar a imagem final, use por ordem de prioridade:

Prioridade Sinal de Identificação Explicação Confiabilidade
★★★ part.thought === false (ou campo ausente) Marcado explicitamente como não sendo conteúdo de pensamento Máxima
★★ Presença do campo thought_signature Apenas a imagem final contém a assinatura, rascunhos não Alta
Último inline_data no array Documentação oficial confirma que a "última imagem é a final" Backup

A abordagem mais segura é combinar os usos: verifique primeiro o campo thought, se não houver, use thought_signature como backup e, se ainda assim não funcionar, pegue o último inline_data.

Diferenças de thinking_level no Gemini 3.1 Flash Image

É importante notar que nem todos os modelos de imagem do Gemini se comportam da mesma maneira:

Modelo Pensamento (Default) thinking_level configurável Cenário ideal
gemini-3-pro-image-preview Forçado (Ativado) ❌ Não ajustável Alta fidelidade,素材 profissional
gemini-3-flash-image Padrão: minimal ✅ minimal / high Interação em tempo real, geração em lote
gemini-2.5-flash-image Sem pensamento Compatibilidade legada

O Gemini 3.1 Flash permite ajustar manualmente o thinking_level para obter uma composição mais refinada ou reduzir para minimal para ter um tempo de resposta mais rápido — essa flexibilidade não existe na versão Pro.

🎯 Sugestão de escolha: Para funções de geração de imagem em produtos B2C, recomendamos o uso padrão do gemini-3-flash-image + thinking_level=minimal (mais rápido e barato). Quando o usuário clicar em "Modo de alta qualidade", mude para o gemini-3-pro-image-preview (pensamento ativo e alta fidelidade). Na plataforma APIYI (apiyi.com), ambos os modelos utilizam a mesma chave API e base_url, permitindo uma alternância transparente.

Código para processar corretamente o pensamento em imagens do Gemini 3

Com a teoria clara, vamos ao código. Os exemplos abaixo utilizam o encaminhamento transparente da APIYI (apiyi.com) — seu código que originalmente conectava ao Google AI Studio só precisa mudar a base_url para o endereço da APIYI e a api_key para uma chave da APIYI; a lógica de processamento da resposta permanece idêntica.

Implementação correta com o SDK oficial (Python)

from google import genai

client = genai.Client(
    api_key="sk-sua-chave-apiyi",
    http_options={"base_url": "https://vip.apiyi.com/v1beta"}
)

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents="Um Shiba Inu em estilo cyberpunk, sob um letreiro neon, alta definição 4K",
    config={"response_modalities": ["IMAGE"]}
)

# ✅ Correto: Filtra todas as partes de pensamento (thought), salvando apenas a imagem final
for part in response.parts:
    if getattr(part, "thought", False):
        continue  # Pular rascunhos de pensamento
    if hasattr(part, "as_image"):
        image = part.as_image()
        if image:
            image.save("resultado_final.png")
            break  # A primeira imagem não classificada como pensamento é a final

Exemplo de como NÃO fazer (erro comum dos usuários):

# ❌ Erro: Pegar diretamente a primeira imagem, corre o risco de pegar um rascunho
image_part = response.parts[0]
image_bytes = image_part.inline_data.data
# A imagem gerada pode ser um esboço inacabado

Implementação correta (Node.js / TypeScript)

import { GoogleGenAI } from "@google/genai";

const ai = new GoogleGenAI({
  apiKey: process.env.APIYI_KEY,
  httpOptions: { baseUrl: "https://vip.apiyi.com/v1beta" }
});

const response = await ai.models.generateContent({
  model: "gemini-3-pro-image-preview",
  contents: "Um Shiba Inu em estilo cyberpunk, sob um letreiro neon, alta definição 4K",
  config: { responseModalities: ["IMAGE"] }
});

const parts = response.candidates?.[0]?.content?.parts ?? [];

// ✅ Percorrer de trás para frente, a primeira imagem que não seja thought é a final
let finalImage: string | null = null;
for (let i = parts.length - 1; i >= 0; i--) {
  const p = parts[i];
  if (p.thought === true) continue;
  if (p.inlineData?.mimeType?.startsWith("image/")) {
    finalImage = p.inlineData.data;
    break;
  }
}

if (finalImage) {
  fs.writeFileSync("final.png", Buffer.from(finalImage, "base64"));
}

Versão via linha de comando (cURL + jq)

Se você estiver fazendo chamadas via script shell, pode usar o jq para filtrar:

curl -sS https://vip.apiyi.com/v1beta/models/gemini-3-pro-image-preview:generateContent \
  -H "x-goog-api-key: $APIYI_KEY" \
  -H "content-type: application/json" \
  -d '{
    "contents": [{
      "parts": [{"text": "Um Shiba Inu estilo cyberpunk"}]
    }],
    "generationConfig": {"responseModalities": ["IMAGE"]}
  }' | jq -r '
    .candidates[0].content.parts
    | map(select(.thought != true))
    | map(select(.inlineData.mimeType | startswith("image/")))
    | last.inlineData.data
  ' | base64 -d > final.png

Esta expressão jq executa três tarefas: filtra thought: true, mantém apenas o mime type de imagem e seleciona a last (última) — seguindo perfeitamente as 3 regras oficiais de identificação.

🎯 Ponto de verificação de código: Durante o code review, ao encontrar código que percorre respostas de imagem do Gemini, certifique-se de que há filtragem de pensamento. Recomendamos encapsular uma função utilitária extractFinalImage() em sua equipe; todos os códigos de negócio devem chamar essa função para evitar erros. Se você acessa via APIYI (apiyi.com), pode testar este código localmente e reutilizá-lo diretamente em produção.

Tópicos Avançados sobre o Raciocínio de Imagens no Gemini 3

Edições multirrodada exigem o retorno do thought_signature

O Nano Banana Pro oferece suporte a "edições contínuas" — quando um usuário diz "mude o fundo para a praia" e depois "mude a expressão do cachorro para feliz" — mas a documentação oficial exige explicitamente que o thought_signature da rodada anterior seja retornado em conversas multirrodada. Caso contrário, o modelo não consegue manter o contexto de raciocínio anterior e a qualidade cairá significativamente.

A forma correta de realizar chamadas multirrodada:

# Primeira rodada
response1 = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents="Um Shiba Inu correndo no parque"
)

# Extrair o objeto part da imagem final (contendo o thought_signature)
final_part = next(
    p for p in response1.parts
    if not getattr(p, "thought", False) and hasattr(p, "inline_data")
)

# Segunda rodada: adicionar o final_part completo de volta ao histórico
response2 = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents=[
        {"role": "user", "parts": [{"text": "Um Shiba Inu correndo no parque"}]},
        {"role": "model", "parts": [final_part]},  # Contém thought_signature
        {"role": "user", "parts": [{"text": "Mude o fundo para um pôr do sol na praia"}]}
    ]
)

Visualizando o processo de raciocínio (para depuração)

Se você quiser ver o que o modelo "pensou", pode ativar o include_thoughts:

from google.genai import types

response = client.models.generate_content(
    model="gemini-3-pro-image-preview",
    contents="Um prompt complexo para um pôster de marca...",
    config=types.GenerateContentConfig(
        response_modalities=["IMAGE"],
        thinking_config=types.ThinkingConfig(
            include_thoughts=True
        )
    )
)

# Imprimir o processo de raciocínio
for part in response.parts:
    if getattr(part, "thought", False):
        if part.text:
            print(f"[Raciocínio] {part.text}")
        elif hasattr(part, "as_image"):
            img = part.as_image()
            img.save(f"rascunho_{id(part)}.png")  # Salvar rascunho

Isso é extremamente útil ao depurar "por que o resultado gerado não está ideal" — ver os rascunhos ajuda a deduzir qual parte do comando o modelo interpretou mal.

gemini-3-image-thinking-process-guide-pt-pt 图示

Lógica de cobrança de tokens de raciocínio

A cobrança do Gemini 3 Pro Image exige atenção especial dos desenvolvedores:

Tipo de Token Preço (por milhão) Produção obrigatória
Prompt de entrada $2 ✅ Sim
Saída de imagem/texto $12 ✅ Sim
Raciocínio (Thinking) Incluído nos tokens de saída ✅ Obrigatório, não pode ser desativado

Isso significa que, mesmo que você queira apenas a imagem final e não se importe com o processo de raciocínio, os tokens de raciocínio ainda serão gerados e cobrados. O que você pode economizar é apenas o "retorno do conteúdo de raciocínio para você" (parâmetro include_thoughts), não o "processo de raciocínio em si".

🎯 Dicas de otimização de custo: Para cenários simples (como geração de imagens de produtos, ilustrações), use o gemini-3-flash-image + thinking_level=minimal; o custo é significativamente menor que a versão Pro. Para cenários complexos (consistência entre vários objetos, renderização de texto de alta fidelidade), utilize o modelo Pro. Recomendamos ativar o monitoramento de uso ao realizar a invocação do modelo via APIYI (apiyi.com), comparar a relação custo/qualidade entre os dois modelos no seu cenário de negócio e só então definir a configuração de produção.

Prática de resolução de problemas de raciocínio de imagem no Gemini 3

Problema 1: Obter sempre uma imagem de baixa qualidade

Passos de diagnóstico:

# Imprimir o campo de raciocínio (thought) de todas as partes
for i, part in enumerate(response.parts):
    is_thought = getattr(part, "thought", False)
    has_image = hasattr(part, "inline_data")
    has_sig = hasattr(part, "thought_signature")
    print(f"Parte {i}: thought={is_thought}, image={has_image}, signature={has_sig}")

Se a saída contiver várias partes com image=True, o problema é que "várias imagens foram retornadas". Verifique se o seu código está selecionando a parte que aparece primeiro no índice.

Problema 2: Não há campo de raciocínio na estrutura de resposta

Possível causa: Você está usando o JSON bruto retornado pela REST API. O formato camelCase é thought, mas em algumas versões do SDK, o campo pode ter sido convertido para snake_case. É preciso ser compatível com ambos:

def is_thought(part):
    return getattr(part, "thought", None) or \
           getattr(part, "is_thought", None) or \
           (isinstance(part, dict) and part.get("thought", False))

Problema 3: Desejo salvar todas as imagens (para depuração)

O método completo de iteração recomendado pela documentação oficial:

for i, part in enumerate(response.parts):
    if not hasattr(part, "inline_data"):
        continue
    is_draft = getattr(part, "thought", False)
    suffix = "draft" if is_draft else "final"
    filename = f"gemini_output_{suffix}_{i}.png"
    with open(filename, "wb") as f:
        f.write(part.inline_data.data)
    print(f"Salvo: {filename}")

Adaptação do Gemini 3 "Image Thinking" para cenários de negócios reais

Além da teoria e do código básico, existem alguns detalhes que merecem atenção ao aplicar isso em diferentes cenários de negócio.

Cenário 1: Exibição direta de imagens geradas no front-end Web

O front-end recebe a imagem em base64 e precisa convertê-la para o formato data:image/png;base64,xxx para exibi-la. Evite fazer a filtragem de "thought" no front-end — deixe que o back-end retorne um resultado limpo. Caso contrário, o front-end precisará lidar desnecessariamente com a estrutura de resposta do Gemini:

// ❌ Não recomendado: Front-end processando a resposta original do Gemini
const parts = await apiCall();
parts.forEach(p => {
  if (!p.thought) showImage(p.inlineData.data);
});

// ✅ Recomendado: Back-end filtra, front-end consome apenas a imagem final
// API do back-end retorna: { "image": "base64-string" }
const { image } = await fetch("/api/generate").then(r => r.json());
imgEl.src = `data:image/png;base64,${image}`;

Cenário 2: Geração + salvamento em OSS / CDN

Ao salvar imagens geradas em lote no armazenamento de objetos, use o hash para evitar gravações duplicadas:

import hashlib, base64

def save_to_oss(bucket, base64_data):
    binary = base64.b64decode(base64_data)
    fname = f"gemini3/{hashlib.md5(binary).hexdigest()}.png"
    bucket.put_object(fname, binary)
    return fname

final_b64 = extract_final_image(response)
if final_b64:
    url = save_to_oss(my_bucket, final_b64)

Certifique-se de fazer upload apenas da imagem final. Os rascunhos de raciocínio apenas poluirão seu OSS e desperdiçarão custos de armazenamento.

Cenário 3: Processamento correto de respostas em streaming

O Gemini 3 suporta streaming para imagens; os rascunhos de pensamento chegam primeiro, e a imagem final chega depois. Em cenários de streaming, recomendamos a técnica de "sobrescrever enquanto recebe":

stream = client.models.generate_content_stream(
    model="gemini-3-pro-image-preview",
    contents="..."
)

current_image = None
for chunk in stream:
    for part in chunk.parts:
        if getattr(part, "thought", False):
            continue  # Pula os rascunhos
        if hasattr(part, "inline_data") and part.inline_data:
            current_image = part.inline_data.data  # Sobrescreve sempre, mantendo a última

# Após o fim do stream, current_image conterá a imagem final

🎯 Otimização de streaming: Para melhorar a experiência do usuário, você pode exibir os rascunhos de pensamento no front-end como um "preview de carregamento" e substituí-los quando a imagem final chegar. Essa "apresentação progressiva" é muito popular em produtos para o consumidor final (C-end). A APIYI (apiyi.com) suporta totalmente o protocolo de streaming SSE do Gemini, garantindo que o front-end tenha a mesma percepção que uma conexão direta.

Raciocínio de Imagem do Gemini 3 e indicadores de negócio

Dados quantitativos de melhoria de qualidade

De acordo com as divulgações oficiais do Google e testes da comunidade, a qualidade da imagem aumenta significativamente com o "thinking" ativado:

Indicador Gemini 2.5 Flash Image Gemini 3 Pro Image (thinking) Melhoria
Precisão em textos longos ~70% ~95% +35%
Consistência multi-sujeito (5 pessoas) ~60% ~90% +50%
Adesão a composições complexas ~75% ~92% +22%
Taxa de usabilidade da primeira imagem ~80% ~95% +18%

O custo disso é um aumento de 40-80% no tempo de resposta e de 20-40% nos custos de token. Vale a pena? Depende do seu cenário:

  • Materiais de design profissional, anúncios: O ganho de qualidade supera de longe o aumento de custo; altamente recomendado.
  • UGC (conteúdo gerado pelo usuário), conteúdo em lote: Sugerimos usar o Flash com thinking_level=minimal para equilibrar.
  • Interação em tempo real, chatbots: Priorize a velocidade de resposta, o Flash é mais adequado.

🎯 Sugestão de teste A/B: Não escolha o modelo baseando-se apenas em intuição. Recomendamos que você crie chaves separadas para cada modelo na APIYI (apiyi.com), distribua o tráfego em 50/50 na camada de negócio e compare os indicadores reais de satisfação do usuário após 7 dias (taxa de likes, taxa de regeneração, taxa de conversão). Os dados dirão qual modelo realmente vale o investimento.

Perguntas Frequentes sobre o Pensamento Visual do Gemini 3

Q1: Por que meu código de geração de imagens começou a "entregar produtos semiacabados ocasionalmente" após o upgrade para o Gemini 3?

Porque o Gemini 3 Pro Image ativa o "pensamento" (thinking) por padrão, e a resposta pode conter de 1 a 3 imagens. Seu código antigo provavelmente buscava o parts[0], e o parts[0] pode ser apenas um rascunho. Solução: altere seu código para filtrar thought: true e capturar a última imagem que não seja de pensamento.

Q2: O serviço proxy de API da APIYI também tem esse comportamento de "thinking" no Gemini 3?

Exatamente igual. A APIYI (apiyi.com) utiliza uma arquitetura de encaminhamento transparente; os campos thought, thought_signature e inline_data da resposta original do Gemini são transmitidos integralmente, sem qualquer remoção ou alteração. Você pode apontar o código que antes conectava diretamente ao Google AI Studio para a APIYI sem alterar uma única linha, mantendo a compatibilidade total da estrutura de resposta.

Q3: Posso forçar o retorno apenas da imagem final via algum parâmetro?

Não. A documentação oficial é clara ao dizer: "Este recurso é ativado por padrão e não pode ser desativado na API". No entanto, você pode definir include_thoughts: false para que a resposta não contenha o texto do raciocínio — mas os rascunhos de imagem ainda podem estar presentes, por isso a filtragem no nível do código é obrigatória.

Q4: O "thinking" aumentou a latência da resposta, como otimizar?

Três caminhos:

  1. Em cenários simples, mude para gemini-3-flash-image + thinking_level=minimal.
  2. Quando a demanda não for complexa, escreva o comando de forma mais precisa para evitar que o modelo "pense demais".
  3. Use a resposta em stream (streaming), permitindo que o usuário veja o processo de pensamento enquanto a imagem final chega por último.

Q5: Como saber se o "thinking" realmente ocorreu na resposta?

Verifique o campo response.usage_metadata.thoughts_token_count. Se o valor for maior que 0, significa que o "thinking" foi acionado. Esse valor também ajuda a estimar o custo real de inferência.

Q6: Posso construir ou modificar a thought_signature por conta própria?

Não. A thought_signature é uma credencial criptografada emitida pelo servidor do Google, usada para verificar a continuidade do contexto em conversas de vários turnos. Uma assinatura construída manualmente será rejeitada pelo servidor. Em edições de múltiplos turnos, basta reenviar a parte que contém a assinatura na íntegra.

Q7: Como lidar com a incerteza trazida pelo "thinking" ao gerar 100 imagens em lote?

Recomendamos processar a resposta de cada requisição individualmente e registrar o thoughts_token_count. No console da APIYI (apiyi.com), você pode verificar o consumo de tokens por chamada e filtrar as requisições com consumo de "thinking" anormalmente alto para revisão. Para cenários em lote, considere usar a Batch API (o Gemini 3 Pro Image oferece suporte), que reduz o custo pela metade e permite processamento assíncrono.

Resumo e Lista de Verificação de Implementação para o Pensamento Visual do Gemini 3

Revisando o conteúdo, o Pensamento Visual do Gemini 3 trouxe um upgrade de qualidade, mas mudou completamente a estrutura de resposta. Um resumo em uma frase:

Princípio fundamental: Nunca pegue o parts[0] diretamente, sempre filtre thought: true e sempre selecione a última inline_data como a imagem final.

gemini-3-image-thinking-process-guide-pt-pt 图示

Lista de verificação de migração

Se o seu projeto está migrando do Gemini 2.5 para o Gemini 3, verifique esta lista:

  1. Substituir o ID do modelo: gemini-2.5-flash-imagegemini-3-pro-image-preview ou gemini-3-flash-image.
  2. Reescrever o parser de resposta: Substitua todos os parts[0] por "filtrar thought + pegar a última".
  3. Tratar nova assinatura: Preserve a parte que contém thought_signature em conversas de vários turnos.
  4. Validar expectativas de cobrança: Note que os tokens de pensamento são contabilizados na saída, o custo pode subir entre 20% e 40%.
  5. Testes de regressão: Prepare mais de 20 prompts de exemplo e compare a saída do Gemini 2.5 com a do Gemini 3 para evitar surpresas.

Modelo de integração rápida

Use o código abaixo como "modelo padrão" para sua equipe em todas as chamadas de negócio:

def extract_final_image(response):
    """Extrai com segurança a imagem final da resposta do Gemini 3 Image"""
    parts = response.candidates[0].content.parts if response.candidates else []

    # Procure de trás para frente pela primeira imagem que não seja um "thought"
    for part in reversed(parts):
        if getattr(part, "thought", False):
            continue
        if hasattr(part, "inline_data") and part.inline_data:
            mime = part.inline_data.mime_type or ""
            if mime.startswith("image/"):
                return part.inline_data.data  # base64 bytes

    return None  # Imagem final não encontrada, tente novamente

🎯 Dica final: O mecanismo de pensamento visual do Gemini 3 é uma faca de dois gumes — usado corretamente, você obtém uma qualidade de geração de imagem de nível industrial; se usado incorretamente, você recebe um output "aleatório" de semiacabados. Recomendamos testar via APIYI (apiyi.com) com 10 a 20 prompts reais de negócios, garantindo que o código extraia corretamente a imagem final em vários cenários, antes de subir para produção. A plataforma suporta toda a linha Gemini 3 e a resposta da API é idêntica à do Google.


Autor: Equipe Técnica APIYI | Para mais tutoriais sobre geração de imagens com IA, acesse help.apiyi.com

Similar Posts