پیاده‌سازی دسته‌بندی خودکار تیکت‌ها با Text Classifier

دسته‌بندی پیام مشتری

اگر تا حالا یک روز شلوغ در تیم پشتیبانی را تجربه کرده باشید، می‌دانید که بزرگ‌ترین چالش، نه پاسخ دادن به تیکت‌ها، بلکه «فهمیدن اینکه هر تیکت اصلاً درباره‌ی چیست» است. اینجاست که دسته‌بندی پیام مشتری به‌صورت خودکار وارد بازی می‌شود و کار شما را به‌طور چشمگیری راحت می‌کند. با کمک یک Text Classifier هوشمند، می‌توانید هر تیکت را در همان لحظه‌ی ورود، به دسته‌ی درست (مثل مشکل فنی، سوال مالی، یا درخواست بازپرداخت) هدایت کنید. در این راهنما با هم قدم‌به‌قدم یاد می‌گیریم چطور چنین سیستمی را از صفر بسازیم.

چرا دسته‌بندی خودکار تیکت‌ها این‌قدر مهم است؟

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

چه مشکلاتی بدون دسته‌بندی هوشمند رخ می‌دهند؟

بدون یک سیستم دسته‌بندی درست، تیکت‌ها معمولاً به ترتیب رسیدن بررسی می‌شوند، نه بر اساس اهمیت یا تخصص مورد نیاز. این یعنی یک تیکت اضطراری درباره‌ی قطعی سرویس ممکن است ساعت‌ها در صف بماند، در حالی که یک سوال ساده درباره‌ی ساعت کاری زودتر پاسخ داده شود. علاوه بر این، کارمندان پشتیبانی وقت زیادی را صرف خواندن و تشخیص موضوع هر تیکت می‌کنند که می‌توانست صرف حل واقعی مشکلات شود.

مزایای کلیدی استفاده از Text Classifier

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

  • کاهش زمان پاسخ‌گویی به دلیل مسیریابی خودکار و فوری
  • کاهش بار کاری تیم پشتیبانی برای کارهای تکراری
  • امکان اولویت‌بندی تیکت‌های حساس و فوری
  • تولید گزارش‌های دقیق از موضوعات پرتکرار مشتریان
  • افزایش رضایت مشتری به دلیل پاسخ‌دهی سریع‌تر و دقیق‌تر

Text Classifier چیست و چطور کار می‌کند؟

به زبان ساده، یک Text Classifier ابزاری است که یک متن (در اینجا متن تیکت) را می‌خواند و بر اساس محتوای آن، یک یا چند برچسب (Label) از پیش تعیین‌شده را به آن اختصاص می‌دهد. این برچسب‌ها می‌توانند چیزهایی مثل «مشکل فنی»، «سوال مالی»، «درخواست بازپرداخت» یا «بازخورد محصول» باشند. مدل‌های زبانی امروزی، حتی بدون آموزش اختصاصی، می‌توانند با دقت بالایی این کار را انجام دهند.

روش‌های مختلف دسته‌بندی متن

به‌طور کلی دو رویکرد اصلی برای دسته‌بندی متن وجود دارد. رویکرد اول استفاده از مدل‌های آموزش‌دیده‌ی سنتی (مثل Naive Bayes یا SVM) است که نیاز به مجموعه داده‌ی برچسب‌خورده و آموزش جداگانه دارند. رویکرد دوم که امروزه بسیار محبوب‌تر شده، استفاده از مدل‌های زبانی بزرگ از طریق Prompting است؛ یعنی شما فقط دسته‌ها را در یک پرامپت توضیح می‌دهید و مدل بدون آموزش اضافه، تیکت را دسته‌بندی می‌کند. این روش دوم برای اکثر استارتاپ‌ها و کسب‌وکارهای کوچک سریع‌تر و کم‌هزینه‌تر است.

چه زمانی از مدل از پیش آموزش‌دیده استفاده کنیم؟

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

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

اگر تیم شما به دنبال راهی بدون کدنویسی پیچیده برای اجرای این سیستم است، می‌توانید فرآیند را به‌طور کامل در n8n پیاده‌سازی کنید. با اتصال API هوش مصنوعی در n8n، می‌توانید یک نود HTTP Request بسازید که متن تیکت ورودی را به مدل ارسال می‌کند و خروجی JSON شامل دسته و اولویت را دریافت می‌کند. این روش به‌خصوص برای تیم‌هایی که می‌خواهند سریع نمونه‌ی اولیه‌ی سیستم دسته‌بندی پیام مشتری را بسازند، بسیار کاربردی است؛ چون کل فرآیند را می‌توانید به‌صورت بصری طراحی کنید و بدون نوشتن یک خط کد سرور، آن را با سیستم‌های دیگر یکپارچه کنید.

ذخیره و تحلیل نتایج دسته‌بندی

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

طراحی ساختار دسته‌بندی برای تیکت‌های پشتیبانی

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

انتخاب دسته‌های مناسب

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

  • مشکل فنی (Technical Issue)
  • سوال مالی و صورت‌حساب (Billing)
  • درخواست بازپرداخت (Refund Request)
  • سوال عمومی درباره‌ی محصول (General Inquiry)
  • بازخورد و پیشنهاد (Feedback)
  • شکایت رسمی (Complaint)

تعیین سطح اولویت همراه با دسته‌بندی

علاوه بر موضوع تیکت، می‌توانید از همان مدل بخواهید سطح اولویت را هم تشخیص دهد؛ مثلاً «فوری»، «متوسط» یا «کم‌اهمیت». این کار به شما اجازه می‌دهد تیکت‌هایی که هم از نظر موضوع و هم از نظر فوریت اهمیت بالایی دارند را در صدر صف پشتیبانی قرار دهید. ترکیب دسته‌بندی موضوعی و اولویت‌بندی، یک سیستم مسیریابی واقعاً قدرتمند می‌سازد.

پیاده‌سازی عملی: کد دسته‌بندی تیکت با API

حالا که ساختار دسته‌بندی پیام مشتری را طراحی کردیم، وقت آن رسیده که آن را در کد پیاده کنیم. در ادامه یک نمونه‌ی کامل با Python می‌بینید که از Structured Outputs برای دریافت خروجی دقیق و قابل پردازش استفاده می‌کند.


from openai import OpenAI
import json

client = OpenAI(api_key="YOUR_API_KEY")

def classify_ticket(ticket_text):
    response = client.chat.completions.create(
        model="gpt-5-4-mini",
        messages=[
            {
                "role": "system",
                "content": (
                    "تو یک دستیار دسته‌بندی تیکت پشتیبانی هستی. "
                    "متن تیکت را بخوان و خروجی را فقط به صورت JSON با "
                    "فیلدهای category و priority برگردان."
                )
            },
            {
                "role": "user",
                "content": ticket_text
            }
        ],
        response_format={
            "type": "json_schema",
            "json_schema": {
                "name": "ticket_classification",
                "strict": True,
                "schema": {
                    "type": "object",
                    "properties": {
                        "category": {
                            "type": "string",
                            "enum": [
                                "technical_issue",
                                "billing",
                                "refund_request",
                                "general_inquiry",
                                "feedback",
                                "complaint"
                            ]
                        },
                        "priority": {
                            "type": "string",
                            "enum": ["urgent", "medium", "low"]
                        }
                    },
                    "required": ["category", "priority"],
                    "additionalProperties": False
                }
            }
        }
    )
    return json.loads(response.choices[0].message.content)


# تست با یک نمونه تیکت
ticket = "سلام، چند روزه که اپلیکیشن باز نمیشه و پیام خطا میده. لطفا فوری بررسی کنید."
result = classify_ticket(ticket)
print(result)

خروجی این کد چیزی شبیه به {"category": "technical_issue", "priority": "urgent"} خواهد بود. حالا برنامه‌ی شما می‌تواند بر اساس همین خروجی، تیکت را مستقیماً به تیم فنی ارجاع دهد و حتی به آن برچسب «فوری» بزند.

اتصال نتیجه به سیستم تیکتینگ

بعد از دریافت نتیجه‌ی دسته‌بندی، معمولاً باید آن را به سیستم تیکتینگ (مثل Zendesk، Freshdesk یا یک سیستم داخلی) متصل کنید. این کار معمولاً از طریق API همان سیستم انجام می‌شود؛ یعنی پس از دسته‌بندی، یک درخواست PATCH یا PUT برای به‌روزرسانی فیلدهای «دسته» و «اولویت» تیکت ارسال می‌کنید. اکثر پلتفرم‌های تیکتینگ مدرن APIهایی برای این کار دارند که در مستندات خودشان به‌خوبی توضیح داده شده است.

جدول مقایسه روش‌های دسته‌بندی تیکت

برای اینکه تصمیم‌گیری راحت‌تر شود، جدول زیر سه روش رایج دسته‌بندی تیکت را از نظر هزینه، سرعت توسعه و دقت با هم مقایسه می‌کند:

روش سرعت توسعه هزینه دقت
قوانین دستی (Keyword-based) سریع رایگان پایین
مدل زبانی + Prompting سریع متوسط (هزینه توکن) بالا
مدل سفارشی آموزش‌دیده زمان‌بر اولیه بالا، بعداً پایین بسیار بالا (در صورت داده کافی)

بهینه‌سازی و افزایش دقت دسته‌بندی

حتی بعد از پیاده‌سازی اولیه، همیشه جای بهبود وجود دارد. در ادامه چند روش عملی برای افزایش دقت سیستم دسته‌بندی پیام مشتری شما را بررسی می‌کنیم.

استفاده از مثال‌های Few-Shot در پرامپت

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

بازبینی دوره‌ای و حلقه بازخورد

سیستم دسته‌بندی پیام مشتری شما نباید یک پروژه‌ی «یک‌بار بساز و فراموش کن» باشد. توصیه می‌شود هر چند هفته یک نمونه‌ی تصادفی از تیکت‌های دسته‌بندی‌شده را بررسی کنید و موارد اشتباه را شناسایی کنید. این موارد می‌توانند به‌عنوان مثال‌های جدید به پرامپت اضافه شوند یا حتی به شما بگویند که باید یک دسته‌ی جدید اضافه کنید.

مدیریت موارد مرزی و چند‌دسته‌ای

گاهی یک تیکت واقعاً بین دو دسته قرار می‌گیرد؛ مثلاً مشتری هم درباره‌ی یک باگ صحبت می‌کند و هم درخواست بازپرداخت دارد. برای این موارد می‌توانید به مدل اجازه دهید بیش از یک برچسب برگرداند، یا یک دسته‌ی «دسته‌بندی نشده / نیاز به بررسی انسانی» تعریف کنید تا تیکت‌های پیچیده مستقیماً به یک کارشناس ارجاع شوند.

چک‌لیست راه‌اندازی سیستم دسته‌بندی

قبل از اینکه سیستم را به‌صورت کامل روی تیکت‌های واقعی فعال کنید، این چک‌لیست را مرور کنید:

  1. دسته‌بندی‌های اصلی و سطوح اولویت را تعریف کرده‌اید؟
  2. پرامپت سیستم را با چند نمونه‌ی واقعی تست کرده‌اید؟
  3. خروجی JSON با اسکیمای از پیش تعریف‌شده مطابقت دارد؟
  4. اتصال به سیستم تیکتینگ تست شده است؟
  5. یک دسته‌ی پیش‌فرض برای موارد نامشخص در نظر گرفته‌اید؟
  6. برنامه‌ای برای بازبینی دوره‌ای دقت سیستم دارید؟

نتیجه‌گیری

پیاده‌سازی دسته‌بندی پیام مشتری به صورت خودکار دیگر یک تجمل برای شرکت‌های بزرگ نیست؛ بلکه یک ابزار در دسترس برای هر تیم پشتیبانی، حتی کوچک‌ترین آن‌ها، است. با طراحی درست دسته‌ها، استفاده از Structured Outputs برای خروجی قابل پردازش، و اتصال این سیستم به ابزار تیکتینگ خودتان، می‌توانید زمان پاسخ‌دهی را به‌طور چشمگیری کاهش دهید و رضایت مشتریان را افزایش دهید.

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

سوالات متداول (FAQ)

۱. آیا برای دسته‌بندی تیکت‌ها حتما باید مدل را آموزش دهیم؟

خیر. در اکثر موارد، استفاده از یک مدل زبانی از طریق API همراه با یک پرامپت خوب و چند مثال Few-Shot کافی است و نیازی به آموزش مدل اختصاصی نیست. آموزش مدل سفارشی معمولاً فقط برای حجم‌های بسیار بالا یا دسته‌بندی‌های بسیار تخصصی توصیه می‌شود.

۲. چطور می‌توانم دقت دسته‌بندی پیام مشتری را اندازه‌گیری کنم؟

بهترین روش این است که یک نمونه‌ی تصادفی از تیکت‌های دسته‌بندی‌شده را به‌صورت دوره‌ای انتخاب کنید و آن‌ها را با دسته‌بندی صحیح (که توسط یک انسان تأیید شده) مقایسه کنید. درصد تطابق این دو، نشان‌دهنده‌ی دقت سیستم شماست.

۳. اگر تیکت به دو دسته همزمان مربوط باشد چه باید کرد؟

می‌توانید به مدل اجازه دهید چند برچسب همزمان برگرداند، یا یک دسته‌ی «نیاز به بررسی انسانی» تعریف کنید تا این تیکت‌های مرزی به‌صورت مستقیم به یک کارشناس واقعی ارجاع شوند.

۴. آیا این سیستم با زبان فارسی هم به‌خوبی کار می‌کند؟

بله، مدل‌های زبانی امروزی در پردازش متون فارسی عملکرد بسیار خوبی دارند، به‌خصوص اگر پرامپت سیستم و مثال‌های Few-Shot نیز به فارسی نوشته شده باشند تا سبک نوشتاری مشتریان شما را بهتر بشناسد.

۵. هزینه‌ی اجرای این سیستم روی تعداد بالای تیکت چقدر است؟

هزینه بستگی به مدل انتخابی و طول متن تیکت دارد، اما برای دسته‌بندی متون کوتاه، استفاده از مدل‌های ارزان مثل نسخه‌های Mini یا Nano هزینه را به شدت پایین نگه می‌دارد و حتی برای حجم بالای تیکت روزانه نیز مقرون‌به‌صرفه باقی می‌ماند.

 

دیدگاه‌ خود را بنویسید

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