Encontre e-mails legítimos na pasta de spam do Gmail com IA e Google Script
Publicados: 2024-06-08Falsos positivos no Gmail são incomuns, mas podem acontecer, o que significa que um e-mail importante pode acabar por engano na sua pasta de spam. Quando você lida com centenas de mensagens de spam diariamente, identificar esses e-mails legítimos se torna ainda mais desafiador.
Você pode criar filtros no Gmail para que e-mails de remetentes específicos ou com determinadas palavras-chave nunca sejam marcados como spam. Mas esses filtros obviamente não funcionariam para e-mails de remetentes novos ou desconhecidos.
Encontre mensagens classificadas incorretamente no Spam do Gmail
E se usássemos IA para analisar nossos e-mails de spam no Gmail e prever quais deles são prováveis falsos positivos? Com esta lista de e-mails classificados incorretamente, poderíamos mover automaticamente esses e-mails para a caixa de entrada ou gerar um relatório para revisão manual.
Aqui está um exemplo de relatório gerado no Gmail. Inclui uma lista de e-mails com baixa pontuação de spam que provavelmente são legítimos e devem ser movidos para a caixa de entrada. O relatório também inclui um resumo do conteúdo do e-mail no idioma de sua preferência.
Para começar, abra este Google Script e faça uma cópia dele em seu Google Drive. Mude para o editor do Apps Script e forneça seu endereço de e-mail, chave de API OpenAI e idioma preferido para o resumo do e-mail.
Escolha a função reportFalsePositives
no menu suspenso e clique no botão play para executar o script. Ele procurará e-mails de spam não lidos em sua conta do Gmail, analisará-os usando a API da OpenAI e enviará um relatório de e-mails com baixa pontuação de spam.
Se desejar executar esse script automaticamente em intervalos regulares, vá para o menu “Acionadores” no editor de scripts do Google Apps e configure um acionador baseado em tempo para executar esse script uma vez por dia, conforme mostrado abaixo. Você também pode escolher a hora do dia em que deseja receber o relatório.
Como funciona a classificação de spam de IA - a parte técnica
Se você está curioso para saber como o script funciona, aqui está uma breve visão geral:
O Gmail Script usa a API do Gmail para pesquisar e-mails de spam não lidos em sua conta do Gmail. Em seguida, ele envia o conteúdo do e-mail para a API da OpenAI para classificar a pontuação de spam e gerar um resumo no idioma de sua preferência. E-mails com baixa pontuação de spam são provavelmente falsos positivos e podem ser movidos para a caixa de entrada.
1. Configuração do usuário
Você pode fornecer seu endereço de e-mail para onde o relatório deve ser enviado, sua chave de API OpenAI, seu modelo LLM preferido e o idioma para o resumo do e-mail.
// Basic configuration const USER_EMAIL = '[email protected]' ; // Email address to send the report to const OPENAI_API_KEY = 'sk-proj-123' ; // API key for OpenAI const OPENAI_MODEL = 'gpt-4o' ; // Model name to use with OpenAI const USER_LANGUAGE = 'English' ; // Language for the email summary
2. Encontre e-mails não lidos na pasta de spam do Gmail
Usamos a época para encontrar e-mails de spam que chegaram nas últimas 24 horas e ainda não foram lidos.
const HOURS_AGO = 24 ; // Time frame to search for emails (in hours) const MAX_THREADS = 25 ; // Maximum number of email threads to process const getSpamThreads_ = ( ) => { const epoch = ( date ) => Math . floor ( date . getTime ( ) / 1000 ) ; const beforeDate = new Date ( ) ; const afterDate = new Date ( ) ; afterDate . setHours ( afterDate . getHours ( ) - HOURS_AGO ) ; const searchQuery = ` is:unread in:spam after: ${ epoch ( afterDate ) } before: ${ epoch ( beforeDate ) } ` ; return GmailApp . search ( searchQuery , 0 , MAX_THREADS ) ; } ;
3. Crie um prompt para o modelo OpenAI
Criamos um prompt para o modelo OpenAI usando a mensagem de email. O prompt solicita que o modelo de IA analise o conteúdo do email e atribua uma pontuação de spam em uma escala de 0 a 10. A resposta deve estar no formato JSON.
const SYSTEM_PROMPT = ` You are an AI email classifier. Given the content of an email, analyze it and assign a spam score on a scale from 0 to 10, where 0 indicates a legitimate email and 10 indicates a definite spam email. Provide a short summary of the email in ${ USER_LANGUAGE } . Your response should be in JSON format. ` ; const MAX_BODY_LENGTH = 200 ; // Maximum length of email body to include in the AI prompt const getMessagePrompt_ = ( message ) => { const body = message . getPlainBody ( ) . replace ( / https?:\/\/[^\s>]+ / g , '' ) . replace ( / [\n\r\t] / g , ' ' ) . replace ( / \s+ / g , ' ' ) . trim ( ) ; // remove all URLs, and whitespace characters return [ ` Subject: ${ message . getSubject ( ) } ` , ` Sender: ${ message . getFrom ( ) } ` , ` Body: ${ body . substring ( 0 , MAX_BODY_LENGTH ) } ` , ] . join ( '\n' ) ; } ;
4. Chame a API OpenAI para obter a pontuação de spam
Passamos o prompt da mensagem para a API OpenAI e obtemos a pontuação de spam e um resumo do conteúdo do email. A pontuação de spam é usada para determinar se o e-mail é um falso positivo.
A variável tokens
rastreia o número de tokens usados nas chamadas da API OpenAI e é incluída no relatório de e-mail. Você pode usar essas informações para monitorar o uso da API.
let tokens = 0 ; const getMessageScore_ = ( messagePrompt ) => { const apiUrl = ` https://api.openai.com/v1/chat/completions ` ; const headers = { 'Content-Type' : 'application/json' , Authorization : ` Bearer ${ OPENAI_API_KEY } ` , } ; const response = UrlFetchApp . fetch ( apiUrl , { method : 'POST' , headers , payload : JSON . stringify ( { model : OPENAI_MODEL , messages : [ { role : 'system' , content : SYSTEM_PROMPT } , { role : 'user' , content : messagePrompt } , ] , temperature : 0.2 , max_tokens : 124 , response_format : { type : 'json_object' } , } ) , } ) ; const data = JSON . parse ( response . getContentText ( ) ) ; tokens += data . usage . total_tokens ; const content = JSON . parse ( data . choices [ 0 ] . message . content ) ; return content ; } ;
5. Processe e-mails de spam e envie o relatório por e-mail
Você pode executar este script do Google manualmente ou configurar um cron trigger para executá-lo automaticamente em intervalos regulares. Ele marca os e-mails de spam como lidos para que não sejam processados novamente.
const SPAM_THRESHOLD = 2 ; // Threshold for spam score to include in the report const reportFalsePositives = ( ) => { const html = [ ] ; const threads = getSpamThreads_ ( ) ; for ( let i = 0 ; i < threads . length ; i += 1 ) { const [ message ] = threads [ i ] . getMessages ( ) ; const messagePrompt = getMessagePrompt_ ( message ) ; // Get the spam score and summary from OpenAI const { spam_score , summary } = getMessageScore_ ( messagePrompt ) ; if ( spam_score <= SPAM_THRESHOLD ) { // Add email message to the report if the spam score is below the threshold html . push ( ` <tr><td> ${ message . getFrom ( ) } </td> <td> ${ summary } </td></tr> ` ) ; } } threads . forEach ( ( thread ) => thread . markRead ( ) ) ; // Mark all processed emails as read if ( html . length > 0 ) { const htmlBody = [ ` <table border="1"> ` , '<tr><th>Email Sender</th><th>Summary</th></tr>' , html . join ( '' ) , '</table>' , ] . join ( '' ) ; const subject = ` Gmail Spam Report - ${ tokens } tokens used ` ; GmailApp . sendEmail ( USER_EMAIL , subject , '' , { htmlBody } ) ; } } ;
Veja também: Autenticar suas mensagens do Gmail