ترقية CrewAI
نظرة عامة
Section titled “نظرة عامة”تجلب إصدارات CrewAI قدرات جديدة بانتظام. يرشدك هذا الدليل خلال الخطوات العملية للحفاظ على تثبيتك محدّثًا — سواء أداة سطر الأوامر أو البيئة الافتراضية لمشروعك.
إذا كنت تبدأ من الصفر، راجع التثبيت. إذا كنت قادمًا من إطار عمل آخر، راجع الترحيل من LangGraph.
الشيئان اللذان قد ترغب في ترقيتهما
Section titled “الشيئان اللذان قد ترغب في ترقيتهما”يوجد CrewAI في مكانين على جهازك، ويتم ترقيتهما بشكل مستقل:
| ماذا | كيف يُثبَّت | كيف تتم الترقية |
|---|---|---|
أداة سطر الأوامر العامة crewai | uv tool install crewai | uv tool install crewai --upgrade |
| بيئة venv للمشروع (حيث يعمل الكود) | crewai install / uv sync | uv add "crewai[...]>=X.Y.Z" ثم crewai install |
يمكن لهما — وغالبًا ما يحدث — أن يخرجا عن التزامن. تشغيل crewai --version يُظهر إصدار سطر الأوامر. تشغيل uv pip show crewai داخل مشروعك يُظهر إصدار venv. إذا اختلفا، فهذا طبيعي؛ ما يهم بالنسبة للكود قيد التشغيل هو إصدار venv.
لماذا لا يقوم crewai install وحده بالترقية
Section titled “لماذا لا يقوم crewai install وحده بالترقية”crewai install هو غلاف رفيع حول uv sync. يُثبّت بالضبط ما يقوله ملف uv.lock الحالي — وهو لا يرفع أي قيود إصدار.
إذا كان pyproject.toml يقول crewai>=1.11.1 وقد قام ملف القفل بحلّه إلى 1.11.1، فإن تشغيل crewai install سيُبقيك على 1.11.1 للأبد، حتى وإن كان الإصدار 1.14.4 متاحًا.
للترقية فعلًا، عليك:
- تحديث قيد الإصدار في
pyproject.toml - إعادة حلّ ملف القفل
- مزامنة venv
uv add يقوم بالثلاثة في خطوة واحدة.
كيفية ترقية مشروعك
Section titled “كيفية ترقية مشروعك”# يرفع القيد ويعيد القفل في أمر واحدuv add "crewai[tools]>=1.14.4"
# يزامن venv (crewai install يستدعي uv sync تحت الغطاء)crewai install
# تحقّقuv pip show crewai# → Version: 1.14.4استبدل [tools] بأي إضافات يستخدمها مشروعك (مثلًا [tools,anthropic]). تحقّق من قائمة dependencies في pyproject.toml إن لم تكن متأكدًا.
ترقية أداة سطر الأوامر العامة
Section titled “ترقية أداة سطر الأوامر العامة”أداة سطر الأوامر العامة منفصلة عن مشروعك. قم بترقيتها عبر:
uv tool install crewai --upgradeإذا حذّرك الـ shell بشأن PATH بعد الترقية، قم بتحديثه:
uv tool update-shellهذا لا يمسّ بيئة venv الخاصة بمشروعك — لا تزال بحاجة إلى uv add + crewai install داخل المشروع.
التحقق من تزامن الاثنين
Section titled “التحقق من تزامن الاثنين”# إصدار سطر الأوامر العامcrewai --version
# إصدار venv للمشروعuv pip show crewai | grep Versionليس من الضروري أن يتطابقا — لكن إصدار venv للمشروع هو ما يهم لسلوك التشغيل.
التغييرات الجذرية وملاحظات الترحيل
Section titled “التغييرات الجذرية وملاحظات الترحيل”تتطلب معظم الترقيات تعديلات صغيرة فقط. المناطق أدناه هي تلك التي تنكسر بصمت أو بتتبعات مكدّس مربكة.
مسارات الاستيراد: tools وBaseTool
Section titled “مسارات الاستيراد: tools وBaseTool”الموقع الرسمي لاستيراد الـ tools هو crewai.tools. لا تزال المسارات القديمة تظهر في الدروس لكن يجب تحديثها.
# قبلfrom crewai_tools import BaseToolfrom crewai.agents.tools import tool
# بعدfrom crewai.tools import BaseTool, toolكلٌ من المُزخرف @tool والفئة الفرعية BaseTool يقعان في crewai.tools. AgentFinish والرموز الأخرى الداخلية للوكيل لم تعد جزءًا من السطح العام — إذا كنت تستوردها، فانتقل إلى event listeners أو callbacks الـ Task بدلًا منها.
تغييرات معاملات Agent
Section titled “تغييرات معاملات Agent”from crewai import Agent
agent = Agent( role="Researcher", goal="Find authoritative sources on {topic}", backstory="You are a careful, source-driven researcher.", llm="gpt-4o-mini", # اسم نموذج كسلسلة نصية أو كائن LLM verbose=True, # bool وليس مستوى عددي صحيح max_iter=15, # تغيّر الافتراضي بين الإصدارات — حدّده بشكل صريح allow_delegation=False,)- يقبل
llmإما اسم نموذج كسلسلة نصية (يُحلَّ عبر المزوّد المهيّأ) أو كائنLLMللتحكم الدقيق. verboseهوboolبسيط. تمرير عدد صحيح لم يعد يبدّل مستويات السجل.- تغيّرت افتراضات
max_iterبين الإصدارات. إذا توقف وكيلك بصمت عن التكرار بعد أول استدعاء tool، فحدّدmax_iterصراحةً.
معاملات Crew
Section titled “معاملات Crew”from crewai import Crew, Process
crew = Crew( agents=[...], tasks=[...], process=Process.sequential, # أو Process.hierarchical memory=True, cache=True, embedder={"provider": "openai", "config": {"model": "text-embedding-3-small"}},)- يتطلب
process=Process.hierarchicalإماmanager_llm=أوmanager_agent=. بدون أحدهما، يرفع kickoff خطأً عند التحقّق. memory=Trueمع مزوّد embedding غير افتراضي يحتاج إلى قاموسembedder— راجع إعداد الذاكرة وembedder أدناه.
الإخراج المُهيكل لـ Task
Section titled “الإخراج المُهيكل لـ Task”استخدم output_pydantic أو output_json أو output_file لإلزام نتيجة المهمة بشكل مكتوب الأنواع:
from pydantic import BaseModelfrom crewai import Task
class Article(BaseModel): title: str body: str
write = Task( description="Write an article about {topic}", expected_output="A short article with a title and body", agent=writer, output_pydantic=Article, # الفئة، وليس مثيلًا منها output_file="output/article.md",)output_pydantic يأخذ الفئة نفسها. تمرير Article(title="", body="") خطأ شائع ويفشل بخطأ تحقّق مربك.
إعداد الذاكرة وembedder
Section titled “إعداد الذاكرة وembedder”إذا كان memory=True وأنت لا تستخدم embeddings الافتراضية الخاصة بـ OpenAI، فيجب أن تمرّر embedder:
crew = Crew( agents=[...], tasks=[...], memory=True, embedder={ "provider": "ollama", "config": {"model": "nomic-embed-text"}, },)ضع بيانات اعتماد المزوّد المعنيّة (OPENAI_API_KEY, OLLAMA_HOST, إلخ) في ملف .env. مسارات تخزين الذاكرة محلية بالنسبة للمشروع افتراضيًا — احذف مجلد ذاكرة المشروع إذا غيّرت embedders، لأن الأبعاد لا تختلط.