دوز مباشرة للمحتوى الرئيسي
دروس فالذكاء الاصطناعي

أوتوماتيز بوست-ترينينغ ديال LLM مع Agent ديال AIBuildAI

تعلّم كيفاش تشغّل Agent ديال LLM-Post-Train من AIBuildAI من السورس، وتكوّن الولوج للموديلات وموارد السيستيم، وتطلق مثال GSM8K، وتنشئ تاسك مخصّصة، وتراقب التجارب، وتقيّم الموديل النهائي، وتستعمل قدرات متقدمة بحال البحث الميتا، واسترجاع المعرفة، والذاكرة، وتوليد الأوراق العلمية.

أوتوماتيز بوست-ترينينغ ديال LLM مع Agent ديال AIBuildAI

شنو هو وكيل AIBuildAI LLM-Post-Train؟

وكيل AIBuildAI LLM-Post-Train هو وكيل تكراري كيطوّر راسو بوحدو، ومخصص للتدريب اللاحق الآلي والمكيّف ديال نماذج اللغة الكبيرة. بلا ما يطبّق وصفة تدريب ثابتة وحدة، كيدرس المهمة، كيصمّم خوارزميات محتملة للتدريب اللاحق، كيجمع وينظّم بيانات التدريب، كيكتب الكود، كيدير التجارب، كيقيّم النتائج، وكيحسّن النموذج بشكل تكراري.

المستودع فيه الكود المصدري اللازم لتشغيل الوكيل وقراءة الكود ديالو وتعديلو. ومصمّم للمؤسسات والباحثين اللي محتاجين استراتيجيات تدريب لاحق مكيّفة مع البيانات الخاصة، وعائلات النماذج، وطرق التقييم، وأهداف النشر ديالهم.

فـ PostTrainBench، المشروع كيعلن على نتيجة إجمالية ديال 46.6%، وكيحتل المرتبة الأولى بين النماذج والوكلاء اللي تقيّمو، وما كيسبقو غير خط الأساس ديال الخبير البشري بنسبة 51.1%.

نتائج AIBuildAI فـ PostTrainBench

كيفاش كيخدم الوكيل

كل تشغيل كيبدا بمهمة وبطريقة للتنقيط. النظام كيحضّر وصف ثابت للمهمة، كيدير خط أساس، كيطلق التجارب، كينقّط كل مرشح كيكمل باستعمال نفس برنامج التنقيط، وكيحوّل أحسن نتيجة إلى مخرَج قابل للتسليم.

كاينين جوج قدرات كيميّزو النظام على وكيل برمجة عام:

  • نظام المعرفة: الوكلاء يقدرو يستعلمو من قاعدة معارف AIBuildAI عبر MCP. وثائق المهارات المنظّمة فيها كاتغطي سيرورات التدريب اللاحق، والطرق، ومجموعات البيانات، والأطر البرمجية.
  • البحث الفوقي: وكيل فوقي يقدر يبحث فالمهمة ويكتب برنامج بحث خاص بالمهمة، عوض ما ينفّذ طوبولوجيا تجارب محددة من قبل.

كل تشغيل كيتزوّد حتى بفضاء عمل مباشر فالويب، وبـرسم بياني دائم للتنفيذ، ووحدات عمل مسجّلة فدفتر، وعمليات فرعية معزولة، وضوابط على الموارد. أحداث التشغيل كتتخزّن فكلستر PostgreSQL خاص تحت ~/.aibuildai/postgresql، وهاد الشي كيدعم التنفيذ اللي يمكن استئنافو وإعادة تشغيلو.

الخصائص الرئيسية

  • التصميم والتنفيذ الآلي لتجارب التدريب اللاحق ديال نماذج اللغة الكبيرة.
  • استراتيجيات بحث خاصة بكل مهمة، من بينها البحث الفوقي وعدة طرق بحث ثابتة.
  • استرجاع المعرفة المتعلقة بالطرق، ومجموعات البيانات، والأطر البرمجية، وقرارات سير العمل.
  • وكلاء مقيّدون بالأنواع، وبرامج حتمية، وعمليات بحث متداخلة.
  • تنقيط محدد من طرف المهمة وترتيب موحّد للمرشحين.
  • مراقبة مباشرة عبر المتصفح من خلال خدمة فضاء عمل محلية.
  • بيئات Bubblewrap مع حدود cgroup-v2 على الذاكرة والعمليات.
  • ذاكرة كتتولّد محلياً انطلاقاً من التشغيلات السابقة.
  • إمكانية اختيارية لإعداد الأوراق وتجميعها فـ PDF من بعد التجميع.
  • دعم Claude ونماذج أخرى متاحة عبر نقاط نهاية متوافقة مع Anthropic.

متطلبات النظام

قبل تثبيت المشروع، تأكد باللي المضيف كيتوافق مع هاد المتطلبات:

  • Linux على x86_64 مع جلسة مستخدم systemd.
  • Python من 3.11 حتى 3.13.
  • سلسلة أدوات C فيها gcc وmake.
  • رؤوس التطوير ديال zlib وreadline.
  • bwrap، اللي كيوفرو الحزمة bubblewrap، مع تفعيل مساحات أسماء المستخدمين بلا امتيازات.
  • ولوج للشبكة نحو إصدارات GitHub وftp.postgresql.org.
  • تسجيل الدخول إلى Claude Code، أو مفتاح API ديال Anthropic، أو نموذج آخر متاح عبر نقطة نهاية متوافقة مع Anthropic.
  • كيُنصح باستعمال وحدة معالجة رسومية CUDA، مع أن الوكلاء كيتعرفو على العتاد المتاح وكيستعملوه.

فأول تشغيل، كيبني المشروع تثبيت خاص لـ PostgreSQL انطلاقاً من أرشيف المصدر الرسمي. وكيحمّل حتى نسخاً محددة من أدوات بحال ruff وtectonic وmicromamba وcaddy وPostgreSQL إلى ~/.cache/aibuildai. النظام كيستعمل هاد النسخ اللي كيمتلكها هو عوض التثبيتات المكافئة الموجودة فالمضيف.

ما محتاجش conda. الوكيل كينشئ بيئات Program باستعمال تثبيت micromamba الخاص به.

تحقّق من تفويض cgroup-v2

كل تشغيل كيتحطّ ليه حد داخل شجرة وحدة ديال cgroup-v2. مدير مستخدمي systemd خاصو يفوّض على الأقل المتحكمين memory وpids. تحقّق من الإعداد الحالي بهاد الأمر:

U=$(id -u)
cat /sys/fs/cgroup/user.slice/user-$U.slice/user@$U.service/cgroup.subtree_control

خاص الخرج يتضمن memory وpids. إلا كان شي واحد فيهم ناقص، خاص المسؤول يزيد Delegate=pids memory cpu فملف إسقاط داخل /etc/systemd/system/user@$U.service.d/، ويعاود تحميل systemd، ومن بعد خاصك تدخل للحساب من جديد.

ثبّت الوكيل

1. ثبّت حزم نظام التشغيل

فـ Debian أو Ubuntu، ثبّت المترجم، والرؤوس المطلوبة، وbubblewrap:

sudo apt-get install build-essential zlib1g-dev libreadline-dev bubblewrap

2. نسخ المستودع

git clone https://github.com/aibuildai-inc/aibuildai-llm-posttrain-agent.git
cd aibuildai-llm-posttrain-agent

3. أنشئ بيئة Python افتراضية

python -m venv .venv
source .venv/bin/activate

4. ثبّت الاعتماديات المحددة

pip install -r requirements.lock
pip install -e . --no-deps

التثبيت القابل للتعديل كيوفّر الأمر aibuildai. استعمل ملف القفل حيث إن النسخة المحددة ديال claude-agent-sdk هي النسخة اللي تجرّبات مع قاعدة الكود هادي.

إلا كنت ناوي تعدّل المستودع وتشغّل بوابة الجودة ديالو، ثبّت حتى اعتماديات التطوير:

pip install -r requirements-dev.lock

5. حضّر الأدوات المملوكة اختيارياً

الأدوات يقدرو يتحمّلو ويتبناو فالتشغيل اللول. باش توجّدهم من قبل، نفّذ:

aibuildai setup

ضبط الولوج للموديلات

الخيار 1: استعمل تسجيل الدخول ديال Claude Code

claude auth login

الخيار 2: عطِي مفتاح API

export AIBUILDAI_API_KEY=sk-ant-...

إلا ما كانش AIBUILDAI_API_KEY مضبوط، التطبيق كيتحقق من ANTHROPIC_AUTH_TOKEN ومن بعد ANTHROPIC_API_KEY.

استعمال endpoint آخر متوافق مع Anthropic

ضبط AIBUILDAI_BASE_URL على الـendpoint وحطّ المفتاح ديالو فـAIBUILDAI_API_KEY:

export AIBUILDAI_BASE_URL=https://openrouter.ai/api
export AIBUILDAI_API_KEY=your-key
export AIBUILDAI_SMALL_FAST_MODEL=provider/model-id

معرّفات الموديلات المختصرة اللي كيبداو بـdeepseek- كيتوجهو أوتوماتيكياً لـendpoint ديال DeepSeek المتوافق مع Anthropic. معرّفات موديلات OpenRouter فيها prefix ديال المزوّد وكتحتاج بجوج AIBUILDAI_BASE_URL وAIBUILDAI_SMALL_FAST_MODEL.

إلا كان شي endpoint كيستعمل سميات مختلفة لطبقات موديلات Claude، ربطهم باستعمال AIBUILDAI_HAIKU_MODEL وAIBUILDAI_SONNET_MODEL وAIBUILDAI_OPUS_MODEL. استعمل AIBUILDAI_SUBAGENT_MODEL ملي بغيتي الـsub-agents يخدمو بموديل مختلف على الموديل المضبوط للدور ديالهم.

إعدادات اختيارية للخدمات

  • AIBUILDAI_KB_BASE_URL كيختار خدمة MCP ديال قاعدة المعرفة. افتراضياً، الـclient كيستعمل snapshot عمومي وثابت ديال المشروع.
  • AIBUILDAI_KB_TOKEN كيوفّر bearer token إلا كانت خدمة المعرفة كتحتاج التوثيق.
  • AIBUILDAI_WEB_PORT كيختار port ديال خدمة workspace المحلية.
  • AIBUILDAI_WEB_NAME كيسمّي خدمة workspace ثانية فـنفس الـhost وكيحتاج port ويب محدد بشكل صريح.

إنشاء وتشغيل run بسيط

كل run موصوف بملف YAML واحد. ولّد إعداد بداية موثّق باستعمال:

aibuildai config > task.yaml

الملف اللي كيتولّد فيه كل حقول الإعداد، القيمة الافتراضية ديال كل واحد، والتوثيق ديالو. الأقسام الرئيسية المطلوبة هي run وllm وwork_units وsearch وresources؛ وملف البداية كيعمرهم.

شغّل الـrun بهاد الأمر:

aibuildai run task.yaml

الأمر كيطبّع URL ديال workspace شبيه بـhttp://127.0.0.1:<port>/run/<run-id>. حلّو باش تتبع الـrun مباشرة. المتصفح اختياري، والتنفيذ كيكمل عادي بلا بيه.

تشغيل مثال GSM8K

المثال المرفق كيدير post-training لـQwen/Qwen3-1.7B-Base باش يحل مسائل الرياضيات اللفظية ديال المستوى المدرسي من GSM8K. حسب المستودع، هاد المثال كياخذ تقريباً جوج سوايع فـGPU وحدة.

1. بنِي مجلد المهمة

bash examples/gsm8k-qwen3-1.7b-base/setup.sh ~/gsm8k-example

الإعداد كيحمّل تقريباً 4 GB، ومن بينها أوزان الموديل الأساسي وتقسيمتي GSM8K بجوج. كيسجّل وصف المهمة والـgrader المجمّد فـ~/gsm8k-example/task/ وكيحضّر cache ديال pip للحزم اللي كتتسطّب فـProgram environment الخاص بالـrun.

مجلد المهمة الناتج فيه الأوزان الأساسية اللي يقدر الـagent يضبطها، و7,473 مسألة ديال التدريب، والـgrader، وتقسيمة الاختبار اللي فيها 1,319 مسألة واللي كيقراها هاد الـgrader.

2. بْدا post-training

aibuildai run ~/gsm8k-example/task.yaml

المثال كيستعمل meta search، ومدة استكشاف قصوى ديال 90 دقيقة، وميزانيات مقابلة لكل agent. الـREADME كيوصي برفع هاد الميزانيات فـrun جدي.

3. فهْم عقد التقييم

الـgrader هو التعريف الكامل للنجاح. كيعطي للموديل سؤال متبوع ببداية جواب، وكيفكّ الترميز بطريقة greedy، وكيستخرج الرقم اللي من بعد آخر ####. الـREADME كيسجّل أن الموديل الأساسي كيجيب 0.105 فـأول 200 مسألة ديال الاختبار، حيث الموديل الأساسي اللي ما تدرّبش ما كيتبعش فالبداية صيغة الجواب المطلوبة.

4. قيّم الموديل النهائي

النتيجة المطلوبة هي مجلد ديال موديل مدموج. عوّض <run-home> باسم مجلد الـrun اللي تولّد، وقيّم جميع أمثلة الاختبار باستعمال Program environment ديال الـrun:

H=~/gsm8k-example/playground/gsm8k-qwen3-1.7b-base/<run-home>
$H/program-environment/env/bin/python ~/gsm8k-example/task/grade/evaluate.py --model-path $H/deliverable/final_model --limit -1

استعمل الـAgent مع المهمة ديالك

  1. نسخ examples/gsm8k-qwen3-1.7b-base.yaml، ولا ولّد ملف بداية كامل باستعمال aibuildai config.
  2. أنشئ مجلد مهمة فيه كلشي اللي يقدر الـrun يستعملو.
  3. دخّل وصف واضح للمهمة، بحال README ولا وصف المهمة ولا ورقة، مع كل ملفات البيانات المطلوبة.
  4. ضبط run.data_root على داك المجلد.
  5. راجع إعدادات الموديل، والبحث، والميزانية، ووحدات العمل، والموارد.
  6. شغّل ملف YAML باستعمال aibuildai run.

أثناء الإعداد، النظام كيقرا مجلد المهمة كامل، وكيجمّد الوصف على أنه README ديال الـrun، وكيبني منّو برنامج النقاط ديال الـrun. لذلك خاص مجلد المهمة يكون كامل ويحدّد بوضوح النتيجة المطلوبة وطريقة التقييم.

الإعداد كيدعم حتى run.setup_from_scratch وrun.task_prompt. هاد الإعدادات كتخلي Setup يجيب البيانات والتقييم من وصف المهمة بلا ما يبدا بمجلد مهمة موجّد.

اختيارات مهمة فالإعداد

اختيار الموديل

llm.default.model كيختار الموديل الأساسي اللي كيستعملوه الوكلاء. تقدر تضبط الاستدلال بإعدادات بحال effort وmax_thinking_tokens. استعمل llm.by_role باش تربط موديلات بأدوار محددة، ولا llm.auto باش تخلي الموجّه يختار حسب الدور.

طريقة البحث

search.kind كيتحكم فاستراتيجية التجربة. القيم المدعومة اللي موصوفة فالـREADME هي:

  • meta، فين وكيل ميتا كيكتب برنامج بحث خاص بالمهمة.
  • nb_tree، بحث شجري على التجربة كاملة.
  • nb.
  • tree، وهي القيمة الافتراضية فالبادئ العام.
  • linear.
  • parallel.

محتوى search.input كيعتمد على الاستراتيجية المختارة. بحث ميتا كيقبل الخيار report، بينما الاستراتيجيات الثابتة كتستعمل المعاملات ديالها، وقد تتضمن parallel وearly_stopping.

حدود الوقت والمصاريف

run.budget.wall_clock_minutes القيمة الافتراضية ديالو هي 1,440 دقيقة. ملي كيتوصل الحد، ما كيبدا حتى استكشاف جديد، ولكن الخدمة اللي مازال خدامة والتسليم كيتخلاو يكملو. run.budget.cost_usd كيوفر حد اختياري ومرن للمصاريف على مستوى التشغيل كامل.

كل إدخال تحت work_units عندو الميزانية ديالو. وحدة العمل تقدر تستعمل دقائق ثابتة، أو وقت كيتقاس حسب العمق، أو مدة متوقعة مع هامش إضافي.

حدود الموارد

استعمل resources.work_unit.cpu_max_cores وresources.work_unit.memory_max_gb باش تفرض حدود قصوى صارمة على المعالج والذاكرة لكل وحدة عمل. كل وحدة كتخدم فصندوق رمل معزول باستعمال bubblewrap، مع حدود cgroup على الذاكرة والعمليات، ومجلد المهمة مركّب بوضعية القراءة فقط.

نصائح متقدمة

فعّل استرجاع المعرفة

زيد إعداد MCP ديال kb ملي بغيتي الوكلاء يستاشرو قاعدة معرفة AIBuildAI. العميل كيوفر أدوات للبحث فالمهارات، وتحميل مهارة، وقراية المراجع. corpus كيتضمن إرشادات سير العمل، وبطاقات المنهجية، وبطاقات البيانات، وبطاقات الأطر.

الخدمة العمومية الافتراضية كتستعمل نسخة ثابتة من corpus. باش تستضيف النسخة ديالك، نشر مستودع قاعدة المعرفة مفتوح المصدر ووجّه AIBUILDAI_KB_BASE_URL ليه.

اختار بحث ميتا للتصميم الخاص بالمهمة

البحث الشجري الثابت ما كيقدرش يعبّر بشكل طبيعي على كل سيرورات العمل، بحال تشغيل sweep قبل التدريب، وتنظيم tournament من بعد، ولا الجمع بين عدة موديلات. مع search.kind: meta، وكيل ميتا كيدرس المهمة، ويقدر يدير تجارب أولية، ويستاشر مهارات التصميم المضمّنة وقاعدة المعرفة، وكيكتب حزمة بحث بلغة Python.

الحزمة المتولدة كتتركب من ثلاثة مكوّنات أساسية:

  • Agent: جلسة LLM فيها أدوات وسياسات ومخرج مكتوب النوع.
  • Program: عملية حسابية حتمية فعامل مُدار عندو حدود موارد مخصصة.
  • Search: منسّق يقدر يطلق وينسّق Agents وPrograms وSearches متداخلة باستعمال مدخلات ومخرجات مكتوبة النوع.

كتتراجع الحزمة ويمكن اختيارياً مراجعتها بتقرير تصميم بصيغة LaTeX. من بعد كتخدم كبحث فرعي فنفس التشغيل المسجّل فالمجلة. كيفما كان التصميم، قيمة التشغيل كتبقى هي أحسن نتيجة جابتها أي عقدة.

بني ذاكرة محلية قابلة لإعادة الاستعمال

من بعد ما تجمع تشغيلات كافية لمهمة، لخّص الدروس ديالها فوثيقة ذاكرة محلية قابلة للتعديل:

aibuildai memorize task.yaml

عيّن memory.enable باش تدخل هاد الذاكرة المحلية لكل وكيل. المعرفة اللي تعلمتيها من التشغيلات ديالك كتبقى فالجهاز ديالك وما كتزادش لقاعدة المعرفة البعيدة.

تحكّم فالأدوات الخارجية

استعمل disallowed_tools باش تمنع كل دور من استعمال أدوات مضمّنة معينة. مثلاً، تقدر المهمة تمنع WebSearch وWebFetch ملي كتفرض قواعد التقييم سيرورة عمل بلا إنترنت.

زِد تكاملات MCP

إعداد mcps يقدر يفعّل قاعدة المعرفة، أو إرسال المشاركات فمسابقات Kaggle، أو خوادم MCP مخصصة. تكامل Kaggle كيدعم إعداد الحد الأقصى للإرسالات تحت submission.max_submissions.

ولّد ورقة علمية

فعّل writer.enable باش تصيغ مسودة ورقة من بعد التجميع، ولا شغّل أمر الورقة على مجلد تشغيل مكتمل:

aibuildai write-paper <run-dir>

الأمر كيصيغ مسودة ورقة من التشغيل اللي سالا وكيحوّلها لـPDF.

تحقّق من تغييرات المصدر

هاد السلسلة من المشروع ما فيهاش حزمة اختبارات. بوابة المستودع ديالها هي:

./check.sh

البوابة كتشغّل pyright وruff وsemgrep، وكتتحقق من أي انحراف فملف القفل. ثبّت requirements-dev.lock قبل ما تستعملها.

فهم مخرجات التشغيل

كل تشغيل كينشئ مجلد رئيسي تحت جذر playground المكوّن:

{playground_root}/<task-name>/<timestamp>_<run-id>/
  run_config.json
  public/
  private/
  deliverable/
  workspace/
  program-environment/
  resource_samples.jsonl
  • run_config.json فيه الإعداد النهائي ومعرّف التشغيل المستعمل للاستئناف.
  • public/ فيه README المجمّد والبيانات اللي وجدها Setup للمترشحين.
  • private/ فيه برنامج التنقيط، وبيان المقاييس، والمحاولة الأساسية، وسجل الفائز.
  • deliverable/ فيه حزمة الموديل القابلة للتشغيل أو نتيجة أخرى محددة من طرف المهمة.
  • workspace/ فيه المحاولات، والقطع الأثرية، والبيانات المؤقتة، ومجلدات العمل الخاصة بكل بحث.
  • program-environment/ فيه البيئة المعزولة ديال Program الخاصة بالتشغيل.
  • resource_samples.jsonl كيسجل قياسات موارد المضيف اللي تجمعات أثناء التنفيذ.

الخلاصة

كيقدّم AIBuildAI LLM-Post-Train Agent نظام متكامل من البداية للنهاية لتصميم، وتشغيل، وتقييم، وتحسين سيرورات التدريب اللاحق ديال النماذج. بْدا بمثال GSM8K المرفوق باش تتأكد من التثبيت وتفهم بنية التشغيل. من بعد، حدّد مجلد واضح للمهمة ومقيّم، واختار استراتيجية بحث مناسبة، وضبط ميزانيات واقعية وحدود الموارد، واستعمل مساحة العمل المباشرة باش تتابع التجارب الناتجة.

إلى بغيتي تفاصيل أعمق على البنية، راجع وثائق البنية ديال المستودع. المشروع موزّع بموجب رخصة Apache 2.0.