Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Desafio: Resumo de E-mails com GenAI

Foquei no simples, sem muita firula agora, sem tratametos de erros, ou funõôes auxiliares, e sem enfeites, direto na função

porém, estou tendo um problema que suspeito ser proteção da API com rate limit ou algo do tipo, creio que tem um delay pra rodar também devido a isso:
ClientError: 429 RESOURCE_EXHAUSTED.

para resolve eu apenas diminui a lista, e para organização eu apenas utilizei um enumerate pra poder ter um indice para identificar os emails na lista, usei um prompt com persona, objetivo e instruções claras, combinando o conteúdo do email para resumo.

import os
from google.colab import userdata

os.environ["GOOGLE_API_KEY"] = userdata.get('GEMINI_API_KEY_TEMP')
from google import genai

client = genai.Client()
def resume_emails(lista_emails: list) -> list:
  '''
    retorna lista de email resumidos 
  '''
  chat = client.chats.create(model="gemini-2.5-flash")

  resumo_emails = []
  for i, corpo in enumerate(lista_emails):
    prompt = "Você é uma auxiliar prestativo, Resuma este email, retornado de forma consisa em no máximo 10 palavras o que a pessoa quer: " + corpo.strip()
    resumo  = chat.send_message(prompt).text
    resposta = f"Email ({i+1}) Resumo:  {resumo}"
    resumo_emails.append(resposta)
  return resumo_emails
#Omitindo a lista de 20 emails ficou muito grande pra por aqui
#email_bodies = [....]

#amostra de 2 emails
email_bodies2 = [
    "Prezada equipe de desenvolvimento, venho por meio deste informar que detectamos uma instabilidade recorrente no nosso módulo de pagamentos durante os picos de acesso entre 14h e 16h. O erro parece estar relacionado ao tempo de resposta do gateway externo. Precisamos que analisem os logs de erro dos últimos três dias e preparem um relatório técnico detalhando as possíveis causas, além de uma sugestão de implementação de uma fila de mensagens para processamento assíncrono. Por favor, reportem o progresso na reunião de acompanhamento de quinta-feira.",
    "Olá, Mariana. Em continuidade à nossa reunião sobre o planejamento estratégico do próximo trimestre, gostaria de formalizar as diretrizes que definimos. O foco principal será a expansão da nossa base de clientes no setor de logística, exigindo uma otimização das campanhas de marketing de performance. Solicito que você prepare uma planilha comparativa com o custo de aquisição de clientes (CAC) atual versus o projetado com a nova estratégia, considerando um investimento adicional de 15% em mídia paga nos canais digitais."
]

resume_emails(email_bodies2)

Funcionou bem com amostra

2 respostas

Oii Marcelo, tudo bem?

Valeu por compartilhar o projeto aqui! O código ficou bem objetivo, como você propôs: sem firulas, direto na função. Dá pra ver que o raciocínio está sólido.

Vou fazer algumas observações que podem ser úteis:

Sobre o erro 429 (RESOURCE_EXHAUSTED)

Esse erro indica que você atingiu o limite de requisições por minuto da API. A forma mais comum de contornar isso é adicionar um pequeno delay entre as chamadas com time.sleep():

import time

for i, corpo in enumerate(lista_emails):
    # ... monta o prompt e envia
    time.sleep(1)  # aguarda 1 segundo entre cada requisição

Dependendo do plano da API, talvez seja necessário aumentar esse intervalo. Vale testar com 2 ou 3 segundos se o erro persistir com a lista completa.

Uma reflexão sobre o chat dentro da função

Você criou uma sessão de chat (client.chats.create) e a usa para enviar os resumos. Isso é interessante porque mantém o contexto entre as mensagens, mas nesse caso específico, cada email é independente. Fica a pergunta: você precisa de histórico de conversa aqui, ou uma chamada simples por email (client.models.generate_content) seria suficiente? Os dois funcionam, mas pensar nisso ajuda a entender quando cada abordagem faz mais sentido.

Pequeno detalhe de legibilidade

No prompt você mistura maiúsculas e minúsculas no início das frases ("Resuma este email, retornado..."). Nada que quebre o funcionamento, mas deixo como observação para quando quiser polir.

No geral, a solução cumpre bem o objetivo do desafio. O próximo passo natural seria justamente tratar esse rate limit para conseguir rodar com a lista completa de 20 emails.

Conte com a Alura para evoluir seus estudos. Em caso de dúvidas, fico à disposição.

Bons estudos!

Sucesso

Imagem da comunidade
solução!

Oi Victor, obrigado pelo retorno e dicas, sim eu mudei, depois eu pesquisei sobre os tipo de interação e mudei pra generate_content numa versão melhrorada.

sobre usar sleep, não adianta, porque atingiu o limite diário mesmo, fui pesquisar e testar depois, alguma mudança na forma de interação do gratuito.