برنامه نویسی

تقویت پشتیبانی مشتری: عوامل هوش مصنوعی، LangGraph و RAG برای اتوماسیون ایمیل

در عصر رضایت فوری، پشتیبانی مشتری دیگر یک بخش نیست، بلکه کل شرکت است.

آیا می‌دانستید که 86 درصد از مشتریان تنها پس از یک تجربه بد از بین می‌روند؟

تیم‌های پشتیبانی سنتی غرق شده‌اند و برای مدیریت صف‌های ایمیل بی‌پایان تلاش می‌کنند.

میم ایمیل های بسیار زیاد

اما بازی در حال تغییر است. مدل‌های زبان بزرگ (LLM) و عوامل هوش مصنوعی خدمات مشتری را متحول می کنند و کسب و کارها را قادر می سازند تا انتظارات رو به افزایش را با سرعت و دقت برآورده کنند. مطالعات نشان می دهد که هوش مصنوعی می تواند رضایت مشتری را 15 تا 25 درصد افزایش دهد و هزینه ها را 20 تا 40 درصد کاهش دهد..

دوران پردازش دستی ایمیل به پایان رسیده است. اتوماسیون هوش مصنوعی اینجاست تا پشتیبانی سریع و باکیفیت مورد نیاز مشتریان شما را ارائه دهد.

در این راهنمای فنی، نحوه ساختن سیستم اتوماسیون ایمیل پشتیبانی مشتری هوش مصنوعی را با استفاده از آن بررسی خواهیم کرد لانگ گراف، LangChain، و RAG به:

  • ایمیل ها را 24/7 نظارت کنید و پاسخ های سریع ارائه دهید به سوالات مشتری

  • اهرم عوامل هوش مصنوعی برای مرتب کردن هوشمندانه ایمیل ها در دسته ها و ایجاد پاسخ های مناسب.

  • استفاده کنید Retrieval-Augmented Generation (RAG) برای ارائه پاسخ های دقیق به سوالات محصول و خدمات.

بیایید شیرجه بزنیم!

اتوماسیون ایمیل با هوش مصنوعی با LangGraph و RAG

برای درک بهتر سیستم اتوماسیون ایمیل هوش مصنوعی من ساختم، مفید است که ابتدا فن‌آوری‌های اصلی را معرفی کنیم: LangChain، لانگ گراف، و Retrieval-Augmented Generation (RAG).

LangChain و LangGraph

LangChain چارچوبی برای توسعه برنامه های کاربردی هوش مصنوعی با استفاده از موارد مختلف است LLM (مانند GPT-4o، Google Gemini، LLAMA3) و لانگ گراف بر روی آن ساخته شده است و قابلیت های آن را با افزودن توانایی هماهنگ کردن چندین زنجیره (یا بازیگران) در چندین مرحله محاسبات به صورت چرخه ای گسترش می دهد.

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

به عنوان مثال گردش کار لانگگراف

RAG چیست؟

احتمالاً شنیده اید Retrieval-Augmented Generation (RAG)، اما اجازه دهید نقش آن را به اختصار توضیح دهم. اکثر LLM ها به صورت دوره ای بر روی مجموعه داده های عمومی بزرگ آموزش می بینند، به این معنی که آنها اغلب فاقد اطلاعات اخیر یا دسترسی به داده های خصوصی هستند که در طول آموزش در دسترس نیست.

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

بسیار خوب، اکنون که اصول LangChain، LangGraph و RAG را پوشش دادیم، بیایید ببینیم این سیستم واقعاً چه کاری می تواند انجام دهد!

نمای کلی سیستم سطح بالا

سیستم اتوماسیون با نظارت مستمر صندوق ورودی آژانس، دسته‌بندی ایمیل‌ها، ایجاد پاسخ‌های مناسب و اطمینان از کیفیت قبل از ارسال آنها عمل می‌کند. در زیر یک نمایش بصری از فرآیند ارائه شده است:

نمودار اتوماسیون ایمیل

الف. نظارت و طبقه بندی ایمیل

با استفاده از Gmail API، سیستم به طور فعال صندوق ورودی آژانس را نظارت می کند. ایمیل‌های جدید فوراً شناسایی و دسته‌بندی می‌شوند عامل طبقه بندی هوش مصنوعی به چهار کلاس کلیدی:

  • شکایت مشتری: ایمیل هایی که جزئیات نارضایتی یا مشکلات را نشان می دهد.

  • استعلام محصول: ایمیل هایی که اطلاعاتی درباره پیشنهادات درخواست می کنند.

  • بازخورد مشتری: ایمیل هایی که نظرات، پیشنهادات یا تمجیدهای کلی را ارائه می دهند.

  • غیر مرتبط: ایمیل های بی ربط به عملیات آژانس که نادیده گرفته می شوند.

ب. تولید پاسخ پویا

فرآیند پاسخ بر اساس دسته ایمیل سازگار است:

  • شکایات و انتقادات: این ایمیل ها مستقیماً به یک مسیریابی می شوند عامل نویسنده هوش مصنوعی، که پاسخ های شخصی سازی شده را ایجاد می کند و نگرانی های مشتری را تأیید می کند یا از بازخورد آنها تشکر می کند. RAG (نسل افزایش یافته بازیابی) برای این موارد لازم نیست

  • استعلام محصول: برای این ایمیل ها استفاده می کنیم RAG برای بازیابی اطلاعات دقیق و به روز از آژانس پایگاه دانش (به عنوان مثال، مستندات محصول، سوالات متداول). سپس از این اطلاعات استفاده می شود عامل نویسنده هوش مصنوعی برای ایجاد یک پاسخ جامع و دقیق

ج. تضمین کیفیت هوش مصنوعی

هر ایمیل قبل از ارسال تحت بررسی کیفیت قرار می گیرد. یک عامل تصحیح هوش مصنوعی تضمین می کند:

  • قالب بندی: ایمیل از نظر بصری جذاب است و به راحتی قابل خواندن است.

  • ارتباط: پاسخ مستقیماً به سؤالات یا نگرانی های مشتری می پردازد.

  • لحن: لحن با استانداردهای حرفه ای و برند خاص آژانس مطابقت دارد.

D. ارسال خودکار ایمیل

هنگامی که یک ایمیل از مرحله تضمین کیفیت عبور می کند، به سرعت برای مشتری ارسال می شود و ارتباط سریع و کارآمد را تضمین می کند.

چگونه کار می کند: تفکیک گام به گام

راه اندازی پایگاه دانش برای RAG

از آنجایی که سیستم ما متکی است Retrieval-Augmented Generation (RAG)، ما به یک پایگاه دانش کاملاً آماده حاوی اطلاعات آژانس نیاز داریم. این به ما کمک می کند تا پاسخ های دقیق و مرتبطی را به سوالات مشتریان در مورد محصولات و خدمات ارائه دهیم.

برای این پروژه، من قبلاً یک نمایه نمایندگی نمونه با استفاده از آن ایجاد کرده ام ChatGPT. برای استفاده از آن، مراحل استاندارد برای راه اندازی a را دنبال می کنیم پایگاه دانش RAG:

  1. بارگیری اسناد: ما با بارگیری اسناد آژانس شروع می کنیم.

  2. اسناد را تکه تکه کنید: سپس سند را به قطعات کوچکتر و قابل مدیریت تقسیم می کنیم. این مهم است زیرا برای بخش های بزرگ می تواند دشوار باشد LLMs برای پردازش موثر

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

  4. ایجاد یک پایگاه داده برداری: در نهایت، ما یک پایگاه داده برداری برای ذخیره این تعبیه‌ها ایجاد می‌کنیم.

برای ساده نگه داشتن چیزها برای این پروژه، من استفاده کرده ام کروما دی بی، یک پایگاه داده برداری محلی، همراه با مدل جاسازی گوگل. برای محیط های تولید، ممکن است راه حل های مقیاس پذیرتری مانند کاج یا قدرانت.

در اینجا کدی است که این تنظیمات را انجام می دهد:

from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_google_genai import ChatGoogleGenerativeAI, GoogleGenerativeAIEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

# Loading Docs
loader = TextLoader("./data/agency.txt")
docs = loader.load()

# Split document into chuncks
doc_splitter = RecursiveCharacterTextSplitter(chunk_size=300, chunk_overlap=50)
doc_chunks = doc_splitter.split_documents(docs)

# Creating vector embeddings
embeddings = GoogleGenerativeAIEmbeddings(model="models/embedding-001") # Updated model name
vectorstore = Chroma.from_documents(doc_chunks, embeddings, persist_directory="db")

# Semantic vector search retriever
vectorstore_retriever = vectorstore.as_retriever(search_kwargs={"k": 3})
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با راه اندازی پایگاه دانش، اکنون می توانیم هسته سیستم را تجسم کنیم: نمودار اتوماسیون ساخته شده با لانگ گراف. در اینجا به نظر می رسد:

# load inbox emails
workflow.set_entry_point("load_emails")

# check if there are new emails to process
workflow.add_edge("load_emails", "is_email_inbox_empty")
workflow.add_conditional_edges(
    "is_email_inbox_empty",
    nodes.check_new_emails,
    {
        "process": "categorize_email",
        "empty": END
    }
)

# route email based on category
workflow.add_conditional_edges(
    "categorize_email",
    nodes.route_email_based_on_category,
    {
        "product related": "construct_rag_queries",
        "not product related": "email_writer", # Feedback or Complaint
        "unrelated": "skip_unrelated_email"
    }
)

# pass constructed queries to RAG chain to get information
workflow.add_edge("construct_rag_queries", "retrieve_from_rag")
# give information to writer agent to write the email
workflow.add_edge("retrieve_from_rag", "email_writer")
# proofread the generated email
workflow.add_edge("email_writer", "email_proofreader")
# check if email is sendable or not, if not rewrite the email
workflow.add_conditional_edges(
    "email_proofreader",
    nodes.must_rewrite,
    {
        "send": "send_email",
        "rewrite": "email_writer"
    }
)

# check if there are still emails to be processed
workflow.add_edge("send_email", "is_email_inbox_empty")
workflow.add_edge("skip_unrelated_email", "is_email_inbox_empty" )
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بیایید هر بخش از این اتوماسیون را جداگانه بررسی کنیم!

1. نظارت بر ایمیل

این فرآیند با نظارت مستمر بر آژانس آغاز می شود صندوق ورودی جیمیل. این امر با استفاده از Gmail API، که به سیستم اجازه می دهد به طور مرتب ایمیل های جدید را بررسی کند.

کلاس خاصی ساختم GmailToolsClass برای رسیدگی به همه چیز مربوط به جیمیل. شما می توانید کد کامل را در اینجا بررسی کنید Github من در حال حاضر، بیایید روی چگونگی آن تمرکز کنیم ایمیل های جدید واکشی می کند:

class GmailToolsClass:
    def __init__(self):
        self.service = self._get_gmail_service()

    def fetch_unanswered_emails(self, max_results=50):
        try:
            # 1. Get recent emails
            recent_emails = self.fetch_recent_emails(max_results)
            if not recent_emails: return []

            # 2. Get draft replies to filter out already answered threads
            drafts = self.fetch_draft_replies()
            threads_with_drafts = {draft['threadId'] for draft in drafts}

            # 3. Process each new email
            seen_threads = set()
            unanswered_emails = []
            for email in recent_emails:
                thread_id = email['threadId']
                # Skip if thread was seen before or has a draft reply
                if thread_id not in seen_threads and thread_id not in threads_with_drafts:
                    seen_threads.add(thread_id)
                    email_info = self._get_email_info(email['id'])
                    # Skip if email is sent from the agency (not received)
                    if self._should_skip_email(email_info):
                        continue
                    unanswered_emails.append(email_info)
            return unanswered_emails

        except Exception as e:
            print(f"An error occurred: {e}")
            return []

    def fetch_recent_emails(self, max_results=50):
        """Fetches emails from the last 8 hours."""
        try:
            # Query emails from the last 8 hours
            now = datetime.now()
            delay = now - timedelta(hours=8)
            after_timestamp = int(delay.timestamp())
            before_timestamp = int(now.timestamp())
            query = f"after:{after_timestamp} before:{before_timestamp}"

            results = self.service.users().messages().list(
                userId="me", q=query, maxResults=max_results
            ).execute()
            messages = results.get("messages", [])
            return messages

        except Exception as error:
            print(f"An error occurred while fetching emails: {error}")
            return []

    # ... other methods ...

    def _get_email_info(self, msg_id):
        message = self.service.users().messages().get(
            userId="me", id=msg_id, format="full"
        ).execute()

        payload = message.get('payload', {})
        headers = {header["name"].lower(): header["value"] for header in payload.get("headers", [])}

        return {
            "id": msg_id,
            "threadId": message.get("threadId"),
            "messageId": headers.get("message-id"),
            "references": headers.get("references", ""),
            "sender": headers.get("from", "Unknown"),
            "subject": headers.get("subject", "No Subject"),
            "body": self._get_email_body(payload),
        }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

باشه داخلش چه خبره fetch_unanswered_emails ?

  • استفاده می کنیم fetch_recent_emails برای بازیابی ایمیل ها از 8 ساعت گذشته.

  • پیش نویس پاسخ ها بررسی می شوند از بارگیری ایمیل های قبلاً پاسخ داده شده خودداری کنید.

  • همه ایمیل‌های جدید را برای جمع‌آوری جزئیات کلیدی مرور می‌کنیم (فرستنده، موضوع، بدن)، مطمئن شوید که از هر ایمیلی که توسط خود آژانس ارسال می شود صرف نظر کنید.

2. دسته بندی ایمیل

پس از شناسایی ایمیل های جدید، طبقه بندی عامل هوش مصنوعی آنها به چهار دسته از پیش تعریف شده تقسیم می شوند: “شکایت مشتری”، “استعلام محصول”، “بازخورد مشتری” یا “غیر مرتبط”.

در زیر دستورالعمل استفاده شده برای عامل طبقه بندی هوش مصنوعی:

CATEGORIZE_EMAIL_PROMPT = """
# **Role:**

You are a highly skilled customer support specialist working for a SaaS company specializing in AI agent design. Your expertise lies in understanding customer intent and meticulously categorizing emails to ensure they are handled efficiently.

# **Instructions:**

1. Review the provided email content thoroughly.
2. Use the following rules to assign the correct category:
   - **product_enquiry**: When the email seeks information about a product feature, benefit, service, or pricing.
   - **customer_complaint**: When the email communicates dissatisfaction or a complaint.
   - **customer_feedback**: When the email provides feedback or suggestions regarding a product or service.
   - **unrelated**: When the email content does not match any of the above categories.

# **EMAIL CONTENT:**
{email}

# **Notes:**

* Base your categorization strictly on the email content provided; avoid making assumptions or overgeneralizing.
"""
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس ما این عامل را در categorize_email گره گراف ما:

def categorize_email(self, state: GraphState) -> GraphState:
    """Categorizes the current email using the categorize_email agent."""
    # Get the last email
    current_email = state["emails"][-1]
    result = self.agents.categorize_email.invoke({"email": current_email.body})
    print(f"Email category: {result.category.value}")

    return {
        "email_category": result.category.value,
        "current_email": current_email
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

3. تولید پاسخ

این سیستم بسته به دسته ایمیل، پاسخ‌های متفاوتی تولید می‌کند:

الف شکایات و انتقادات:

برای ایمیل هایی که به عنوان شکایات یا بازخورد طبقه بندی می شوند، عامل نویسنده هوش مصنوعی مستقیماً وظیفه ایجاد یک پاسخ شخصی را دارد. این نماینده نویسنده به او دستور داده می شود که همدل، حرفه ای باشد و اطمینان حاصل کند که پاسخ هایش با صدای برند آژانس هماهنگ است:

EMAIL_WRITER_PROMPT = """
# **Role:**  

You are a professional email writer working as part of the customer support team at a SaaS company specializing in AI agent development. Your role is to draft thoughtful and friendly emails that effectively address customer queries based on the given category and relevant information.  

# **Tasks:**  

1. Use the provided email category, subject, content, and additional information to craft a professional and helpful response.  
2. Ensure the tone matches the email category, showing empathy, professionalism, and clarity.  
3. Write the email in a structured, polite, and engaging manner that addresses the customer’s needs.  

...

Write the email in the following format:  
   Dear [Customer Name],  

   [Email body responding to the query, based on the category and information provided.]  

   Best regards,  
   The Agentia Team    
   - Replace `[Customer Name]` with “Customer” if no name is provided.  
   - Ensure the email is friendly, concise, and matches the tone of the category.  

3. If a feedback is provided, use it to improve the email while ensuring it still aligns with the predefined guidelines.  

# **Notes:**  

* Return only the final email without any additional explanation or preamble.  
* Always maintain a professional and empathetic tone that aligns with the context of the email.  
* If the information provided is insufficient, politely request additional details from the customer.  
* Make sure to follow any feedback provided when crafting the email.  
"""
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا نحوه write_draft_email تابع از این اعلان برای ایجاد پیش نویس استفاده می کند:

def write_draft_email(self, state: GraphState) -> GraphState:
    """Writes a draft email based on the current email and retrieved information."""
    # Get messages history for current email
    writer_messages = state.get('writer_messages', [])

    # Write email
    draft_result = self.agents.email_writer.invoke({
        "email_category": state["email_category"],
        "email_content": state["current_email"].body,
        "retrieved_documents": state["retrieved_documents"], # Empty for feedback or complaint
        "history": writer_messages
    })
    email = draft_result.email
    trials = state.get('trials', 0) + 1

    # Append writer's draft to the message list
    writer_messages.append(f"**Draft {trials}:**\n{email}")

    return {
        "generated_email": email,
        "trials": trials,
        "writer_messages": writer_messages
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ما تاریخچه پیام عامل نویسنده را پیگیری می کنیم (writer_messages) و تعداد تلاش برای تهیه پیش نویس (trials) به دلایلی که در قسمت بعدی مشخص خواهد شد.

ب استعلام محصول:

برای ایمیل های دسته بندی شده به عنوان درخواست محصول، سیستم استفاده خواهد کرد RAG برای ارائه پاسخ های دقیق و دقیق.

1. ساخت پرس و جو: اولین قدم تبدیل ایمیل مشتری به پرس و جوهای خاص است که می تواند برای جستجو در پایگاه دانش داخلی استفاده شود. این کار با استفاده از اعلان زیر انجام می شود:

GENERATE_RAG_QUERIES_PROMPT = """
# **Role:**

You are an expert at analyzing customer emails to extract their intent and construct the most relevant queries for internal knowledge sources.

# **Context:**

You will be given the text of an email from a customer. This email represents their specific query or concern. Your goal is to interpret their request and generate precise questions that capture the essence of their inquiry.

# **Instructions:**

1. Carefully read and analyze the email content provided.
2. Identify the main intent or problem expressed in the email.
3. Construct up to three concise, relevant questions that best represent the customer’s intent or information needs.
4. Include only relevant questions. Do not exceed three questions.
5. If a single question suffices, provide only that.

# **EMAIL CONTENT:**
{email}

# **Notes:**

* Focus exclusively on the email content to generate the questions; do not include unrelated or speculative information.
* Ensure the questions are specific and actionable for retrieving the most relevant answer.
* Use clear and professional language in your queries.
"""
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

گره construct_rag_queries این را می نامد من یک نماینده دارم برای ایجاد پرس و جو:

def construct_rag_queries(self, state: GraphState) -> GraphState:
    """Constructs RAG queries based on the email content."""
    email_content = state["current_email"].body
    query_result = self.agents.design_rag_queries.invoke({"email": email_content})

    return {"rag_queries": query_result.queries}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

2. بازیابی اطلاعات و تولید پاسخ:

در مرحله بعد، RAG از این پرسش‌ها برای جستجو در پایگاه دانش استفاده می‌کند. اطلاعات بازیابی شده به عنوان زمینه ای برای یک متخصص عمل می کند عامل هوش مصنوعی QA، که پاسخ های دقیق را به هر پرس و جو ترکیب می کند:

GENERATE_RAG_ANSWER_PROMPT = """
# **Role:**

You are a highly knowledgeable and helpful assistant specializing in question-answering tasks.

# **Context:**

You will be provided with pieces of retrieved context relevant to the user's question. This context is your sole source of information for answering.

# **Instructions:**

1. Carefully read the question and the provided context.
2. Analyze the context to identify relevant information that directly addresses the question.
3. Formulate a clear and precise response based only on the context. Do not infer or assume information that is not explicitly stated.
4. If the context does not contain sufficient information to answer the question, respond with: "I don't know."
5. Use simple, professional language that is easy for users to understand.

# **Question:**
{question}

# **Context:**
{context}

# **Notes:**

* Stay within the boundaries of the provided context; avoid introducing external information.
* If multiple pieces of context are relevant, synthesize them into a cohesive and accurate response.
* Prioritize user clarity and ensure your answers directly address the question without unnecessary elaboration.
"""
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این retrieve_from_rag گره اطلاعاتی را برای هر پرس و جو بازیابی می کند و پاسخ ها را جمع آوری می کند:

def retrieve_from_rag(self, state: GraphState) -> GraphState:
    """Retrieves information from internal knowledge based on RAG questions."""
    final_answer = ""
    for query in state["rag_queries"]:
        rag_result = self.agents.generate_rag_answer.invoke(query)
        final_answer += query + "\n" + rag_result + "\n\n"

    return {"retrieved_documents": final_answer}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

همه پرس و جوها با پاسخ مربوطه خود در ذخیره می شوند retrieved_documents که سپس توسط عامل نویسنده هوش مصنوعی به عنوان زمینه ای برای ایجاد پاسخ ایمیل نهایی، اطمینان از جامع و دقیق بودن آن.

4. تضمین کیفیت: مطمئن شوید که ایمیل ها عالی هستند

قبل از اینکه هر ایمیلی ارسال شود، توسط یک نماینده تصحیح کننده هوش مصنوعی بررسی کیفیت کامل آن انجام می شود. نماینده هر ایمیل را برای درستی بررسی می کند قالب بندی، ارتباط با سوالات مشتریو یک حرفه ای، لحن سازگار با برند

این عامل تصحیح هوش مصنوعی با دستور زیر هدایت می شود که وظایف خود را مشخص می کند:

EMAIL_PROOFREADER_PROMPT = """
# **Role:**

You are an expert email proofreader working for the customer support team at a SaaS company specializing in AI agent development. Your role is to analyze and assess replies generated by the writer agent to ensure they accurately address the customer's inquiry, adhere to the company's tone and writing standards, and meet professional quality expectations.

# **Context:**

You are provided with the **initial email** content written by the customer and the **generated email** crafted by the our writer agent.

# **Instructions:**

1. Analyze the generated email for:
   - **Accuracy**: Does it appropriately address the customer’s inquiry based on the initial email and information provided?
   - **Tone and Style**: Does it align with the company’s tone, standards, and writing style?
   - **Quality**: Is it clear, concise, and professional?
2. Determine if the email is:
   - **Sendable**: The email meets all criteria and is ready to be sent.
   - **Not Sendable**: The email contains significant issues requiring a rewrite.
3. Only judge the email as "not sendable" (`send: false`) if lacks information or inversely contains irrelevant ones that would negatively impact customer satisfaction or professionalism.
4. Provide actionable and clear feedback for the writer agent if the email is deemed "not sendable."

---

# **INITIAL EMAIL:**
{initial_email}

# **GENERATED REPLY:**
{generated_email}

---

# **Notes:**

* Be objective and fair in your assessment. Only reject the email if necessary.
* Ensure feedback is clear, concise, and actionable.
"""
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این verify_generated_email گره را فرا می خواند نماینده تصحیح برای بررسی ایمیل:

def verify_generated_email(self, state: GraphState) -> GraphState:
    """Verifies the generated email using the proofreader agent."""
    print(Fore.YELLOW + "Verifying generated email...\n" + Style.RESET_ALL)
    review = self.agents.email_proofreader.invoke({
        "initial_email": state["current_email"].body,
        "generated_email": state["generated_email"],
    })

    # Store feedback if email is not good
    if not review.send:
        writer_messages = state.get('writer_messages', [])
        writer_messages.append(f"**Proofreader Feedback:**\n{review.feedback}")

    return {
        "sendable": review.send,
        "writer_messages": writer_messages
    }
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

در اینجا نحوه کار آن آمده است: این تابع هم ایمیل اصلی مشتری و هم پاسخ پیش نویس شده را ارائه می دهد عامل تصحیح هوش مصنوعی، که یا ایمیل را تایید می کند (sendable: True) یا آن را رد می کند (sendable: False) با بازخورد. اگر رد شد، بازخورد در آن ذخیره می‌شود writer_messages لیست کنید تا عامل نویسنده هوش مصنوعی می توانید از آن برای بهبود پاسخ استفاده کنید.

برای جلوگیری از گیر افتادن سیستم در یک حلقه بی نهایت (که اگر اطلاعات لازم برای پاسخ به ایمیل در پایگاه دانش وجود نداشته باشد ممکن است اتفاق بیفتد)، فقط سه بار آن را امتحان می کنیم (trials = 3) برای درست کردن آن. اگر بعد از سه بار تلاش باز هم نتواند یک ایمیل خوب ایجاد کند، آن را علامت گذاری می کنیم تا یک انسان بررسی کند. این اطمینان حاصل می کند که هر ایمیل ارسالی با کیفیت بالا باشد.

5. ارسال ایمیل

در نهایت، هنگامی که ایمیل تمام بررسی های کیفی را گذراند، آماده ارسال است. سیستم از Gmail API برای ارسال خودکار پاسخ نهایی برای مشتری.

دو گزینه در دسترس است، اولی به یک ایمیل پیش نویس برای بررسی انسانی ایجاد کنید:

def create_draft_response(self, state: GraphState) -> GraphState:
    """Creates a draft response in Gmail."""
    print(Fore.YELLOW + "Creating draft email...\n" + Style.RESET_ALL)
    self.gmail_tools.create_draft_reply(state["current_email"], state["generated_email"])

    return {"retrieved_documents": "", "trials": 0}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

دوم این است که ایمیل را مستقیما ارسال کنید:

def send_email_response(self, state: GraphState) -> GraphState:
    """Sends the email response directly using Gmail."""
    print(Fore.YELLOW + "Sending email...\n" + Style.RESET_ALL)
    self.gmail_tools.send_reply(state["current_email"], state["generated_email"])

    return {"retrieved_documents": "", "trials": 0}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

بعد چه اتفاقی می افتد؟

پس از ارسال ایمیل یا ایجاد یک پیش نویس، سیستم به ابتدا باز می گردد تا ایمیل های جدید را بررسی کند. این روند را ادامه می دهد و اطمینان حاصل می کند که تمام ایمیل های مشتری به سرعت و کارآمد مدیریت می شوند تا زمانی که صندوق ورودی خالی شود.

مزایا و تاثیر

  • بهبود تجربه مشتری: پاسخ‌های سریع و متناسبی ارائه می‌کند که باعث می‌شود مشتریان احساس ارزشمندی کنند.

  • افزایش کارایی: به طور چشمگیری زمان صرف شده برای مدیریت ایمیل را کاهش می دهد.

  • بهره وری تیم: تیم‌های پشتیبانی را برای تمرکز بر وظایف پیچیده و ابتکارات استراتژیک آزاد می‌کند.

  • دقت تضمین شده: RAG تضمین می کند که هر پاسخی با اطلاعات قابل اعتماد پشتیبانی می شود.

برنامه های کاربردی در دنیای واقعی

این سیستم اتوماسیون ایمیل راه حل های همه کاره برای صنایع مختلف ارائه می دهد:

  • آژانس های بازاریابی: ایمیل‌های مشتری را مدیریت می‌کند، گزارش‌دهی را خودکار می‌کند و به سؤالات سریع پاسخ می‌دهد و به تیم‌ها اجازه می‌دهد روی کار خلاقانه تمرکز کنند.

  • تجارت الکترونیک: به سؤالات محصول پاسخ می دهد، به به روز رسانی سفارش کمک می کند، و برای بهبود تجربیات مشتری بازخورد جمع آوری می کند.

  • شرکت های فنی: به مسائل فنی رایج پاسخ می دهد، پشتیبانی مشتری را ارائه می دهد و بازخورد آزمایش کنندگان بتا را سازماندهی می کند.

  • تحصیلات: به سوالات دانش آموزان کمک می کند، آنها را از طریق ثبت نام راهنمایی می کند و از وظایف اداری پشتیبانی می کند.

این سیستم انعطاف‌پذیر است و برای هر کسب‌وکاری که می‌خواهد ایمیل‌ها را به طور مؤثرتری مدیریت کند و ارتباط با مشتریان را بهبود بخشد، به خوبی کار می‌کند.

نتیجه گیری

این سیستم اتوماسیون ایمیل هوش مصنوعی، ساخته شده است LangChain و لانگ گراف، و استفاده از RAG، یک راه حل قدرتمند برای مشاغلی ارائه می دهد که به دنبال تغییر پشتیبانی مشتری خود هستند. با خودکارسازی مدیریت ایمیل، ارائه می دهد زمان پاسخگویی سریع تر، رضایت مشتری را بهبود می بخشد و کارایی عملیاتی را افزایش می دهد.

🎯 آیا آماده اید تا تعاملات مشتری خود را متحول کنید؟ پروژه کامل را در GitHub من و کشف کنید که چگونه این سیستم را برای کسب و کار خود تنظیم کنید!

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

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

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

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