AI Observability

تست A/B در Langfuse: نسخه‌بندی پرامپت و معناداری آماری

ساخت برنامه‌های LLM آماده برای تولید، نیازمند چیزی فراتر از تنظیم پرامپت‌هاست؛ این کار به آزمایش‌های دقیق نیاز دارد. در مهندسی نرم‌افزار سنتی، ما به تست A/B تکیه می‌کنیم تا اطمینان حاصل کنیم که تغییرات معیارهای کلیدی را بهبود می‌بخشند. همین اصل برای مدل‌های زبانی بزرگ (LLM) نیز کاربرد دارد. با این حال، ردیابی عملکرد نسخه‌های مختلف پرامپت می‌تواند پیچیده باشد اگر ابزارهای پایش‌پذیری مناسبی در اختیار نداشته باشید.

Langfuse، یک پلتفرم مهندسی LLM با منبع باز، چارچوبی قوی برای مدیریت این فرآیند ارائه می‌دهد. با بهره‌گیری از قابلیت‌های مدیریت پرامپت و پایش‌پذیری Langfuse، توسعه‌دهندگان می‌توانند به‌طور سیستماتیک تغییرات پرامپت را ارزیابی کرده و قبل از استقرار برای همه کاربران، معناداری آماری را تعیین کنند.

راه‌اندازی نسخه‌بندی پرامپت در Langfuse

گام اول، ایجاد یک استراتژی نسخه‌بندی شفاف است. Langfuse به شما امکان می‌دهد چندین نسخه از یک پرامپت را ذخیره کنید. این امر اطمینان می‌دهد که می‌توانید ردیابی کنید کدام نسخه خاص در یک ردیابی (trace) تولید مشخص استفاده شده است.

در اینجا نحوه مدیریت نسخه‌های پرامپت به‌صورت برنامه‌نویسی با استفاده از SDK پایتون Langfuse آورده شده است:


import langfuse

# Initialize Langfuse
langfuse_client = langfuse.Langfuse(
    public_key="YOUR_PUBLIC_KEY",
    secret_key="YOUR_SECRET_KEY"
)

# Define Prompt Version 1
prompt_v1 = langfuse_client.create_prompt(
    name="customer-support-resolver",
    label="prod",
    version=1,
    prompt="You are a helpful assistant. Answer the user's question: {{query}}"
)

# Define Prompt Version 2 (A/B Test Candidate)
prompt_v2 = langfuse_client.create_prompt(
    name="customer-support-resolver",
    label="experiment",
    version=2,
    prompt="You are an expert support agent. Use a polite, concise tone. Answer: {{query}}"
)

با اختصاص برچسب‌های متمایز مانند `prod` و `experiment`، می‌توانید ترافیک ورودی را بر اساس منطق تقسیم‌بندی خود به نسخه‌های خاص پرامپت هدایت کنید.

پیاده‌سازی گردش کار تست A/B

برای انجام یک تست A/B منصفانه، باید تخصیص ترافیک را تصادفی کنید. در یک برنامه وب معمولی، این کار می‌تواند در دروازه API یا لایه بک‌اند مدیریت شود. نکته کلیدی این است که نسخه پرامپت استفاده شده را در هر ردیابی ثبت کنید.


import random

def resolve_user_query(query: str):
    # 50% chance to use the new version
    use_experiment = random.random() < 0.5
    
    # Fetch the appropriate prompt version from Langfuse
    prompt_name = "customer-support-resolver"
    label = "experiment" if use_experiment else "prod"
    
    # Get the prompt object
    prompt_obj = langfuse_client.get_prompt(name=prompt_name, label=label)
    
    # Format the prompt
    formatted_prompt = prompt_obj.format(query=query)
    
    # Log the trace with the prompt version for observability
    with langfuse_client.as_root_context() as root:
        root.trace(
            name="support-flow",
            input={"query": query},
            metadata={
                "prompt_version": prompt_obj.version,
                "prompt_label": label
            }
        )
        
        # Call your LLM here
        # response = llm_client.chat(messages=[{"role": "user", "content": formatted_prompt}])
        
        root.generation(
            name="llm-call",
            model="gpt-4",
            prompt=formatted_prompt,
            # output=response,
            usage={"totalTokens": 100}
        )
        
        return "Response"

به فیلد `metadata` در ردیابی توجه کنید. این فیلد برای تحلیل پس از عمل حیاتی است، زیرا به شما امکان می‌دهد ردیابی‌ها را بر اساس نسخه پرامپت در رابط کاربری Langfuse یا از طریق API فیلتر کنید.

تحلیل معناداری آماری

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

  • امتیاز رضایت کاربر: اگر سیستم امتیازدهی دارید، میانگین امتیازات بین نسخه‌ها را مقایسه کنید.

  • تأخیر (Latency): زمان‌های پاسخ p95 را مقایسه کنید.

  • هزینه: میانگین مصرف توکن در هر ردیابی را مقایسه کنید.

می‌توانید این داده‌ها را از Langfuse استخراج کرده و آزمون‌های آماری مانند آزمون t یا آزمون Mann-Whitney U را انجام دهید. برای مثال، اگر متوجه شوید که نسخه 2 تأخیر ۱۵٪ کمتر دارد اما افت ۲٪ در رضایت کاربر وجود دارد، باید این مصالحه‌ها را در نظر بگیرید. یک آزمون t دو نمونه‌ای ساده می‌تواند تأیید کند که تفاوت تأخیر در سطح اطمینان ۹۵٪ معنادار است.

بهترین روش‌ها برای تست A/B در محیط تولید

  1. شروع کوچک: با تقسیم ۵ تا ۱۰ درصدی ترافیک شروع کنید تا مشکلات بحرانی را قبل از استقرار کامل شناسایی کنید.

  2. پایش برای سوگیری: اطمینان حاصل کنید که تست شما به دلیل زمان روز یا جمعیت‌شناسی کاربران دچار سوگیری نشده است.

  3. خودکارسازی بازگشت (Rollback): اگر گروه آزمایش عملکرد به‌طور قابل توجهی بدتری نشان دهد، مکانیزمی خودکار برای بازگشت به برچسب `prod` داشته باشید.

نتیجه‌گیری

پیاده‌سازی تست A/B برای پرامپت‌های LLM دیگر یک لوکس نیست، بلکه برای حفظ محصولات هوش مصنوعی با کیفیت بالا یک ضرورت است. Langfuse این فرآیند را با ارائه پشتیبانی درجه یک برای نسخه‌بندی پرامپت و پایش‌پذیری جزئیات‌دار ساده می‌کند. با یکپارچه‌سازی Langfuse در خط CI/CD و گردش کارهای پایش خود، می‌توانید تصمیمات مبتنی بر داده بگیرید که تجربه کاربری را بهبود می‌بخشند و هزینه‌های عملیاتی را کاهش می‌دهند.

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

Share: