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!

1
resposta

[Projeto] Resumo de mensagens de emails com GenAI

Quando fiz, disparou um erro de limite de requisições, então, fiz com programação defensiva, utilizando de try/except e das bibliotecas google.api_core.exceptions e time:

import os
from google.colab import userdata
import google.generativeai as genai
from google.api_core.exceptions import TooManyRequests
import time

os.environ['GOOGLE_API_KEY'] = userdata.get('GEMINI_API_KEY')
genai.configure(api_key=os.environ['GOOGLE_API_KEY'])

model = genai.GenerativeModel('gemini-2.5-flash')
chat = model.start_chat(history=[])


#agente que resume mensagens de e-mail
def resume_mensagens_emails(mensagens, initial_index=0):
  print("Resumo das mensagens recebidas:")
  for i in range(initial_index, len(mensagens)):
    mensagem = mensagens[i]
    try:
      resposta = chat.send_message(f"resuma essa mensagem mencionando em poucas palavras o que ela quis dizer: {mensagem}")
      print(resposta.text)
    except TooManyRequests as e:
      print(f"\nERRO: Limite de requisições excedido. Tentando novamente em 60 segundos. (Mensagem {i+1} de {len(mensagens)})")
      print(f"Detalhes do erro: {e}")
      time.sleep(60) # Espera 60 segundos
      # Chama a função recursivamente a partir do índice atual
      resume_mensagens_emails(mensagens, initial_index=i)
      return # Retorna para evitar processamento duplicado após a chamada recursiva


emails = ['891pw6c6yo3@example.com',
'xh9ivlvhg@mail.net',
'2h96vx@test.org',
'qqh9yr5c3@test.org',
'7nqti1osvc@company.co',
'm3cr9laid@mail.net',
'ar83s3y@mail.net',
'lvtg4i0yg@company.co',
'2hbbrm@company.co',
'rzth909x9v2y@test.org',
'tid4hm@example.com',
'zjb7rmos@domain.info',
'20f5fxdr@example.com',
'goy00s911nek@example.com',
'1sygng@example.com',
'b88h8qj@company.co',
'vmo0xe6pe@example.com',
'viuqb4miwrcd@company.co',
'7p8ag07pj@company.co',
'ie949we@company.com']

mensagens = [
    "Olá, gostaria de confirmar o recebimento da documentação enviada ontem.",
    "Bom dia, segue em anexo o relatório solicitado para análise.",
    "A reunião foi reagendada para sexta-feira às 14h.",
    "Obrigado pelo contato. Retornaremos com mais informações em breve.",
    "Informamos que seu cadastro foi atualizado com sucesso.",
    "Estamos entrando em contato para lembrar do vencimento da sua fatura.",
    "Seu pedido foi processado e será enviado nos próximos dias.",
    "Parabéns! Sua inscrição foi aprovada com sucesso.",
    "Gostaríamos de agendar uma demonstração do produto para sua equipe.",
    "Segue a proposta comercial conforme solicitado.",
    "A manutenção do sistema ocorrerá neste final de semana.",
    "Recebemos sua solicitação e ela está em análise.",
    "Lamentamos o inconveniente e estamos trabalhando na solução.",
    "Sua senha foi alterada com sucesso.",
    "Convidamos você para participar do nosso próximo evento online.",
    "O pagamento referente ao contrato foi confirmado.",
    "Por favor, revise o documento e envie seu feedback.",
    "Estamos disponíveis para esclarecer quaisquer dúvidas.",
    "A atualização do software foi concluída sem problemas.",
    "Agradecemos sua preferência e confiança em nossos serviços."
]

resume_mensagens_emails(mensagens)
1 resposta

Olá, Paulo! Como vai?

Parabéns pela realização da atividade!

Você conseguiu aplicar programação defensiva de forma muito eficiente, utilizou corretamente o tratamento de exceções com try/except e ainda estruturou uma solução prática para lidar com limites de requisições.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Modularizar funções: separar o tratamento de erros em funções auxiliares para maior clareza.
  • Logar eventos: registrar erros e tentativas em um arquivo de log para monitoramento.
  • Aprimorar resiliência: implementar estratégias de exponential backoff em vez de tempo fixo de espera.

Ah uma pergunta: O que você gostaria de explorar mais agora, otimizar ainda mais o tratamento de erros ou expandir o código para incluir outras funcionalidades como análise automática dos resumos?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!