الدرس 05 · تخطيط

معرفة متخصصة تُحمَّل عند الطلب

«لا تضع كل شيء في system prompt. حمّل عند الطلب.»

⏱ ~10 د · 📝 3 مكونات تفاعلية · 🧑‍💻 مبني على shareAI-lab · s05_skill_loading.py

مشكلة «حشو كل شيء في system prompt»

لديك 20 skill، كل منها مكتوب بتفصيل: pdf-processing (كيفية قراءة PDF)، code-review (قائمة مراجعة الكود)، git-workflow (أنماط git الشائعة)... الطريقة المنطقية: دمجها كلها في system prompt ليراجعها النموذج في أي وقت.

النتيجة:

  • كل استدعاء يستهلك 15,000–30,000 token كمدخلات (حتى لو السؤال لا يحتاج أي skill).
  • تتشتت انتباه النموذج — القواعد المذكورة في system prompt الطويل ينخفض امتثاله لها.
  • تعديل skill واحد يُبطل كل الـ cache للمحادثات السابقة.

نهج s05 هو التقسيم إلى طبقتين.

البنية ذات الطبقتين

الطبقة الأولى · رخيصة: system prompt يحمل فقط اسم الـ skill وجملة وصفية (حوالي 100 token لكل skill). 20 skill = 2,000 token، مقبول.

# 系统提示里的 skill 清单
Skills available:
  - pdf: Process PDF files. Extract text, tables, metadata.
  - code-review: Systematic code review checklist.
  - git-workflow: Common git branching and rebase patterns.

الطبقة الثانية · عند الطلب: حين يحتاج النموذج skill معين يستدعي load_skill(name="pdf")، ويصل نص الـ skill الكامل (قد يبلغ 5,000–10,000 token) عبر tool_result إلى السياق. الـ skills غير المستخدمة لا تُحمَّل بأي token.

# tool_result 里返回完整 skill
<skill name="pdf">
  Step 1: Use pdfplumber for extraction...
  Step 2: Handle OCR fallback when needed...
  Step 3: Structure output as Markdown table...
</skill>

مقارنة تكلفة الـ token

اختبار بسيناريو حقيقي. افترض 20 skill، متوسط كل نص 3,000 token. المستخدم يطرح سؤالاً (مثلاً «صحح خطأ في واجهة تسجيل الدخول») — هذا السؤال على الأرجح لا يحتاج أي skill.

صيغة ملف SKILL.md

ملفات الـ skill تستخدم YAML frontmatter مع نص أساسي:

---
name: pdf
description: Process PDF files. Extract text, tables, metadata.
tags: document,parsing
---

Step 1: Use pdfplumber for extraction. Handle multi-column layouts...
Step 2: For scanned PDFs, fall back to OCR via tesseract...

الـ frontmatter للطبقة الأولى (name/description/tags)، والنص الأساسي للطبقة الثانية. هذا الأسلوب مستوحى من المدونات الثابتة (Jekyll، Hugo)، ومن يعرفها يفهمه فوراً.

تفاعلي

Widget 1 · Token Economy · مقارنة النهجين

يسار: حشو كل شيء في system prompt. يمين: البنية ذات الطبقتين. شاهد إجمالي الـ token التراكمي بعد 20 محادثة.

حشو كل شيء في system prompt
System prompt: 60000 tokens
(20 skill × 3000 token لكل منها)
× عدد المحادثات: 1

الإجمالي: 60000 tokens
البنية ذات الطبقتين
System prompt: 2000 tokens
(20 وصف × ~100 token لكل منها)
+ skill body المُحمَّل عند الطلب: 0 tokens
(تُحمَّل مرة كل 5 محادثات)

الإجمالي: 2000 tokens
1
وفّرت 0%
تفاعلي

Widget 2 · Frontmatter Parser · استخراج بيانات الـ skill

أدخل ملف SKILL.md واستخدم منطق تحليل YAML frontmatter من s05 لترى ما تحصل عليه الطبقة الأولى وما تحصل عليه الطبقة الثانية.

SKILL.md (قابل للتعديل)
الطبقة الأولى · ما يُضاف إلى system prompt

          
الطبقة الثانية · tool_result عند load_skill

          
تفاعلي

Widget 3 · Discoverability · وصف الـ skill الجيد يساعد النموذج على إيجاده

وصف الطبقة الأولى هو ما يعتمد عليه النموذج لاختيار الـ skill المناسب. 3 مقارنات، اختر الوصف الأفضل — بعض الصياغات تجعل النموذج لا يجد الـ skill أبداً.

أصبت في 0 / 3