برنامه نویسی

روال ایمیل خود را با نمایندگان LLM تقویت کنید: بازدهی 10 برابر باز شده است

Summarize this content to 400 words in Persian Lang امروزه تقریباً همه خدمات حول محور ارتباطات می چرخند، چه لوله کش ها، چه متصدیان پذیرش در کلینیک ها و چه کارمندان بانک ها. هر روز، افراد بی‌شماری ایمیل‌ها را می‌خوانند، اسناد اسکن شده پیوست شده و فایل‌های PDF را مرور می‌کنند. و آنها را در جای دیگری مرتب کنید، سازماندهی و ارسال کنید. تصور کنید اگر این فرآیند را خودکار کنیم چقدر می توانیم در زمان صرفه جویی کنیم! با پیشرفت‌هایی که در هوش مصنوعی و مدل‌های زبان بزرگ (LLM) صورت گرفته است، این دیگر فقط یک رویا نیست – اکنون امکان‌پذیر است.

مشکل ✨ راه حل

شما یک ایمیل با رشته طولانی از پیام ها و فایل های پیوست دریافت می کنید – بسیاری از آنها با نام های تصادفی. واقعا چی میخوای؟ برای اینکه سریع بفهمید ایمیل درباره چیست و بدانید چه اقداماتی باید انجام دهید.

اینجاست که EmailSnap وارد می‌شود. به سادگی ایمیل را به review@emailsnap.app فوروارد کنید، و EmailSnap هوش مصنوعی را برای تجزیه و تحلیل ایمیل و پیوست‌های آن اعمال می‌کند، سپس یک پاسخ جدید، کاربردی و با قالب‌بندی مناسب برای شما ارسال می‌کند.

ایمیل پردازش شده شامل:

عنوان: [Priority] موضوع
از: فرستنده ایمیل
به: گیرنده
نکات برجسته: موارد کلیدی اقدام در نقاط گلوله
خلاصه: بررسی مختصر محتوای ایمیل و فایل های پیوست شده
پیوست ها: تغییر نام داده شده تا محتوای واقعی آنها را منعکس کند

برای ارسال ایمیل به review@emailsnap.app، باید به صورت دستی در لیست سفید قرار بگیرید

جادو، درست است؟ حالا، بیایید نگاهی به نحوه کار آن بیندازیم

EmailSnap.app 📩

پیاده سازی عمدتاً از دو بخش تشکیل شده است: زیرساخت اساسی و جریان LLM. بیایید با بخش جالب تر شروع کنیم.

بررسی هوش مصنوعی ✨

برای پیاده سازی LLM، از پشته LangChain استفاده می کنیم: LangChain و LangSmith. علیرغم اینکه از خود LangGraph استفاده نمی کنم، من همان ایده گراف مانند را برای اجرای پردازش LLM EmailSnap اعمال می کنم، زیرا در حین استفاده از ابزارهای مختلف، مانند ذخیره حالت های میانی در پایگاه داده و S3، به چندین تماس LLM با اعلان های مختلف نیاز دارد.

گراف اجرای خروجی شامل گره های زیر است:

قالب‌بندی ایمیل: فایل EML را می‌خواند و آن را به متنی با فرمت مناسب تبدیل می‌کند، رشته‌ها و پیام‌های ارسال‌شده را مدیریت می‌کند و در عین حال برچسب‌های اضافی HTML و سایر اطلاعات نامربوط را حذف می‌کند.
خواندن پیوست ها: اگر فایل پیوست شده یک تصویر یا PDF باشد، آن را به Base64 تبدیل می کنیم تا LLM بتواند محتوا را بخواند. برای فایل‌های PDF، هر صفحه به یک تصویر جدید تبدیل می‌شود که به طور بالقوه یک حلقه طولانی ایجاد می‌کند.
پیوست بررسی: این گره خلاصه‌ای را با نکات برجسته و موارد عمل از هر سند ایجاد می‌کند، گیرنده را پیشنهاد می‌کند و نام فایل بهتری را پیشنهاد می‌کند.
خلاصه ایمیل: گره نهایی ایمیل قالب‌بندی شده و خلاصه‌های همه پیوست‌ها را ترکیب می‌کند تا یک ایمیل کامل با اطلاعات بینش، موارد اقدام، نکات برجسته و خلاصه کلی ایجاد کند. پس از تولید محتوای نهایی، یک ایمیل جدید شامل پیوست‌های سازمان‌دهی‌شده مجدد به فرستنده ارسال می‌کنیم.

زیرساخت 🛠️

برای پردازش ایمیل‌ها، به یک پشته فناوری مقیاس‌پذیر نیاز داشتیم، و پس از یک جستجوی سریع، AWS Simple Email Service (SES) را به عنوان راه‌حل عالی یافتم. این جریان به صورت زیر عمل می کند: SES یک ایمیل دریافت می کند، آن را در S3 ذخیره می کند و یک اعلان از طریق SNS (سرویس اطلاع رسانی ساده) ارسال می کند.

سرویس من در صف SQS (سرویس صف ساده) مشترک می شود که به پیام های SNS گوش می دهد. از صف، یک شناسه پیام را بازیابی می کنم و از آن برای بارگذاری ایمیل از S3 استفاده می کنم. ایمیل‌ها در قالب EML ذخیره می‌شوند، که پردازش آن ساده‌ترین راه نیست، اما خوشبختانه، کتابخانه‌های زیادی برای رسیدگی به آن وجود دارد. این تنظیمات برای یک آدرس ایمیل خاص که با SNS ثبت نام می کنید اعمال می شود.

در زیر جالب ترین قسمت کد Terraform برای پیکربندی آن آمده است:

# Setup SNS

resource “aws_ses_domain_identity” “ses_domain” {
domain = var.domain
}

resource “aws_sns_topic” “email_notifications” {
name = “email-notifications”
}

resource “aws_ses_receipt_rule_set” “main” {
rule_set_name = “default-rule-set”
}

resource “aws_ses_receipt_rule” “email_receipt_rule” {
rule_set_name = aws_ses_receipt_rule_set.main.rule_set_name
name = “store_emails_to_s3_and_notify”

recipients = [“review@${var.domain}”]

enabled = true
scan_enabled = true

s3_action {
bucket_name = aws_s3_bucket.email_bucket.bucket
position = 1
object_key_prefix = “emails/”
}

sns_action {
topic_arn = aws_sns_topic.email_notifications.arn
position = 2
}
}

# Create SQS

resource “aws_sqs_queue” “email_queue” {
name = “email-processing-queue”
visibility_timeout_seconds = 30
message_retention_seconds = 86400
}

resource “aws_sns_topic_subscription” “email_sqs_subscription” {
topic_arn = aws_sns_topic.email_notifications.arn
protocol = “sqs”
endpoint = aws_sqs_queue.email_queue.arn
}

پس از آن، برای پردازش ایمیل ها در صف سمت سرویس مشترک می شویم:

while True:
# Subscribe to the SQS
response = sqs_client.receive_message(
QueueUrl=SNS_QUEUE_URL,
MessageAttributeNames=[‘All’],
MaxNumberOfMessages=5,
WaitTimeSeconds=20
)
messages = response.get(‘Messages’, [])
for message in messages:
email_id = get_email_id_from_sns_message(message)
eml = fetch_email_from_s3(email_id)

# Find email ID from the SQS message
def get_email_id_from_sns_message(message):
body_string = message.get(‘Body’)
body_json = json.loads(body_string)
message_string = body_json.get(‘Message’)
message_json = json.loads(message_string)
mail = message_json.get(‘mail’)
email_id = mail.get(‘messageId’)
return email_id

# Load and parse Email from EML
def fetch_email_from_s3(email_id: str):
response = s3_client.get_object(Bucket=EMAIL_BUCKET_NAME, Key=f”emails/{email_id}”)
body = response[‘Body’].read()
return email.message_from_bytes(body, policy=policy.default)

علاوه بر این، من یک MySQL RDS و یک نمونه EC2 را برای اجرای یک سرویس Dockerized راه اندازی کردم. من این تنظیمات را برای راحتی، سهولت اشکال زدایی و کنترل بیشتر بر دستگاه در حال اجرا انتخاب کردم. با این حال، در دراز مدت، مهاجرت به Fargate برای مقیاس پذیری و مدیریت بهتر منطقی تر است.

راه اندازی SES

راه اندازی یک سرویس ایمیل ساده (SES) به چند مرحله دستی پس از تهیه زیرساخت نیاز دارد. هنگامی که زیرساخت شما درست شد، این مراحل را با دسترسی به داشبورد SES دنبال کنید:

به Configuration -> Identity -> DKIM بروید و Generate را فشار دهید.

سوابق CNAME را در ارائه دهنده DNS دامنه خود کپی کنید.

یک رکورد MX با جزئیات زیر به ارائه دهنده DNS خود اضافه کنید:

نام: دامنه
سرور ایمیل: 10 inbound-smtp.us-east-1.amazonaws.com (لینک بسته به منطقه شما تغییر می کند)

دریافت ایمیل را باز کنید و قانون: default-rule-set را فعال کنید.

این تنظیمات در جعبه شنی SES کار می کند. برای دسترسی به تولید، باید از صفحه اصلی SES با انتخاب «دریافت دسترسی تولید» برای دسترسی به تولید درخواست دهید. AWS ممکن است از شما بخواهد که مورد استفاده خود را توجیه کنید و احتمالاً سؤالات بیشتری بپرسید.

توجه: شما می توانید ایمیل ها را بدون فرآیند تأیید دریافت کنید.

نمونه

در نهایت، اجازه دهید نگاهی به یک مثال واقعی بیاندازیم. من یک گزارش MRI را با فرمت PDF از یک منبع آنلاین گرفتم، آن را به یک آدرس ایمیل فرستادم و سپس آن را به review@emailsnap.app ارسال کردم. EmailSnap یک موضوع، نکات برجسته و خلاصه جدید ایجاد کرد. همچنین گیرنده را از PDF استخراج کرد – دکتر راس بنر – و در نهایت یک نام فایل جدید را پیشنهاد کرد: گزارش MRI Regina Doe، بر اساس نام و روش بیمار.

TechStack

کد منبع: https://github.com/xajik/emailsnap-service

امروزه تقریباً همه خدمات حول محور ارتباطات می چرخند، چه لوله کش ها، چه متصدیان پذیرش در کلینیک ها و چه کارمندان بانک ها. هر روز، افراد بی‌شماری ایمیل‌ها را می‌خوانند، اسناد اسکن شده پیوست شده و فایل‌های PDF را مرور می‌کنند. و آنها را در جای دیگری مرتب کنید، سازماندهی و ارسال کنید. تصور کنید اگر این فرآیند را خودکار کنیم چقدر می توانیم در زمان صرفه جویی کنیم! با پیشرفت‌هایی که در هوش مصنوعی و مدل‌های زبان بزرگ (LLM) صورت گرفته است، این دیگر فقط یک رویا نیست – اکنون امکان‌پذیر است.

مشکل ✨ راه حل

شما یک ایمیل با رشته طولانی از پیام ها و فایل های پیوست دریافت می کنید – بسیاری از آنها با نام های تصادفی. واقعا چی میخوای؟ برای اینکه سریع بفهمید ایمیل درباره چیست و بدانید چه اقداماتی باید انجام دهید.

اینجاست که EmailSnap وارد می‌شود. به سادگی ایمیل را به review@emailsnap.app فوروارد کنید، و EmailSnap هوش مصنوعی را برای تجزیه و تحلیل ایمیل و پیوست‌های آن اعمال می‌کند، سپس یک پاسخ جدید، کاربردی و با قالب‌بندی مناسب برای شما ارسال می‌کند.

ایمیل پردازش شده شامل:

  • عنوان: [Priority] موضوع
  • از: فرستنده ایمیل
  • به: گیرنده
  • نکات برجسته: موارد کلیدی اقدام در نقاط گلوله
  • خلاصه: بررسی مختصر محتوای ایمیل و فایل های پیوست شده
  • پیوست ها: تغییر نام داده شده تا محتوای واقعی آنها را منعکس کند

برای ارسال ایمیل به review@emailsnap.app، باید به صورت دستی در لیست سفید قرار بگیرید

جادو، درست است؟ حالا، بیایید نگاهی به نحوه کار آن بیندازیم

EmailSnap.app 📩

پیاده سازی عمدتاً از دو بخش تشکیل شده است: زیرساخت اساسی و جریان LLM. بیایید با بخش جالب تر شروع کنیم.

بررسی هوش مصنوعی ✨

برای پیاده سازی LLM، از پشته LangChain استفاده می کنیم: LangChain و LangSmith. علیرغم اینکه از خود LangGraph استفاده نمی کنم، من همان ایده گراف مانند را برای اجرای پردازش LLM EmailSnap اعمال می کنم، زیرا در حین استفاده از ابزارهای مختلف، مانند ذخیره حالت های میانی در پایگاه داده و S3، به چندین تماس LLM با اعلان های مختلف نیاز دارد.

گراف اجرای خروجی شامل گره های زیر است:

  • قالب‌بندی ایمیل: فایل EML را می‌خواند و آن را به متنی با فرمت مناسب تبدیل می‌کند، رشته‌ها و پیام‌های ارسال‌شده را مدیریت می‌کند و در عین حال برچسب‌های اضافی HTML و سایر اطلاعات نامربوط را حذف می‌کند.
  • خواندن پیوست ها: اگر فایل پیوست شده یک تصویر یا PDF باشد، آن را به Base64 تبدیل می کنیم تا LLM بتواند محتوا را بخواند. برای فایل‌های PDF، هر صفحه به یک تصویر جدید تبدیل می‌شود که به طور بالقوه یک حلقه طولانی ایجاد می‌کند.
  • پیوست بررسی: این گره خلاصه‌ای را با نکات برجسته و موارد عمل از هر سند ایجاد می‌کند، گیرنده را پیشنهاد می‌کند و نام فایل بهتری را پیشنهاد می‌کند.
  • خلاصه ایمیل: گره نهایی ایمیل قالب‌بندی شده و خلاصه‌های همه پیوست‌ها را ترکیب می‌کند تا یک ایمیل کامل با اطلاعات بینش، موارد اقدام، نکات برجسته و خلاصه کلی ایجاد کند. پس از تولید محتوای نهایی، یک ایمیل جدید شامل پیوست‌های سازمان‌دهی‌شده مجدد به فرستنده ارسال می‌کنیم.

زیرساخت 🛠️

برای پردازش ایمیل‌ها، به یک پشته فناوری مقیاس‌پذیر نیاز داشتیم، و پس از یک جستجوی سریع، AWS Simple Email Service (SES) را به عنوان راه‌حل عالی یافتم. این جریان به صورت زیر عمل می کند: SES یک ایمیل دریافت می کند، آن را در S3 ذخیره می کند و یک اعلان از طریق SNS (سرویس اطلاع رسانی ساده) ارسال می کند.

سرویس من در صف SQS (سرویس صف ساده) مشترک می شود که به پیام های SNS گوش می دهد. از صف، یک شناسه پیام را بازیابی می کنم و از آن برای بارگذاری ایمیل از S3 استفاده می کنم. ایمیل‌ها در قالب EML ذخیره می‌شوند، که پردازش آن ساده‌ترین راه نیست، اما خوشبختانه، کتابخانه‌های زیادی برای رسیدگی به آن وجود دارد. این تنظیمات برای یک آدرس ایمیل خاص که با SNS ثبت نام می کنید اعمال می شود.

در زیر جالب ترین قسمت کد Terraform برای پیکربندی آن آمده است:

# Setup SNS 

resource "aws_ses_domain_identity" "ses_domain" {
  domain = var.domain
}

resource "aws_sns_topic" "email_notifications" {
  name = "email-notifications"
}

resource "aws_ses_receipt_rule_set" "main" {
  rule_set_name = "default-rule-set"
}

resource "aws_ses_receipt_rule" "email_receipt_rule" {
  rule_set_name = aws_ses_receipt_rule_set.main.rule_set_name
  name          = "store_emails_to_s3_and_notify"

  recipients = ["review@${var.domain}"]

  enabled      = true
  scan_enabled = true


  s3_action {
    bucket_name       = aws_s3_bucket.email_bucket.bucket
    position          = 1
    object_key_prefix = "emails/"
  }

  sns_action {
    topic_arn = aws_sns_topic.email_notifications.arn
    position  = 2
  }
}

# Create SQS 

resource "aws_sqs_queue" "email_queue" {
  name                       = "email-processing-queue"
  visibility_timeout_seconds = 30
  message_retention_seconds  = 86400
}

resource "aws_sns_topic_subscription" "email_sqs_subscription" {
  topic_arn = aws_sns_topic.email_notifications.arn
  protocol  = "sqs"
  endpoint  = aws_sqs_queue.email_queue.arn
}

پس از آن، برای پردازش ایمیل ها در صف سمت سرویس مشترک می شویم:

while True:
  # Subscribe to the SQS 
  response = sqs_client.receive_message(
      QueueUrl=SNS_QUEUE_URL,
      MessageAttributeNames=['All'],
      MaxNumberOfMessages=5,
      WaitTimeSeconds=20
  )
  messages = response.get('Messages', [])
  for message in messages:
    email_id = get_email_id_from_sns_message(message)
    eml = fetch_email_from_s3(email_id)

# Find email ID from the SQS message
def get_email_id_from_sns_message(message):
    body_string = message.get('Body')
    body_json = json.loads(body_string)
    message_string = body_json.get('Message')
    message_json = json.loads(message_string)
    mail = message_json.get('mail')
    email_id = mail.get('messageId')
    return email_id

# Load and parse Email from EML
def fetch_email_from_s3(email_id: str):
    response = s3_client.get_object(Bucket=EMAIL_BUCKET_NAME, Key=f"emails/{email_id}")    
    body = response['Body'].read()
    return email.message_from_bytes(body,  policy=policy.default)

علاوه بر این، من یک MySQL RDS و یک نمونه EC2 را برای اجرای یک سرویس Dockerized راه اندازی کردم. من این تنظیمات را برای راحتی، سهولت اشکال زدایی و کنترل بیشتر بر دستگاه در حال اجرا انتخاب کردم. با این حال، در دراز مدت، مهاجرت به Fargate برای مقیاس پذیری و مدیریت بهتر منطقی تر است.

معماری

راه اندازی SES

راه اندازی یک سرویس ایمیل ساده (SES) به چند مرحله دستی پس از تهیه زیرساخت نیاز دارد. هنگامی که زیرساخت شما درست شد، این مراحل را با دسترسی به داشبورد SES دنبال کنید:

  1. به Configuration -> Identity -> DKIM بروید و Generate را فشار دهید.
  • سوابق CNAME را در ارائه دهنده DNS دامنه خود کپی کنید.
  1. یک رکورد MX با جزئیات زیر به ارائه دهنده DNS خود اضافه کنید:
  • نام: دامنه
  • سرور ایمیل: 10 inbound-smtp.us-east-1.amazonaws.com (لینک بسته به منطقه شما تغییر می کند)
  1. دریافت ایمیل را باز کنید و قانون: default-rule-set را فعال کنید.

این تنظیمات در جعبه شنی SES کار می کند. برای دسترسی به تولید، باید از صفحه اصلی SES با انتخاب «دریافت دسترسی تولید» برای دسترسی به تولید درخواست دهید. AWS ممکن است از شما بخواهد که مورد استفاده خود را توجیه کنید و احتمالاً سؤالات بیشتری بپرسید.

توجه: شما می توانید ایمیل ها را بدون فرآیند تأیید دریافت کنید.

نمونه

در نهایت، اجازه دهید نگاهی به یک مثال واقعی بیاندازیم. من یک گزارش MRI را با فرمت PDF از یک منبع آنلاین گرفتم، آن را به یک آدرس ایمیل فرستادم و سپس آن را به review@emailsnap.app ارسال کردم. EmailSnap یک موضوع، نکات برجسته و خلاصه جدید ایجاد کرد. همچنین گیرنده را از PDF استخراج کرد – دکتر راس بنر – و در نهایت یک نام فایل جدید را پیشنهاد کرد: گزارش MRI Regina Doe، بر اساس نام و روش بیمار.

نمونه EmailSnap.app

TechStack

کد منبع: https://github.com/xajik/emailsnap-service

پشته فناوری Emailsnap.app

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا