Găsiți e-mailuri legitime în dosarul Gmail Spam cu AI și Google Script
Publicat: 2024-06-08Fals pozitive în Gmail sunt mai puțin frecvente, dar se pot întâmpla, ceea ce înseamnă că un e-mail important ar putea ajunge din greșeală în dosarul de spam. Când aveți de-a face cu sute de mesaje spam zilnic, identificarea acestor e-mailuri legitime devine și mai dificilă.
Puteți crea filtre în Gmail, astfel încât e-mailurile de la anumiți expeditori sau cu anumite cuvinte cheie să nu fie niciodată marcate ca spam. Dar aceste filtre, evident, nu ar funcționa pentru e-mailurile de la expeditori noi sau necunoscuți.
Găsiți mesaje clasificate incorect în Gmail Spam
Ce se întâmplă dacă am folosi inteligența artificială pentru a ne analiza e-mailurile spam în Gmail și a estima care dintre ele sunt probabil fals pozitive? Cu această listă de e-mailuri clasificate greșit, am putea muta automat aceste e-mailuri în căsuța de e-mail sau să generăm un raport pentru examinare manuală.
Iată un exemplu de raport generat din Gmail. Include o listă de e-mailuri cu un scor de spam scăzut, care sunt probabil legitime și ar trebui mutate în căsuța de e-mail. Raportul include, de asemenea, un rezumat al conținutului e-mailului în limba preferată.
Pentru a începe, deschideți acest Script Google și faceți o copie a acestuia în Google Drive. Comutați la editorul Apps Script și furnizați adresa dvs. de e-mail, cheia API OpenAI și limba preferată pentru rezumatul e-mailului.
Alegeți funcția reportFalsePositives
din meniul drop-down și faceți clic pe butonul de redare pentru a rula scriptul. Acesta va căuta e-mailuri spam necitite în contul dvs. Gmail, le va analiza folosind API-ul OpenAI și vă va trimite un raport al e-mailurilor cu un scor de spam scăzut.
Dacă doriți să rulați acest script automat la intervale regulate, accesați meniul „Declanșatoare” din editorul de script Google Apps și configurați un declanșator bazat pe timp pentru a rula acest script o dată pe zi, așa cum se arată mai jos. De asemenea, puteți alege ora din zi în care doriți să primiți raportul.
Cum funcționează clasificarea spamului AI - Partea tehnică
Dacă ești curios să știi cum funcționează scriptul, iată o scurtă prezentare generală:
Scriptul Gmail utilizează API-ul Gmail pentru a căuta e-mailuri spam necitite în contul dvs. Gmail. Apoi trimite conținutul e-mailului către API-ul OpenAI pentru a clasifica scorul de spam și pentru a genera un rezumat în limba preferată. E-mailurile cu un scor de spam scăzut sunt probabil false pozitive și pot fi mutate în căsuța de e-mail.
1. Configurare utilizator
Puteți furniza adresa dvs. de e-mail unde ar trebui să fie trimis raportul, cheia API OpenAI, modelul LLM preferat și limba pentru rezumatul e-mailului.
// 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. Găsiți e-mailuri necitite în dosarul Gmail Spam
Folosim timpul de epocă pentru a găsi e-mailuri spam care au sosit în ultimele 24 de ore și sunt încă necitite.
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. Creați o solicitare pentru modelul OpenAI
Creăm o solicitare pentru modelul OpenAI folosind mesajul de e-mail. Solicitarea solicită modelului AI să analizeze conținutul e-mailului și să atribuie un scor de spam pe o scară de la 0 la 10. Răspunsul ar trebui să fie în format 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. Apelați API-ul OpenAI pentru a obține scorul de spam
Trecem promptul de mesaj către API-ul OpenAI și obținem scorul de spam și un rezumat al conținutului e-mailului. Scorul de spam este utilizat pentru a determina dacă e-mailul este un fals pozitiv.
Variabila tokens
ține evidența numărului de jetoane utilizate în apelurile API OpenAI și este inclusă în raportul prin e-mail. Puteți folosi aceste informații pentru a vă monitoriza utilizarea API-ului.
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. Procesați e-mailurile spam și trimiteți raportul prin e-mail
Puteți rula manual acest script Google sau puteți configura un declanșator cron pentru al rula automat la intervale regulate. Acesta marchează e-mailurile spam ca fiind citite, astfel încât să nu fie procesate din nou.
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 } ) ; } } ;
Consultați și: Autentificați-vă mesajele Gmail