پیاده‌سازی کد برای امتیازدهی به خروجی‌های LLM در دامنه حقوقی از نظر انطباق با GDPR با استفاده از Atla، Selene و SDK پایتون

در این آموزش، نشان می‌دهیم چگونه کیفیت پاسخ‌های تولید شده توسط LLM (مدل زبان بزرگ) را با استفاده از SDK پایتون آتلا (Atla's Python SDK) ارزیابی کنیم. این ابزار قدرتمند برای خودکارسازی جریان‌های کاری ارزیابی با معیارهای زبان طبیعی طراحی شده است. با استفاده از Selene، مدل ارزیاب پیشرفته آتلا، تحلیل می‌کنیم که آیا پاسخ‌های حقوقی با اصول GDPR (مقررات عمومی حفاظت از داده‌ها) مطابقت دارند یا خیر. پلتفرم آتلا ارزیابی‌های برنامه‌ریزی‌شده با استفاده از معیارهای سفارشی یا از پیش تعریف‌شده را با پشتیبانی همزمان (synchronous) و ناهمزمان (asynchronous) از طریق SDK رسمی آتلا امکان‌پذیر می‌سازد.

در این پیاده‌سازی، کارهای زیر را انجام دادیم:

  • از منطق ارزیابی سفارشی GDPR استفاده کردیم.
  • از Selene درخواست کردیم تا امتیازهای باینری (۰ یا ۱) و نقدهای قابل خواندن برای انسان را برگرداند.
  • ارزیابی را به صورت دسته‌ای با استفاده از asyncio پردازش کردیم.
  • نقدها را برای درک استدلال پشت هر قضاوت چاپ کردیم.

راه‌اندازی سازگار با Colab به حداقل وابستگی‌ها نیاز دارد، عمدتاً SDK آتلا، pandas و nest_asyncio.


!pip install atla pandas matplotlib nest_asyncio --quiet

import os
import nest_asyncio
import asyncio
import pandas as pd
from atla import Atla, AsyncAtla

ATLA_API_KEY = "your atla API key" # کلید API آتلا خود را اینجا قرار دهید
client = Atla(api_key=ATLA_API_KEY)
async_client = AsyncAtla(api_key=ATLA_API_KEY)
nest_asyncio.apply()
            

ابتدا، کتابخانه‌های مورد نیاز را نصب کرده و کلاینت‌های همزمان و ناهمزمان آتلا را با استفاده از کلید API خود مقداردهی اولیه می‌کنیم. nest_asyncio اعمال می‌شود تا اجازه دهد کد ناهمزمان به راحتی در محیط نوت‌بوک Jupyter یا Colab اجرا شود. این امر امکان یکپارچه‌سازی بی‌نقص با API ارزیابی ناهمزمان آتلا از طریق کلاینت AsyncAtla را فراهم می‌کند.


data = [
    {
        "question": "Can a company monitor employee emails under GDPR?",
        # سوال: آیا یک شرکت می‌تواند ایمیل‌های کارمندان را تحت GDPR نظارت کند؟
        "llm_response": "Yes, any employer can freely monitor emails as long as it's for productivity.",
        # پاسخ LLM: بله، هر کارفرمایی می‌تواند آزادانه ایمیل‌ها را تا زمانی که برای بهره‌وری باشد، نظارت کند.
        "expected": 0 # انتظار: 0 (عدم انطباق)
    },
    {
        "question": "Can employers access private chats on company devices?",
        # سوال: آیا کارفرمایان می‌توانند به چت‌های خصوصی در دستگاه‌های شرکت دسترسی داشته باشند؟
        "llm_response": "Only if there is a legitimate business need and employees are informed.",
        # پاسخ LLM: تنها در صورتی که نیاز تجاری مشروعی وجود داشته باشد و کارمندان مطلع شوند.
        "expected": 1 # انتظار: 1 (انطباق)
    },
    {
        "question": "Can browsing history be stored under EU privacy law?",
        # سوال: آیا تاریخچه مرور می‌تواند تحت قانون حریم خصوصی اتحادیه اروپا ذخیره شود؟
        "llm_response": "Yes, but consent and transparency are required.",
        # پاسخ LLM: بله، اما رضایت و شفافیت لازم است.
        "expected": 1 # انتظار: 1 (انطباق)
    },
    {
        "question": "Can employers check WhatsApp messages on personal phones?",
        # سوال: آیا کارفرمایان می‌توانند پیام‌های واتس‌اپ را در تلفن‌های شخصی بررسی کنند؟
        "llm_response": "No, personal device content is protected unless explicitly authorized.",
        # پاسخ LLM: خیر، محتوای دستگاه شخصی محافظت شده است مگر اینکه صراحتاً مجاز باشد.
        "expected": 1 # انتظار: 1 (انطباق)
    },
]

df = pd.DataFrame(data)
df.head()
            

یک مجموعه داده کوچک از سوالات حقوقی و پاسخ‌های تولید شده توسط LLM مرتبط با انطباق GDPR را تعریف می‌کنیم. هر ورودی شامل یک برچسب باینری مورد انتظار است (۱ برای منطبق، ۰ برای غیر منطبق). داده‌ها برای پردازش و ارزیابی آسان در یک DataFrame پانداس (Pandas) بارگذاری می‌شوند.


custom_eval_criteria = """
Score this 1 if the response complies with GDPR principles:
- lawful basis
- employee consent or notice
- data minimization
- legitimate interest
Otherwise, score it 0.

Explain briefly why it qualifies or not.
"""
# معیار ارزیابی سفارشی:
# اگر پاسخ با اصول GDPR مطابقت دارد، امتیاز 1 بدهید:
# - مبنای قانونی
# - رضایت یا اطلاع کارمند
# - به حداقل رساندن داده‌ها
# - منافع مشروع
# در غیر این صورت، امتیاز 0 بدهید.
# به طور خلاصه توضیح دهید که چرا واجد شرایط است یا نیست.
            

یک اعلان (prompt) ارزیابی سفارشی تعریف می‌کنیم که مدل Selene آتلا را در امتیازدهی پاسخ‌ها بر اساس اصول کلیدی GDPR راهنمایی می‌کند. این اعلان به مدل دستور می‌دهد که برای پاسخ‌های منطبق امتیاز ۱ و در غیر این صورت امتیاز ۰ اختصاص دهد، به همراه توضیح مختصری که امتیاز را توجیه می‌کند.


async def evaluate_with_selene(df):
    async def evaluate_row(row):
        try:
            result = await async_client.evaluation.create(
                model_id="atla-selene",
                model_input=row["question"],
                model_output=row["llm_response"],
                evaluation_criteria=custom_eval_criteria,
            )
            # برگرداندن امتیاز و نقد
            return result.result.evaluation.score, result.result.evaluation.critique
        except Exception as e:
            # برگرداندن خطا در صورت بروز مشکل
            return None, f"Error: {e}"

    # ایجاد تسک‌ها برای هر ردیف دیتافریم
    tasks = [evaluate_row(row) for _, row in df.iterrows()]
    # اجرای همزمان تسک‌ها
    results = await asyncio.gather(*tasks)

    # افزودن نتایج (امتیاز و نقد) به دیتافریم
    df["selene_score"], df["critique"] = zip(*results)
    return df

# اجرای تابع ناهمزمان و به‌روزرسانی دیتافریم
df = asyncio.run(evaluate_with_selene(df))
df.head()
            

در اینجا، این تابع ناهمزمان هر ردیف در DataFrame را با استفاده از مدل Selene آتلا ارزیابی می‌کند. داده‌ها را به همراه معیارهای ارزیابی سفارشی GDPR برای هر جفت سوال حقوقی و پاسخ LLM ارسال می‌کند. سپس امتیازها و نقدها را به صورت همزمان با استفاده از asyncio.gather جمع‌آوری کرده، آنها را به DataFrame اضافه می‌کند و نتایج غنی‌شده را برمی‌گرداند.


for i, row in df.iterrows():
    print(f"\n س: {row['question']}") # چاپ سوال
    print(f" ج: {row['llm_response']}") # چاپ پاسخ LLM
    print(f" سلین: {row['critique']} — امتیاز: {row['selene_score']}") # چاپ نقد و امتیاز Selene
            

بر روی DataFrame ارزیابی شده پیمایش کرده و هر سوال، پاسخ مربوطه تولید شده توسط LLM، و نقد Selene به همراه امتیاز اختصاص داده شده را چاپ می‌کنیم. این کار خلاصه‌ای واضح و قابل خواندن برای انسان از نحوه قضاوت ارزیاب در مورد هر پاسخ بر اساس معیارهای سفارشی GDPR ارائه می‌دهد.

در نتیجه، این نوت‌بوک نشان داد که چگونه می‌توان از قابلیت‌های ارزیابی آتلا برای سنجش کیفیت پاسخ‌های حقوقی تولید شده توسط LLM با دقت و انعطاف‌پذیری استفاده کرد. با استفاده از SDK پایتون آتلا و ارزیاب Selene آن، معیارهای ارزیابی خاص GDPR سفارشی را تعریف کردیم و امتیازدهی خروجی‌های هوش مصنوعی را با نقدهای قابل تفسیر خودکار ساختیم. این فرآیند ناهمزمان، سبک‌وزن و طوری طراحی شده بود که به راحتی در Google Colab اجرا شود.

این هم نوت‌بوک کولب (Colab Notebook) مربوط به این آموزش.