P Pitchbar مستندات

ساخت دستیار فروش

آزمایش‌های A/B

آزمایش‌های A/B به شما امکان می‌دهند تا شخصیت‌های مختلف دستیار فروش را بر روی ترافیک واقعی بازدیدکنندگان تست کنید و برنده را براساس تعامل، جذب مشتری یا طول مکالمه انتخاب کنید. Pitchbar هر بازدیدکننده را به‌صورت چسبنده به یک نوع اختصاص می‌دهد — همان شخص همیشه همان نوع را می‌بیند — تا مقایسه منصفانه باشد.

محل قرارگیری

هر دستیار فروش را باز کنید ← زبانه آزمایش‌های A/B در ناوبری دستیار فروش (آیکون بشر). آدرس: /app/agents/{id}/experiments. مالکان و مدیران می‌توانند آزمایش ایجاد / شروع / متوقف کنند؛ ویرایشگران نمی‌توانند.

ایجاد آزمایش

  1. روی آزمایش جدید کلیک کنید.
  2. یک نوع انتخاب کنید:
    • persona — انواع، نام + لحن دستیار فروش را در راهنمای سیستم برای بازدیدکنندگان اختصاص‌یافته لغو می‌کنند. از این برای تست "آریا" در مقابل "مکس"، "دوستانه" در مقابل "تیز" و غیره استفاده کنید.
    • cta — انواع، اختصاص را ثبت می‌کنند اما هنوز payload فراخوان زمان اجرا را تغییر نمی‌دهند. برای اندازه‌گیری ثبت می‌شوند؛ اعمال کامل زمان اجرا در نسخه‌های آینده ارائه می‌شود.
    • trigger — مشابه cta — فقط اندازه‌گیری.
  3. حداقل ۲ نوع اضافه کنید. پیش‌فرض control + treatment با نسبت ۵۰/۵۰ است. می‌توانید وزن‌ها (هر عدد صحیح مثبت — نرمال‌سازی می‌شوند) و نام‌ها را تغییر دهید.
  4. برای نوع persona، config JSON هر نوع باید یک شیء persona داشته باشد:
    { "persona": { "name": "آریا", "tone": "گرم و مختصر" } }
    ویجت نام شخصیت نوع را در هدر چت نمایش می‌دهد و هوش مصنوعی با آن نام + لحن برای مکالمه اختصاص‌یافته صحبت می‌کند.
  5. ذخیره کنید. وضعیت با draft شروع می‌شود — هنوز بازدیدکننده‌ای اختصاص داده نشده است.
  6. روی شروع کلیک کنید. وضعیت به running تغییر می‌کند. هر بازدیدکننده‌ی جدید در اولین نوبت، در یک گروه قرار می‌گیرد.

نحوه عملکرد اختصاص

در اولین پیام یک مکالمه، MessageStreamController تابع ExperimentResolver::resolveForConversation را فراخوانی می‌کند:

  1. اگر conversation.variant_id قبلاً تنظیم شده باشد، از آن استفاده کنید (چسبنده).
  2. در غیر این صورت، جدیدترین آزمایش running شروع‌شده برای این دستیار فروش را جستجو کنید. فقط یک آزمایش فعال در هر دستیار فروش — اگر آزمایش دوم را در حین اجرای آزمایش اول شروع کنید، حل‌کننده جدیدترین را انتخاب می‌کند. برای اجرای نوع متفاوت، ابتدا آزمایش قبلی را متوقف کنید.
  3. (visitor_id + experiment_id) را در لیست انواع وزنی هش کنید (Assigner). همان بازدیدکننده که روزها بعد بازمی‌گردد، در همان نوع قرار می‌گیرد — ردیف اختصاص پایدار است.
  4. conversation.variant_id را ذخیره کنید. هر نوبت آینده برای این مکالمه، همان نوع را می‌خواند.
  5. برای kind = persona، config[persona] نوع، شخصیت پیش‌فرض دستیار فروش را در PromptBuilder::build برای آن نوبت لغو می‌کند.

مشاهده در عمل

سریع‌ترین راه برای تأیید اتصال:

  1. یک آزمایش persona با دو نوع کاملاً متفاوت ایجاد کنید — مثلاً { "persona": { "name": "ربات مفید" } } در مقابل { "persona": { "name": "ربات تیز" } }.
  2. آزمایش را شروع کنید.
  3. ویجت خود را در دو مرورگر مختلف باز کنید (یا یکی عادی و یکی مخفی — کوکی‌های مختلف = visitor_id متفاوت).
  4. در هر کدام یک سوال مشابه بپرسید. هدر پنل چت باید در یکی "ربات مفید" و در دیگری "ربات تیز" را نشان دهد و پاسخ‌ها باید به‌طور قابل‌توجهی متفاوت باشند.
  5. /admin/conversations را باز کنید و تأیید کنید که هر ردیف مکالمه یک variant_id ثبت شده دارد.

اندازه‌گیری نتایج

همه موارد ذخیره می‌شوند: ردیف‌های experiment_assignments + variant_id در هر ردیف conversations. این دو جدول را به messages و leads برای هر تحلیل دلخواه متصل کنید — به عنوان مثال:

SELECT v.name,
       COUNT(DISTINCT c.id) AS conversations,
       COUNT(DISTINCT l.id) AS leads_captured,
       AVG(c.message_count) AS avg_messages
FROM variants v
LEFT JOIN conversations c ON c.variant_id = v.id
LEFT JOIN leads l ON l.conversation_id = c.id
WHERE v.experiment_id = '...'
GROUP BY v.name;

یک پنل آمار داخلی در /app/agents/{id}/experiments در نقشه راه است؛ در حال حاضر باید آن کوئری را به‌صورت دستی اجرا کنید (توکن API فضای کاری + دسترسی خواندن /api/v1/db در صورت استفاده از نسخه خودمیزبانی، یا از پشتیبانی بخواهید).

متوقف کردن / حذف

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

حذف ردیف آزمایش را به‌صورت سخت حذف می‌کند. ردیف‌های نوع آبشاری می‌شوند. مقادیر موجود conversations.variant_id یتیم می‌شوند — این عمدی است؛ ما حتی پس از پایان آزمایش، سابقه این که هر مکالمه کدام نوع را دریافت کرده است، نگهداری می‌کنیم.

زبان خود را انتخاب کنید