Найдите законные электронные письма в папке со спамом Gmail с помощью искусственного интеллекта и скрипта Google

Опубликовано: 2024-06-08

Ложные срабатывания в Gmail встречаются редко, но случаются. Это означает, что важное письмо может по ошибке попасть в папку со спамом. Когда вы ежедневно имеете дело с сотнями спам-сообщений, идентифицировать эти законные электронные письма становится еще сложнее.

Вы можете создать фильтры в Gmail, чтобы электронные письма от определенных отправителей или с определенными ключевыми словами никогда не помечались как спам. Но эти фильтры, очевидно, не будут работать для писем от новых или неизвестных отправителей.

Найдите неправильно классифицированные сообщения в спаме Gmail.

Что, если бы мы использовали ИИ для анализа наших спам-сообщений в Gmail и прогнозирования того, какие из них, скорее всего, являются ложноположительными? Имея этот список неправильно классифицированных писем, мы можем автоматически переместить эти письма в папку «Входящие» или создать отчет для проверки вручную.

Вот пример отчета, созданного из Gmail. Он включает в себя список электронных писем с низким уровнем спама, которые, вероятно, являются законными и должны быть перемещены в папку «Входящие». Отчет также включает сводку содержимого электронной почты на предпочитаемом вами языке.

Gmail Spam Summary

Чтобы начать, откройте этот скрипт Google и скопируйте его на свой Google Диск. Переключитесь в редактор Apps Script и укажите свой адрес электронной почты, ключ OpenAI API и предпочтительный язык для сводки электронной почты.

Выберите функцию reportFalsePositives из раскрывающегося списка и нажмите кнопку воспроизведения, чтобы запустить скрипт. Он будет искать непрочитанные спам-сообщения в вашей учетной записи Gmail, анализировать их с помощью API OpenAI и отправлять вам отчет об электронных письмах с низким рейтингом спама.

Если вы хотите автоматически запускать этот сценарий через регулярные промежутки времени, перейдите в меню «Триггеры» в редакторе сценариев Google Apps и настройте управляемый по времени триггер для запуска этого сценария один раз в день, как показано ниже. Вы также можете выбрать время суток, когда хотите получить отчет.

Google Script - Time Trigger

Как работает классификация спама с помощью искусственного интеллекта — техническая часть

Если вам интересно узнать, как работает скрипт, вот краткий обзор:

Скрипт Gmail использует API Gmail для поиска непрочитанных спам-сообщений в вашей учетной записи Gmail. Затем он отправляет содержимое электронного письма в API OpenAI для классификации спама и создания сводки на предпочитаемом вами языке. Письма с низким уровнем спама, скорее всего, являются ложными срабатываниями и могут быть перемещены во входящие.

1. Конфигурация пользователя

Вы можете указать свой адрес электронной почты, на который следует отправить отчет, свой ключ API OpenAI, предпочитаемую модель LLM и язык сводки по электронной почте.

 // 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. Найдите непрочитанные электронные письма в папке спама Gmail.

Мы используем время эпохи, чтобы найти спам-сообщения, пришедшие за последние 24 часа и до сих пор не прочитанные.

 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. Создайте приглашение для модели OpenAI.

Мы создаем приглашение для модели OpenAI, используя сообщение электронной почты. В приглашении модели искусственного интеллекта предлагается проанализировать содержимое электронного письма и присвоить оценку спама по шкале от 0 до 10. Ответ должен быть в формате 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. Вызовите API OpenAI, чтобы получить оценку спама.

Мы передаем приглашение к сообщению в API OpenAI и получаем оценку спама и сводку содержимого электронного письма. Оценка спама используется для определения того, является ли электронное письмо ложноположительным.

Переменная tokens отслеживает количество токенов, используемых в вызовах API OpenAI, и включается в отчет по электронной почте. Вы можете использовать эту информацию для мониторинга использования 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. Обработка спам-сообщений и отправка отчета по электронной почте.

Вы можете запустить этот скрипт Google вручную или настроить триггер cron для автоматического запуска его через регулярные промежутки времени. Он помечает спам-сообщения как прочитанные, чтобы они больше не обрабатывались.

 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 } ) ; } } ;

См. также: Проверка подлинности сообщений Gmail.