ملخص سريع (TL;DR)
Promptfoo هو إطار عمل مفتوح المصدر لتقييم واختبار نماذج اللغة الكبيرة (LLM) ضد الهجمات الأمنية (red-teaming)، ويوفر للمطورين طريقة منهجية لاختبار تطبيقات الذكاء الاصطناعي بشكل آلي وشامل. يدعم أكثر من 90 مزودًا للنماذج، ويوفر أكثر من 67 مكونًا إضافيًا لهجمات الأمان، ويعمل بشكل محلي بالكامل. مع أكثر من 1.6 مليون عملية تنزيل واستخدامه في الإنتاج لدى شركات كبرى، أصبح المعيار لاختبار LLMs. ابدأ على الفور:
npm install -g promptfoo
promptfoo init --example getting-started
مقدمة
إذا كنت تطور روبوت دردشة أو تطبيقًا يعتمد على LLM، قد تبدو النتائج مثالية أثناء التطوير، لكن سرعان ما يكتشف المستخدمون ثغرات: تسريب بيانات، تجاوزات أمان، أو استجابات غير متسقة. الاعتماد على الاختبارات اليدوية والحدس غالبًا ما يؤدي لاكتشاف مشاكل بعد النشر، حيث تصبح معالجتها مكلفة ومعقدة.
Promptfoo يحل هذه المشكلة عبر اختبار مؤتمت ومنهجي لتطبيقات LLM. يمكنك إجراء تقييمات متعددة النماذج، وفحوصات أمان (red-team)، واكتشاف الانحدارات قبل وصولها للإنتاج.
في هذا الدليل العملي ستتعلم:
- إعداد التقييمات وتشغيل الفحوصات الأمنية.
- الدمج مع CI/CD.
- تجنب الأخطاء الشائعة.
- بناء مجموعة اختبارات عملية لتطبيقك.
💡إذا كنت تعمل مع اختبار واجهات برمجة التطبيقات (API testing) أو تحتاج إلى التحقق من سلوك واجهة برمجة التطبيقات جنبًا إلى جنب مع اختبارات نماذج اللغة الكبيرة الخاصة بك، فإن Apidog يوفر منصة موحدة لتصميم واجهات برمجة التطبيقات واختبارها وتوثيقها. يمكنك استخدام كلتا الأداتين معًا: Promptfoo لتقييم نماذج اللغة الكبيرة و Apidog للتحقق من طبقة واجهة برمجة التطبيقات.
ما هو Promptfoo ولماذا تحتاجه
Promptfoo هو أداة CLI ومكتبة Node.js تتيح تقييم واختبار تطبيقات LLM ضد سيناريوهات الأمان والهجمات. تم تصميمه خصيصًا للتعامل مع خصائص LLM المتغيرة وغير الحتمية.
بدلاً من الاعتماد على مطابقة السلاسل النصية فقط، يوفر Promptfoo:
- تأكيدات دلالية: تحقق من المعنى وليس النص الحرفي.
- تقييمات مصنفة بواسطة LLM: نموذج يقيّم مخرجات نموذج آخر.
- مقارنة بين نماذج متعددة: نفس المطالبة على GPT-4، Claude، إلخ.
- مكونات أمان إضافية: فحوصات تلقائية للثغرات.
كل شيء يعمل محليًا لضمان الخصوصية. فلا تخرج بياناتك إلا إذا اخترت ميزات سحابية.
المشكلة التي يحلها Promptfoo
الاختبار اليدوي لتطبيقات LLM يعجز عن:
- كشف الانحدارات: لا تكتشف كسر الوظائف بعد تحديث النماذج.
- الثغرات في التغطية: يفوت الحالات الهامشية والمدخلات العدائية.
- غياب المقاييس: لا توجد طريقة موضوعية للمقارنة أو التحسين.
Promptfoo يتيح تقييمًا مؤتمتًا مع كل تحديث، ويعطيك معدلات النجاح، التكلفة، وزمن الاستجابة.
من يستخدم Promptfoo
يخدم Promptfoo ملايين المستخدمين في روبوتات الدردشة، خطوط توليد المحتوى، تطبيقات الرعاية الصحية، والأنظمة المالية. في مارس 2026، انضم إلى OpenAI ويواصل التطوير كمشروع مفتوح المصدر.
البدء: تثبيت وتشغيل أول تقييم
التثبيت
اختر الطريقة الأنسب لنظامك:
# تثبيت عام (موصى به)
npm install -g promptfoo
# أو التشغيل بدون تثبيت
npx promptfoo@latest
# لمستخدمي macOS
brew install promptfoo
# أو بايثون
pip install promptfoo
عيّن مفاتيح API كمتغيرات بيئة:
export OPENAI_API_KEY=sk-abc123
export ANTHROPIC_API_KEY=sk-ant-xxx
إنشاء أول تقييم
تهيئة مشروع مثال:
promptfoo init --example getting-started
cd getting-started
يشمل ملف promptfooconfig.yaml أمثلة للمطالبات والنماذج وحالات الاختبار.
لتشغيل التقييم:
promptfoo eval
لعرض النتائج في واجهة المستخدم الويب:
promptfoo view
واجهة المستخدم تظهر مقارنة مباشرة بين النماذج مع حالة النجاح/الفشل لكل تأكيد.
فهم ملف التكوين
ملف promptfooconfig.yaml يحدد كل شيء:
description: "My First Eval Suite"
prompts:
- prompts/greeting.txt
- prompts/farewell.txt
providers:
- openai:gpt-4o
- anthropic:claude-sonnet-4-5
tests:
- vars:
input: "Hello"
assert:
- type: contains
value: "Hi"
- type: latency
threshold: 3000
- prompts: نصوص أو ملفات الاختبار.
- providers: النماذج.
- tests: حالات اختبار مع متغيرات وتأكيدات.
ضع الملف في نظام التحكم بالإصدار لتكرار التقييمات تلقائيًا مع كل تحديث.
الميزات الأساسية: ما يمكن أن يفعله Promptfoo
1. التقييمات المؤتمتة
حدد حالات الاختبار والنتائج المتوقعة، ودع الأداة تتولى التنفيذ.
أنواع التأكيدات
أكثر من 30 نوع تأكيد مدمج:
| التأكيد | الغرض |
|---|---|
contains |
يتحقق من وجود نص معين |
equals |
تطابق دقيق |
regex |
مطابقة تعبير عادي |
json-schema |
التحقق من بنية JSON |
javascript |
دالة JS مخصصة |
python |
دالة Python مخصصة |
llm-rubric |
تقييم بواسطة LLM |
similar |
تشابه دلالي |
latency |
زمن الاستجابة |
cost |
التكلفة |
مثال عملي:
tests:
- vars:
question: "ما هي عاصمة فرنسا؟"
assert:
- type: contains
value: "باريس"
- type: javascript
value: output.length < 100
- type: latency
threshold: 2000
- type: cost
threshold: 0.001
التقييمات المصنفة بواسطة LLM (llm-rubric)
استخدم LLM لتقييم إجابة LLM آخر بناءً على معاييرك:
assert:
- type: llm-rubric
value: "يجب أن تكون الاستجابة مفيدة، غير ضارة، وصادقة"
يمكنك استخدام نماذج أرخص للتقييم لتقليل التكاليف.
2. اختبار Red Teaming واختبار الأمان
Promptfoo يأتي بوحدة red team لفحص الثغرات تلقائيًا عبر إدخال مدخلات عدائية.
متجهات الهجوم المدعومة
| الفئة | ماذا تختبر |
|---|---|
| Prompt Injection | هجمات الحقن المباشر وغير المباشر |
| Jailbreaks | تجاوزات الحماية وتغيير الشخصية |
| Data Exfiltration | تسريب واستخراج البيانات |
| Harmful Content | محتوى ضار أو غير قانوني |
| Compliance | انتهاكات الخصوصية والقوانين |
| Audio/Visual | هجمات صوتية أو مرئية |
تشغيل فحص Red Team
تهيئة وتشغيل الفحص:
promptfoo redteam init
promptfoo redteam run
لعرض التقرير:
promptfoo redteam report [directory]
مثال ناتج:
ملخص الثغرات الأمنية:
- حرجة: 2 (تسريب معلومات تحديد الهوية الشخصية، استخراج المطالبة)
- عالية: 5 (كسر القيود، هجمات الحقن)
- متوسطة: 12 (تحيز، استجابات غير متسقة)
- منخفضة: 23 (انتهاكات بسيطة للسياسة)
عالج الثغرات الحرجة وأعد الفحص للتحقق من الإصلاحات.
3. فحص الكود لطلبات السحب
ادمج مع GitHub Actions لفحص الكود تلقائيًا:
# .github/workflows/promptfoo-scan.yml
name: فحص كود Promptfoo
on: [push, pull_request]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm install -g promptfoo
- run: promptfoo code-scan
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
يكشف عن مفاتيح API في التكوين، أنماط المطالبة غير الآمنة، والتحقق من المدخلات.
4. مقارنة النماذج
قارن نتائج عدة نماذج بسهولة:
promptfoo eval
promptfoo view
واجهة المستخدم تعرض معدلات النجاح، الكلفة، زمن الاستجابة لكل نموذج.
المزودون المدعومون: أكثر من 90 تكاملًا لـ LLM
اختبر نفس المطالبة عبر OpenAI, Anthropic, Google, Amazon، أو نماذج محلية بدون تغيير الكود.
| المزود | النماذج المدعومة |
|---|---|
| OpenAI | GPT-4, GPT-4o, o1, o3 |
| Anthropic | Claude 3.5/3.7/4.5/4.6 |
| Gemini 1.5/2.0, Vertex AI | |
| Microsoft | Azure OpenAI, Phi |
| Amazon | Bedrock (Claude, Llama, Titan) |
| Meta | Llama 3+ |
| Ollama | نماذج محلية (Llama, Mistral, Phi) |
مزودون مخصصون
اكتب مزودك الخاص إذا كان النموذج غير مدعوم:
مثال بايثون:
# custom_provider.py
from typing import Any
class CustomProvider:
async def call_api(self, prompt: str, options: dict, context: dict) -> dict:
response = await my_async_api.generate(prompt)
return {
"output": response.text,
"tokenUsage": {
"total": response.usage.total_tokens,
"prompt": response.usage.prompt_tokens,
"completion": response.usage.completion_tokens
}
}
مثال جافاسكريبت:
// customProvider.js
export default class CustomProvider {
async callApi(prompt) {
return {
output: await myApi.generate(prompt),
tokenUsage: { total: 50, prompt: 20, completion: 30 }
};
}
}
أضفها في التكوين:
providers:
- id: file://custom_provider.py
config:
api_key: ${MY_API_KEY}
واجهة سطر الأوامر: أوامر أساسية
الأوامر اليومية
# تشغيل التقييمات
promptfoo eval -c promptfooconfig.yaml
# فتح واجهة المستخدم الويب
promptfoo view
# مشاركة النتائج
promptfoo share
# اختبار Red Team
promptfoo redteam init
promptfoo redteam run
# التكوين والتحقق
promptfoo init
promptfoo validate [config]
# إدارة النتائج
promptfoo list
promptfoo show <id>
promptfoo delete <id>
promptfoo export <id>
# أدوات مساعدة
promptfoo cache clear
promptfoo retry <id>
علامات مساعدة
--no-cache # تعطيل التخزين المؤقت
--max-concurrency <n> # عدد استدعاءات API المتوازية
--output <file> # حفظ النتائج في ملف JSON
--verbose # تمكين التصحيح
--env-file <path> # تحميل متغيرات البيئة من ملف
--filter <pattern> # تشغيل اختبارات محددة فقط
مثال عملي
promptfoo eval \
-c promptfooconfig.yaml \
--no-cache \
--max-concurrency 3 \
--output results.json \
--env-file .env
تكامل CI/CD: أتمتة اختبار LLM
ادمج Promptfoo مع أي نظام CI لاكتشاف الأخطاء قبل النشر.
مثال GitHub Actions
name: اختبارات LLM
on: [push, pull_request]
jobs:
eval:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '22'
- run: npm install -g promptfoo
- run: promptfoo eval -c promptfooconfig.yaml
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
بوابات الجودة
حدد عتبات النجاح:
commandLineOptions:
threshold: 0.8 # يتطلب معدل نجاح 80%
التخزين المؤقت في CI
لأداء أسرع واستهلاك أقل للـ API:
- uses: actions/cache@v4
with:
path: ~/.cache/promptfoo
key: ${{ runner.os }}-promptfoo-${{ hashFiles('promptfooconfig.yaml') }}
واجهة المستخدم الويب: تصور ومشاركة النتائج
promptfoo view تفتح واجهة تفاعلية لمراجعة التقييمات:
- مصفوفة التقييم: مقارنة مباشرة
- التصفية: حسب الحالة أو المزود
- الاختلافات: مقارنة بين عمليات التشغيل
- المشاركة: روابط قابلة للمشاركة
- تحديثات لحظية: راقب التقييمات أثناء العمل
تعمل محليًا على localhost:3000 مع حماية CSRF.
قاعدة البيانات والتخزين المؤقت
-
macOS/Linux:
~/.cache/promptfoo -
Windows:
%LOCALAPPDATA%\promptfoo -
قاعدة البيانات:
~/.promptfoo/promptfoo.db(SQLite)
استخدم --no-cache أثناء التطوير للحصول على نتائج حديثة.
نموذج الأمان: ما يمكنك الوثوق به
- مدخلات موثوقة: ملفات التكوين، تأكيدات JS/Python مخصصة.
- مدخلات غير موثوقة: نص المطالبة، المتغيرات، مخرجات النماذج.
توصيات الأمان
- شغّل في حاوية أو VM مع صلاحيات محدودة.
- استخدم مفاتيح API مخصصة.
- لا تضع أسرارًا في المطالبات أو ملفات التكوين.
- فعّل قيود الشبكة.
- لا تعرض الخادم المحلي لشبكات غير آمنة.
الأداء: تحسين التقييمات
- استخدم التخزين المؤقت لتسريع التكرار.
-
ضبط التزامن عبر
--max-concurrency. -
تصفية اختبارات التطوير عبر
--filter. -
تجربة مجموعات بيانات صغيرة أولاً عبر
--repeat.
التوسع
للتقييمات الكبيرة:
- استخدم المجدول للتشغيل الموزع.
- صدر النتائج إلى Google Sheets.
- فعّل التوليد عن بعد.
قابلية التوسع: بناء ميزات مخصصة
تأكيدات مخصصة
اكتب تأكيداتك الخاصة في JS أو Python:
// assertions/customCheck.js
export default function customCheck(output, context) {
const pass = output.includes('expected');
return {
pass,
score: pass ? 1 : 0,
reason: pass ? 'Output matched' : 'Missing expected content'
};
}
في التكوين:
assert:
- type: file://assertions/customCheck.js
خادم MCP
شغل خادم MCP للتكامل مع وكلاء الذكاء الاصطناعي:
promptfoo mcp
يوفر:
- تشغيل التقييمات من الدردشة.
- الوصول لفحوصات red team.
- استعلام النتائج.
- إنشاء حالات اختبار جديدة.
حالات الاستخدام في العالم الحقيقي
روبوت دردشة دعم العملاء
- 500 حالة اختبار تغطي الأسئلة الشائعة.
- تقييم عبر GPT-4 وClaude.
- فحوصات red team لتسريب PII.
- تكامل CI يمنع نشرات غير آمنة.
النتيجة: انخفاض 90% في مشاكل العملاء بعد الاعتماد على التقييمات المؤتمتة.
مسار توليد المحتوى
- تقييم النبرة والأسلوب بواسطة LLM.
- عتبات زمن الاستجابة.
- مراقبة التكلفة.
- مقارنة النماذج لاختيار الأفضل.
النتيجة: صوت علامة تجارية متسق وتكلفة API أقل بـ40%.
تطبيق الرعاية الصحية
- فحوصات red team لانتهاكات HIPAA.
- تأكيدات مخصصة للدقة الطبية.
- تشغيل محلي لحماية البيانات.
- تدقيقات كاملة للامتثال.
النتيجة: اجتياز تدقيق SOC 2 باستخدام نتائج Promptfoo.
الخلاصة
Promptfoo يجلب اختبارًا منهجيًا وعمليًا لتطبيقات LLM. استبدل العمليات اليدوية بتقييمات مؤتمتة تكتشف الانحدارات والثغرات قبل الإنتاج.
للتنفيذ السريع:
- ثبت عبر
npm install -g promptfooوابدأ بـpromptfoo init. - استخدم التأكيدات الدلالية، فحوصات الأمان، والتكامل مع CI/CD.
- قارن النماذج ووسع الوظائف عبر مزودين وتأكيدات مخصصة.
مستقبل تطوير الذكاء الاصطناعي يعتمد على الأتمتة والاختبار المنهجي. استخدم Promptfoo لبناء تطبيقات LLM آمنة وموثوقة على نطاق واسع.
إذا كنت تعمل أيضًا مع واجهات برمجة التطبيقات، استخدم Apidog مع Promptfoo. يدير Apidog تصميم واختبار وتوثيق API، بينما يركز Promptfoo على تقييم LLMs. معًا يغطيان اختبار التطبيقات الحديثة بالكامل.
الأسئلة الشائعة
ما هو استخدام Promptfoo؟
Promptfoo يُستخدم لاختبار وتقييم تطبيقات LLM عبر اختبارات آلية للمطالبات، مقارنة مخرجات النماذج، وإجراء تقييمات أمان (red-team).
هل Promptfoo مجاني؟
نعم، Promptfoo مفتوح المصدر بترخيص MIT ومجاني للاستخدام الشخصي والتجاري. بعض الميزات السحابية قد تتطلب اشتراكًا مدفوعًا.
كيف أقوم بتثبيت Promptfoo؟
ثبت باستخدام:
npm install -g promptfoo
أو:
npx promptfoo@latest
brew install promptfoo
pip install promptfoo
ما النماذج التي يدعمها Promptfoo؟
أكثر من 90 مزودًا، من ضمنهم OpenAI (GPT-4, GPT-4o)، Anthropic (Claude)، Google (Gemini)، Microsoft، Amazon Bedrock، ونماذج Ollama المحلية.
كيف أشغل فحص red team؟
promptfoo redteam init
promptfoo redteam run
promptfoo redteam report
هل يمكنني استخدام Promptfoo في CI/CD؟
نعم. ثبت في CI وشغل:
promptfoo eval
حدد عتبة النجاح عبر threshold في التكوين.
هل يرسل Promptfoo بياناتي إلى خوادم خارجية؟
لا. يعمل محليًا بالكامل افتراضيًا، ولا يرسل بياناتك إلا إذا اخترت ذلك.
كيف أقارن النماذج باستخدام Promptfoo؟
أضف أكثر من مزود في التكوين، ثم:
promptfoo eval
promptfoo view
سترى مقارنة بالنجاح/الفشل والتكلفة وزمن الاستجابة لكل نموذج.


Top comments (0)