انتقل للمحتوى
كل دراسات الحالة
marketplace للتوظيف التقني · قبل الإطلاقمدة القراءة: 6 دقايق

Maxpeak: مرحلة أولى لتقييم المهندسين، بمساعدة LLM

الـ backend بتاع marketplace بلغتين بيوصّل شركات سعودية بمهندسين من مصر. بنيت الـ API بـ Django، والـ authentication بتاعه، والمرحلة الأولى الآلية من مسار تقييم من تلات مراحل: pipeline على Celery بيطلّع النص من الـ CV ويحسبله درجة بـ LLM. المنتج لسه قبل الإطلاق.

maxpeak.netالـ backend والـ frontend · شغل مستقل · 2025–2026
مراحل تقييم متمثّلة في الـ data model
3
أوتوماتيك (فرز الـ CVs)
المرحلة 1
unit tests لاستخراج النص من الـ CV
94
بلغتين
AR / EN

المشكلة

إيه المشكلة اللي كنا بنحلها؟

توظيف المهندسين من بلد تانية محتاج ثقة في التقييم: الشركات مش سهل عليها تقيّم المرشحين عن بُعد، والمرشحين مش سهل عليهم يثبتوا مستواهم. فكرة Maxpeak إن التقييم يحصل قبل ما الشركة تشوف أي profile: فرز بالـ ATS، وبعدين assessment تقني، وبعدين مقابلة مع خبير.

المرحلة الأولى لازم تستوعب كل المتقدمين، فكان لازم ننفّذها تلقائيًا، مع توضيح النتيجة وطريقة الوصول ليها.

القيود

إيه القيود اللي أثّرت على التصميم؟

  • الـ CVs بتيجي ملفات PDF أو Word، بالإنجليزي أو بالعربي أو بالاتنين.
  • الفرز مينفعش يعمل block للـ request بتاع الرفع؛ ممكن ياخد عشرات الثواني.
  • المفروض يكون ممكن تغيير الـ provider بتاع الموديل من غير تغيير الـ business logic.
  • الـ services التانية لازم تقدر تتحقق من الـ tokens بتاعة المستخدمين من غير ما يكون معاها الـ signing secret.

الـ architecture

النظام متصمم إزاي؟

Django REST API مع Celery workers. رفع الـ CV بيشغّل pipeline بشكل async: استخراج النص وبعدين الـ parsing، والنتيجة يا إما بتحرّك الـ workflow بتاع تقييم المرشح لقدام، يا إما بتوقّفه.

  1. الـ API

    • الحسابات والـ auth

      أدوار للمرشح والشركة والـ interviewer والأدمن؛ JWT بـ RS256 مع endpoint لـ JWKS؛ وتسجيل دخول بـ Google و LinkedIn و GitHub.

    • الشركات والوظايف

      profiles الشركات، وأعضاء الفريق، وتفضيلات التوظيف، وعروض الشغل مع القبول/الرفض.

    • الـ workflow بتاع التقييم

      فرز بالـ ATS ← تقييم تقني ← مقابلة مع خبير، ومعاه مستويات (tiers).

  2. الـ pipeline بتاع الـ CV (Celery)

    • استخراج النص

      استخراج النص من PDF و DOCX؛ والملفات اللي كلها صور بتترفض برسالة واضحة.

    • الـ parsing بالـ LLM

      profile منظّم، والمهارات، وملخص، ودرجة فرز من 0 لـ 100؛ OpenRouter هو الافتراضي، و providers تانيين ممكن يتركّبوا مكانه (pluggable).

    • شرط الانتقال للمرحلة التالية

      درجة 70 أو أكتر بتعدّي المرشح للمرحلة اللي بعدها؛ والنتيجة بتتكتب في الـ workflow بتاع التقييم.

القرارات الهندسية

اخترنا إيه، وليه؟

  1. tokens بتوقيع asymmetric مع endpoint لـ JWKS

    الـ JWTs الموقّعة بـ RS256 بتخلّي أي service هتتعمل بعدين تقدر تتحقق من الـ tokens بالـ public key لوحده، والـ blacklisting للـ tokens بيدعم تسجيل الخروج من كل الأجهزة.

  2. strategies للموديل قابلة للتبديل

    الـ parser بيكلّم strategy interface؛ و OpenRouter هو اللي متظبط (وبشكل افتراضي بموديل من فئة GPT-4o-mini)، و Anthropic وموديل Ollama محلي بدائل جاهزة تتحط مكانه على طول.

  3. مهمتين على Celery مع إعادة المحاولة

    الاستخراج والـ parsing كل واحد فيهم task منفصلة، فلو الموديل وقع، الـ parse بيتعاد من غير ما الملف يتقري تاني، والـ request بتاع الرفع بيرجع على طول.

  4. رفض الملفات اللي استخراج النص منها مش موثوق

    الـ CVs اللي متعملها scan وكلها صور بتفشل بسرعة، مع رسالة بتطلب رفع PDF فيه نص أو DOCX، بدل التخمين بالـ OCR.

المفاضلات

كسبنا إيه، وإيه اللي اتنازلنا عنه؟

درجة واحدة شاملة من الـ LLM

سهلة في البناء والشرح، بس مش rubric معمول له calibration؛ ومحتاجة validation بالمقارنة مع قرارات الخبراء قبل ما يبقى ليها وزن أكبر.

حد نجاح ثابت

السلوك متوقع، بس المرشحين اللي قريبين من الحد بيتعامل معاهم زي اللي نجحوا أو رسبوا بفرق واضح.

من غير OCR

اعتمادية أعلى في الاستخراج، والتمن إن الـ CVs اللي متعملها scan بتترفض.

النتايج

وصلنا لإيه؟

مرحلة أولى شغالة

رفع ← استخراج ← parse ← درجة ← عبور أو توقف، بشكل async، مع retries.

اختبارات لاستخراج النص

94 unit test بيغطوا استخراج النص من PDF و DOCX وحالات الأخطاء بتاعته.

أساس لباقي الأجزاء

الـ data model بتاع الـ assessments والمقابلات والـ tiers واشتراكات الشركات موجود؛ بس منطق تشغيلهم لسه ما اتبناش.

دوري

  • صممت وبنيت الـ API بـ Django، والـ authentication، والـ pipeline بتاع الـ CV، والـ data model بتاع التقييم.
  • بنيت الـ frontend بـ Next.js، مع دعم العربي من اليمين للشمال.

حدود الشغل

  • قبل الإطلاق: موقع المنتج (maxpeak.net) متاح للعامة، لكن الـ backend بتاع المنصة لسه ما اتنشرش للعامة.
  • مرحلة التقييم الأولى بس هي اللي أوتوماتيك؛ أما حساب درجات الـ assessment، والمقابلات، والمدفوعات، والرسايل جوه التطبيق، وضمان الاستبدال، فدي مميزات مخطط لها ولسه ما اتبنتش.
  • مفيش هنا أي أرقام عن التوظيف أو المستخدمين.
Django 5.2DRFCeleryRedisPostgreSQLOpenRouterNext.js