Skip to content

سطر أوامر محرّك الوسم وواجهة REST API وأدوات MCP وSDK

شغّل محرّك الوسم من potato label، أو من مسارات REST تحت /api/engine/v1، أو من خمس أدوات MCP للمحرّك، أو من الصنف Study في Python، وكلها تعمل على ملف engine.sqlite واحد.

يشغّل خادم التوسيم، وسطر الأوامر، وواجهة REST API، وأدوات MCP، وPython SDK كلها محرّك الوسم نفسه على ملف engine.sqlite نفسه في مجلد المهمة. فيمكنك أن تبدأ دراسة من سطر الأوامر، وتقدّم الطلبات البشرية بالخادم، وتُشهِد من دفتر ملاحظات (notebook).

لا تشغّل الدراسةَ إلا عمليةٌ واحدة في كل مرة. فالمخطِّط في الخادم العامل يحمل قفل الكتابة الخاص بالدراسة، وما دام يحمله يرفض potato label run وpotato label certify وStudy.run() العمل ويذكر ذلك. أشهِد عبر الخادم بدلاً من ذلك، باستخدام POST /api/engine/v1/certify أو صفحة الإدارة. والقفل موجود لأن مشغّلَين اثنين سيسحبان عيّنتي معايرة ويُشهِد كل منهما مقابل وسوم الآخر. ويُحرَّر القفل حين يخرج حامله. والحامل الذي قُتلت عمليته على الجهاز نفسه يُنتزع منه القفل فوراً، والحامل على جهاز آخر بعد دقيقتين دون نبضة حياة (heartbeat). أما أوامر القراءة فقط (status، certificate، calls، export) فتعمل في أي وقت.

سطر الأوامر

يأخذ كل أمر من أوامر المحرّك ملف إعداد الدراسة:

bash
potato label <command> <config.yaml> [options]

تغطي الأوامر التسعة الدراسة من أول استدعاء للنموذج إلى مجموعة البيانات المصدَّرة:

الأمرما يفعله
runيَسِم كل عنصر بالسلسلة المتتالية، ويسحب عيّنة المعايرة العمياء، ويُشهِد، ويحسم. يتوقف --until predicted (الافتراضي) بعد تمريرة واحدة، ويستمر --until met حتى تُستوفى كل العقود أو يصير المحرّك منتظراً للبشر. ويأخذ أيضاً --max-items N و--budget-usd X (يتجاوز budgets.model_usd لهذا التشغيل) و--max-ticks N (20 افتراضياً) و--json. والتشغيل الذي قُطع يستأنف من حيث توقف دون تكرار استدعاءات النماذج. ويخرج بالحالة 1، مسمّياً المصدر، حين يكون آخر تشغيل لمصدر قد فشل أو كانت كل إجاباته أخطاء، أو حين لا يستطيع أي مصدر وسم مخطط يسمّيه عقد.
statusالعناصر، والتنبؤات، والطلبات حسب الغرض، والعقود، والإنفاق، والعناصر التي لا وسم لها بعد، وسطر لكل مصدر فيه أخطاء أو تشغيل فاشل أو متوقف مؤقتاً. --json.
certifyيختبر كل عقد على وسوم cert الجديدة والتنبؤات الجديدة. وحين لا تتغيّر إلا وسوم dev، تعود النتيجة المخزّنة مع ملاحظة، ويختبر --retest القاعدة التي صار dev يختارها، في النظرة التالية (انظر النظرات). --json.
certificateشهادة الجودة. --format md (الافتراضي) أو html أو json، و--out FILE.
exportالوسوم مع مصدرها، والشهادة (JSON، Markdown، HTML)، وبطاقة مجموعة البيانات، وسجل الاستدعاءات، في --out DIR (<output_annotation_dir>/labeling_engine افتراضياً).
callsسجل تدقيق استدعاءات النماذج بصيغة أسطر JSON. --out FILE.
distillيدرّب نموذجاً على الوسوم الموجودة حتى الآن ويضعه أولاً في السلسلة المتتالية.
optimizeيقيّم كل مجموعة جزئية من السلسلة المتتالية على وسوم dev ويُبلغ عن أرخصها الذي يحافظ على التغطية. وحين لا تحافظ أي مجموعة جزئية على أي تغطية، لا يوصي بأي منها. ويطلب --prompts N أيضاً من مستوى LLM عدد N من إعادات الصياغة لموجّهه ويقيّم كلاً منها على عناصر dev. وهذه استدعاءات نماذج، تُسجَّل وتُحتسب من الميزانية، وتُخزَّن تحت إصدارات مصادر خاصة بها، في حين يُقيَّم الموجّه الحالي من تنبؤاته المخزّنة. ولا تتغيّر السلسلة المتتالية ولا الشهادة.
migrate-configيكتب نسخة من الإعداد فيها كتلة labeling_engine مكافئة لمفاتيح الذكاء الاصطناعي الأقدم فيه. --out FILE. انظر الانتقال إلى محرّك الوسم.

لا تنفق متابعة التقدم شيئاً، لأن status وcertificate وصفحة الإدارة تقرأ النتائج المخزّنة. أما كل اختبار جديد، سواء أكان من certify على وسوم جديدة أم من certify --retest، فينفق جزءاً من ميزانية الخطأ الخاصة بالعقد.

الملفات التي يكتبها التصدير

يكتب potato label export أربعة أنواع من الملفات في مجلد المخرجات:

الملفالمحتوى
labels.jsonl، labels.csvصف واحد لكل عنصر ومخطط، موسوماً كان أم لا، مع id وschema وlabel وlabel_origin (auto، human، adjudicated، ...) وstatus (accepted، وaccepted_uncertified في ظل threshold_legacy، وpending، وpending_recert) وsource وmodel وsource_version وconfidence وcontract_version وrequest_ids. والوسم الآلي الذي تغيّر مصدره منذ قبوله تكون حالته pending_recert حتى تُعيد التمريرة التالية الإشهاد عليه.
certificate.json، .md، .htmlالشهادة.
README.mdبطاقة مجموعة بيانات مع ترويسة Hugging Face الأمامية (front matter)، مبنية من الشهادة.
model_calls.jsonlكل استدعاء للنماذج، مع النموذج، وتجزئات الموجّه والرد، والرموز، وزمن الاستجابة، والتكلفة، وإصابات ذاكرة التخزين المؤقت، وفئات الإخفاء.

تُصدِّر أدوات التصدير العادية (python -m potato.export والتصدير من صفحة الإدارة) توسيمات البشر، وتسردها صفحة صيغ التصدير. ومن بينها صيغة labeling_engine، التي تكتب الملفات نفسها التي يكتبها potato label export، وترفض العمل حين لا يكون المحرّك مفعّلاً. وحين يكون المحرّك مفعّلاً، تضيف تصديرات CSV وParquet وHugging Face عمودين يذكران طلب المحرّك الذي أجاب عنه كل توسيم. يحمل engine_purpose الغرض، مثل calibration، ويحمل engine_request بيانات JSON فيها الغرض واحتمال الإدراج والظهور والقسم ومعرّف الطلب. استخدم هذين العمودين لفصل العيّنة العشوائية العمياء عن إجابات التحقق.

REST API

كل مسارات المحرّك تحت /api/engine/v1 وتعيد JSON. استوثق بمفتاح المسؤول في الترويسة X-API-Key أو بجلسة مسؤول. تحتاج القراءة إلى صلاحية لوحة تحكم المسؤول، ويحتاج certify وplan إلى صلاحية إدارة الإسناد، وتحتاج الشهادة إلى صلاحية التصدير.

الطريقة والمساريعيد
GET /statusالعناصر، والتنبؤات، والطلبات، ومجاميع الاستدعاءات، والميزانيات، ولكل مخطط سلسلته المتتالية وعقوده وأعداد وسومه المحسومة
GET /schemes/<name>/contractsأحدث نتيجة لكل عقد على المخطط، مع وضع stale عليها إن تغيّرت السلسلة المتتالية
GET /schemes/<name>/risk_coverageلكل عتبة في المستوى الأخير، النسبة المقبولة، والخطأ الملاحَظ، والحد الأعلى المضمون، على وسوم cert
GET /schemes/<name>/reliabilityفئات الموثوقية وECE ودرجة Brier لكل مستوى، على وسوم المعايرة
GET /schemes/<name>/driftمراقب التدقيق لكل عقد مخاطرة انتقائية
GET /schemes/<name>/optimizeتقرير السلسلة المتتالية الأرخص، مقيَّماً على وسوم dev
GET /requestsأعداد الطلبات حسب الغرض والحالة، والطلبات نفسها. والمرشّحات هي purpose وstatus (كرّر المعامل أو افصل القيم بفواصل) وschema وlimit (1000 على الأكثر)
GET /callsسجل الاستدعاءات، الأحدث أولاً، والمجاميع حسب المصدر. limit (500 على الأكثر)، offset
GET /certificateالشهادة. format=json (الافتراضي) أو md أو html، ويخزّنها save=1 أيضاً
GET /crowdآخر خطة تعهيد جماعي وضعها المخطِّط، وهي تشغيل تجريبي ما لم يكن الإنفاق الفعلي مفعّلاً
POST /certifyاختبار كل عقد الآن. ويختبر ?retest=1 (أو {"retest": true}) أيضاً القاعدة التي لم تغيّرها إلا وسوم dev
POST /planتشغيل تمريرة واحدة للمخطِّط الآن

تجيب المسارات بـ 404 حين يكون المحرّك معطّلاً للدراسة. وتجيب بـ 400 مع خطأ JSON عن معامل غير صالح، مثل limit ليس رقماً، أو purpose أو status غير معروفين، أو format غير json وmd وhtml.

مثلاً، يجلب هذا الطلب الشهادة الحالية بصيغة Markdown من خادم على المنفذ 8000:

bash
curl -H "X-API-Key: $ADMIN_API_KEY" \
  "http://localhost:8000/api/engine/v1/certificate?format=md"

أدوات MCP

يتيح خادم MCP خمس أدوات للمحرّك، بالصلاحيات نفسها التي لمسارات REST:

  • engine_status
  • engine_requests
  • engine_run، الذي يشغّل تمريرة واحدة للمخطِّط
  • engine_certify، الذي يأخذ retest
  • engine_certificate، بصيغة json أو md أو html

منح هذه الأدوات والمحرّك معطّل تحذير تحقّق. وعبر potato mcp connect، يعود الاستدعاء المرفوض (صلاحية ناقصة، أو معامل خاطئ) خطأَ أداة يحمل رسالة الخادم. ويشرح توثيق خادم MCP منح الأدوات وربط عميل.

Python SDK

يشغّل الصنف Study المحرّك من Python، في دفتر ملاحظات مثلاً:

python
from potato.labeling_engine.sdk import Study
 
study = Study("examples/labeling-engine/text-certified-sentiment/config.yaml")
study.run()                                   # label, sample, certify, resolve
for req in study.requests(status="open")[:5]:
    study.label(req.item_id, req.schema, "positive", user="me")
study.certify()
print(study.certificate(fmt="md"))
study.export("out/")

تقابل كل طريقة أمراً أو مساراً:

الطريقةما تفعله
Study(config_path)تحميل الإعداد والعناصر
run(until="predicted", max_ticks=20)مثل potato label run، وتأخذ قفل الكتابة
label(item_id, scheme, value, user, request_id=None)تسجيل وسم وضعه شخص. تُغلق request_id، وإلا فطلباً يحمله هذا الشخص على العنصر، وإلا يُحتفظ به وسماً عضوياً لا يُشهِد أبداً. والوسم الثاني من الشخص نفسه على العنصر نفسه يحدّث وسمه الأول
status()مثل GET /status
requests(status=None, purpose=None, ...)سجل الطلبات
certify(retest=False)مثل potato label certify
certificate(fmt="json")json أو md أو html
export(out_dir)مثل potato label export

يَسِم المثال كل طلب مفتوح بـ "positive" فقط لعرض الاستدعاءات. والوسم المسجَّل عبر Study.label الذي لا يجيب عن أي طلب يُحتفظ به وسماً عضوياً، والوسوم العضوية لا تُشهِد أبداً، لذا فإن السكربت الذي يَسِم عناصر لم يطلبها المحرّك يضيف وسوماً لا يقرؤها أي عقد.

قراءة إضافية

للاطلاع على تفاصيل التنفيذ، راجع الوثائق المصدرية.