Como Usar a API Gemini Embedding 2?

Ashley Innocent

Ashley Innocent

11 março 2026

Como Usar a API Gemini Embedding 2?

A API Gemini Embedding 2 do Google permite gerar embeddings para texto, imagens, vídeo, áudio e PDFs. Este guia mostra como usá-la, com exemplos de código reais que você pode executar hoje.

Nota: Este guia aborda a versão de prévia pública (gemini-embedding-2-preview). A API pode mudar antes da disponibilidade geral.

Quer entender primeiro o que é o Gemini Embedding 2? Leia nossa visão geral: O que é o Gemini Embedding 2?

Pré-requisitos

Você precisa de:

Instalação

Instale o SDK:

pip install google-generativeai

Configuração Básica

Configure sua chave de API:

import google.generativeai as genai

# Defina sua chave de API
genai.configure(api_key='YOUR_API_KEY')

Para produção, use variáveis de ambiente:

import os
import google.generativeai as genai

api_key = os.getenv('GEMINI_API_KEY')
genai.configure(api_key=api_key)

Testando com Apidog

Antes de mergulhar no código, você pode testar a API Gemini Embedding diretamente no Apidog:

Captura de tela do Apidog mostrando como testar a API Gemini Embedding 2
  1. Crie uma nova requisição no Apidog
  2. Defina o método como POST
  3. URL: https://generativelanguage.googleapis.com/v1beta/models/gemini-embedding-2-preview:embedContent
  4. Adicione o cabeçalho: x-goog-api-key: YOUR_API_KEY
  5. Corpo (JSON):
{
  "content": {
    "parts": [{
      "text": "What is API testing?"
    }]
  }
}

Isso permite verificar se sua chave de API funciona e ver a estrutura da resposta antes de escrever o código. Você pode salvar isso como um caso de teste e validar respostas de embedding em seu pipeline de CI/CD.

Gerando Embeddings de Texto

O caso de uso mais simples - embutir texto:

import google.generativeai as genai

genai.configure(api_key='YOUR_API_KEY')

# Gerar embedding
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content='Qual é o sentido da vida?'
)

# Obter o vetor de embedding
embedding = result['embedding']
print(f"Dimensões do embedding: {len(embedding)}")
print(f"Primeiros 5 valores: {embedding[:5]}")

Saída:

Embedding dimensions: 3072
First 5 values: [0.0234, -0.0156, 0.0891, -0.0423, 0.0567]

Nota: A estrutura da resposta é result['embedding'], que retorna uma lista de floats. Cada float representa uma dimensão do vetor de embedding.

Usando Instruções de Tarefa

As instruções de tarefa otimizam os embeddings para casos de uso específicos:

# Para consultas de busca
query_result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content='melhores ferramentas de teste de API',
    task_type='RETRIEVAL_QUERY'
)

# Para documentos que você está indexando
doc_result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content='Apidog é uma plataforma de teste de API...',
    task_type='RETRIEVAL_DOCUMENT'
)

Tipos de tarefa disponíveis:

Controlando as Dimensões de Saída

Reduza os custos de armazenamento usando dimensões menores:

# Otimizado para produção: 768 dimensões
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content='Seu texto aqui',
    output_dimensionality=768
)

# Equilibrado: 1536 dimensões
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content='Seu texto aqui',
    output_dimensionality=1536
)

# Qualidade máxima: 3072 dimensões (padrão)
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content='Seu texto aqui',
    output_dimensionality=3072
)

Para a maioria das aplicações, 768 dimensões oferecem qualidade quase máxima com 75% menos armazenamento.

Embutindo Imagens

Embuta imagens para busca visual:

import PIL.Image

# Carregar imagem
image = PIL.Image.open('product-photo.jpg')

# Gerar embedding
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=image
)

embedding = result['embedding']

Você pode embutir até 6 imagens por requisição:

images = [
    PIL.Image.open('image1.jpg'),
    PIL.Image.open('image2.jpg'),
    PIL.Image.open('image3.jpg')
]

result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=images
)

Embutindo Vídeo

Embuta conteúdo de vídeo para busca de vídeo:

# Primeiro, faça o upload do arquivo de vídeo
video_file = genai.upload_file(path='demo-video.mp4')

# Aguardar processamento
import time
while video_file.state.name == 'PROCESSING':
    time.sleep(2)
    video_file = genai.get_file(video_file.name)

# Gerar embedding
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=video_file
)

embedding = result['embedding']

Limites de vídeo:

Embutindo Áudio

Embuta áudio sem transcrição:

# Fazer upload do arquivo de áudio
audio_file = genai.upload_file(path='podcast-episode.mp3')

# Aguardar processamento
while audio_file.state.name == 'PROCESSING':
    time.sleep(2)
    audio_file = genai.get_file(audio_file.name)

# Gerar embedding
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=audio_file
)

embedding = result['embedding']

Limites de áudio:

Embutindo Documentos PDF

Embuta páginas de PDF para busca de documentos:

# Fazer upload do PDF
pdf_file = genai.upload_file(path='user-manual.pdf')

# Aguardar processamento
while pdf_file.state.name == 'PROCESSING':
    time.sleep(2)
    pdf_file = genai.get_file(pdf_file.name)

# Gerar embedding
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=pdf_file
)

embedding = result['embedding']

Limites de PDF:

Embeddings Multimodais (Texto + Imagem)

Combine vários tipos de conteúdo em um único embedding:

import PIL.Image

image = PIL.Image.open('product.jpg')
text = "Fones de ouvido sem fio de alta qualidade com cancelamento de ruído"

# Embutir ambos juntos
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=[text, image]
)

embedding = result['embedding']

Isso captura as relações entre o texto e a imagem em um único embedding.

Processamento em Lotes

Processe vários itens eficientemente:

texts = [
    "Primeiro documento sobre teste de API",
    "Segundo documento sobre automação",
    "Terceiro documento sobre desempenho"
]

embeddings = []
for text in texts:
    result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=text,
        task_type='RETRIEVAL_DOCUMENT',
        output_dimensionality=768
    )
    embeddings.append(result['embedding'])

print(f"Gerados {len(embeddings)} embeddings")

Para grandes lotes, use a API de lote para economizar 50% nos custos.

Construindo um Sistema de Busca Semântica

Aqui está um exemplo completo usando o Gemini Embedding 2 para busca semântica.

Passo 1: Instalar Dependências

pip install google-generativeai numpy scikit-learn

Passo 2: Embutir Seus Documentos

import google.generativeai as genai
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

genai.configure(api_key='YOUR_API_KEY')

# Documentos de exemplo
documents = [
    "Apidog é uma plataforma de teste de API para desenvolvedores",
    "APIs REST usam métodos HTTP como GET, POST, PUT, DELETE",
    "GraphQL fornece uma linguagem de consulta para APIs",
    "A documentação de API ajuda os desenvolvedores a entender os endpoints",
    "Postman é uma ferramenta popular de teste de API"
]

# Gerar embeddings para todos os documentos
doc_embeddings = []
for doc in documents:
    result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=doc,
        task_type='RETRIEVAL_DOCUMENT',
        output_dimensionality=768
    )
    doc_embeddings.append(result['embedding'])

# Converter para array numpy
doc_embeddings = np.array(doc_embeddings)

Passo 3: Criar Função de Busca

def search(query, top_k=3):
    # Embutir a consulta
    query_result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=query,
        task_type='RETRIEVAL_QUERY',
        output_dimensionality=768
    )
    query_embedding = np.array([query_result['embedding']])

    # Calcular similaridades
    similarities = cosine_similarity(query_embedding, doc_embeddings)[0]

    # Obter os melhores resultados
    top_indices = np.argsort(similarities)[::-1][:top_k]

    results = []
    for idx in top_indices:
        results.append({
            'document': documents[idx],
            'score': similarities[idx]
        })

    return results

Passo 4: Buscar

# Testar a busca
results = search("Quais ferramentas posso usar para teste de API?")

for i, result in enumerate(results, 1):
    print(f"{i}. Pontuação: {result['score']:.4f}")
    print(f"   {result['document']}\n")

Saída:

1. Pontuação: 0.8234
   Apidog é uma plataforma de teste de API para desenvolvedores

2. Pontuação: 0.7891
   Postman é uma ferramenta popular de teste de API

3. Pontuação: 0.6543
   A documentação de API ajuda os desenvolvedores a entender os endpoints

Construindo um Sistema RAG

Use o Gemini Embedding 2 para Geração Aumentada por Recuperação (RAG).

Passo 1: Configurar Base de Conhecimento

import google.generativeai as genai
import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

genai.configure(api_key='YOUR_API_KEY')

# Base de conhecimento
knowledge_base = [
    "Apidog suporta APIs REST, GraphQL e WebSocket",
    "Você pode criar casos de teste e executá-los automaticamente",
    "Apidog gera documentação de API a partir de suas requisições",
    "Servidores mock ajudam você a testar antes que o backend esteja pronto",
    "Recursos de colaboração em equipe incluem workspaces compartilhados"
]

# Embutir base de conhecimento
kb_embeddings = []
for doc in knowledge_base:
    result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=doc,
        task_type='RETRIEVAL_DOCUMENT',
        output_dimensionality=768
    )
    kb_embeddings.append(result['embedding'])

kb_embeddings = np.array(kb_embeddings)

Passo 2: Criar Função de Consulta RAG

def rag_query(question):
    # 1. Embutir a pergunta
    query_result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=question,
        task_type='RETRIEVAL_QUERY',
        output_dimensionality=768
    )
    query_embedding = np.array([query_result['embedding']])

    # 2. Encontrar contexto relevante
    similarities = cosine_similarity(query_embedding, kb_embeddings)[0]
    top_idx = np.argmax(similarities)
    context = knowledge_base[top_idx]

    # 3. Gerar resposta com contexto
    prompt = f"""Contexto: {context}

Pergunta: {question}

Responda à pergunta com base no contexto fornecido."""

    model = genai.GenerativeModel('gemini-2.0-flash-exp')
    response = model.generate_content(prompt)

    return response.text

Passo 3: Consultar Seu Sistema RAG

# Testar RAG
answer = rag_query("O Apidog pode gerar documentação?")
print(answer)

Isso recupera o contexto mais relevante da sua base de conhecimento e o usa para gerar respostas precisas.

Armazenando Embeddings em um Banco de Dados Vetorial

Use o ChromaDB para armazenar e consultar embeddings:

import chromadb
import google.generativeai as genai

genai.configure(api_key='YOUR_API_KEY')

# Inicializar ChromaDB
client = chromadb.Client()
collection = client.create_collection(name="my_documents")

# Documentos para indexar
documents = [
    "O teste de API garante que seus endpoints funcionem corretamente",
    "APIs REST seguem princípios de arquitetura sem estado",
    "GraphQL permite que clientes solicitem dados específicos"
]

# Gerar e armazenar embeddings
for i, doc in enumerate(documents):
    result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=doc,
        task_type='RETRIEVAL_DOCUMENT',
        output_dimensionality=768
    )

    collection.add(
        embeddings=[result['embedding']],
        documents=[doc],
        ids=[f"doc_{i}"]
    )

# Consultar a coleção
query = "Como testo minha API?"
query_result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=query,
    task_type='RETRIEVAL_QUERY',
    output_dimensionality=768
)

results = collection.query(
    query_embeddings=[query_result['embedding']],
    n_results=2
)

print("Melhores resultados:")
for doc in results['documents'][0]:
    print(f"- {doc}")

Tratamento de Erros

Lide com erros da API de forma elegante:

import google.generativeai as genai
from google.api_core import exceptions

genai.configure(api_key='YOUR_API_KEY')

def safe_embed(content):
    try:
        result = genai.embed_content(
            model='models/gemini-embedding-2-preview',
            content=content,
            output_dimensionality=768
        )
        return result['embedding']

    except exceptions.InvalidArgument as e:
        print(f"Entrada inválida: {e}")
        # Exemplo: Conteúdo muito longo ou formato não suportado
        return None

    except exceptions.ResourceExhausted as e:
        print(f"Cota excedida: {e}")
        # Exemplo: Limite de taxa atingido ou cota esgotada
        return None

    except exceptions.DeadlineExceeded as e:
        print(f"Tempo limite da requisição: {e}")
        # Exemplo: Problemas de rede ou resposta lenta
        return None

    except Exception as e:
        print(f"Erro inesperado: {e}")
        return None

# Usar
embedding = safe_embed("Seu texto aqui")
if embedding:
    print("Embedding gerado com sucesso")
else:
    print("Falha ao gerar embedding")

Mensagens de Erro Comuns:

Limitação de Taxa e Melhores Práticas

Limites de Taxa:

Melhores Práticas:

Use dimensões apropriadas: 768 para produção, 3072 apenas quando precisar de qualidade máxima

Requisições em lote: Processe vários itens juntos sempre que possível

Armazene embeddings em cache: Não re-embuta o mesmo conteúdo

Use instruções de tarefa: Elas melhoram a precisão para casos de uso específicos

Lide com erros: Implemente lógica de retry com backoff exponencial

Monitore custos: Rastreie seu uso de tokens

Otimização de Custos

Reduza os custos com estas estratégias:

1. Use dimensões menores:

# 768 dimensões = 75% menos armazenamento
result = genai.embed_content(
    model='models/gemini-embedding-2-preview',
    content=text,
    output_dimensionality=768
)

2. Use a API de lote para tarefas não urgentes:

# 50% de economia de custos para processamento em lote
# (A implementação da API de lote depende da sua configuração)

3. Armazene embeddings em cache:

import hashlib
import json

embedding_cache = {}

def get_embedding_cached(content):
    # Criar chave de cache
    cache_key = hashlib.md5(content.encode()).hexdigest()

    # Verificar cache
    if cache_key in embedding_cache:
        return embedding_cache[cache_key]

    # Gerar embedding
    result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=content,
        output_dimensionality=768
    )

    # Armazenar no cache
    embedding_cache[cache_key] = result['embedding']

    return result['embedding']

Problemas Comuns e Soluções

Problema: "Chave de API inválida"

# Solução: Verifique sua chave de API
import os
api_key = os.getenv('GEMINI_API_KEY')
if not api_key:
    print("Chave de API não definida!")

Problema: "Conteúdo muito longo"

# Solução: Divida o texto longo em pedaços
def chunk_text(text, max_tokens=8000):
    # Agrupamento simples baseado em palavras
    words = text.split()
    chunks = []
    current_chunk = []

    for word in words:
        current_chunk.append(word)
        if len(current_chunk) >= max_tokens:
            chunks.append(' '.join(current_chunk))
            current_chunk = []

    if current_chunk:
        chunks.append(' '.join(current_chunk))

    return chunks

# Embutir cada pedaço
for chunk in chunk_text(long_text):
    embedding = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=chunk
    )

Problema: "Tempo limite de processamento de arquivo"

# Solução: Aumente o tempo de espera para arquivos grandes
import time

video_file = genai.upload_file(path='large-video.mp4')

max_wait = 300  # 5 minutos
waited = 0
while video_file.state.name == 'PROCESSING' and waited < max_wait:
    time.sleep(5)
    waited += 5
    video_file = genai.get_file(video_file.name)

if video_file.state.name == 'PROCESSING':
    print("Tempo limite de processamento de arquivo")
else:
    # Gerar embedding
    result = genai.embed_content(
        model='models/gemini-embedding-2-preview',
        content=video_file
    )

Próximos Passos

Agora você sabe como usar a API Gemini Embedding 2. Aqui está o que tentar a seguir:

  1. Construa um sistema de busca semântica para sua documentação
  2. Crie um aplicativo RAG com contexto multimodal
  3. Implemente busca visual para catálogos de produtos
  4. Configure busca de áudio para conteúdo de podcast ou vídeo
  5. Experimente com diferentes dimensões para otimizar custos

A API é direta, mas as possibilidades são enormes. Comece com embeddings de texto, depois adicione imagens, vídeo ou áudio conforme seu caso de uso exigir.

Testando sua implementação? Use o Apidog para testar os endpoints da API Gemini, validar respostas e automatizar seus testes de pipeline de embedding.

Pratique o design de API no Apidog

Descubra uma forma mais fácil de construir e usar APIs