انتشار مدلهای زبانی بزرگ (LLMs) به محیط تولید دیگر فقط درباره معیارهای دقت نیست؛ بلکه درباره حفظ رفتار یکپارچه در طول زمان است. برخلاف نرمافزارهای سنتی، که در آنها تغییرات کد قطعی هستند، خروجیهای LLM میتوانند به دلیل بهروزرسانی مدلها، تغییرات جزئی در مهندسی پرامپت، یا تغییرات در زیرساخت پایه، انحراف نشان دهند. این ماهیت غیرقطعی، تست رگرسیون را حیاتی میکند. در این راهنما، ما بررسی میکنیم که چگونه Braintrust را به خط CI/CD خود یکپارچه کنید تا تست رگرسیون LLM را اتوماتیک نمایید و اطمینان حاصل کنید که برنامه هوش مصنوعی شما با هر استقرار، قابل اتکا باقی میماند.
چرا تستهای سنتی برای LLMها شکست میخورند
در توسعه نرمافزار سنتی، تستهای واحد خروجیهای مورد انتظار خاصی را تأیید میکنند. برای LLMها، این رویکرد شکننده است زیرا تغییرات جزئی در بیان لزوماً نشاندهنده باگ نیستند. به جای آن، ما به تستهای ارزیابیمحور نیاز داریم. Braintrust پارادایم را از بررسیهای دودویی موفق/ناموفق به ارزیابیهای مبتنی بر امتیاز تغییر میدهد. با استفاده از توابع ارزیابی سفارشی (مانند LLM-as-a-judge یا امتیازات شباهت معنایی)، میتوانیم تخریبهای ظریف در کیفیت را بدون گیر افتادن در تفاوتهای نحوی بیضرر شناسایی کنیم.
راهاندازی مجموعه ارزیابی Braintrust
اول، باید مجموعه تست خود را تعریف کنید. در Braintrust، یک مجموعه (suite) مجموعهای از جفتهای ورودی/خروجی همراه با یک تابع ارزیابی است. یک پوشه برای تستهای خود ایجاد کنید و یک آزمایش Braintrust را شروع کنید.
import braintrust
from openai import OpenAI
# Initialize your LLM client
client = OpenAI(api_key="YOUR_API_KEY")
# Define the evaluation function
def evaluate(input, output, expected_output):
# Example: Simple keyword check or LLM-as-judge logic
if expected_output.lower() in output.lower():
return {"score": 1.0}
return {"score": 0.0}
# Initialize Braintrust
braintrust.init("my-llm-suite")
# Load test data (e.g., from JSON or a database)
test_cases = [
{"input": "Summarize this text", "expected_output": "summary"},
{"input": "Translate to French", "expected_output": "traduction"}
]
# Run the evaluation
braintrust.run(
name="baseline-v1",
data=test_cases,
task=lambda x: client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": x["input"]}]
).choices[0].message.content,
evaluate=evaluate
)
یکپارچهسازی با GitHub Actions
هسته اتوماسیون در راهاندازی این تستها در هر درخواست کشش (pull request) نهفته است. میتوانیم از GitHub Actions برای اجرای CLI Braintrust استفاده کنیم و اگر امتیاز میانگین از یک آستانه تعریفشده پایینتر بیفتد، بیلد را ناموفق نشان دهیم.
name: LLM Regression Test
on:
pull_request:
branches: [ main ]
jobs:
braintrust-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
- name: Install dependencies
run: |
pip install braintrust openai
- name: Run Braintrust Evaluation
env:
BRAINTRUST_API_KEY: ${{ secrets.BRAINTRUST_API_KEY }}
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
run: |
braintrust eval my-llm-suite --threshold 0.85
- name: Check for Regression
if: ${{ failure() }}
run: |
echo "LLM Regression Detected: Score dropped below threshold. Please review the logs in Braintrust."
پایش انحراف در محیط تولید
نتیجهگیری
اتوماسیون تست رگرسیون LLM با Braintrust یک توری ایمنی فراهم میکند که خطوط CI/CD سنتی فاقد آن هستند. با در نظر گرفتن خروجیهای LLM به عنوان نتایج احتمالی و استفاده از ارزیابیهای مبتنی بر امتیاز، میتوانید با اطمینان تکرار کنید. چه در حال تنظیم دقیق پرامپتها باشید و چه در حال تعویض ارائهدهندگان مدل، این یکپارچهسازی اطمینان میدهد که کیفیت از بین نمیرود. با ایجاد یک مجموعه خط پایه شروع کنید، آن را به جریان کاری خود یکپارچه کنید و بگذارید دادهها فرآیند توسعه هوش مصنوعی شما را هدایت کنند.