mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-22 07:15:10 +00:00
* feat(skills)!: promote Skills Repository out of experimental The registry-backed Skills Repository (crewai skill create/publish/ install/list, @org/name refs, global cache) is now mainline: - CLI: `crewai skill ...` is a top-level group; the CREWAI_EXPERIMENTAL gate and the now-empty `crewai experimental` group are removed. - Runtime: registry.py, cache.py, and events.py move from crewai.experimental.skills into crewai.skills next to the loader; the require_experimental_skills() gate is gone. crewai.experimental.skills remains as a deprecated re-export shim. - Docs: concepts/skills now leads with the CLI workflow and documents the create -> publish -> install lifecycle. Linear: n/a (requested promotion) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * feat(skills): org-scoped publish only + docs in all languages Skills are always scoped to the publishing organization, like tools: drop the --public/--private flags from `crewai skill publish` and always send is_public=False to the registry. CLI tests assert the flag is rejected and the API never receives a public publish. Translate the new CLI-first Quick Start and the create -> publish -> install lifecycle section into ar, pt-BR, and ko concepts/skills docs. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(skills): address review comments on the promotion PR - Back-compat shim now aliases the old submodules in sys.modules so `crewai.experimental.skills.registry/cache/events` imports (and patch targets) resolve to the real crewai.skills modules, not just the package-root re-exports. - `crewai skill publish` actually enforces the git-state check that --force claims to skip: unsynced repos block publishing (mirroring tool publish); standalone skill dirs outside any git repo publish without a check. - Explicit UTF-8 encoding on SKILL.md and cache-metadata reads/writes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(skills): fail closed when git state cannot be validated on publish Follow deploy's pattern: construct git.Repository(fetch=False) and only treat "not a Git repository" as skippable — any other git error (fetch/auth/misconfiguration) now blocks publish with a --force escape hatch instead of silently bypassing the sync check. Also single-style imports in the shim test (CodeQL) with the dotted shim import covered via importlib. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * fix(skills): fetch before sync check on publish; bump mcp past advisories Publish now refreshes remote-tracking refs (repository.fetch()) before is_synced(), so ahead/behind is judged against the actual remote rather than stale local refs; a failing fetch blocks publish with the --force escape hatch. Adds a fail-closed test for fetch errors. Raise mcp to >=1.28.1,<2 (locks 1.28.1): the ~=1.26.0 pin blocked GHSA-hvrp-rf83-w775 / GHSA-jpw9-pfvf-9f58 (fixed 1.27.2) and GHSA-vj7q-gjh5-988w (fixed 1.28.1), which were failing pip-audit on this PR. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: Vinicius Brasil <vini@hey.com>
374 lines
18 KiB
Plaintext
374 lines
18 KiB
Plaintext
---
|
|
title: المهارات
|
|
description: حزم المهارات المبنية على نظام الملفات التي تحقن خبرة المجال والتعليمات في إرشادات الوكلاء.
|
|
icon: bolt
|
|
mode: "wide"
|
|
---
|
|
|
|
## نظرة عامة
|
|
|
|
المهارات هي مجلدات مستقلة توفر للوكلاء **تعليمات وإرشادات ومواد مرجعية خاصة بالمجال**. تُعرّف كل مهارة بملف `SKILL.md` يحتوي على بيانات وصفية YAML ومحتوى Markdown.
|
|
|
|
عند التفعيل، يتم حقن تعليمات المهارة مباشرة في إرشادات مهمة الوكيل — مما يمنح الوكيل خبرة دون الحاجة لأي تغييرات في الكود.
|
|
|
|
<Note type="info" title="المهارات مقابل الأدوات — التمييز الأساسي">
|
|
**المهارات ليست أدوات.** هذه هي نقطة الارتباك الأكثر شيوعًا.
|
|
|
|
- **المهارات** تحقن *تعليمات وسياق* في إرشادات الوكيل. تخبر الوكيل *كيف يفكر* في مشكلة ما.
|
|
- **الأدوات** تمنح الوكيل *دوال قابلة للاستدعاء* لاتخاذ إجراءات (البحث، قراءة الملفات، استدعاء APIs).
|
|
|
|
غالبًا ما تحتاج **كليهما**: مهارات للخبرة، وأدوات للإجراء. يتم تكوينهما بشكل مستقل ويُكمّلان بعضهما.
|
|
</Note>
|
|
|
|
---
|
|
|
|
## البداية السريعة
|
|
|
|
### 1. إنشاء مهارة باستخدام سطر الأوامر (CLI)
|
|
|
|
واجهة سطر الأوامر هي الطريقة المدعومة لإنشاء مهارة — فهي تُنشئ لك هيكل المجلد وملف `SKILL.md` صالحًا:
|
|
|
|
```shell Terminal
|
|
crewai skill create code-review
|
|
```
|
|
|
|
داخل مشروع طاقم (حيث يوجد `pyproject.toml`) يُنشئ هذا الأمر `./skills/code-review/`؛ وخارج المشروع يُنشئ `./code-review/` في المجلد الحالي (يمكنك فرض هذا السلوك باستخدام `--no-project`):
|
|
|
|
```
|
|
skills/
|
|
└── code-review/
|
|
├── SKILL.md # Required — instructions (pre-filled template)
|
|
├── references/ # Optional — reference docs
|
|
├── scripts/ # Optional — executable scripts
|
|
└── assets/ # Optional — static files
|
|
```
|
|
|
|
### 2. كتابة SKILL.md الخاص بك
|
|
|
|
```markdown
|
|
---
|
|
name: code-review
|
|
description: Guidelines for conducting thorough code reviews with focus on security and performance.
|
|
metadata:
|
|
author: your-team
|
|
version: "1.0"
|
|
---
|
|
|
|
## إرشادات مراجعة الكود
|
|
|
|
عند مراجعة الكود، اتبع قائمة التحقق هذه:
|
|
|
|
1. **الأمان**: تحقق من ثغرات الحقن وتجاوز المصادقة وكشف البيانات
|
|
2. **الأداء**: ابحث عن استعلامات N+1 والتخصيصات غير الضرورية والاستدعاءات المحظورة
|
|
3. **القابلية للقراءة**: تأكد من وضوح التسمية والتعليقات المناسبة والأسلوب المتسق
|
|
4. **الاختبارات**: تحقق من تغطية اختبار كافية للوظائف الجديدة
|
|
|
|
### مستويات الخطورة
|
|
- **حرج**: ثغرات أمنية، مخاطر فقدان البيانات → حظر الدمج
|
|
- **رئيسي**: مشاكل أداء، أخطاء منطقية → طلب تغييرات
|
|
- **ثانوي**: مسائل أسلوبية، اقتراحات تسمية → الموافقة مع تعليقات
|
|
```
|
|
|
|
### 3. ربطها بوكيل
|
|
|
|
```python
|
|
from crewai import Agent
|
|
from crewai_tools import GithubSearchTool, FileReadTool
|
|
|
|
reviewer = Agent(
|
|
role="Senior Code Reviewer",
|
|
goal="Review pull requests for quality and security issues",
|
|
backstory="Staff engineer with expertise in secure coding practices.",
|
|
skills=["./skills"], # يحقن إرشادات المراجعة
|
|
tools=[GithubSearchTool(), FileReadTool()], # يسمح للوكيل بقراءة الكود
|
|
)
|
|
```
|
|
|
|
الوكيل الآن لديه **خبرة** (من المهارة) و**قدرات** (من الأدوات) معًا.
|
|
|
|
---
|
|
|
|
## المهارات + الأدوات: العمل معًا
|
|
|
|
إليك أنماط شائعة توضح كيف تُكمّل المهارات والأدوات بعضهما:
|
|
|
|
### النمط 1: مهارات فقط (خبرة المجال، بدون إجراءات مطلوبة)
|
|
|
|
استخدم عندما يحتاج الوكيل لتعليمات محددة لكن لا يحتاج لاستدعاء خدمات خارجية:
|
|
|
|
```python
|
|
agent = Agent(
|
|
role="Technical Writer",
|
|
goal="Write clear API documentation",
|
|
backstory="Expert technical writer",
|
|
skills=["./skills/api-docs-style"], # إرشادات وقوالب الكتابة
|
|
# لا حاجة لأدوات — الوكيل يكتب بناءً على السياق المقدم
|
|
)
|
|
```
|
|
|
|
### النمط 2: أدوات فقط (إجراءات، بدون خبرة خاصة)
|
|
|
|
استخدم عندما يحتاج الوكيل لاتخاذ إجراءات لكن لا يحتاج لتعليمات مجال محددة:
|
|
|
|
```python
|
|
from crewai_tools import SerperDevTool, ScrapeWebsiteTool
|
|
|
|
agent = Agent(
|
|
role="Web Researcher",
|
|
goal="Find information about a topic",
|
|
backstory="Skilled at finding information online",
|
|
tools=[SerperDevTool(), ScrapeWebsiteTool()], # يمكنه البحث والاستخراج
|
|
# لا حاجة لمهارات — البحث العام لا يحتاج إرشادات خاصة
|
|
)
|
|
```
|
|
|
|
### النمط 3: مهارات + أدوات (خبرة وإجراءات)
|
|
|
|
النمط الأكثر شيوعًا في العالم الحقيقي. المهارة توفر *كيف* تقترب من العمل؛ الأدوات توفر *ما* يمكن للوكيل فعله:
|
|
|
|
```python
|
|
from crewai_tools import SerperDevTool, FileReadTool, CodeInterpreterTool
|
|
|
|
analyst = Agent(
|
|
role="Security Analyst",
|
|
goal="Audit infrastructure for vulnerabilities",
|
|
backstory="Expert in cloud security and compliance",
|
|
skills=["./skills/security-audit"], # منهجية وقوائم تحقق التدقيق
|
|
tools=[
|
|
SerperDevTool(), # البحث عن ثغرات معروفة
|
|
FileReadTool(), # قراءة ملفات التكوين
|
|
CodeInterpreterTool(), # تشغيل سكربتات التحليل
|
|
],
|
|
)
|
|
```
|
|
|
|
### النمط 4: مهارات + MCP
|
|
|
|
المهارات تعمل مع خوادم MCP بنفس الطريقة التي تعمل بها مع الأدوات:
|
|
|
|
```python
|
|
agent = Agent(
|
|
role="Data Analyst",
|
|
goal="Analyze customer data and generate reports",
|
|
backstory="Expert data analyst with strong statistical background",
|
|
skills=["./skills/data-analysis"], # منهجية التحليل
|
|
mcps=["https://data-warehouse.example.com/sse"], # وصول بيانات عن بُعد
|
|
)
|
|
```
|
|
|
|
### النمط 5: مهارات + تطبيقات
|
|
|
|
المهارات يمكن أن توجّه كيف يستخدم الوكيل تكاملات المنصة:
|
|
|
|
```python
|
|
agent = Agent(
|
|
role="Customer Support Agent",
|
|
goal="Respond to customer inquiries professionally",
|
|
backstory="Experienced support representative",
|
|
skills=["./skills/support-playbook"], # قوالب الردود وقواعد التصعيد
|
|
apps=["gmail", "zendesk"], # يمكنه إرسال رسائل بريد وتحديث التذاكر
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## إنشاء المهارات ونشرها وتثبيتها
|
|
|
|
للمهارات دورة حياة كاملة تُدار عبر واجهة سطر الأوامر: **أنشئها باستخدام `crewai skill create`، وانشرها باستخدام `crewai skill publish`** — إنشاء المجلدات يدويًا يصلح للتجارب المحلية، لكن واجهة سطر الأوامر هي سير العمل المقصود، وهي تحافظ على صحة هيكل المهارة وبياناتها الوصفية.
|
|
|
|
### الإنشاء
|
|
|
|
```shell Terminal
|
|
crewai skill create my-skill
|
|
```
|
|
|
|
يُنشئ هذا الأمر المجلد (داخل `./skills/` في مشروع الطاقم) مع قالب `SKILL.md`، بالإضافة إلى مجلدات فارغة `scripts/` و `references/` و `assets/`. عدّل `SKILL.md` لتعريف التعليمات.
|
|
|
|
### النشر
|
|
|
|
نفّذ الأمر من داخل مجلد المهارة (حيث يوجد `SKILL.md`):
|
|
|
|
```shell Terminal
|
|
cd skills/my-skill
|
|
crewai skill publish
|
|
```
|
|
|
|
يقرأ النشر الحقول `name` و `description` و `metadata.version` من البيانات الوصفية في مقدمة `SKILL.md` ويدفع المهارة إلى سجل CrewAI. **المهارات المنشورة تكون دائمًا مقيّدة بنطاق مؤسستك** — مثل الأدوات، لا يستطيع رؤيتها وتثبيتها إلا أعضاء المؤسسة الناشرة؛ ولا توجد رؤية عامة. أعلام مفيدة:
|
|
|
|
| العلم | التأثير |
|
|
| :--- | :--- |
|
|
| `--org <slug>` | النشر تحت مؤسسة محددة (يتجاوز الإعدادات). |
|
|
| `--force` | تخطي التحقق من حالة git (تغييرات غير مُثبتة، إلخ). |
|
|
|
|
### التثبيت
|
|
|
|
ثبّت مهارة منشورة عبر مرجعها `@org/name`:
|
|
|
|
```shell Terminal
|
|
crewai skill install @acme/code-review
|
|
```
|
|
|
|
داخل مشروع الطاقم تُثبَّت المهارة في `./skills/{name}/`؛ وخارج المشروع تذهب إلى ذاكرة التخزين المؤقتة المشتركة في `~/.crewai/skills/{org}/{name}/`.
|
|
|
|
يمكن للوكلاء أيضًا الإشارة إلى مهارات السجل مباشرة — يتم حلّها من ذاكرة التخزين المؤقتة المحلية (أو من مجلد `skills/` في المشروع) وقت التشغيل:
|
|
|
|
```python
|
|
agent = Agent(
|
|
role="Senior Code Reviewer",
|
|
goal="Review pull requests for quality and security issues",
|
|
backstory="Staff engineer with expertise in secure coding practices.",
|
|
skills=["@acme/code-review"], # registry ref, resolved locally
|
|
)
|
|
```
|
|
|
|
### عرض القائمة
|
|
|
|
```shell Terminal
|
|
crewai skill list
|
|
```
|
|
|
|
يعرض المهارات المثبّتة من مجلد المشروع `./skills/` ومن ذاكرة التخزين المؤقتة العامة معًا، مع إصداراتها ومساراتها.
|
|
|
|
---
|
|
|
|
## المهارات على مستوى الطاقم
|
|
|
|
يمكن تعيين المهارات على الطاقم لتُطبّق على **جميع الوكلاء**:
|
|
|
|
```python
|
|
from crewai import Crew
|
|
|
|
crew = Crew(
|
|
agents=[researcher, writer, reviewer],
|
|
tasks=[research_task, write_task, review_task],
|
|
skills=["./skills"], # جميع الوكلاء يحصلون على هذه المهارات
|
|
)
|
|
```
|
|
|
|
المهارات على مستوى الوكيل لها الأولوية — إذا تم اكتشاف نفس المهارة في كلا المستويين، يتم استخدام نسخة الوكيل.
|
|
|
|
---
|
|
|
|
## تنسيق SKILL.md
|
|
|
|
```markdown
|
|
---
|
|
name: my-skill
|
|
description: وصف قصير لما تفعله هذه المهارة ومتى تُستخدم.
|
|
license: Apache-2.0 # اختياري
|
|
compatibility: crewai>=0.1.0 # اختياري
|
|
metadata: # اختياري
|
|
author: your-name
|
|
version: "1.0"
|
|
allowed-tools: web-search file-read # اختياري، تجريبي
|
|
---
|
|
|
|
التعليمات للوكيل تُكتب هنا. يتم حقن محتوى Markdown هذا
|
|
في إرشادات الوكيل عند تفعيل المهارة.
|
|
```
|
|
|
|
### حقول البيانات الوصفية
|
|
|
|
| الحقل | مطلوب | الوصف |
|
|
| :-------------- | :------- | :----------------------------------------------------------------------- |
|
|
| `name` | نعم | 1-64 حرف. أحرف صغيرة أبجدية رقمية وشرطات. يجب أن يطابق اسم المجلد. |
|
|
| `description` | نعم | 1-1024 حرف. يصف ما تفعله المهارة ومتى تُستخدم. |
|
|
| `license` | لا | اسم الترخيص أو مرجع لملف ترخيص مضمّن. |
|
|
| `compatibility` | لا | حد أقصى 500 حرف. متطلبات البيئة (منتجات، حزم، شبكة). |
|
|
| `metadata` | لا | تعيين مفتاح-قيمة نصي عشوائي. |
|
|
| `allowed-tools` | لا | قائمة أدوات معتمدة مسبقًا مفصولة بمسافات. تجريبي. |
|
|
|
|
---
|
|
|
|
## هيكل المجلد
|
|
|
|
```
|
|
my-skill/
|
|
├── SKILL.md # مطلوب — البيانات الوصفية + التعليمات
|
|
├── scripts/ # اختياري — سكربتات قابلة للتنفيذ
|
|
├── references/ # اختياري — مستندات مرجعية
|
|
└── assets/ # اختياري — ملفات ثابتة (إعدادات، بيانات)
|
|
```
|
|
|
|
يجب أن يتطابق اسم المجلد مع حقل `name` في `SKILL.md`. مجلدات `scripts/` و `references/` و `assets/` متاحة في مسار المهارة `path` للوكلاء الذين يحتاجون للإشارة إلى الملفات مباشرة.
|
|
|
|
---
|
|
|
|
## المهارات المحمّلة مسبقًا
|
|
|
|
للمزيد من التحكم، يمكنك اكتشاف المهارات وتفعيلها برمجيًا:
|
|
|
|
```python
|
|
from pathlib import Path
|
|
from crewai.skills import discover_skills, activate_skill
|
|
|
|
# اكتشاف جميع المهارات في مجلد
|
|
skills = discover_skills(Path("./skills"))
|
|
|
|
# تفعيلها (تحميل محتوى SKILL.md الكامل)
|
|
activated = [activate_skill(s) for s in skills]
|
|
|
|
# تمرير إلى وكيل
|
|
agent = Agent(
|
|
role="Researcher",
|
|
goal="Find relevant information",
|
|
backstory="An expert researcher.",
|
|
skills=activated,
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## كيف يتم تحميل المهارات
|
|
|
|
تستخدم المهارات **الكشف التدريجي** — تحمّل فقط ما هو مطلوب في كل مرحلة:
|
|
|
|
| المرحلة | ما يتم تحميله | متى |
|
|
| :--------- | :------------------------------------ | :------------------ |
|
|
| الاكتشاف | الاسم، الوصف، حقول البيانات الوصفية | `discover_skills()` |
|
|
| التفعيل | نص محتوى SKILL.md الكامل | `activate_skill()` |
|
|
|
|
أثناء التنفيذ العادي للوكيل (تمرير مسارات المجلدات عبر `skills=["./skills"]`)، يتم اكتشاف المهارات وتفعيلها تلقائيًا. التحميل التدريجي مهم فقط عند استخدام الواجهة البرمجية.
|
|
|
|
---
|
|
|
|
## المهارات مقابل المعرفة
|
|
|
|
كلا المهارات والمعرفة تُعدّل إرشادات الوكيل، لكنهما يخدمان أغراضًا مختلفة:
|
|
|
|
| الجانب | المهارات | المعرفة |
|
|
| :--- | :--- | :--- |
|
|
| **ما توفره** | تعليمات، إجراءات، إرشادات | حقائق، بيانات، معلومات |
|
|
| **كيف تُخزّن** | ملفات Markdown (SKILL.md) | مُضمّنة في مخزن متجهي (ChromaDB) |
|
|
| **كيف تُسترجع** | يتم حقن المحتوى الكامل في الإرشادات | البحث الدلالي يجد الأجزاء ذات الصلة |
|
|
| **الأفضل لـ** | المنهجيات، قوائم التحقق، أدلة الأسلوب | مستندات الشركة، معلومات المنتج، بيانات مرجعية |
|
|
| **يُعيّن عبر** | `skills=["./skills"]` | `knowledge_sources=[source]` |
|
|
|
|
**القاعدة العامة:** إذا كان الوكيل يحتاج لاتباع *عملية*، استخدم مهارة. إذا كان يحتاج للرجوع إلى *بيانات*، استخدم المعرفة.
|
|
|
|
---
|
|
|
|
## الأسئلة الشائعة
|
|
|
|
<AccordionGroup>
|
|
<Accordion title="هل أحتاج لتعيين المهارات والأدوات معًا؟">
|
|
يعتمد على حالة الاستخدام. المهارات والأدوات **مستقلتان** — يمكنك استخدام أيّ منهما أو كليهما أو لا شيء.
|
|
|
|
- **مهارات فقط**: عندما يحتاج الوكيل خبرة لكن لا يحتاج إجراءات خارجية (مثال: الكتابة بإرشادات أسلوبية)
|
|
- **أدوات فقط**: عندما يحتاج الوكيل إجراءات لكن لا يحتاج منهجية خاصة (مثال: بحث بسيط على الويب)
|
|
- **كليهما**: عندما يحتاج الوكيل خبرة وإجراءات (مثال: تدقيق أمني بقوائم تحقق محددة وقدرة على فحص الكود)
|
|
</Accordion>
|
|
|
|
<Accordion title="هل توفر المهارات أدوات تلقائيًا؟">
|
|
**لا.** حقل `allowed-tools` في SKILL.md هو بيانات وصفية تجريبية فقط — لا يُنشئ أو يحقن أي أدوات. يجب عليك دائمًا تعيين الأدوات بشكل منفصل عبر `tools=[]` أو `mcps=[]` أو `apps=[]`.
|
|
</Accordion>
|
|
|
|
<Accordion title="ماذا يحدث إذا عيّنت نفس المهارة على كل من الوكيل والطاقم؟">
|
|
المهارة على مستوى الوكيل لها الأولوية. يتم إزالة التكرار حسب الاسم — مهارات الوكيل تُعالج أولاً، لذا إذا ظهر نفس اسم المهارة في كلا المستويين، تُستخدم نسخة الوكيل.
|
|
</Accordion>
|
|
|
|
<Accordion title="ما الحجم الأقصى لمحتوى SKILL.md؟">
|
|
هناك تحذير ناعم عند 50,000 حرف، لكن بدون حد صارم. حافظ على تركيز المهارات وإيجازها للحصول على أفضل النتائج — الحقن الكبيرة في الإرشادات قد تُشتت انتباه الوكيل.
|
|
</Accordion>
|
|
</AccordionGroup>
|