ارزیابی یک C# LLM Eventparser با استفاده از Promptfoo

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

تست کردن LLMها متفاوت است. یک LLM ممکن است در یک اجرا "3 PM" و در اجرای دیگر "15:00" را برگرداند. هر دو درست هستند، اما تستِ تطابق دقیق (exact match) با شکست مواجه می‌شود. شما باید بررسی کنید که آیا پاسخ خوب است یا خیر، نه اینکه آیا دقیقاً یکسان است یا نه.

من یک اپلیکیشن کوچک به نام EventParser برای تست این موضوع ساختم. این برنامه یک پیام غیررسمی مانند "Team sync on Friday at 3 PM" را می‌گیرد و آن را به داده‌های ساختاریافته تبدیل می‌کند.

در اینجا نحوه تست کردن آن با استفاده از Promptfoo و یک گردش‌کار (workflow) مدل به عنوان داور (LLM-as-a-judge) آورده شده است.

آماده‌سازی

این اپلیکیشن از یک فایل پرامپت واحد استفاده می‌کند: extract_event.txt. کد C# این فایل را در زمان اجرا (runtime) می‌خواند. Promptfoo نیز برای تست، همان فایل را می‌خواند. این کار تضمین می‌کند که شما دقیقاً همان پرامپتی را تست می‌کنید که کاربران شما می‌بینند.

گردش‌کار (Workflow)

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

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

نحوه تصمیم‌گیری داور

داور از یک روباریک (rubric) استفاده می‌کند. روباریک یک قانون به زبان انگلیسی ساده است. به جای بررسی یک رشته JSON خاص، شما به داور می‌گویید که پاسخ باید شامل چه مواردی باشد.

نمونه روباریک: "پاسخ باید عنوان رویداد، روز، زمان و مکان را استخراج کند. نباید جزئیاتی را که در پیام ذکر نشده است، اضافه کند."

تست برای یافتن خطاها

من با اضافه کردن یک دستور اشتباه، عمداً پرامپت را خراب کردم: "If the message mentions coffee, set the location to Starbucks."

وقتی ارزیابی را اجرا کردم، داور خطا را تشخیص داد. در پیام اصلی هیچ اشاره‌ای به Starbucks نشده بود. مدل یک مکان را از خودش ساخته بود (hallucinated). یک تست تطابق دقیق این مورد را از دست می‌داد، اما یک مدل داور، خطاهای معنایی (semantic errors) را شناسایی می‌کند.

چرا این روش کار می‌کند:

• با واقعیت مطابقت دارد: فرمت‌های صحیح مختلفی مانند "3 PM" یا "15:00" را می‌پذیرد. • از قوانین خوانا استفاده می‌کند: روباریک‌های به زبان انگلیسی ساده، به راحتی قابل درک هستند. • باگ‌های معنایی را شناسایی می‌کند: توهمات (hallucinations) و خطاهای منطقی را پیدا می‌کند. • مقرون‌به‌صرفه است: می‌توانید از یک مدل ارزان برای نمره‌دهی به یک مدل گران‌تر استفاده کنید.

این رویکرد باعث می‌شود تست کردن LLM شبیه به تست کردن نرم‌افزارهای واقعی به نظر برسد.

Source: https://dev.to/bigboybamo/evaluating-a-c-llm-eventparser-with-promptfoo-4b87

Optional learning community: https://t.me/GyaanSetuAi