mirror of
https://github.com/crewAIInc/crewAI.git
synced 2026-07-03 14:09:24 +00:00
* feat: adopt directory-based docs versioning with Edge channel Switch docs.crewai.com from navigation-only versioning (every version selector entry rendered the same docs/<lang>/* source files) to Mintlify's directory-based versioning so each version selector entry renders its own snapshot. Add an "Edge" channel under docs/edge/<lang>/* that always reflects main HEAD for unreleased work, eliminating pre-release leakage onto frozen release labels. External links to canonical /<lang>/* URLs are preserved via wildcard redirects that always land on the current default version. Layout: - docs/edge/<lang>/* rolling source (you edit here) - docs/edge/enterprise-api.*.yaml - docs/v<X.Y.Z>/<lang>/* frozen, immutable snapshots - docs/v<X.Y.Z>/enterprise-api.*.yaml - docs/images/ shared, append-only - docs/docs.json nav + redirects URLs follow the Mintlify-idiomatic shape: /edge/<lang>/<page> for Edge, /v<X.Y.Z>/<lang>/<page> for every frozen snapshot. The wildcard redirects /<lang>/:slug* -> /<default>/<lang>/:slug* keep stale links working, and every freeze rewrites them (plus all per-section/per-page redirects) so destinations always resolve to the current default without depending on a second redirect hop. Release flow integration (devtools release): - New module crewai_devtools.docs_versioning.freeze() materialises docs/v<X.Y.Z>/ from docs/edge/, rewrites openapi: refs inside the snapshot, inserts the version into every language block in docs.json, and refreshes all redirect destinations. - _update_docs_and_create_pr() in cli.py now calls that freeze during Phase 2 of devtools release. Edge changelogs are updated first (so the snapshot freeze picks them up), then the snapshot is staged alongside docs.json, branched as docs/freeze-v<X.Y.Z>, and the PR is titled [docs-freeze] docs: snapshot and changelog for v<X.Y.Z> — the title prefix the new CI guard reads. - The PR still gates tag, GitHub release, PyPI publish, and the enterprise release as before; no new PRs are added. - Pre-releases (1.X.YaN, 1.X.YbN, ...) skip the snapshot — they ride Edge — and the docs PR title omits the [docs-freeze] prefix. - docs_check (AI-generated docs scaffolding) writes to docs/edge/<lang>/* so newly-generated unreleased docs land in Edge and never accidentally touch a frozen snapshot. Migration scripts (one-shot): - scripts/docs/freeze_historical_versions.py reconstructs all 16 historical snapshots (v1.10.0 .. v1.14.7) from git tags via git archive | tar, rewriting openapi: MDX refs so each snapshot reads its own enterprise-api YAML rather than the live one. - scripts/docs/prefix_version_paths.py one-shot-migrates docs.json: rewrites every page path in 16 versioned blocks to point under docs/v<X.Y.Z>/, inserts a new Edge entry per language, tags v1.14.7 as Latest (default), prunes pages whose target file doesn't exist in the snapshot (e.g. docs/ar/ didn't exist before v1.12.0), and writes the wildcard + per-section redirects. - scripts/docs/freeze_current_edge.py is now a thin CLI wrapper around docs_versioning.freeze for manual one-off freezes (e.g. retroactively snapshotting a forgotten release). CI guards (.github/workflows/docs-snapshots.yml): - Frozen snapshots under docs/v[0-9]*/ are immutable; only PRs whose title contains [docs-freeze] (i.e. release-cut PRs generated by devtools release or the manual wrapper) may modify them. - Images under docs/images/ are append-only since snapshots share a single image directory. Deleting or renaming an image breaks every historical snapshot that still references it. Restored docs/images/crewai-otel-export.png from PR #3673; it was deleted in PR #4908 but v1.10.0 / v1.10.1 snapshots still reference it. Restoring instead of editing the snapshots preserves historical rendering fidelity and validates the new append-only rule retroactively. Tests: - lib/devtools/tests/test_docs_versioning.py covers the freeze: file copy, openapi rewrite, version insertion, default demotion, redirect upserts, per-section redirect rewriting, idempotency, and invalid inputs. Verified locally with mintlify broken-links: 0 broken links across the full site (Edge + 16 frozen versions, 4 locales). AGENTS.md (repo root) is the contributor guide for the new model; RELEASING.md is the release-cut runbook; README's Contribution section links to both. Co-authored-by: Cursor <cursoragent@cursor.com> * style: resolve linter issues --------- Co-authored-by: Cursor <cursoragent@cursor.com>
307 lines
14 KiB
Plaintext
307 lines
14 KiB
Plaintext
---
|
|
title: المهارات
|
|
description: حزم المهارات المبنية على نظام الملفات التي تحقن خبرة المجال والتعليمات في إرشادات الوكلاء.
|
|
icon: bolt
|
|
mode: "wide"
|
|
---
|
|
|
|
## نظرة عامة
|
|
|
|
المهارات هي مجلدات مستقلة توفر للوكلاء **تعليمات وإرشادات ومواد مرجعية خاصة بالمجال**. تُعرّف كل مهارة بملف `SKILL.md` يحتوي على بيانات وصفية YAML ومحتوى Markdown.
|
|
|
|
عند التفعيل، يتم حقن تعليمات المهارة مباشرة في إرشادات مهمة الوكيل — مما يمنح الوكيل خبرة دون الحاجة لأي تغييرات في الكود.
|
|
|
|
<Note type="info" title="المهارات مقابل الأدوات — التمييز الأساسي">
|
|
**المهارات ليست أدوات.** هذه هي نقطة الارتباك الأكثر شيوعًا.
|
|
|
|
- **المهارات** تحقن *تعليمات وسياق* في إرشادات الوكيل. تخبر الوكيل *كيف يفكر* في مشكلة ما.
|
|
- **الأدوات** تمنح الوكيل *دوال قابلة للاستدعاء* لاتخاذ إجراءات (البحث، قراءة الملفات، استدعاء APIs).
|
|
|
|
غالبًا ما تحتاج **كليهما**: مهارات للخبرة، وأدوات للإجراء. يتم تكوينهما بشكل مستقل ويُكمّلان بعضهما.
|
|
</Note>
|
|
|
|
---
|
|
|
|
## البداية السريعة
|
|
|
|
### 1. إنشاء مجلد المهارة
|
|
|
|
```
|
|
skills/
|
|
└── code-review/
|
|
├── SKILL.md # مطلوب — التعليمات
|
|
├── references/ # اختياري — مستندات مرجعية
|
|
│ └── style-guide.md
|
|
└── scripts/ # اختياري — سكربتات قابلة للتنفيذ
|
|
```
|
|
|
|
### 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"], # يمكنه إرسال رسائل بريد وتحديث التذاكر
|
|
)
|
|
```
|
|
|
|
---
|
|
|
|
## المهارات على مستوى الطاقم
|
|
|
|
يمكن تعيين المهارات على الطاقم لتُطبّق على **جميع الوكلاء**:
|
|
|
|
```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>
|