دليل التغييرات الهامة Python 2026

يسرد هذا المستند جميع التغييرات الهامة في إصدارات Python منذ بداية 2026، بما في ذلك التغييرات العاجلة والتحسينات الهامة التي قد تؤثر على التعليمات البرمجية الخاصة بك. يتم وضع علامة على كل تغيير على أنه:

  • 🔴 التعطل — يتطلب تغييرات في التعليمات البرمجية للترقية
  • 🟡 التحسين - إمكانية جديدة أو تحسين؛ التعليمات البرمجية الموجودة تستمر في العمل

يتتبع هذا المستند التغييرات الهامة Python عبر جميع إصدارات 2026، لذا يرجى الرجوع إليه عند الترقية بين الإصدارات للتأكد من عدم تفويت أي تغييرات مهمة. للحصول على إرشادات ترقية مفصلة حول مواضيع محددة (على سبيل المثال، ترحيل الخيارات)، راجع أدلة الترقية المرتبطة أو العلاقات العامة المرتبطة.


غير تم الإصدار

لم يتم توثيق أي تغييرات كبيرة بعد Python 1.23.0.


python-1.23.0 (22 أكتوبر 2026)

ملاحظات الإصدار:python-1.23.0

🔴 تستخدم عمليات تكامل MCP دورة حياة عميل MCP SDK 2.x

PR:#9236

يتطلب mcp>=2.2.0,<3 إطار عمل العامل الآن دعم MCP ويوجه العمليات القياسية من خلال MCP SDK عالي المستوى Client. يمكن هذا التغيير SDK من إدارة التفاوض على البروتوكول، ومعالجة الطلبات متعددة الرحلات ذهابا وإيابا، واستجابات ذاكرة التخزين المؤقت، وإدارة الاشتراكات.

بالنسبة للاتصالات المملوكة لإطار العمل، استمر في التمرير url= أو command= إلى MCPStreamableHTTPTool أو MCPStdioTool. عندما يمتلك التطبيق الخاص بك الاتصال، أدخل mcp.Client قبل إنشاء الأداة ومررها من خلال mcp_client=. احتفظ بالعميل الذي تم إدخاله للعامل الكامل أو تشغيل سير العمل.

الكائنات التي يوفرها ClientSession المتصل ومسارات MCPTool.session التوافق المهملة. لا يتلقون تخزينا مؤقتا عالي المستوى أو سلوكا تلقائيا متعدد الرحلات ذهابا وإيابا. تمت إزالة نقل WebSocket، ومهام MCP غير مدعومة حاليا، ويتم إهمال أخذ العينات التي بدأها الخادم. للحصول على أمثلة الترحيل، راجع الترحيل إلى MCP 2.x.


🔴 تتطلب نقاط النهاية AG-UI وضع ملكية تخويل صريح

PR:#9413

يجب أن يختار كل add_agent_framework_fastapi_endpoint(...) تسجيل الآن وضع ملكية تخويل واحد:

  • توفير authorization_scope_resolver الخدمات المصادق عليها أو المشتركة.
  • احتفظ بمسار snapshot_scope_resolver توافق موثوق به موجود.
  • تعيين single_user=True فقط للتطبيقات المحلية أو أحادية المستخدم.

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


🔴 وسيطات Docker shell الإضافية غير آمنة بشكل صريح

PR:#9453

أعد تسمية DockerShellTool(extra_run_args=...) إلى DockerShellTool(unsafe_extra_run_args=...). يتم إلحاق القيم حرفيا بأمر وقت تشغيل الحاوية، ويمكن أن تضعف العزلة أو تتجاوزها، ويجب ألا تأتي أبدا من إخراج النموذج أو إدخال غير موثوق به آخر. تفضل خيار منشئ مخصص DockerShellTool عند وجود واحد.


🟡 يمكن ل A2A إعادة توجيه سياق التشغيل المدرج في القائمة المسموح بها

PRs:#9192, #9193

A2AAgent(forwarded_kwargs=[...]) يمكنه إرسال محدد متوافق مع function_invocation_kwargs JSON وفي client_kwargs بيانات تعريف طلب A2A. A2AExecutor يتحكم بشكل مستقل في ما تقبله الخدمة من خلال accepted_function_invocation_kwargs و accepted_client_kwargs. كلا الجانبين الافتراضي لإعادة توجيه أو قبول أي شيء.


🟡 يمكن للوكلاء التسلسليين إضافة منعطف متابعة متوافق مع الموفر

PR:#8779

اضبط ensure_trailing_user_turn=True على SequentialBuilder أو AgentExecutor عندما يقوم موفر إكمال الدردشة بإرجاع استجابة فارغة للإدخل تنتهي برسالة مساعدة. يقوم الخيار بإلحاق متابعة مستخدم اصطناعية للادعاء فقط والإعدادات الافتراضية إلى False.


🟡يتوسع دعم Python 3.15 إلى Hyperlight و A2UI و DuckDB

يضيف Python 1.23 مسارات تبعية متوافقة مع Python 3.15 ل Hyperlight 0.8 وواجهة AG-UI A2UI الإضافية وDageDB 2.x. لا يزال التثبيت القياسي agent-framework يحذف Redis على Python 3.15، وتظل تعبيرات Power Fx التعريفية غير متوفرة على Python 3.14 و3.15.


🟡 تسميات دورة حياة الحزمة مستقلة عن حزمة التعريف

تقوم الحزمة الجذر agent-framework بتثبيت كل من التكاملات المستقرة ودورة حياة الإصدار التجريبي. في مجموعة 1.23، يتم إصدار حزم Core وOpenAI و Foundry و AG-UI و التعريفية GitHub Copilot و Orchestrations. يمكن أن تظل الحزم الأخرى المضمنة في حزمة التعريف هي alpha أو beta. استخدم جدول حالة حزمة Python بدلا من الاستدلال على الثبات من ما إذا كان pip install agent-framework يتضمن حزمة.


🟡مهارة منشئ Python القابلة للتكوين لوكلاء الترميز

PR:#9374

يتضمن Python 1.23 مهارة المستهلك العامة Microsoft الحفاظ عليهاagent-framework-builder-python. يمكن لوكلاء الترميز المتوافقين تثبيته لتحميل إرشادات مركزة لإنشاء تطبيقات Python إطار عمل العامل ومراجعتها وتقييمها ودمجها واستضافةها. المهارة ليست حزمة PyPI ولا يتم تحميلها في وقت تشغيل إطار عمل العامل.

للتثبيت وإرشادات العميل المدعومة ومثال المطالبات، راجع إنشاء تطبيقات إطار عمل العامل مع وكلاء الترميز.


python-1.22.0 (15 أكتوبر 2026)

ملاحظات الإصدار:python-1.22.0

🔴 يتم دمج ملكية تنفيذ المحتوى وبيانات التعريف ودمج الدفق

PR:#8886

Content يستخدم Python الآن حقول من الدرجة الأولى لسلوك إطار العمل. يقوم محتوى استدعاء الدالة hostedبتسلسل ؛ قم بتعيينه إلى True عندما ينفذ الموفر أو الخدمة المكالمة. server_name يصف حد الخادم ولكنه لا يتحكم في التنفيذ. تستخدم بيانات التعريف المملوكة لإطار العمل والموفر الآن مساحات أسماء من مستوى additional_properties واحد مثل coreو openaifoundryو وa2a.

يجب تعيين merge_mode="append" محولات الدفق ل deltas وللمحتوى merge_mode="replace" الموثوق به أو لقطات الرسائل. يستهلك التجميع هذه الإرشادات، بما في ذلك استبدال محتويات الرسائل غير المتجانسة على مستوى التحديث.

قم بترقية الذاكرة الأساسية والموفرين ومحولات البروتوكول وحزم واجهة المستخدم والمضيفين معا. يقرأ وقت التشغيل الجديد مواقع بيانات التعريف والقديمةserver_label، ولكن أوقات التشغيل القديمة ترفض الحقول و merge_mode المتسلسلة hosted حديثا. لا تقم بالتراجع أو تشغيل العمال القدامى والجديدين مقابل نفس جلسة العمل أو مخزن المحفوظات المستمر بعد كتابة السجلات الجديدة.


🟡يتم دعم Python 3.15، ويتم إهمال Python 3.10

PR:#9363

تدعم حزم إطار عمل العامل المتوافقة الآن Python 3.15. لا يزال Python 3.10 مدعوما ومختبرا لهذا الإصدار، ولكنه مهمل بشكل بسيط لأن Python 3.10 وصلت إلى نهاية العمر الافتراضي. استخدم Python 3.11 أو أحدث للبيئات الجديدة.

في 1.22، حذف التثبيت القياسي agent-framework Redis وHyperlight على Python 3.15، ولم يكن AG-UI A2UI الإضافي متوفرا. Python 1.23 يزيل قيود Hyperlight و A2UI ويضيف دعم DuckDB. لا يزال Redis محذوفيا، وتظل قيم Power Fx التعريفية غير تقييم مع تحذير في Python 3.14 و3.15.


python-1.21.0 (8 أكتوبر 2026)

ملاحظات الإصدار:python-1.21.0

🟡 يدعم عملاء OpenAI الحد الأقصى من الجهد المنطقي

PR:#8857

يمكن للعملاء المتوافقين مع OpenAI طلب إعداد الحد الأقصى من جهد المنطق للموفر عندما يدعمه النموذج المحدد.


🟡 يتوفر تخزين متجهات قاعدة بيانات Oracle AI كموصل ألفا

PR:#8676

agent-framework-oracle تضيف الحزمة تخزين متجه أصلي لقاعدة بيانات Oracle AI. الحزمة في alpha ويتم تثبيتها بشكل منفصل عن حزمة agent-framework التعريف.


🟡 تظل الجلسات المملوكة لموفر الخدمة معزولة عند تشغيل الوكلاء كأدوات

PR:#8853

يتم عزل حالة جلسة عمل الموفر GitHub Copilot عند استدعاء عامل واحد كأداة بواسطة عامل آخر. يمنع هذا العزل محادثة خارجية من إعادة استخدام جلسة الخدمة المملوكة لموفر الوكيل المتداخل عن طريق الخطأ.


python-1.20.0 (2 أكتوبر 2026)

ملاحظات الإصدار:python-1.20.0

🔴 يتم تعيين استدعاءات Foundry افتراضيا إلى JSON وSSE المؤطرة

PR:#8894

InvocationsHostServer يقوم الآن بإرجاع النجاح غير المتدفق بدلا {"response": "..."} من النص العادي. يستخدم الدفق الآن الأحداث المرسلة من الخادم المؤطرة: delta لتحديثات النص، done وبعد الانتهاء من الاستجابة النهائية وحفظها AgentSession ، وللفشل error . يمكن أن يصدر الدفق دلتا قبل حدوث خطأ، لذا تعامل مع done، وليس دلتا، كإكمال ناجح.

تحديث العملاء لتحليل JSON وSSE. في session_iddone حدث هو معرف مسار بيئة الاختبار المعزولة للنظام الأساسي، وليس المتسلسل AgentSession.session_id. يتم تسلسل طلبات جلسة العمل نفسها داخل عملية مضيف واحدة فقط، ولا يزال من الممكن حدوث تعارض حالة عبر العمليات بعد تأثيرات الأداة الخارجية.

يمكن للمتصلين الحاليين تعيين legacy_wire_format=True مؤقتا للحفاظ على استجابة النص العادي الناجحة القديمة ودفق مجموعة النص الخام. وضع التوافق مهمل ولا يرجع حالات الفشل كنص ناجح. يمكن للتطبيقات أيضا قبول حمولات مخصصة مع parse_requestInvocationRun إرجاع خيارات المتصل وتصفيتها باستخدام prepare_options؛ يتحقق المضيف من صحة عناصر التحكم المحجوزة بعد الوصل. للحصول على التفاصيل، راجع Foundry Hosted Agents.


🔴 تتطلب سمات كائن سير العمل التعريفي أسماء آمنة

PR:#8893

Python حالة سير العمل التعريفية المستقلة WorkflowState والمنشأة من المصنع تستخدم الآن نفس نهج سمة الكائن. عندما يجتاز مسار ملاحظ نقطة كائن Python، يجب أن يتطابق [A-Za-z][A-Za-z0-9_]*كل مقطع سمة مع . يقوم مقطع غير آمن، مثل _privateأو display-nameأو قيمة ذات مسافة بيضاء زائدة، بإرجاع البحث الافتراضي دون الوصول إلى السمة .

لم تتغير مفاتيح القاموس. على سبيل المثال، Local.obj._private لم يعد يقرأ سمة كائن، بينما Local.bag._private لا يزال يقرأ "_private" المفتاح عندما Local.bag يكون قاموسا. عرض سمات الكائن العام التي تطابق النمط المدعوم، أو تخزين الأسماء غير المنتظمة، بما في ذلك UUIDs والقيم الواصلة، كمفاتيح قاموس. للحصول على التفاصيل، راجع مسارات سمة الكائن.


🔴 تفصل استضافة استجابات Foundry المحفوظات والتخزين وتنفيذ الخلفية

PR:#8794

ResponsesHostServer يتعامل الآن مع حقل المتصل store ومخزن الاستجابة الخارجي ومحفوظات النموذج وتنفيذ الخلفية الأصلية للموفر كخيارات منفصلة. أعد تسمية وسيطة الدالة store= الإنشائية إلى response_store=. يظل الاسم القديم اسما مستعارا مهمل ولا يعين سلوك التخزين لكل طلب للمتصل.

راجع التكوين الخاص بك history_source . يقوم الوضع الافتراضي "agent_server" بإعادة بناء نسخة الاستجابات الخارجية وتعطيل تخزين انتقال البيانات من الخادم. استخدم "service" لمتابعة جلسة عمل موفر تخزين خاصة، أو "agent" للاحتفاظ بموفر محفوظات مملوك للوكيل أو تخزين انتقال البيانات من الخادم افتراضيا. الطلبات التي store=false لم تعد تكتب الحالة المدارة من قبل المضيف أو محفوظات خدمة انتقال البيانات من الخادم.

يتطلب history_source="service" التحقق من الخلفية الأصلية لموفر الخدمة الآن و background_source="provider". التوجيه غير متوفر مؤقتا، وتمكين steerable_conversations عمليات الرفع RuntimeError أثناء بناء المضيف. للحصول على تفاصيل الترحيل والتكوين، راجع عوامل Foundry المستضافة.


🔴 يستخدم GOOGLE_* Gemini الإعدادات ويضيف Embedding 2

PR:#8798

GeminiChatClient لم يعد يقرأ GEMINI_API_KEY أو GEMINI_MODEL، ويتم GeminiSettings إزالة التصدير. أعد تسمية التكوين إلى GOOGLE_API_KEY و GOOGLE_MODEL، أو مرر القيم بشكل صريح. تكوين عمليات التضمين باستخدام GOOGLE_EMBEDDING_MODEL.

الإعدادات الافتراضية الجديدة GeminiEmbeddingClient إلى gemini-embedding-2. تتطلب استدعاءات تضمين النص نوع مهمة صريح، مثل RETRIEVAL_DOCUMENT الفهرسة والبحث RETRIEVAL_QUERY . تقبل عمليات رفع المتجهات وعمليات البحث وأدوات البحث التي تم إنشاؤها الآن خيارات التضمين لكل عملية، بينما تظل أبعاد حقل المتجهات موثوقة.

للحصول على الإعداد والأمثلة، راجع تكامل متجرGoogle Gemini و Vector.


🔴 تستخدم جلسات استدعاء Foundry الآن التخزين المستمر

PR:#8593

InvocationsHostServer الآن يحفظ الحالة المتسلسلة AgentSession من خلال AgentSessionStoreProvider بدلا من الاحتفاظ بعناصر جلسة العمل المباشرة العشوائية لمدة بقاء العملية. يستخدم الموفر الافتراضي تخزين Foundry عند استضافته وتخزين مدعوم بالملفات محليا، مع مخزن منطقي منفصل invocation_sessions .

اجعل حالة جلسة العمل المخصصة قابلة للتسلسل، وسجل برامج الترميز للأنوع المخصصة باستخدام register_state_type(). لا تحتفظ الحالة المستعادة بهوية الكائن Python. تنتهي صلاحية المتاجر الافتراضية الجديدة بعد 30 يوما من كتابتها الأخيرة؛ يتحكم الموفرون المخصصون في الاستبقاء. تنسيق الطلبات المتداخلة لنفس جلسة العمل، واستخدام جذور تخزين محلية منفصلة أو موفري لتطبيقات مستقلة. للحصول على التفاصيل، راجع Foundry Hosted Agents.


🔴 تتطلب الموافقات على الأدوات المحلية جلسة الإصدار

PR:#8750

يأذن المحلي function_approval_response الآن باستدعاء أداة فقط عندما يتطابق مع طلب موافقة معلق مسجل في نفس الموثوقية AgentSession. مرر نفس جلسة العمل إلى التشغيل الذي ينتج طلب الموافقة والتشغيل الذي يستأنفه. بدون تلك الجلسة، يسقط إطار العمل الاستجابة غير المحدودة ويسجل تحذيرا.

الموافقات المستضافة والمحادثات التي تمت إعادة تشغيلها والتي تحتوي مكالمات أدواتها بالفعل على نتائج طرفية لم تتغير. اضبط disable_approval_response_binding=True فقط عندما يفرض تطبيقك ربطا مكافئا قبل وصول الرسائل إلى العامل. للحصول على التدفق الموصى به المدعوم بجلسة العمل، راجع الموافقة على الأداة.


🔴 يجب أن تستخدم نصوص الموافقة المستمرة عناصر التحكم في الموافقة المكتوبة

PR:#8579

يتعامل Python الآن مع كل تطابق على function_result أنه طرفي، بغض النظر عن نصه. لم تعد النتيجة التي تحتوي على [APPROVAL_PENDING] تمثل موافقة معلقة ولا يمكنها الاحتفاظ بسلطة الموافقة قابلة لإعادة التشغيل.

إذا استمر تطبيقك أو أعاد تشغيل النسخ عديمة الحالة يدويا، فقم بإزالة المحتوى الاصطناعي المعلق function_result . تمثيل العمل المعلق مع حالة معلقة موثوقة وعناصر تحكم مكتوبة function_approval_request . احتفظ بنتائج الدالة المكتملة الفعلية في المحفوظات، حتى عندما يحدث أن يحتوي نصها على [APPROVAL_PENDING].


🔴 يتم الآن فصل سياق وقت تشغيل MCP ورؤوس الموافقة

PR:#8589

استدعاءات أداة MCP التي تم إنشاؤها Python تعطي header_provider الآن وسيطات الكلمة الأساسية لوقت تشغيل المضيف الموثوق به فقط. لم تعد وسيطات الأدوات التي يوفرها النموذج تتدفق إلى الموفر، حتى عند اصطدام الأسماء. انقل إدخالات الرأس إلى function_invocation_kwargsأو إغلاق الموفر أو ContextVar. إذا كانت الأداة تتصل قبل تشغيل يوفر قيم وقت التشغيل، فاستخدم إغلاقا أو مصدر وقت إنشاء آخر.

لم يعد التنفيذ التعريفي InvokeAzureAgent ينسخ سير العمل الخارجي وحقيبة الكلمات الأساسية للعميل في additional_function_arguments. تمرير وسيطات الأداة بشكل صريح في خيارات العامل عندما تحتاجها الأداة.

بالنسبة للإجراءات التعريفية InvokeMcpTool التي تتطلب الموافقة، يربط وقت التشغيل الآن العناوين التي تم تقييمها بالموافقة. ينتج عن بيانات الاعتماد التي تم تغييرها أو العناوين التي تم تغييرها أو الموافقات القديمة غير المنضمة أو حالة التحقق المفقودة طلب موافقة بديل بمعرف طلب جديد قبل الإرسال. معالجة طلب الاستبدال وحماية تخزين نقطة التحقق لسير العمل. للحصول على التفاصيل، راجع مصادقة MCP المحليةوأدوات MCP التعريفية.


🔴 حالة PowerFx التعريفية ترفض الدورات وتفرض حدود الاجتياز

PR:#8511

Python ترفض مهام سير العمل التعريفية الآن الحالة الدورية وتفرض حدودا ثابتة لكل اجتياز للحالة: العمق 64 مع الجذر في العمق 0، و10000 قيمة تمت زيارتها، و1048576 حرف سلسلة تجميعية وبايت ثنائي. يتم حساب المراجع والأسماء المستعارة المتكررة في كل مرة. تظهر ValueError الانتهاكات أثناء كتابة الحالة أو اللقطات أو تحويل PowerFx.

قم بإزالة الدورات وتقليل القيم ذات الحجم الزائد أو تقسيمها قبل كتابتها إلى حالة سير العمل. تطبيق حدود منفصلة على تنفيذ تعبير PowerFx وربطات النسخ أو التحويل المعرفة من قبل التطبيق لأن حدود الاجتياز لا تربطها. للحصول على التفاصيل، راجع حدود اجتياز حالة PowerFx.


🔴 تتطلب طلبات HTTP لسير العمل عناوين URL مطلقة ل HTTP(S)

PR:#8588

DefaultHttpRequestHandler يرفض Python الآن عناوين URL النسبية وغير HTTP(S). يقوم بتطبيع عنوان URL وإنشاء استعلامه قبل استدعاء client_provider. يتلقى الموفر عنوان URL الذي تم تكوينه في info.url و فارغ info.query_parameters. يتم الاحتفاظ بترتيب استعلام URL الحالي وبايتاته، ولا تزال الإعدادات الافتراضية المحددة للعميل تنطبق، وتظل عمليات إعادة التوجيه خاضعة للتحكم من قبل العميل.

استخدم عناوين URL المطلقة لسير عمل HTTP أو HTTPS. تحديث الموفرين لفحص info.url بدلا من قراءة info.query_parameters، وتكوين الإعدادات الافتراضية وسلوك إعادة التوجيه على الذي تم إرجاعه httpx.AsyncClient. للحصول على التفاصيل، راجع HttpRequestAction.


python-1.19.0 (18 سبتمبر 2026)

ملاحظات الإصدار:python-1.19.0

🔴 أرشيفات مهارة MCP هي ZIP فقط، ويتم إهمال أخذ العينات

PRs:#8290، #8401

يجب أن تستخدم أرشيفات مهارة MCP تنسيق ZIP. يتم تخطي تنسيقات TAR و .tar.gz.tgzو و وغيرها من تنسيقات الأرشيف. أخذ عينات MCP التي بدأها الخادم ويتم sampling_callback إهمالها؛ يجب أن تستدعي خوادم MCP واجهات برمجة التطبيقات لموفر النموذج مباشرة.


PR:#8371

لم يعد عملاء HTTP المملوكين لإطار العمل والمتصلين يعنيان نفس سلوك ملف تعريف الارتباط. توفير عميل HTTP مكون ونطاقه عندما يتطلب A2A أو AG-UI أو MCP أو التكامل التعريفي ملفات تعريف ارتباط المصادقة أو ملفات تعريف ارتباط الجلسة أو ترابط موازن التحميل.


🔴 تتضمن مفاتيح محفوظات Redis هوية الموفر والجلسة

PR:#8236

يقوم موفر محفوظات Redis بيتا الآن بتحديد نطاقات المفاتيح المستمرة بواسطة كل من الموفر وهوية الجلسة. راجع بيانات Redis الحالية ومتطلبات الترحيل قبل ترقية التطبيقات التي تعتمد على تخطيط المفتاح السابق.


🟡 توسيع واجهات برمجة التطبيقات والموصلات المشتركة لمتجر المتجهات

يضيف Python 1.19 بروتوكولات مخزن متجهات عامة وموصلات أصلية ل MongoDB Azure DocumentDB Azure Cosmos DB NoSQL. للحصول على دورة حياة الحزمة الحالية وتفاصيل القدرة، راجع تكاملات مخزن المتجهات.


python-1.18.0 (10 سبتمبر 2026)

ملاحظات الإصدار:python-1.18.0

🔴 يتم تثبيت المختبر بشكل منفصل، ويدعم Foundry Projects 2.6

PR:#8188

agent-framework ولم agent-framework-core[all] يعد تثبيت الحزمة التجريبية agent-framework-lab . قم بتثبيت كل وحدة معملية بشكل صريح.

pip install "agent-framework-lab[gaia]"
pip install "agent-framework-lab[tau2]"
pip install "agent-framework-lab[lightning]"

يحل المختبر الآن تبعياته التجريبية بشكل مستقل عن حزم إطار عمل العامل التي تم إصدارها. agent-framework-foundry تدعم azure-ai-projects>=2.2.0,<2.7.0 الحزمة الإصدار المتوافق مع agent-framework-openai OpenAI 3 وتستخدمه. يتيح هذا الفصل لتطبيقات Foundry استخدام Azure مشاريع الذكاء الاصطناعي من 2.4 إلى 2.6 دون تجاوز قيود التبعية المتوافقة مع OpenAI 2 في المختبر.


🔴GitHub Copilot خطافات ملفات مساحة العمل هي الاشتراك

PR:#7517

GitHubCopilotAgent لم يعد يتم تحميل .github/hooks/ من دليل العمل بشكل افتراضي. تمكين الخطافات لدليل عمل تثق به فقط.

from agent_framework.github import GitHubCopilotAgent, GitHubCopilotOptions

agent = GitHubCopilotAgent(
    default_options=GitHubCopilotOptions(enable_file_hooks=True),
)

تعمل خطافات الملفات على تشغيل الأوامر على المضيف ولا تكون مسورة بواسطة on_permission_request أو عمليات رد اتصال أخرى للموافقة على الأدوات. عند وجود خطافات وحذف enable_file_hooks، يقوم العامل افتراضيا بتسجيل False تحذير مرة واحدة. يؤدي الإعداد enable_file_hooks=False بشكل صريح إلى تعطيل الخطافات دون هذا التحذير. للحصول على إرشادات التكوين، راجع التحكم في خطافات ملف مساحة العمل.


🔴 يستخدم التخزين المدعوم بالملفات تسوية المسار المشترك

PR:#8123

تشتق الآن الجلسات المدعومة بالملفات والذاكرة وتخزين المهام أسماء المجلدات من خلال تعيين مفتاح تخزين مشترك واحد. قد يتم حل المعرفات والنطاقات التي تحتوي على أحرف كبيرة أو فواصل مسارات أو Unicode أو أحرف أخرى غير آمنة إلى موقع مختلف بعد الترقية.

لا يتم نقل البيانات الموجودة تلقائيا. إذا كنت بحاجة إلى الاحتفاظ به، قم بترحيل الملفات أو الدلائل القديمة إلى الموقع المشتق حديثا. تعامل FileMemoryProvider.scope كمفتاح مساحة اسم مبهم واحد، وليس كمسار متداخل. على سبيل المثال، tenants/alice يتم تعيين إلى مجلد مشفر واحد.

TodoFileStore يستخدم التعيين المشترك لمعرفات المالك، ولكنه يرفض معرفات الجلسة التي تحتوي على / أو \. يمكنك تحديد معرفات جلسة العمل هذه قبل ترحيل بيانات المهام.


🔴 SecretString لم يعد يرث من str

PR:#8127

SecretString الآن يخفي تحويل السلسلة والتنسيق والتسلسل. لم تعد واجهات برمجة التطبيقات التي تتطلب تسلسل JSON الفعلي str، تقبل برنامج التضمين ضمنيا. استخراج القيمة بشكل صريح عند الحد الذي يتطلب بيانات الاعتماد:

قبل:

payload = json.dumps({"api_key": secret})

بعد:

payload = json.dumps({"api_key": secret.get_secret_value()})

القيمة المستخرجة هي سلسلة عادية ولم تعد محمية من التسجيل أو التنسيق العرضي.


python-1.17.0 (3 سبتمبر 2026)

ملاحظات الإصدار:python-1.17.0

🔴 تتطلب مدخلات البرامج الوسيطة تسلسلا، ويتم تثبيت Agent Hooks بشكل منفصل

PR:#7918

منشئات العامل، ومدخلات البرامج الوسيطة لكل تشغيل، create_harness_agent() ولم تعد تقبل قيمة برنامج وسيط واحد. تمرير البرنامج الوسيط كتسلسل. تظل حزمة Agent Hooks مدعومة كعنصر واحد في هذا التسلسل.

agent-framework-core[agent-hooks] تتم إزالة الميزة الإضافية. التثبيت agent-hooks-sdk مباشرة.

قبل:

agent = Agent(client=client, middleware=hooks)

بعد:

pip install agent-hooks-sdk
agent = Agent(client=client, middleware=[hooks])

python-1.16.0 (27 أغسطس 2026)

ملاحظات الإصدار:python-1.16.0

🟡 تكوين موفر OpenTelemetry البرمجي

PR:#7703

configure_otel_providers() يقبل الآن بيانات تعريف الخدمة وسمات الموارد وخيارات مصدر OTLP مباشرة. تكون لبيانات تعريف الخدمة الصريحة الأسبقية على قيم البيئة. تدمج سمات الموارد عبر سمات البيئة. تظل نقطة نهاية OTLP الخاصة بالإشارة ومتغيرات العنوان أكثر تحديدا من الإعدادات البرمجية الأساسية.


python-1.15.0 (21 أغسطس 2026)

ملاحظات الإصدار:python-1.15.0

🔴 اصطلاحات OpenTelemetry GenAI الدلالية الموحدة

PR:#7673

يستخدم إطار عمل العامل الآن أحدث سمات نطاق GenAI التجريبية بشكل افتراضي، بما في ذلك gen_ai.provider.name بدلا من gen_ai.system. تعيين OTEL_SEMCONV_STABILITY_OPT_IN إلى قيمة تحذف الرمز المميز الحساس gen_ai_latest_experimental لحالة الأحرف لتحديد سمات النطاق v1.36. يتم تحديد رسائل الإصدار 1.36 وأحداث الاختيار بشكل مستقل، وتظل ممكنة بشكل افتراضي عند التقاط البيانات الحساسة، وتستمر في استخدام gen_ai.system. قم بتعيين ENABLE_MESSAGE_EVENTS=false لمنعها.


🟡 يمكن إجهاض البرنامج الوسيط للدالة باستخدام MiddlewareFailure

PR:#7562

يمكن أن يرفع MiddlewareFailure البرنامج الوسيط للدالة عندما يجب أن يتوقف التنفيذ بدلا من أن يصبح خطأ أداة قابلا للاسترداد. تنشر حلقة استدعاء الدالة هذا الاستثناء إلى المتصل وتلغي استدعاءات الأداة التابعة أثناء الطيران. لا تلتقط هذا الاستثناء في البرامج الوسيطة لأن القيام بذلك يسمح للتشغيل بالمتابعة.

يقوم البرنامج الوسيط للعامل والدردشة بالفعل بنشر الاستثناءات العادية. استخدم MiddlewareFailure عندما تحتاج البرامج الوسيطة للدالة على وجه التحديد إلى سلوك قاتل ومغلق الفشل.


python-1.14.0 (14 أغسطس 2026)

ملاحظات الإصدار:python-1.14.0

🟡 المنطق المشفر هو الاشتراك في دردشة Foundry

PR:#7536

FoundryChatClient لم تعد الطلبات reasoning.encrypted_content بشكل افتراضي. يتجنب الإعداد الافتراضي حالات الفشل في النماذج غير المدعومة. بالنسبة إلى عمليات النشر القادرة، اشترك في .default_options={"include": ["reasoning.encrypted_content"]}


🔴 [بيتا] تنتقل حالة عامل مستضاف إلى Foundry State Store

PR:#7533

إزالة FoundrySessionStore(path) PR #7533 من حزمة بيتاagent-framework-foundry-hosting. يستخدم FoundryAgentSessionStore المضيف الآن الإعدادات الافتراضية المدعومة من Foundry State Store لجلسات العامل ونقاط التحقق من سير العمل والموافقات على الوظائف.

  • إزالة الواردات وإنشاء FoundrySessionStore.
  • اسمح ResponsesHostServer بإنشاء الموفرين الافتراضيين. للتخزين المخصص، قم بتمرير agent_session_store_providerأو checkpoint_store_providerأو function_approval_store_provider.
  • لا يتم ترحيل الحالة المدعومة بالملفات الموجودة تلقائيا.

للحصول على نموذج الموفر الحالي، راجع استمرار الحالة والتعامل مع المحادثات طويلة الأمد.


🔴 إنشاء تعريفات سير عمل وظيفية قبل تشغيلها

PR:#7521

تغييرات @workflow طلب السحب #7521 لإرجاع عديم الحالة FunctionalWorkflowDefinition. استدعاء .build() لإنشاء حالة .FunctionalWorkflow قم بإنشاء سير العمل قبل استدعاء .run() أو .as_agent()، وتمرير تخزين نقطة التحقق إلى .build().

قبل:

@workflow(checkpoint_storage=storage)
async def pipeline(data: str) -> str:
    return await process(data)

result = await pipeline.run("input")
agent = pipeline.as_agent()

بعد:

@workflow
async def pipeline(data: str) -> str:
    return await process(data)

workflow_instance = pipeline.build(checkpoint_storage=storage)
result = await workflow_instance.run("input")
agent = workflow_instance.as_agent()

إنشاء مثيل سير عمل منفصل لكل مستدعي منطقي أو جلسة عمل بحيث تظل حالة التشغيل وإعادة التشغيل معزولة.


🟡 يضيف Agent Hooks عقد اعتراض مغلق فشل

PR:#7515

يضيف إطار عمل العامل دعما تجريبيا لعقد AGENT-HOOKS-0.1 من خلال create_agent_hooks_middleware() و create_agent_hooks_middleware_from_emitter(). تغطي حزمة البرامج الوسيطة نقاط اعتراض الوكيل والنموذج والدالة مع فرض الحكم الذي تم إغلاقه بفشل، وتحويل إعادة الكتابة، والتدفق المخزن مؤقتا، والمثابرة المستندة إلى الحكم.

بالنسبة للحزمة الحالية وعقد البرامج الوسيطة، قم بتثبيت agent-hooks-sdk الحزمة التي تم إرجاعها مباشرة وتمريرها في تسلسل، مثل middleware=[hooks]. للحصول على التفاصيل، راجع خطافات العامل.


python-1.8.0 (4 يونيو 2026)

ملاحظات الإصدار:python-1.8.0

🔴 github-copilot-sdk تمت الترقية إلى الإصدار 1.0.0 مع كسر تغييرات واجهة برمجة التطبيقات

PR:#6292

ترقيات agent-framework-github-copilot PR #6292 من github-copilot-sdk 1.0.0b2 إلى إصدار 1.0.0 المستقر، والتكيف مع جميع تغييرات واجهة برمجة التطبيقات العاجلة المقدمة في إصدار GA.

  • SubprocessConfig تمت إزالتها — استخدم RuntimeConnection.for_stdio(path=...) + وسيطات الكلمة الأساسية في CopilotClient (connection, , log_levelbase_directory).
  • تم نقل مسارات الاستيراد — copilot.generated.session_events → copilot.session_events.
  • الإعدادات التي تمت إعادة تسميتها — copilot_home → base_directory; متغير البيئة الآن GITHUB_COPILOT_BASE_DIRECTORY (كان GITHUB_COPILOT_COPILOT_HOME).
  • معالجات الأذونات — استخدم أنواع القرارات الملموسة بدلا من PermissionRequestResult(kind=...). يستبدل المضمن PermissionHandler.approve_all أنماط الموافقة اليدوية.
  • معالج الرفض الافتراضي — يرجع PermissionDecisionUserNotAvailable() الآن (مطابقة السلوك الاحتياطي ل SDK).
  • نوع معالج الأذونات — يدعم الآن كلا من عمليات رد الاتصال المزامنة وغير المتزامنة (Callable[..., PermissionRequestResult | Awaitable[PermissionRequestResult]]).

قبل:

from copilot import CopilotClient, SubprocessConfig
from copilot.generated.session_events import PermissionRequest
from copilot.session import PermissionRequestResult

# Client construction
client = CopilotClient(SubprocessConfig(cli_path="/path/to/cli", log_level="debug", copilot_home="/custom/home"))

# Permission handler
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
    if request.kind == "shell":
        return PermissionRequestResult(kind="approved")
    return PermissionRequestResult(kind="denied-interactively-by-user")

# Agent
agent = GitHubCopilotAgent(default_options={"copilot_home": "/custom/home", "on_permission_request": approve_shell})

بعد:

from copilot import CopilotClient, RuntimeConnection
from copilot.generated.rpc import PermissionDecisionDeniedInteractivelyByUser, PermissionDecisionUserNotAvailable
from copilot.session import PermissionHandler, PermissionRequestResult
from copilot.session_events import PermissionRequest

# Client construction
client = CopilotClient(connection=RuntimeConnection.for_stdio(path="/path/to/cli"), log_level="debug", base_directory="/custom/home")

# Permission handler — use concrete decision types or PermissionHandler.approve_all
def approve_shell(request: PermissionRequest, context: dict[str, str]) -> PermissionRequestResult:
    if request.kind == "shell":
        return PermissionHandler.approve_all(request, context)
    return PermissionDecisionUserNotAvailable()

# Agent
agent = GitHubCopilotAgent(default_options={"base_directory": "/custom/home", "on_permission_request": approve_shell})

🟡 التعرض التدريجي للأداة عبر FunctionInvocationContext

PR:#6233

يضيف دعما لأدوات الكشف التدريجي أثناء التشغيل باستخدام FunctionInvocationContext. يمكن الآن إضافة الأدوات أو إزالتها ديناميكيا استنادا إلى نتائج الأداة السابقة داخل نفس تشغيل العامل.

للحصول على وثائق كاملة بما في ذلك الأنماط والمحاذير وأمثلة ترتيب الأدوات، راجع التحكم في توفر الأدوات.


🟡 اكتشاف المهارات المستندة إلى MCP (McpSkillsSource)

PR:#6169

McpSkillsSource يضيف إلى agent-framework-core، مما يتيح اكتشاف المهارات وتحميلها عبر خوادم MCP.


🟡 دعم الإخراج الأصلي المهيكل ل Bedrock عبر واجهة برمجة تطبيقات العكس

PR:#6052

agent-framework-bedrock الآن ينفذ دعم الإخراج المنظم الأصلي من خلال AWS بيدروك العكسي API، مما response_format يسمح للعمل مع نماذج بيدروك.


🟡 تكامل التقييمات التكيفية ل Foundry (جيل التقييم)

PR:#6101

يضيف تكامل Foundry Adaptive Evals إلى agent-framework-foundry لإنشاء التقييم التلقائي في مهام سير عمل التقييم.


🟡 تضمين حزمة العميل في Mistral AI

PR:#5480

حزمة جديدة agent-framework-mistral توفر عميل تضمين Mistral AI.


🟡 agent-framework-declarative تمت ترقيته لإصدار مرشح

PR:#6256

agent-framework-declarative تتم ترقية الحزمة من الإصدار التجريبي إلى مرحلة المرشح.


python-1.7.0 (28 مايو 2026)

ملاحظات الإصدار:python-1.7.0

🔴تعريفي: إجراءات Python فقط التي تمت إزالتها وأنواع الأسماء المستعارة التي تمت إعادة تسميتها إلى أسماء C# المتعارف عليها

PR:#6126

يزيل PR #6126 الإجراءات التعريفية Python فقط ويعيد تسمية أنواع الأسماء المستعارة لمطابقة الأسماء المتعارفة بلغة C# للتناسق عبر اللغات.

  • تتم إزالة أنواع الإجراءات التعريفية Python فقط التي لم يكن لها مكافئ C#‎.
  • تتم الآن محاذاة أنواع الأسماء المستعارة للإجراء مع اصطلاحات تسمية C#؛ تحديث ملفات YAML/JSON التعريفية الموجودة وفقا لذلك.

🟡 HarnessAgent موفر تسخير وكلاء الخلفية والخلفية

PRs:#6041, #6069

HarnessAgent يضيف إلى agent-framework-core، مما يتيح أنماط الوكيل المدعومة بتسخير لمعالجة الخلفية.


🟡 A2AAgentSession مع معرفات المهام المشار إليها والدعم المطلوب للإدخال

PR:#5980

A2AAgentSession إضافة إلى agent-framework-a2a وagent-framework-core، ودعم معرفات المهام المشار إليها والتدفق المطلوب للإدخال لتفاعلات بروتوكول A2A.


🟡 واجهات برمجة التطبيقات التجريبية لتحويل عامل المطالبة ونشرها

PR:#5959

يضيف واجهات برمجة التطبيقات التجريبية إلى agent-framework-foundry لتحويل تعريفات المطالبة إلى عوامل ونشرها برمجيا.


python-1.6.0 (21 مايو 2026)

ملاحظات الإصدار:python-1.6.0

🔴 تمكين الأجهزة بشكل افتراضي

PR:#5865

تمكن PR #5865 الأجهزة OpenTelemetry بشكل افتراضي في agent-framework-core و agent-framework-foundry.

  • يعمل العامل الآن على إصدار نطاقات القياس عن بعد تلقائيا دون الاشتراك الصريح.
  • إذا قمت مسبقا بتعطيل الأجهزة أو كان لديك مسارات بيانات تتبع الاستخدام مخصصة، فتحقق من أن السلوك الافتراضي لا يتعارض.
  • للتعطيل، مرر enable_instrumentation=False حيثما ينطبق ذلك.

قبل:

from agent_framework import Agent
from agent_framework.observability import configure_otel_providers

# Had to explicitly enable instrumentation
configure_otel_providers(enable_console_exporters=True)

agent = Agent(client=client, enable_instrumentation=True)

بعد:

from agent_framework import Agent

# Instrumentation is now on by default — no opt-in needed
agent = Agent(client=client)

# To explicitly disable:
agent = Agent(client=client, enable_instrumentation=False)

🟡 أداة Shell مع دعم تنفيذ محلي ودعم تنفيذ Docker

PR:#5664

يضيف أداة shell مضمنة إلى agent-framework-core التي تدعم كل من التنفيذ المحلي والتنفيذ القائم على Docker.


🟡حزمة موفر CodeAct جديدة agent-framework-monty

PR:#5915

يقدم الحزمة agent-framework-monty لتكامل CodeAct المدعوم من Monty (مرحلة ألفا).


python-1.4.0 (14 مايو 2026)

ملاحظات الإصدار:python-1.4.0

🔴 [واجهة برمجة تطبيقات المهارات التجريبية] محاذاة اكتشاف مجلد مهارة الملفات مع مواصفات agentskills.io

PR:#5807

تقوم PR #5807 بتحديث واجهة برمجة تطبيقات المهارات التجريبية لمحاذاة اكتشاف مجلد المهارة المستند إلى الملفات مع مواصفات agentskills.io.

  • لقد تغير منطق دقة مجلد المهارة؛ تحديث تخطيطات دليل المهارات المخصصة إذا كنت تستخدم واجهة برمجة تطبيقات المهارات التجريبية.

🔴 [واجهة برمجة تطبيقات المهارات التجريبية] استخراج بيانات تعريف مواصفات المهارة في SkillFrontmatter

PR:#5775

تنقل PR #5775 بيانات تعريف مواصفات المهارة إلى فئة بيانات مخصصة SkillFrontmatter .

  • إذا قمت بالوصول مباشرة إلى حقول بيانات تعريف المهارة، فقم بتحديث المراجع لاستخدام SkillFrontmatter السمات.

🔴 DevUI: تشديد عناصر التحكم الافتراضية في الوصول ووضع CORS

PR:#5740

يشدد PR #5740 التحكم في الوصول الافتراضي وتكوين CORS ل agent-framework-devui.

  • أصبحت أصول CORS الافتراضية الآن أكثر تقييدا.
  • إذا كان إعداد DevUI يعتمد على الوصول عبر المنشأ من المجالات المخصصة، فكون الأصول المسموح بها بشكل صريح.

🔴 A2A: الترحيل إلى a2a-sdk v1.0

PR:#5752

ترحيل agent-framework-a2a PR #5752 إلى a2a-sdk v1.0.

  • تتبع أنواع بروتوكول A2A وواجهات برمجة تطبيقات النقل اصطلاحات a2a-sdk 1.0.
  • قم بتحديث أي تعليمة برمجية تتفاعل مباشرة مع أنواع بروتوكولات A2A.

🟡 AG-UI: قناة عرض نتائج الأداة وطرح ترقية المرشح

PRs:#5762، #5844

يضيف قناة عرض نتائج الأداة إلى agent-framework-ag-ui الحزمة ويعززها لتحرير مرحلة المرشح.


python-1.3.0 (7 مايو 2026)

ملاحظات الإصدار:python-1.3.0

🔴 [واجهة برمجة تطبيقات المهارات التجريبية] إعادة هيكلة مهارات الوكيل إلى بنية متعددة المصادر

PR:#5584

يعيد PR #5584 هيكلة واجهة برمجة تطبيقات المهارات التجريبية لدعم تحميل المهارات متعددة المصادر.

  • تم تغيير تسجيل المهارات ومنطق الاكتشاف لميزة المهارات التجريبية.
  • إذا كنت تستخدم واجهة برمجة تطبيقات المهارات التجريبية، فراجع اصطلاحات التحميل متعددة المصادر الجديدة.

🟡 ClassSkill لتعريفات المهارة المستندة إلى الفئة

PR:#5678

ClassSkill يضيف إلى لتعريفات المهارات المستندة إلى agent-framework-core الفئة مع بيانات التعريف التعريفية واكتشاف الأسلوب التلقائي.


🟡 الدفاع عن حقن المطالبة بالتحكم في تدفق المعلومات

PR:#5331

يضيف آلية التحكم في تدفق المعلومات إلى agent-framework-core التي تساعد على الدفاع ضد هجمات الحقن السريع.


🟡 github-copilot-sdk تمت الترقية إلى الإصدار 1.0.0b2

PR:#5665

ترقيات agent-framework-github-copilot إلى github-copilot-sdk>=1.0.0b2، وإضافة instruction_directories، copilot_home والتكوين، وإعادة توجيه خيارات وقت التشغيل في استئناف جلسة العمل.


🟡فرض approval_mode في كلود ووكلاء GitHub Copilot

PR:#5562

agent-framework-claude والآن agent-framework-github-copilot فرض approval_mode مصمم الديكور على أدوات الوظيفة، بما يتفق مع تطبيقات الوكيل الأخرى.


🟡دعم اختيار أداة OpenAI و Gemini allowed_tools

PR:#5322

يضيف دعما لاختيار allowed_tools الأداة في agent-framework-openai، مما يسمح لك بتقييد الأدوات التي قد يستدعيها النموذج.


python-1.2.2 (29 أبريل 2026)

ملاحظات الإصدار:python-1.2.2

🔴 يتم توحيد مخرجات محطة التنسيق ك AgentResponse

PR:#5301

تقوم PR #5301 بتوحيد مخرجات محطة التنسيق كما AgentResponse ترجع Workflow.as_agent() الإجابة النهائية فقط.

  • تتبع الآن الموافقة التسلسلية (with_request_info) والتدفقات المتزامنة (intermediate_outputs=True) نفس عقد الإخراج.
  • إذا كنت تستهلك نتائج التنسيق مباشرة، فتوقع AgentResponse العناصر بدلا من النص الخام أو الأنواع المختلطة.

قبل:

# Orchestration returned mixed types (raw strings, dicts, etc.)
result = await workflow.as_agent().run("Draft a report")
text = str(result)  # had to handle various types

بعد:

# Orchestration now always returns AgentResponse
result = await workflow.as_agent().run("Draft a report")
text = result.text  # consistent AgentResponse API

🟡Azure موفر سياق فهم محتوى الذكاء الاصطناعي

PR:#4829

حزمة agent-framework-azure-contentunderstanding alpha جديدة — تحلل تلقائيا مرفقات الملفات (المستندات والصور والصوت والفيديو) وتدخل النتائج المنظمة في سياق LLM.


🟡 دعم Durable Workflow المستضاف عبر استضافة المكتشف

PR:#5531

إضافة دعم Durable Workflow المستضاف إلى agent-framework-foundry-hosting، ونشر محفوظات المحادثات الكاملة إلى وكلاء سير العمل.


python-1.1.0 (21 أبريل 2026)

ملاحظات الإصدار:python-1.1.0

🔴 CosmosCheckpointStorage إلغاء تسلسل المخلل المقيد بشكل افتراضي

PR:#5200

CosmosCheckpointStorage يستخدم الآن إلغاء تسلسل المخلل المقيد افتراضيا، سلوك المطابقة FileCheckpointStorage .

  • إذا كانت نقاط التحقق الخاصة بك تحتوي على أنواع معرفة من قبل التطبيق، فمررها عبر allowed_checkpoint_types=["my_app.models:MyState"].
  • بدون ذلك، سيؤدي إلغاء تسلسل الأنواع المخصصة إلى رفع WorkflowCheckpointException.

قبل:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

storage = CosmosCheckpointStorage(endpoint=endpoint, database="mydb", container="checkpoints")

بعد:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

storage = CosmosCheckpointStorage(
    endpoint=endpoint,
    database="mydb",
    container="checkpoints",
    allowed_checkpoint_types=["my_app.models:MyState"],
)

🟡 GeminiChatClient تمت الإضافة

PR:#4847

حزمة جديدة agent-framework-gemini مع GeminiChatClient دعم Google Gemini API وVertex AI.


🟡 حزمة Hyperlight CodeAct

PR:#5185

حزمة جديدة agent-framework-hyperlight لتنفيذ التعليمات البرمجية المستندة إلى Hyperlight CodeAct sandboxed.


🟡 دعم مربعات أدوات Foundry

PR:#5346

يضيف دعما لعلب أدوات Foundry في agent-framework-foundry، مما يتيح تكوينات الأدوات المدارة من منصة Azure للذكاء الاصطناعي.


🟡 finish_reason في AgentResponse و AgentResponseUpdate

PR:#5211

finish_reason إضافة حقل إلى AgentResponse وAgentResponseUpdate، ما يسمح للمستهلكين بالتحقق من سبب توقف النموذج عن الإنشاء.


🟡 دعم V2 للوكيل المستضاف في Foundry

PR:#5379

إضافة دعم V2 للعامل المستضاف للحصول agent-framework-foundry على أحدث إمكانات خدمة عامل Foundry.


python-1.0.1 (9 أبريل 2026)

ملاحظات الإصدار:python-1.0.1

🔴 FileCheckpointStorage إلغاء تسلسل المخلل المقيد (تصلب الأمان)

PR:#4941

يتدفق إلغاء تسلسل نقطة التحقق الآن عبر محدد مقيد بشكل افتراضي، والذي يسمح فقط بمجموعة مضمنة من أنواع Python الآمنة وجميع agent_framework أنواع إطار العمل.

  • إذا كان التطبيق الخاص بك يخزن أنواعا مخصصة في نقاط التحقق، فمرر معرفاتها "module:qualname" عبر معلمة الدالة الإنشائية الجديدة allowed_checkpoint_types — وإلا سترفع WorkflowCheckpointExceptionالأحمال .
  • راجع اعتبارات الأمان للحصول على التفاصيل.

قبل:

from agent_framework.workflows import FileCheckpointStorage

storage = FileCheckpointStorage(directory="./checkpoints")

بعد:

from agent_framework import FileCheckpointStorage

storage = FileCheckpointStorage(
    directory="./checkpoints",
    allowed_checkpoint_types=["my_app.models:MyState", "my_app.models:TaskResult"],
)

🔴 إصلاح إدارة سياق سير عمل التسليم

PR:#5136

تقوم PR #5136 بإصلاح إدارة سياق سير عمل التسليم. هذا تغيير سلوكي - يحتفظ وكلاء التسليم الآن بشكل صحيح بسياق معزول عبر الانتقالات.


🟡Cosmos DB NoSQL تخزين نقاط التفتيش لسير العمل

PR:#4916

حزمة جديدة agent-framework-azure-cosmos توفر تخزين نقاط التحقق المدعومة من Cosmos DB NoSQL لسير العمل Python.


python-1.0.0 (2 أبريل 2026)

ملاحظات الإصدار:python-1.0.0

يلتقط هذا القسم التغييرات Python الهامة التي هبطت بعد python-1.0.0rc6 وأصبحت الآن جزءا من python-1.0.0.

🔴 Message(..., text=...) تمت الآن إزالة البناء بالكامل

PR:#5062

يكمل PR #5062 تنظيف نموذج الرسالة Python السابق عن طريق إزالة آخر مسارات التعليمات البرمجية من جانب إطار العمل التي لا تزال تنشئ Message العناصر باستخدام text=....

  • إنشاء الرسائل النصية بدلا Message(role="user", contents=["Hello"]) من Message(role="user", text="Hello").
  • ينطبق هذا في أي مكان تقوم فيه بإنشاء الرسائل مباشرة، بما في ذلك طلبات سير العمل واستجابات البرامج الوسيطة المخصصة ومساعدي التنسيق ورمز الترحيل.
  • لا تزال السلاسل العادية في الداخل contents=[...] تتم تسويتها إلى محتوى نصي تلقائيا، لذلك contents=["Hello"] يظل أبسط نموذج للنص فقط.

قبل:

message = Message(role="assistant", text="Hello")

بعد:

message = Message(role="assistant", contents=["Hello"])

🟡حزم Python التي تم إصدارها لم تعد تتطلب--pre

PR:#5062

تقوم PR #5062 بترقية حزم Python الرئيسية إلى 1.0.0 وتحديث إرشادات التثبيت لتمييز الحزم التي تم إصدارها عن الحزم التي لا تزال إصدارا مسبقا.

  • agent-framework، agent-framework-core، agent-framework-openaiو agent-framework-foundry ، و الآن يتم إصدار الحزم ولم تعد تتطلب --pre.
  • موصلات بيتا مثل agent-framework-ag-uiو agent-framework-azurefunctionsagent-framework-copilotstudioو agent-framework-foundry-localagent-framework-mem0agent-framework-github-copilotagent-framework-ollama لا تزال تتطلب .--pre
  • إذا تضمن أمر تثبيت واحد أي حزمة بيتا، فاحتفظ --pre بهذا الأمر.

🔴يمتلك Foundry الآن Python تضمينات وإعدادات نقطة نهاية النماذج

PR:#5056

يزيل PR #5056 الحزمة المستقلة agent-framework-azure-ai وينقل Python تضمين السطح إلى agent-framework-foundry وagent_framework.foundry.

  • استخدم FoundryEmbeddingClientو FoundryEmbeddingOptionsو FoundryEmbeddingSettings من agent_framework.foundry.
  • تثبيت agent-framework-foundry لدردشة Foundry والوكلاء المدارين بواسطة الخدمة وموفري الذاكرة والتضمينات.
  • agent_framework.azureلم يعد يصدر أو AzureAIInferenceEmbeddingClientAzureAIInferenceEmbeddingOptionsAzureAIInferenceEmbeddingSettingsأو أو AzureAISettings.
  • تستخدم FOUNDRY_MODELS_ENDPOINTتضمينات Foundry الآن و FOUNDRY_MODELS_API_KEYFOUNDRY_EMBEDDING_MODELو و اختياريFOUNDRY_IMAGE_EMBEDDING_MODEL.
  • FoundryChatClient ولا FoundryAgent تزال تستخدم إعدادات نقطة نهاية المشروع مثل FOUNDRY_PROJECT_ENDPOINT و FOUNDRY_MODEL.

قبل:

import os

from agent_framework.azure import AzureAIInferenceEmbeddingClient

client = AzureAIInferenceEmbeddingClient(
    endpoint=os.environ["AZURE_AI_SERVICES_ENDPOINT"],
    model=os.environ["AZURE_AI_EMBEDDING_NAME"],
    credential=credential,
)

بعد:

import os

from agent_framework.foundry import FoundryEmbeddingClient

client = FoundryEmbeddingClient(
    endpoint=os.environ["FOUNDRY_MODELS_ENDPOINT"],
    api_key=os.environ["FOUNDRY_MODELS_API_KEY"],
    model=os.environ["FOUNDRY_EMBEDDING_MODEL"],
)

🔴 توجه مهام سير العمل الآن kwargs لوقت التشغيل من خلال مستودعات صريحة

PR:#5010

تحديثات PR #5010 Python workflow.run(...) بحيث يتم تمرير kwargs وقت التشغيل بشكل صريح ك function_invocation_kwargs= وبدلا client_kwargs= من إعادة توجيه **kwargsعام .

  • يتم التعامل مع التعيين المسطح على أنه عمومي ويتم إعادة توجيهه إلى كل منفذ عامل مطابق في سير العمل.
  • إذا تطابق واحد أو أكثر من مفاتيح المستوى الأعلى مع معرفات المنفذ، يتم التعامل مع التعيين بأكمله كاستهداف لكل منفذ ويتلقى كل منفذ إدخاله الخاص فقط.
  • معرفات منفذ سير العمل المخصصة AgentExecutor(id="...") وغيرها من معرفات منفذ سير العمل الصريحة هي المفاتيح التي تستهدفها.
  • تنطبق نفس القواعد العمومية مقابل المستهدفة على كل من function_invocation_kwargs و client_kwargs.

قبل:

await workflow.run(
    "Draft the report",
    db_config={"connection_string": "..."},
    user_preferences={"format": "markdown"},
)

بعد:

await workflow.run(
    "Draft the report",
    function_invocation_kwargs={
        "researcher": {
            "db_config": {"connection_string": "..."},
        },
        "writer": {
            "user_preferences": {"format": "markdown"},
        },
    },
)

🟡 GitHubCopilotAgent يقوم الآن بتشغيل موفري السياق حول كل استدعاء

PR:#5013

تقوم PR #5013 بإصلاح فجوة سلوك Python حيثما GitHubCopilotAgent تم قبولها context_providers ولكنها لم تستدعيها فعليا.

  • before_run()يعمل الآن قبل إرسال طلب Copilot.
  • يتم تضمين الرسائل والإرشادات التي أضافها الموفر في المطالبة التي تصل إلى Copilot CLI.
  • after_run() يتم الآن تشغيله بعد تجميع الاستجابة النهائية، بما في ذلك مسار الدفق.

إذا قمت بالفعل بتمرير context_providers إلى GitHubCopilotAgent، فلا يلزم أي ترحيل — تتصرف الخطافات الآن بشكل متناسق مع بقية سطح عامل Python.


🟡 يقبل الإخراج المنظم الآن تعيينات مخطط JSON بالإضافة إلى نماذج Pydantic

PR:#5022

يوسع PR #5022 Python تحليل الإخراج المنظم بحيث response_format يمكن أن يكون إما نموذج Pydantic أو تعيين مخطط JSON.

  • لا تزال النماذج Pydantic توزع في مثيلات نموذج مكتوبة على response.value.
  • يتم الآن تحليل تعيينات مخطط JSON في قيم Python متوافقة مع JSON في response.value (عادة dict أو list).
  • تنطبق نفس قواعد التحليل عند جمع الاستجابة النهائية من دفق.

هذا تحسين بدلا من تغيير كسر، ولكن من المفيد معرفة ما إذا كنت قد قمت بالفعل بتخزين المخططات كقواميس تشبه JSON.


python-1.0.0rc6

يلتقط هذا القسم التغييرات Python الهامة التي تم شحنها مع أو تم تعقبها ل python-1.0.0rc6.

🔴 يتم توحيد اختيار النموذج في model

PR:#4999

يكمل PR #4999 تنظيف تحديد النموذج من جانب Python عبر المنشئات والخيارات التي تمت كتابتها والإعدادات الافتراضية للعامل وعناصر الاستجابة ومتغيرات البيئة.

  • استخدم model في كل مكان استخدمته model_idسابقا.
  • Agent.default_options وكل تشغيل options={...} يتوقع "model"الآن ، وليس "model_id".
  • تظهر response.modelكائنات الاستجابة ، وليس response.model_id.
  • تستخدم OPENAI_MODELإعدادات OpenAI الآن و OPENAI_CHAT_MODELOPENAI_CHAT_COMPLETION_MODELو و.OPENAI_EMBEDDING_MODEL
  • Azure تستخدم AZURE_OPENAI_MODELإعدادات OpenAI الآن و AZURE_OPENAI_CHAT_MODELAZURE_OPENAI_CHAT_COMPLETION_MODELو و.AZURE_OPENAI_EMBEDDING_MODEL
  • يستخدم ANTHROPIC_CHAT_MODELAnthropic الآن ، ويستخدم FOUNDRY_LOCAL_MODELFoundry Local .
  • تضيف حزمة Anthropic أيضا برامج تضمين مستضافة من قبل الموفر مثل AnthropicFoundryClientو AnthropicBedrockClientوAnthropicVertexClient.

قبل:

from agent_framework.anthropic import AnthropicClient

client = AnthropicClient(model_id="claude-sonnet-4-5-20250929")
response = await client.get_response(
    "Hello!",
    options={"model_id": "claude-sonnet-4-5-20250929"},
)

بعد:

from agent_framework.anthropic import AnthropicClient

client = AnthropicClient(model="claude-sonnet-4-5-20250929")
response = await client.get_response(
    "Hello!",
    options={"model": "claude-sonnet-4-5-20250929"},
)

🔴 يمكن لموفري السياق إضافة برنامج وسيط واستمرار المحفوظات لكل استدعاء نموذج

PR:#4992

تقوم PR #4992 بتحديث البنية الأساسية لبرنامج ربط العمليات التجارية لموفر السياق Python والطريقة التي يمكن بها استمرار المحفوظات المدارة بواسطة إطار العمل أثناء عمليات التشغيل متعددة المكالمات.

  • ContextProviderوهي HistoryProvider الآن الفئات الأساسية Python المتعارف عليه.
  • BaseContextProvider وتبقى BaseHistoryProvider مؤقتا مثل الأسماء المستعارة المهملة للتوافق، ولكن يجب ترحيل التعليمات البرمجية الجديدة إلى الأسماء الجديدة.
  • SessionContext يمكن الآن جمع الدردشة المضافة من قبل الموفر أو البرنامج الوسيط للوظيفة من خلال extend_middleware() وعرض القائمة المسطحة من خلال get_middleware().
  • Agent(..., require_per_service_call_history_persistence=True) يقوم بتشغيل موفري المحفوظات حول كل استدعاء نموذج بدلا من مرة واحدة بعد الكامل run().
  • هذا الوضع مخصص للمحفوظات المحلية المدارة بواسطة إطار العمل ولا يمكن دمجه مع محادثة موجودة تديرها الخدمة مثل session.service_session_id أو options={"conversation_id": ...}.

قبل:

from agent_framework import BaseHistoryProvider

class CustomHistoryProvider(BaseHistoryProvider):
    ...

بعد:

from agent_framework import Agent, HistoryProvider

class CustomHistoryProvider(HistoryProvider):
    ...

agent = Agent(
    client=client,
    context_providers=[CustomHistoryProvider()],
    require_per_service_call_history_persistence=True,
)

🔴إزالة أسطح توافق Azure/OpenAI المهملة

PR:#4990

يكمل PR #4990 الترحيل الرائد من #4818 خلال إزالة أسطح التوافق Python المهملة المتبقية التي بقيت متاحة أثناء إصدارات المعاينة السابقة.

  • agent_framework.azure لم تعد تصدر AzureOpenAI* أو أسطح الوكيل/العميل/الموفر الأقدم AzureAI* .
  • Python لم تعد أنواع توافق OpenAI Assistants جزءا من السطح الحاليagent_framework.openai.
  • استخدم OpenAIChatClientو OpenAIChatCompletionClientو OpenAIEmbeddingClient لسيناريوهات OpenAI المباشرة أو Azure OpenAI.
  • استخدم FoundryChatClient لاستدلال مشروع Foundry وعوامل FoundryAgent المطالبة أو HostedAgents.
  • تغطي مساحة الاسم الحالية agent_framework.azure الآن عمليات تكامل Azure المتبقية مثل البحث باستخدام الذكاء الاصطناعي في Azure وسجل Cosmos دالات Azure ومهام سير العمل الدائمة. الدردشة والوكيل والذاكرة وتضمين العملاء في Foundry يعيشون ضمن agent_framework.foundry.

إذا كنت تقوم بترحيل التعليمات البرمجية Python القديمة، فاستخدم هذه الاستبدالات:

  • AzureOpenAIResponsesClient ← OpenAIChatClient
  • AzureOpenAIChatClient ← OpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClient ← OpenAIEmbeddingClient
  • AzureAIAgentClient / AzureAIClient / AzureAIProjectAgentProvider / AzureAIAgentsProvider FoundryChatClient→ أو FoundryAgent، اعتمادا على ما إذا كان تطبيقك يمتلك تعريف العامل
  • OpenAIAssistantsClient / OpenAIAssistantProvider OpenAIChatClient→ لعمل OpenAI Python الحالي، أو FoundryAgent إذا كنت بحاجة إلى وكيل مدار بواسطة الخدمة في Foundry

🔴 تصميم العميل الرائد في الموفر وتقسيم الحزمة

PR:#4818

يعيد PR #4818 تنظيم سطح موفر Python حول الحزم الخاصة بالموفر ومساحات الأسماء.

  • يعيش عملاء OpenAI الآن في الحزمة agent-framework-openai ، بينما لا يزال يتم الاستيراد من agent_framework.openai مساحة الاسم.
  • Microsoft عملاء Foundry يعيشون الآن في الحزمة agent-framework-foundryagent_framework.foundry ومساحة الاسم.
  • كما يتم الكشف عن Foundry Local من agent_framework.foundry ك FoundryLocalClient.
  • OpenAIResponsesClient تمت إعادة تسميته إلى OpenAIChatClient.
  • OpenAIChatClient تمت إعادة تسميته إلى OpenAIChatCompletionClient.
  • يتم توحيد تكوين العميل على model، واستبدال المعلمات القديمة مثل model_idو deployment_nameو model_deployment_name.
  • للحصول على رمز OpenAI Azure جديد، استخدم agent_framework.openai العملاء. تمت إزالة تحليلات التوافق السابقة AzureOpenAI* لاحقا في #4990.
  • بالنسبة إلى التعليمات البرمجية الجديدة ل Foundry، استخدم FoundryChatClient للاستدلال المباشر على المشروع، FoundryAgent وعوامل المطالبة و HostedAgents، ووقت FoundryLocalClient التشغيل المحلي.
  • AzureAIClientتم نقل سطح توافق مساعدي Python و إلى مسارات التوافق أثناء إعادة بناء التعليمات البرمجية هذه وتمت إزالتهم لاحقا في #4990. AzureAIProjectAgentProviderAzureAIAgentClientAzureAIAgentsProvider
  • تمت إعادة تنظيم تغطية العينة لمطابقة التخطيط الجديد الرائد مع الموفر، بما في ذلك نماذج Foundry ضمن samples/02-agents/providers/foundry/.

تعيين الحزمة

السيناريو التثبيت مساحة الاسم الأساسية
OpenAI و Azure OpenAI pip install agent-framework-openai agent_framework.openai
Microsoft نقاط نهاية مشروع Foundry وخدمة الوكيل والذاكرة والتضمينات pip install agent-framework-foundry agent_framework.foundry
فاوندري لوكال pip install agent-framework-foundry-local --pre agent_framework.foundry

قبل:

from agent_framework.openai import OpenAIResponsesClient

client = OpenAIResponsesClient(model_id="gpt-5.4")

بعد:

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient(model="gpt-5.4")

إذا سبق لك استخدام Azure OpenAI مباشرة، فعين الفئات المخصصة القديمة لفئات OpenAI الرائدة في الموفر الجديد:

  • AzureOpenAIResponsesClient ← OpenAIChatClient
  • AzureOpenAIChatClient ← OpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClient ← OpenAIEmbeddingClient
  • AzureOpenAIAssistantsClient OpenAIChatClient→ لترحيل واجهة برمجة تطبيقات الاستجابات المباشرة، أو FoundryAgent إذا كنت بحاجة إلى عامل Foundry مدار بواسطة الخدمة

تغيير التعليمات البرمجية هو في الغالب نقل اسم الفئة بالإضافة إلى deployment_name → model. Azure توافق OpenAI، استخدم مدخلات Azure صريحة على عملاء OpenAI الجدد. credential=هو الآن سطح المصادقة Azure المفضل، بينما يظل القابل للاستدعاء api_key مسار توافق:

قبل (AzureOpenAIResponsesClient):

from agent_framework.azure import AzureOpenAIResponsesClient

client = AzureOpenAIResponsesClient(
    endpoint=azure_endpoint,
    deployment_name=deployment_name,
    credential=credential,
)

بعد (OpenAIChatClient):

from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential

api_version = "your-azure-openai-api-version"

client = OpenAIChatClient(
    azure_endpoint=azure_endpoint,
    model=deployment_name,
    credential=AzureCliCredential(),
    api_version=api_version,
)

قبل (AzureOpenAIChatClient):

from agent_framework.azure import AzureOpenAIChatClient

client = AzureOpenAIChatClient(
    endpoint=azure_endpoint,
    deployment_name=deployment_name,
    credential=credential,
)

بعد (OpenAIChatCompletionClient):

from agent_framework.openai import OpenAIChatCompletionClient
from azure.identity import AzureCliCredential

api_version = "your-azure-openai-api-version"

client = OpenAIChatCompletionClient(
    azure_endpoint=azure_endpoint,
    model=deployment_name,
    credential=AzureCliCredential(),
    api_version=api_version,
)

إذا كنت ترغب في الانتقال من Azure نقاط نهاية OpenAI إلى نقطة نهاية مشروع Microsoft Foundry، فاستخدم سطح Foundry الموجه بدلا من ذلك:

قبل (Azure نقطة نهاية OpenAI):

from agent_framework.azure import AzureOpenAIResponsesClient
from azure.identity import AzureCliCredential

client = AzureOpenAIResponsesClient(
    deployment_name="gpt-4.1",
    credential=AzureCliCredential(),
)

بعد (مشروع Foundry):

from agent_framework import Agent
from agent_framework.foundry import FoundryChatClient
from azure.identity import AzureCliCredential

client = FoundryChatClient(
    project_endpoint="https://your-account.services.ai.azure.com/api/projects/your-project",
    model="gpt-4.1",
    credential=AzureCliCredential(),
)

agent = Agent(client=client)

بالنسبة إلى أوقات تشغيل Microsoft Foundry المحلية، استخدم مساحة اسم Foundry بالإضافة إلى الموصل المحلي:

from agent_framework.foundry import FoundryLocalClient

client = FoundryLocalClient(model="phi-4-mini")

إذا حذفت model، فقم بتعيين FOUNDRY_LOCAL_MODEL في بيئتك.

قم أيضا بتحديث أسماء البيئة/التكوين حيثما ينطبق ذلك:

  • استخدم OPENAI_CHAT_MODEL ل OpenAIChatClient، OPENAI_CHAT_COMPLETION_MODEL ل OpenAIChatCompletionClient، مع OPENAI_MODEL كتراجع مشترك.
  • Azure يستخدم AZURE_OPENAI_CHAT_MODEL OpenAI الآن ل OpenAIChatClientو AZURE_OPENAI_CHAT_COMPLETION_MODEL و OpenAIChatCompletionClientAZURE_OPENAI_MODEL ك الاحتياطي المشترك.
  • استخدم azure_endpoint لعناوين URL لمورد OpenAI Azure، أو base_url إذا كان لديك عنوان URL كامل .../openai/v1 بالفعل، وقم بتعيينه api_version لسطح واجهة برمجة تطبيقات OpenAI Azure الذي تستخدمه
  • اعتماد الإعدادات الخاصة ب Foundry مثل FOUNDRY_PROJECT_ENDPOINTو FOUNDRY_MODELFOUNDRY_AGENT_NAMEو FOUNDRY_AGENT_VERSION لعملاء Cloud Foundry
  • استخدام ANTHROPIC_CHAT_MODEL Anthropic و FOUNDRY_LOCAL_MODEL ل Foundry Local

وقد هبط هذا التغيير لأول مرة أثناء python-1.0.0rc6 الدورة.


🔴 أصبحت التبعيات الأساسية الآن ضئيلة عن قصد

PR:#4904

يتبع PR #4904 حزمة الموفر المنقسمة من #4818 خلال التخسيس agent-framework-core وإزالة المزيد من تبعيات الموفر العابرة من الحزمة الأساسية.

  • agent-framework-core هو الآن الحد الأدنى عمدا.
  • إذا قمت باستيراد agent_framework.openai، فقم بتثبيت agent-framework-openai.
  • إذا قمت باستيراد agent_framework.foundryوتثبيت agent-framework-foundry لاستدلال مشروع Foundry والوكلاء المدارين بواسطة الخدمة وموفري الذاكرة والتضمينات. يستخدم agent-framework-foundry-local --pre في أوقات التشغيل المحلية.
  • إذا كنت تستخدم أدوات MCP أو Agent.as_mcp_server()أو عمليات تكامل MCP أخرى على الحد الأدنى الحالي من التثبيت، فقم بتثبيتها mcp>=2.2.0,<3 يدويا. تمت إزالة نقل MCP WebSocket في Python 1.23.
  • إذا كنت تريد تجربة "كل شيء مضمن" واسعة، فقم بتثبيت حزمة agent-frameworkالتعريف .

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

قبل (غالبا ما جلبت التثبيتات الأساسية فقط المزيد من وظائف الموفر بشكل متعدي):

pip install agent-framework-core

بعد (تثبيت حزمة الموفر التي تستخدمها بالفعل):

pip install agent-framework-core
pip install agent-framework-openai

أو:

pip install agent-framework-core
pip install agent-framework-foundry

إذا قمت بترقية مشروع موجود كان يعتمد سابقا على الأساسي بالإضافة إلى استيراد موفر كسول، فراجع عمليات الاستيراد وجعل حزم الموفر صريحة في البيئة أو ملفات التبعية. قم بنفس الشيء لتبعيات MCP إذا كنت تعتمد على أدوات MCP أو استضافة خادم MCP.


🔴 يفضل عملاء OpenAI العامون الآن إشارات التوجيه الصريحة

PR:#4925

يغير PR #4925 كيفية تحديد العملاء العامين agent_framework.openai بين OpenAI وopenAI Azure.

  • لم يعد عملاء OpenAI العامون يتحولون إلى Azure لمجرد AZURE_OPENAI_* وجود متغيرات البيئة.
  • إذا OPENAI_API_KEY تم تكوينه، يبقى العملاء العامون على OpenAI ما لم تمرر إشارة توجيه Azure صريحة مثل credential أو azure_endpoint.
  • إذا كانت الإعدادات موجودة فقطAZURE_OPENAI_*، فلا يزال بإمكان العملاء العامين الرجوع إلى التوجيه المستند إلى البيئة Azure.
  • نمط Azure OpenAI المفضل الآن هو تمرير إعدادات Azure الصريحة بالإضافة إلى credential=AzureCliCredential()OpenAIChatClientOpenAIChatCompletionClientعميل التضمين و و.
  • تحتفظ برامج التضمين المهملة AzureOpenAI* بسلوك التوافق الخاص بها، لذلك لا تتبع التعليمات البرمجية المستندة إلى برنامج التضمين الموجودة قواعد أسبقية العميل العام الجديدة.

قبل (OpenAIChatClient يمكن توجيه إلى Azure بسبب وجود Azure env vars):

import os
from agent_framework.openai import OpenAIChatClient

os.environ["OPENAI_API_KEY"] = "sk-openai"
os.environ["AZURE_OPENAI_ENDPOINT"] = "https://your-resource.openai.azure.com"
os.environ["AZURE_OPENAI_CHAT_MODEL"] = "gpt-4o-mini"

client = OpenAIChatClient(model="gpt-4o-mini")

بعد (يبقى OpenAI العام على OpenAI؛ قم بتمرير مدخلات Azure صريحة لفرض توجيه Azure):

import os
from agent_framework.openai import OpenAIChatClient
from azure.identity import AzureCliCredential

client = OpenAIChatClient(
    model=os.environ["AZURE_OPENAI_CHAT_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
)

إذا كانت بيئتك تحتوي على قيمتين و OPENAI_*AZURE_OPENAI_* ، فراجع أي agent_framework.openai بناء عام للعميل وجعل اختيار الموفر صريحا. تم تحديث عينات موفر Azure لتمرير المدخلات Azure مباشرة لهذا السبب.

تتبع Azure التضمينات الآن نفس نموذج التوجيه:

import os
from agent_framework.openai import OpenAIEmbeddingClient
from azure.identity import AzureCliCredential

client = OpenAIEmbeddingClient(
    model=os.environ["AZURE_OPENAI_EMBEDDING_MODEL"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    credential=AzureCliCredential(),
)

لتضمين السيناريوهات، قم بتعيين:

  • AzureOpenAIEmbeddingClient ← OpenAIEmbeddingClient
  • AZURE_OPENAI_EMBEDDING_MODEL ← model
  • OPENAI_EMBEDDING_MODEL يبقى متغير بيئة التضمين من جانب OpenAI

python-1.0.0rc5 / python-1.0.0b260319 (19 مارس 2026)

🔴 إعادة ترتيب مسار عميل الدردشة: يقوم FunctionInvocation الآن بتضمين ChatMiddleware

PR:#4746

تم تغيير ترتيب البنية الأساسية لبرنامج ربط العمليات التجارية ChatClient. FunctionInvocation هو الآن الطبقة الخارجية والالتفافات ChatMiddleware، ما يعني أن برنامج الدردشة الوسيط يعمل لكل استدعاء نموذج (بما في ذلك كل تكرار لحلقة استدعاء الأداة) بدلا من مرة واحدة حول تسلسل استدعاء الدالة بأكملها.

ترتيب البنية الأساسية لبرنامج ربط العمليات التجارية القديمة:

ChatMiddleware → FunctionInvocation → RawChatClient

ترتيب البنية الأساسية لبرنامج ربط العمليات التجارية الجديد:

FunctionInvocation → ChatMiddleware → ChatTelemetry → RawChatClient

إذا كان لديك برنامج وسيط مخصص للدردشة يفترض أنه تم تشغيله مرة واحدة فقط لكل استدعاء عامل (التفاف حلقة استدعاء الأداة بأكملها)، فقم بتحديثه ليكون آمنا للتنفيذ المتكرر. يتم الآن استدعاء البرنامج الوسيط للدردشة لكل طلب LLM فردي، بما في ذلك الطلبات التي ترسل نتائج الأداة مرة أخرى إلى النموذج.

بالإضافة إلى ذلك، ChatTelemetry هو الآن طبقة منفصلة من ChatMiddleware في البنية الأساسية لبرنامج ربط العمليات التجارية، تعمل الأقرب إلى RawChatClient.

🔴 تقسيم الكوارس العامة لوقت التشغيل إلى مستودعات صريحة

PR:#4581

لم تعد واجهات برمجة تطبيقات عامل Python العامة والدردشة تتعامل مع إعادة التوجيه العامة **kwargs الشاملة كآلية أساسية لبيانات وقت التشغيل. يتم الآن تقسيم قيم وقت التشغيل حسب الغرض:

  • استخدم function_invocation_kwargs للقيم التي يجب أن تشاهدها الأدوات أو البرامج الوسيطة الوظيفية فقط.
  • يستخدم client_kwargs لتكوين kwargs من طبقة العميل والبرامج الوسيطة للعميل.
  • الوصول إلى بيانات أداة/وقت التشغيل من خلال FunctionInvocationContext (ctx.kwargs و ctx.session).
  • تعريف الأدوات باستخدام معلمة سياق تم إدخالها بدلا من **kwargs؛ لا يتم عرض معلمات السياق المحقونة في المخطط الذي يراه النموذج.
  • عند التفويض إلى وكيل فرعي كأداة، استخدم agent.as_tool(propagate_session=True) إذا كان يجب على العامل التابع مشاركة جلسة عمل المتصل.

قبل:

from typing import Any

from agent_framework import tool


@tool
def send_email(address: str, **kwargs: Any) -> str:
    return f"Queued email for {kwargs['user_id']}"


response = await agent.run(
    "Send the update to finance@example.com",
    user_id="user-123",
    request_id="req-789",
)

بعد:

from agent_framework import FunctionInvocationContext, tool


@tool
def send_email(address: str, ctx: FunctionInvocationContext) -> str:
    user_id = ctx.kwargs["user_id"]
    session_id = ctx.session.session_id if ctx.session else "no-session"
    return f"Queued email for {user_id} in {session_id}"


response = await agent.run(
    "Send the update to finance@example.com",
    session=agent.create_session(),
    function_invocation_kwargs={
        "user_id": "user-123",
        "request_id": "req-789",
    },
)

إذا قمت بتطبيق أساليب أو get_response() عامة run() مخصصة، أضف function_invocation_kwargs و client_kwargs إلى هذه التواقيع. بالنسبة للأدوات، تفضل معلمة مشروحة ك FunctionInvocationContext — يمكن تسميتها ctxأو contextأو أي اسم آخر مشروح. إذا قمت بتوفير مخطط/نموذج إدخال صريح، يتم التعرف أيضا على معلمة عادية غير موضحة باسم ctx . يتوفر نفس عنصر السياق للبرامج الوسيطة للدالة، وهو المكان الذي تعيش فيه kwargs لدالة وقت التشغيل وحالة الجلسة الآن. تستخدم تعريفات الأدوات التي لا تزال تعتمد على **kwargs مسار توافق قديم فقط وستتم إزالتها.


python-1.0.0rc4 / python-1.0.0b260311 (11 مارس 2026)

ملاحظات الإصدار:python-1.0.0rc4

🔴تستهدف تكاملات الذكاء الاصطناعي Azure الآن azure-ai-projects 2.0 GA

PR:#4536

تفترض تكاملات الذكاء الاصطناعي Python Azure الآن سطح GA 2.0azure-ai-projects.

  • نطاق التبعية المدعوم هو الآن azure-ai-projects>=2.0.0,<3.0.
  • foundry_featuresتمت إزالة المرور من إنشاء عامل الذكاء الاصطناعي Azure.
  • يستخدم allow_preview=True سلوك المعاينة الآن على العملاء/الموفرين المدعومين.
  • تمت إزالة تحليلات توافق بيتا/GA المختلطة، لذا قم بتحديث أي عمليات استيراد وأسماء كتابة إلى سطح 2.0 GA SDK.

🔴GitHub Copilot تستخدم ToolInvocation / ToolResult معالجات الأدوات الآن Python 3.11+

PR:#4551

agent-framework-github-copilot الآن يتعقب github-copilot-sdk>=0.1.32.

  • تتلقى ToolInvocation معالجات الأدوات فئة بيانات بدلا من raw dict.
  • العودة ToolResult باستخدام حقول snake_case مثل result_type و text_result_for_llm.
  • agent-framework-github-copilot تتطلب الحزمة الآن Python 3.11+.

قبل:

from typing import Any


def handle_tool(invocation: dict[str, Any]) -> dict[str, Any]:
    args = invocation.get("arguments", {})
    return {
        "resultType": "success",
        "textResultForLlm": f"Handled {args.get('city', 'request')}",
    }

بعد:

from copilot.tools import ToolInvocation, ToolResult


def handle_tool(invocation: ToolInvocation) -> ToolResult:
    args = invocation.arguments
    return ToolResult(
        result_type="success",
        text_result_for_llm=f"Handled {args.get('city', 'request')}",
    )

python-1.0.0rc3 / python-1.0.0b260304 (4 مارس 2026)

ملاحظات الإصدار:python-1.0.0rc3

🔴 تم إنهاء موفر المهارات حول التعليمات البرمجية المحددة Skill / SkillResource

PR:#4387

تدعم Python Agent Skills الآن التعليمات البرمجية المعرفة Skill والكائنات SkillResource جنبا إلى جنب مع المهارات المستندة إلى الملفات، ويتم توحيد سطح الموفر العام على SkillsProvider.

  • إذا كنت لا تزال تقوم باستيراد المعاينة/الداخلية FileAgentSkillsProviderالأقدم، فانتقل إلى SkillsProvider.
  • لم يعد البحث عن الموارد المستندة إلى الملفات يعتمد على المراجع المقتبسة من backtick في SKILL.md؛ يتم اكتشاف الموارد من دليل المهارة بدلا من ذلك.

إذا كان لديك معاينة/تعليمة برمجية داخلية مستوردة FileAgentSkillsProvider، قم بالتبديل إلى السطح العام الحالي:

from agent_framework import Skill, SkillResource, SkillsProvider

python-1.0.0rc2 / python-1.0.0b260226 (26 فبراير 2026)

ملاحظات الإصدار:python-1.0.0rc2

🔴 استبدال InvokeTool مهام سير العمل التعريفية ب InvokeFunctionTool

PR:#3716

لم تعد مهام سير العمل Python التعريفية تستخدم نوع الإجراء القديمInvokeTool. استبدله ب InvokeFunctionTool وسجل Python المتصلين ب WorkflowFactory.register_tool().

قبل:

actions:
  - kind: InvokeTool
    toolName: send_email

بعد:

factory = WorkflowFactory().register_tool("send_email", send_email)
actions:
  - kind: InvokeFunctionTool
    functionName: send_email

python-1.0.0rc1 / python-1.0.0b260219 (19 فبراير 2026)

الإصدار:agent-framework-core وروجت agent-framework-azure-ai إلى 1.0.0rc1. تم تحديث جميع الحزم الأخرى إلى 1.0.0b260219.

🔴معالجة بيانات الاعتماد Azure الموحدة عبر جميع الحزم

PR:#4088

ad_token ad_token_providerتم استبدال المعلمات و وget_entra_auth_token/المساعدين بمعلمة موحدة credential عبر جميع حزم Python ذات الصلة Azure. يستخدم azure.identity.get_bearer_token_provider الأسلوب الجديد للتخزين المؤقت والتحديث التلقائي للرمز المميز.

الفئات المتأثرة:AzureOpenAIChatClient و AzureOpenAIResponsesClientو AzureOpenAIAssistantsClientو AzureAIClientو AzureAIAgentClientو AzureAIProjectAgentProviderو و AzureAIAgentsProviderو AzureAISearchContextProviderو PurviewClientوPurviewChatPolicyMiddlewarePurviewPolicyMiddleware.

قبل:

from azure.identity import AzureCliCredential, get_bearer_token_provider

token_provider = get_bearer_token_provider(
    AzureCliCredential(), "https://cognitiveservices.azure.com/.default"
)

client = AzureOpenAIResponsesClient(
    azure_ad_token_provider=token_provider,
    ...
)

بعد:

from azure.identity import AzureCliCredential

client = AzureOpenAIResponsesClient(
    credential=AzureCliCredential(),
    ...
)

credential تقبل المعلمة TokenCredentialأو AsyncTokenCredentialأو موفر رمز مميز قابل للاستدعاء. تتم معالجة التخزين المؤقت وتحديث الرمز المميز تلقائيا.


🔴التدرج الهرمي للاستثناء Python المعاد تصميمه

PR:#4082

تم استبدال العائلة المسطحة ServiceException بفروع استثناء نطاق المجال ضمن جذر واحد AgentFrameworkException . وهذا يعطي المتصلين أهدافا دقيقة except ودلالات خطأ واضحة.

التسلسل الهرمي الجديد:

AgentFrameworkException
├── AgentException
│   ├── AgentInvalidAuthException
│   ├── AgentInvalidRequestException
│   ├── AgentInvalidResponseException
│   └── AgentContentFilterException
├── ChatClientException
│   ├── ChatClientInvalidAuthException
│   ├── ChatClientInvalidRequestException
│   ├── ChatClientInvalidResponseException
│   └── ChatClientContentFilterException
├── IntegrationException
│   ├── IntegrationInitializationError
│   ├── IntegrationInvalidAuthException
│   ├── IntegrationInvalidRequestException
│   ├── IntegrationInvalidResponseException
│   └── IntegrationContentFilterException
├── ContentError
├── WorkflowException
│   ├── WorkflowRunnerException
│   ├── WorkflowValidationError
│   └── WorkflowActionError
├── ToolExecutionException
├── MiddlewareTermination
└── SettingNotFoundError

الاستثناءات التي تمت إزالتها:ServiceException و ServiceInitializationErrorو ServiceResponseExceptionو ServiceContentFilterExceptionو ServiceInvalidAuthErrorو ServiceInvalidExecutionSettingsErrorو ServiceInvalidRequestErrorو ServiceInvalidResponseErrorو و AgentExecutionExceptionو AgentInvocationErrorوChatClientInitializationErrorAgentSessionExceptionAgentInitializationErrorCheckpointDecodingError.

قبل:

from agent_framework.exceptions import ServiceException, ServiceResponseException

try:
    result = await agent.run("Hello")
except ServiceResponseException:
    ...
except ServiceException:
    ...

بعد:

from agent_framework.exceptions import AgentException, AgentInvalidResponseException, AgentFrameworkException

try:
    result = await agent.run("Hello")
except AgentInvalidResponseException:
    ...
except AgentException:
    ...
except AgentFrameworkException:
    # catch-all for any Agent Framework error
    ...

Note

تستخدم أخطاء التحقق من صحة Init الآن المضمنة ValueError/TypeError بدلا من الاستثناءات المخصصة. يتم حجز استثناءات إطار العامل لحالات الفشل على مستوى المجال.


🔴 حالة الموفر التي تم تحديد نطاقها بواسطة source_id

PR:#3995

تتلقى خطافات الموفر الآن قاموس حالة نطاق الموفر (state.setdefault(provider.source_id, {})) بدلا من حالة جلسة العمل الكاملة. وهذا يعني أن تطبيقات الموفر التي تم الوصول إليها مسبقا إلى الحالة المتداخلة عبر state[self.source_id]["key"] يجب الوصول إليها state["key"] الآن مباشرة.

بالإضافة إلى ذلك، InMemoryHistoryProvider تم تغيير الافتراضي source_id من "memory" إلى "in_memory".

قبل:

# In a custom provider hook:
async def on_before_agent(self, state: dict, **kwargs):
    my_data = state[self.source_id]["my_key"]

# InMemoryHistoryProvider default source_id
provider = InMemoryHistoryProvider("memory")

بعد:

# Provider hooks receive scoped state — no nested access needed:
async def on_before_agent(self, state: dict, **kwargs):
    my_data = state["my_key"]

# InMemoryHistoryProvider default source_id changed
provider = InMemoryHistoryProvider("in_memory")

🔴 محاذاة كتابة رسالة الدردشة/الوكيل (run مقابل get_response)

PR:#3920

تتلقى Sequence[Message]تطبيقات عميل get_response الدردشة الآن باستمرار . agent.run(...)يظل مرنا (strأو ContentMessageتسلسلات من تلك)، ويتطبيع المدخلات قبل استدعاء عملاء الدردشة.

قبل:

async def get_response(self, messages: str | Message | list[Message], **kwargs): ...

بعد:

from collections.abc import Sequence
from agent_framework import Message

async def get_response(self, messages: Sequence[Message], **kwargs): ...

🔴 FunctionTool[Any] تمت إزالة الإعداد العام لتمرير المخطط

PR:#3907

لم تعد مسارات الأدوات المستندة إلى المخطط تعتمد على السلوك العام السابق FunctionTool[Any] . استخدم FunctionTool مباشرة وقم بتوفير إما BaseModel pydantic أو مخططات صريحة عند الحاجة (على سبيل المثال، مع @tool(schema=...)).

قبل:

placeholder: FunctionTool[Any] = FunctionTool(...)

بعد:

placeholder: FunctionTool = FunctionTool(...)

🔴 تم استبدال الإعدادات Pydantic ب TypedDict + load_settings()

PRs:#3843، #4032، #8709

pydantic-settingsتم استبدال الفئة المستندة AFBaseSettings إلى نظام إعدادات خفيف الوزن يستند إلى الدالة باستخدام TypedDict وload_settings(). تمت إزالة التبعية pydantic-settings بالكامل.

جميع فئات الإعدادات (على سبيل المثال، ، OpenAISettings، AzureOpenAISettings، AnthropicSettings) هي الآن TypedDict تعريفات، ويتم الوصول إلى قيم الإعدادات عبر بناء جملة القاموس بدلا من الوصول إلى السمة.

قبل:

from agent_framework.openai import OpenAISettings

settings = OpenAISettings()  # pydantic-settings auto-loads from env
api_key = settings.api_key
model_id = settings.model_id

بعد:

from agent_framework import load_settings
from agent_framework.openai import OpenAISettings

settings = load_settings(OpenAISettings, env_prefix="OPENAI_")
api_key = settings["api_key"]
model = settings["model"]

Important

لا يقوم إطار عمل العامل تلقائيا بتحميل القيم من .env الملفات. يجب عليك الاشتراك صراحة في .env التحميل إما عن طريق:

  • الاتصال load_dotenv() من الحزمة python-dotenv في بداية التطبيق الخاص بك
  • env_file_path=".env" تمرير إلىload_settings()
  • تعيين متغيرات البيئة مباشرة في shell أو IDE

load_settings ترتيب الدقة هو: يتجاوز صراحة قيم الملفات → .env (عند env_file_path توفيرها) → متغيرات البيئة → الافتراضيات. إذا قمت بتحديد env_file_path، يجب أن يكون الملف موجودا أو FileNotFoundError يتم رفعه.

قيم رقمية أو منطقية غير صحيحة من متغير بيئة أو .env ملف يرفع ValueError يحدد الإعداد والمصدر. لم تعد ترجع بصمت إلى قيمة غير متوافقة.


🟡 إصلاح تسليم سير عمل نموذج المنطق وتسلسل المحفوظات

PR:#4083

إصلاح حالات الفشل المتعددة عند استخدام نماذج المنطق (على سبيل المثال، gpt-5-mini، gpt-5.2) في مهام سير العمل متعددة العوامل. يتم الآن تسلسل عناصر المنطق من واجهة برمجة تطبيقات الاستجابات بشكل صحيح ويتم تضمينها فقط في المحفوظات عندما function_call يكون موجودا أيضا، مما يمنع أخطاء واجهة برمجة التطبيقات. يتم الآن إصدار محتوى المنطق المشفر/المخفي بشكل صحيح، ويتم summary تصحيح تنسيق الحقل. service_session_id يتم مسح أيضا عند التسليم لمنع تسرب حالة العامل المشترك.


🟡 تم إضافة Bedrock إلى core[all] و تم إصلاح الإعدادات الافتراضية لاختيار الأدوات

PR:#3953

يتم تضمين Amazon Bedrock الآن في agent-framework-core[all] الإضافات وهو متاح عبر سطح الاستيراد الكسول agent_framework.amazon . تم أيضا إصلاح سلوك اختيار الأدوات: تظل قيم اختيار الأدوات غير المعينة الآن غير محددة بحيث يستخدم الموفرون الإعدادات الافتراضية للخدمة الخاصة بهم، بينما يتم الاحتفاظ بالقيم المعينة بشكل صريح.

from agent_framework.amazon import BedrockChatClient

🟡 حذر AzureAIClient من تجاوز وقت التشغيل غير المدعوم

PR:#3919

في وقت هذا التغيير، AzureAIClient سجل تحذيرا عند وقت tools التشغيل أو structured_output يختلف عن تكوين وقت إنشاء العامل. ومنذ ذلك الحين، تمت إزالة سطح Python هذا. بالنسبة للتعليمات البرمجية Python الحالية، استخدم FoundryChatClient عندما تحتاج إلى تكوين أداة/وقت تشغيل مملوك للتطبيق، أو OpenAIChatClient لسيناريوهات واجهة برمجة تطبيقات الاستجابات المباشرة التي تحتاج إلى تجاوزات ديناميكية.


🟡 workflow.as_agent() الآن يتم تعيين المحفوظات المحلية افتراضيا عند إلغاء تعيين موفري الخدمة

PR:#3918

عندما workflow.as_agent() يتم إنشاء بدون context_providers، فإنه يضيف InMemoryHistoryProvider("memory") الآن بشكل افتراضي. إذا تم توفير موفري السياق بشكل صريح، يتم الاحتفاظ بهذه القائمة دون تغيير.

workflow_agent = workflow.as_agent(name="MyWorkflowAgent")
# Default local history provider is injected when none are provided.

🟡 تم نشر سياق تتبع OpenTelemetry إلى طلبات MCP

PR:#3780

عند تثبيت OpenTelemetry، يتم إدخال سياق التتبع (على سبيل المثال، W3C traceparent) تلقائيا في طلبات MCP عبر params._meta. يتيح هذا التتبع الموزع من طرف إلى طرف عبر استدعاءات خادم العامل → MCP. لا توجد تغييرات في التعليمات البرمجية مطلوبة — هذا سلوك إضافي يتم تنشيطه عند وجود سياق امتداد صالح.


🟡دعم دائم لسير العمل دالات Azure

PR:#3630

agent-framework-azurefunctions تدعم الحزمة الآن تشغيل Workflow الرسوم البيانية على Azure Durable Functions. قم بتمرير معلمة workflow إلى AgentFunctionApp لتسجيل كيانات العامل ووظائف النشاط ونقاط نهاية HTTP تلقائيا.

from agent_framework.azure import AgentFunctionApp

app = AgentFunctionApp(workflow=my_workflow)
# Automatically registers:
#   POST /api/workflow/run          — start a workflow
#   GET  /api/workflow/status/{id}  — check status
#   POST /api/workflow/respond/{id}/{requestId} — HITL response

يدعم fan-out/fan-in والحالة المشتركة وأنماط الإنسان في التكرار الحلقي مع مهلة قابلة للتكوين ورفض تلقائي عند انتهاء الصلاحية.


python-1.0.0b260212 (12 فبراير 2026)

ملاحظات الإصدار:python-1.0.0b260212

🔴 Hosted*Toolالفئات التي تم استبدالها بأساليب العميل get_*_tool()

PR:#3634

تمت إزالة فئات الأدوات المستضافة لصالح أساليب المصنع ذات نطاق العميل. وهذا يجعل توفر الأداة صريحا من قبل الموفر.

الفئة التي تمت إزالتها استبدال
HostedCodeInterpreterTool client.get_code_interpreter_tool()
HostedWebSearchTool client.get_web_search_tool()
HostedFileSearchTool client.get_file_search_tool(...)
HostedMCPTool client.get_mcp_tool(...)
HostedImageGenerationTool client.get_image_generation_tool(...)

قبل:

from agent_framework import HostedCodeInterpreterTool, HostedWebSearchTool

tools = [HostedCodeInterpreterTool(), HostedWebSearchTool()]

بعد:

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient()
tools = [client.get_code_interpreter_tool(), client.get_web_search_tool()]

🔴 تم الانتهاء من البنية الأساسية لبرنامج ربط العمليات التجارية لموفر الجلسة/السياق (AgentSession، context_providers)

PR:#3850

اكتملت جلسة Python وترحيل موفر السياق. AgentThread وتمت إزالة أنواع موفر السياق القديمة.

  • AgentThread ← AgentSession
  • agent.get_new_thread() ← agent.create_session()
  • agent.get_new_thread(service_thread_id=...) ← agent.get_session(service_session_id=...)
  • context_provider= / chat_message_store_factory= يتم استبدال الأنماط ب context_providers=[...]
  • ChatMessageStore تمت إزالة. استخدم HistoryProvider (أو InMemoryHistoryProvider لحالة الذاكرة الافتراضية)، وكلاهما تم تصديره من agent_framework. إذا لم يتم تمرير أي موفر سياق، يقوم العامل بحقن تلقائي .InMemoryHistoryProvider

قبل:

thread = agent.get_new_thread()
response = await agent.run("Hello", thread=thread)

بعد:

session = agent.create_session()
response = await agent.run("Hello", session=session)

🔴 نموذج نقطة التحقق وسلوك التخزين المعاد بناء التعليمات البرمجية له

PR:#3744

تمت إعادة تصميم المساحات الداخلية لنقاط التحقق، مما يؤثر على التوافق المستمر لنقاط التفتيش وتطبيقات التخزين المخصصة:

  • WorkflowCheckpoint الآن يخزن الكائنات المباشرة (يحدث التسلسل في تخزين نقطة التحقق)
  • FileCheckpointStorage يستخدم الآن تسلسل المخلل
  • workflow_id تمت previous_checkpoint_id إزالة وإضافته
  • تمت إزالة خطافات نقطة التحقق المهملة

إذا استمرت نقاط التحقق بين الإصدارات، فعاود إنشاء عناصر نقاط التحقق الموجودة أو ترحيلها قبل استئناف مهام سير العمل.


🟡 ظهرت نقاط نهاية مشروع Foundry في الأصل من خلال AzureOpenAIResponsesClient

PR:#3814

تسمح AzureOpenAIResponsesClient إمكانية المعاينة هذه في الأصل بالاتصال بنقاط نهاية مشروع Foundry. تستخدم FoundryChatClient إرشادات Python الحالية لاستدلال مشروع Foundry أو FoundryAgent لعوامل Foundry المدارة بواسطة الخدمة بدلا من إزالة AzureOpenAIResponsesClient.

from azure.identity import DefaultAzureCredential
from agent_framework.foundry import FoundryChatClient

client = FoundryChatClient(
    project_endpoint="https://<your-account>.services.ai.azure.com/api/projects/<your-project>",
    model="gpt-4o-mini",
    credential=DefaultAzureCredential(),
)

🔴 البرنامج الوسيط call_next لم يعد يقبل context

PR:#3829

متابعة البرنامج الوسيط الآن لا يأخذ أي وسيطات. إذا كان البرنامج الوسيط الخاص بك لا يزال يستدعي call_next(context)، فقم بتحديثه إلى call_next().

قبل:

async def telemetry_middleware(context, call_next):
    # ...
    return await call_next(context)

بعد:

async def telemetry_middleware(context, call_next):
    # ...
    return await call_next()

python-1.0.0b260210 (10 فبراير 2026)

ملاحظات الإصدار:python-1.0.0b260210

🔴 تمت إزالة أساليب مصنع سير العمل من WorkflowBuilder

PR:#3781

register_executor() وتمت register_agent() إزالتها من WorkflowBuilder. لم تعد جميع أساليب المنشئ (add_edgeو add_fan_out_edgesadd_fan_in_edgesو add_switch_case_edge_groupadd_chainadd_multi_selection_edge_groupو) و start_executor تقبل أسماء السلاسل — فهي تتطلب مثيلات المنفذ أو العامل مباشرة.

لعزل الحالة، قم بتضمين إنشاء مثيل للمنفذ/الوكيل وبناء سير العمل داخل أسلوب مساعد بحيث ينتج عن كل استدعاء مثيلات جديدة.

WorkflowBuilder مع المنفذين

قبل:

workflow = (
    WorkflowBuilder(start_executor="UpperCase")
    .register_executor(lambda: UpperCaseExecutor(id="upper"), name="UpperCase")
    .register_executor(lambda: ReverseExecutor(id="reverse"), name="Reverse")
    .add_edge("UpperCase", "Reverse")
    .build()
)

بعد:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = WorkflowBuilder(start_executor=upper).add_edge(upper, reverse).build()

WorkflowBuilder مع وكلاء

قبل:

builder = WorkflowBuilder(start_executor="writer_agent")
builder.register_agent(factory_func=create_writer_agent, name="writer_agent")
builder.register_agent(factory_func=create_reviewer_agent, name="reviewer_agent")
builder.add_edge("writer_agent", "reviewer_agent")

workflow = builder.build()

بعد:

writer_agent = create_writer_agent()
reviewer_agent = create_reviewer_agent()

workflow = WorkflowBuilder(start_executor=writer_agent).add_edge(writer_agent, reviewer_agent).build()

عزل الحالة باستخدام أساليب المساعد

بالنسبة إلى مهام سير العمل التي تحتاج إلى حالة معزولة لكل استدعاء، قم بتضمين البناء بطريقة مساعد:

def create_workflow() -> Workflow:
    """Each call produces fresh executor instances with independent state."""
    upper = UpperCaseExecutor(id="upper")
    reverse = ReverseExecutor(id="reverse")

    return WorkflowBuilder(start_executor=upper).add_edge(upper, reverse).build()

workflow_a = create_workflow()
workflow_b = create_workflow()

🔴 ChatAgent تمت إعادة تسميته إلى Agent، ChatMessage تمت إعادة تسميته إلى Message

PR:#3747

تم تبسيط أنواع Python الأساسية عن طريق إزالة البادئة المكررةChat. لا يتم توفير أسماء مستعارة للتوافق مع الإصدارات السابقة.

قبل بعد
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

تحديث عمليات الاستيراد

قبل:

from agent_framework import ChatAgent, ChatMessage

بعد:

from agent_framework import Agent, Message

تحديث مراجع النوع

قبل:

agent = ChatAgent(
    chat_client=client,
    name="assistant",
    instructions="You are a helpful assistant.",
)

message = ChatMessage(role="user", contents=[Content.from_text("Hello")])

بعد:

agent = Agent(
    client=client,
    name="assistant",
    instructions="You are a helpful assistant.",
)

message = Message(role="user", contents=[Content.from_text("Hello")])

Note

ChatClient ChatOptions، ChatResponse، ولا تتم إعادة تسميتها بواسطة هذا التغيير.


🔴 أنواع API مراجعة التحديثات عبر نماذج الاستجابة/الرسائل

PR:#3647

يتضمن هذا الإصدار تنظيفا واسعا وكسرا لكتابة الرسائل/الاستجابة وواجهات برمجة التطبيقات المساعدة.

  • Roleوهي FinishReason الآن برامج تضمين مع/strFinishReasonLiteralRoleLiteralللقيم المعروفة.NewType تعامل معها كسلاسل (بدون .value استخدام).
  • Message يتم توحيد البناء على Message(role, contents=[...])؛ يتم تحويل السلاسل في contents تلقائيا إلى محتوى نصي.
  • ChatResponse وتتركز AgentResponse الدالات الإنشائية الآن على messages= (مفرد Message أو تسلسل)؛ تمت إزالة استخدام الدالة text= الإنشائية القديمة من الاستجابات.
  • ChatResponseUpdate ولم AgentResponseUpdate يعد يقبل text=؛ استخدم contents=[Content.from_text(...)].
  • تم تبسيط أسماء المساعدين التي تجمع بين التحديثات.
  • try_parse_value تمت إزالة من ChatResponse و AgentResponse.

إعادة تسمية أسلوب المساعد

قبل بعد
ChatResponse.from_chat_response_updates(...) ChatResponse.from_updates(...)
ChatResponse.from_chat_response_generator(...) ChatResponse.from_update_generator(...)
AgentResponse.from_agent_run_response_updates(...) AgentResponse.from_updates(...)

تحديث بناء تحديث الاستجابة

قبل:

update = AgentResponseUpdate(text="Processing...", role="assistant")

بعد:

from agent_framework import AgentResponseUpdate, Content

update = AgentResponseUpdate(
    contents=[Content.from_text("Processing...")],
    role="assistant",
)

استبدل try_parse_value ب try/except في .value

قبل:

if parsed := response.try_parse_value(MySchema):
    print(parsed.name)

بعد:

from pydantic import ValidationError

try:
    parsed = response.value
    if parsed:
        print(parsed.name)
except ValidationError as err:
    print(f"Validation failed: {err}")

🔴 run / get_response نموذج موحد واستخدام ResponseStream

PR:#3379

تم دمج Python واجهات برمجة التطبيقات حول agent.run(...) وclient.get_response(...)، مع تدفق يمثله ResponseStream.

قبل:

async for update in agent.run_stream("Hello"):
    print(update)

بعد:

stream = agent.run("Hello", stream=True)
async for update in stream:
    print(update)

🔴 إعادة تسمية نوع السياق/البروتوكول الأساسي

PRs:#3714، #3717

قبل بعد
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

تحديث عمليات الاستيراد وكتابة التعليقات التوضيحية وفقا لذلك.


🔴 تمت إعادة تسمية معلمة متابعة البرنامج الوسيط إلى call_next

PR:#3735

يجب أن تستخدم call_next تواقيع البرامج الوسيطة الآن بدلا من next.

قبل:

async def my_middleware(context, next):
    return await next(context)

بعد:

async def my_middleware(context, call_next):
    return await call_next(context)

🔴 أسماء TypeVar القياسية (TName → NameT)

PR:#3770

تتبع قاعدة التعليمات البرمجية الآن نمط تسمية TypeVar متناسق حيث يتم استخدام اللاحقة T .

قبل:

TMessage = TypeVar("TMessage")

بعد:

MessageT = TypeVar("MessageT")

إذا قمت بالاحتفاظ بأغلفة مخصصة حول الأنواع المعممة لإطار العمل، فمحاذاة أسماء TypeVar المحلية مع الاصطلاح الجديد لتقليل خسارة التعليقات التوضيحية.


🔴 إخراج سير العمل كعامل والتغييرات المتدفقة

PR:#3649

workflow.as_agent() تم تحديث السلوك لمحاذاة الإخراج والتدفق مع أنماط استجابة العامل القياسية. راجع مستهلكي سير العمل كعامل يعتمدون على معالجة الإخراج/التحديث القديمة وتحديثهم إلى التدفق الحالي AgentResponse/AgentResponseUpdate .


🔴 تم نقل أساليب منشئ Fluent إلى معلمات الدالة الإنشائية

PR:#3693

تم ترحيل أساليب التكوين الأحادي بطلاقة عبر 6 بناة (WorkflowBuilder، SequentialBuilder، ConcurrentBuilder، GroupChatBuilder، MagenticBuilder، HandoffBuilder) إلى معلمات الدالة الإنشائية. تتم إزالة أساليب Fluent التي كانت مسار التكوين الوحيد لإعداد لصالح وسيطات الدالة الإنشائية.

WorkflowBuilder

set_start_executor()، with_checkpointing()و، و with_output_from() تتم إزالتها. استخدم معلمات الدالة الإنشائية بدلا من ذلك.

قبل:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = (
    WorkflowBuilder(start_executor=upper)
    .add_edge(upper, reverse)
    .set_start_executor(upper)
    .with_checkpointing(storage)
    .build()
)

بعد:

upper = UpperCaseExecutor(id="upper")
reverse = ReverseExecutor(id="reverse")

workflow = (
    WorkflowBuilder(start_executor=upper, checkpoint_storage=storage)
    .add_edge(upper, reverse)
    .build()
)

SequentialBuilder / ConcurrentBuilder

participants()تتم register_participants()إزالة و وwith_intermediate_outputs(). with_checkpointing() استخدم معلمات الدالة الإنشائية بدلا من ذلك.

قبل:

workflow = SequentialBuilder().participants([agent_a, agent_b]).with_checkpointing(storage).build()

بعد:

workflow = SequentialBuilder(participants=[agent_a, agent_b], checkpoint_storage=storage).build()

GroupChatBuilder

participants() with_orchestrator() with_termination_condition() with_max_rounds() with_checkpointing()تتم إزالة و register_participants()و.with_intermediate_outputs() استخدم معلمات الدالة الإنشائية بدلا من ذلك.

قبل:

workflow = (
    GroupChatBuilder()
    .with_orchestrator(selection_func=selector)
    .participants([agent1, agent2])
    .with_termination_condition(lambda conv: len(conv) >= 4)
    .with_max_rounds(10)
    .build()
)

بعد:

workflow = GroupChatBuilder(
    participants=[agent1, agent2],
    selection_func=selector,
    termination_condition=lambda conv: len(conv) >= 4,
    max_rounds=10,
).build()

MagenticBuilder

participants()تتم إزالة و register_participants()وwith_intermediate_outputs(). with_manager()with_plan_review()with_checkpointing() استخدم معلمات الدالة الإنشائية بدلا من ذلك.

قبل:

workflow = (
    MagenticBuilder()
    .participants([researcher, coder])
    .with_manager(agent=manager_agent)
    .with_plan_review()
    .build()
)

بعد:

workflow = MagenticBuilder(
    participants=[researcher, coder],
    manager_agent=manager_agent,
    enable_plan_review=True,
).build()

HandoffBuilder

with_checkpointing() وتتم with_termination_condition() إزالتها. استخدم معلمات الدالة الإنشائية بدلا من ذلك.

قبل:

workflow = (
    HandoffBuilder(participants=[triage, specialist])
    .with_start_agent(triage)
    .with_termination_condition(lambda conv: len(conv) > 5)
    .with_checkpointing(storage)
    .build()
)

بعد:

workflow = (
    HandoffBuilder(
        participants=[triage, specialist],
        termination_condition=lambda conv: len(conv) > 5,
        checkpoint_storage=storage,
    )
    .with_start_agent(triage)
    .build()
)

تغييرات التحقق من الصحة

  • WorkflowBuilder يتطلب start_executor الآن كوسيطة منشئ (تم تعيينه مسبقا عبر أسلوب بطلاقة)
  • SequentialBuilder، ConcurrentBuilder، GroupChatBuilder، والآن MagenticBuilder تتطلب إما participants أو participant_factories في وقت الإنشاء — لا يؤدي تمرير أي منهما إلى رفع ValueError

Note

HandoffBuilder قبلت participants/participant_factories بالفعل كمعلمات الدالة الإنشائية ولم يتم تغييرها في هذا الصدد.


🔴 أحداث سير العمل الموحدة في واحدة WorkflowEvent مع type تمييز

PR:#3690

تم استبدال جميع الفئات الفرعية لأحداث سير العمل الفردية بفئة عامة WorkflowEvent[DataT] واحدة. بدلا من استخدام isinstance() عمليات التحقق لتحديد أنواع الأحداث، يمكنك الآن التحقق من السلسلة الحرفية event.type (على سبيل المثال، "output"، ، "request_info"). "status" يتبع هذا نفس نمط Content دمج الفئة من python-1.0.0b260123.

فئات الأحداث التي تمت إزالتها

لم تعد فئات الأحداث الفرعية المصدرة التالية موجودة:

الفئة القديمة قيمة جديدة event.type
WorkflowOutputEvent "output"
RequestInfoEvent "request_info"
WorkflowStatusEvent "status"
WorkflowStartedEvent "started"
WorkflowFailedEvent "failed"
ExecutorInvokedEvent "executor_invoked"
ExecutorCompletedEvent "executor_completed"
ExecutorFailedEvent "executor_failed"
SuperStepStartedEvent "superstep_started"
SuperStepCompletedEvent "superstep_completed"

تحديث عمليات الاستيراد

قبل:

from agent_framework import (
    WorkflowOutputEvent,
    RequestInfoEvent,
    WorkflowStatusEvent,
    ExecutorCompletedEvent,
)

بعد:

from agent_framework import WorkflowEvent
# Individual event classes no longer exist; use event.type to discriminate

تحديث عمليات التحقق من نوع الحدث

قبل:

async for event in workflow.run(input_message, stream=True):
    if isinstance(event, WorkflowOutputEvent):
        print(f"Output from {event.executor_id}: {event.data}")
    elif isinstance(event, RequestInfoEvent):
        requests[event.request_id] = event.data
    elif isinstance(event, WorkflowStatusEvent):
        print(f"Status: {event.state}")

بعد:

async for event in workflow.run(input_message, stream=True):
    if event.type == "output":
        print(f"Output from {event.executor_id}: {event.data}")
    elif event.type == "request_info":
        requests[event.request_id] = event.data
    elif event.type == "status":
        print(f"Status: {event.state}")

البث باستخدام AgentResponseUpdate

قبل:

from agent_framework import AgentResponseUpdate, WorkflowOutputEvent

async for event in workflow.run_stream("Write a blog post about AI agents."):
    if isinstance(event, WorkflowOutputEvent) and isinstance(event.data, AgentResponseUpdate):
        print(event.data, end="", flush=True)
    elif isinstance(event, WorkflowOutputEvent):
        print(f"Final output: {event.data}")

بعد:

from agent_framework import AgentResponseUpdate

async for event in workflow.run("Write a blog post about AI agents.", stream=True):
    if event.type == "output" and isinstance(event.data, AgentResponseUpdate):
        print(event.data, end="", flush=True)
    elif event.type == "output":
        print(f"Final output: {event.data}")

كتابة التعليقات التوضيحية

قبل:

pending_requests: list[RequestInfoEvent] = []
output: WorkflowOutputEvent | None = None

بعد:

from typing import Any
from agent_framework import WorkflowEvent

pending_requests: list[WorkflowEvent[Any]] = []
output: WorkflowEvent | None = None

Note

WorkflowEvent هو عام (WorkflowEvent[DataT])، ولكن بالنسبة إلى مجموعات الأحداث المختلطة، استخدم WorkflowEvent[Any] أو غير معلم WorkflowEvent.


🔴 workflow.send_responses* تمت الإزالة؛ استخدام workflow.run(responses=...)

PR:#3720

send_responses() وتمت send_responses_streaming() إزالتها من Workflow. تابع مهام سير العمل المتوقفة مؤقتا عن طريق تمرير الاستجابات مباشرة إلى run().

قبل:

async for event in workflow.send_responses_streaming(
    checkpoint_id=checkpoint_id,
    responses=[approved_response],
):
    ...

بعد:

async for event in workflow.run(
    checkpoint_id=checkpoint_id,
    responses=[approved_response],
    stream=True,
):
    ...

🔴 SharedState تمت إعادة تسميتها إلى State؛ واجهات برمجة التطبيقات لحالة سير العمل متزامنة

PR:#3667

لم تعد واجهات برمجة تطبيقات الحالة تتطلب await، وتم توحيد التسمية:

قبل بعد
ctx.shared_state ctx.state
await ctx.get_shared_state("k") ctx.get_state("k")
await ctx.set_shared_state("k", v) ctx.set_state("k", v)
checkpoint.shared_state checkpoint.state

🔴 تم نقل منشئي التنسيق إلى agent_framework.orchestrations

PR:#3685

منشئو التنسيق موجودون الآن في مساحة اسم حزمة مخصصة.

قبل:

from agent_framework import SequentialBuilder, GroupChatBuilder

بعد:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟡 استجابات الخلفية طويلة الأمد ورمز المتابعة المميز

PR:#3808

يتم الآن دعم استجابات الخلفية لعامل Python يعمل من خلال options={"background": True} وcontinuation_token.

response = await agent.run("Long task", options={"background": True})
while response.continuation_token is not None:
    response = await agent.run(options={"continuation_token": response.continuation_token})

🟡 تمت إضافة أنواع معاينة موفر الجلسة/السياق جنبا إلى جنب

PR:#3763

تم تقديم أنواع البنية الأساسية لبرنامج ربط العمليات التجارية الجديدة للجلسة/السياق جنبا إلى جنب مع واجهات برمجة التطبيقات القديمة للترحيل المتزايد، بما في ذلك SessionContext و BaseContextProvider.


🟡 يتضمن تدفق مترجم التعليمات البرمجية الآن دلتا التعليمات البرمجية المتزايدة

PR:#3775

يعمل مترجم التعليمات البرمجية المتدفقة الآن على تشغيل تحديثات دلتا التعليمات البرمجية لجهاز surface في المحتوى المتدفق حتى تتمكن واجهات المستخدم من عرض التعليمات البرمجية التي تم إنشاؤها تدريجيا.


🟡 @tool يدعم معالجة المخطط الصريح

PR:#3734

يمكن لتعريفات الأدوات الآن استخدام معالجة المخطط الصريح عندما يحتاج إخراج المخطط المستنتج إلى التخصيص.


python-1.0.0b260130 (30 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260130

🟡 ChatOptions والآن ChatResponse/AgentResponse عام عبر تنسيق الاستجابة

PR:#3305

ChatOptions، ChatResponse، والآن AgentResponse يتم تحديد معلمات الأنواع العامة حسب نوع تنسيق الاستجابة. وهذا يتيح استدلال نوع أفضل عند استخدام المخرجات المنظمة مع response_format.

قبل:

from agent_framework import ChatOptions, ChatResponse
from pydantic import BaseModel

class MyOutput(BaseModel):
    name: str
    score: int

options: ChatOptions = {"response_format": MyOutput}  # No type inference
response: ChatResponse = await client.get_response("Query", options=options)
result = response.value  # Type: Any

بعد:

from agent_framework import ChatOptions, ChatResponse
from pydantic import BaseModel

class MyOutput(BaseModel):
    name: str
    score: int

options: ChatOptions[MyOutput] = {"response_format": MyOutput}  # Generic parameter
response: ChatResponse[MyOutput] = await client.get_response("Query", options=options)
result = response.value  # Type: MyOutput | None (inferred!)

Tip

هذا تحسين غير منقطع. تستمر التعليمات البرمجية الموجودة بدون معلمات النوع في العمل. لا تحتاج إلى تحديد الأنواع في مقتطف التعليمات البرمجية أعلاه للخيارات والاستجابة؛ يتم عرضها هنا للوضوح.


🟡 BaseAgent تمت إضافة الدعم ل Claude Agent SDK

PR:#3509

يتضمن Python SDK الآن تنفيذا BaseAgent ل Claude Agent SDK، ما يتيح الاستخدام المستند إلى محول من الدرجة الأولى في إطار عمل العامل.


python-1.0.0b260128 (28 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260128

🔴 AIFunction تمت إعادة تسميتها FunctionTool وإعادة @ai_function تسميتها إلى @tool

PR:#3413

تمت إعادة تسمية الفئة والمصمم للوضوح والاتساق مع مصطلحات الصناعة.

قبل:

from agent_framework.core import ai_function, AIFunction

@ai_function
def get_weather(city: str) -> str:
    """Get the weather for a city."""
    return f"Weather in {city}: Sunny"

# Or using the class directly
func = AIFunction(get_weather)

بعد:

from agent_framework import FunctionTool, tool

@tool
def get_weather(city: str) -> str:
    """Get the weather for a city."""
    return f"Weather in {city}: Sunny"

# Or using the class directly
func = FunctionTool(get_weather)

🔴 تمت إضافة نمط المصنع إلى GroupChat و Magentic؛ إعادة تسمية واجهة برمجة التطبيقات

PR:#3224

تمت إضافة مصنع المشاركين ومصنع المنسق إلى دردشة جماعية. يتضمن أيضا إعادة التسمية:

  • with_standard_manager ← with_manager
  • participant_factories ← register_participant

قبل:

from agent_framework.workflows import MagenticBuilder

builder = MagenticBuilder()
builder.with_standard_manager(manager)
builder.participant_factories(factory1, factory2)

بعد:

from agent_framework.orchestrations import MagenticBuilder

builder = MagenticBuilder()
builder.with_manager(manager)
builder.register_participant(factory1)
builder.register_participant(factory2)

🔴 Github تمت إعادة تسميته إلى GitHub

PR:#3486

تم تحديث أسماء الفئات والحزم لاستخدام الغلاف الصحيح.

قبل:

from agent_framework_github_copilot import GithubCopilotAgent

agent = GithubCopilotAgent(...)

بعد:

from agent_framework_github_copilot import GitHubCopilotAgent

agent = GitHubCopilotAgent(...)

python-1.0.0b260127 (27 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260127

🟡 BaseAgentتمت إضافة دعم GitHub Copilot SDK

PR:#3404

يتضمن BaseAgent Python SDK الآن تنفيذا لتكاملات GitHub Copilot SDK.


python-1.0.0b260123 (23 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260123

🔴 أنواع المحتوى المبسطة إلى فئة واحدة مع منشئات classmethod

PR:#3252

استبدال كافة أنواع المحتوى القديمة (المشتقة من BaseContent) بفئة واحدة Content مع classmethods لإنشاء أنواع معينة.

مرجع الترحيل الكامل

النوع القديم أسلوب جديد
TextContent(text=...) Content.from_text(text=...)
DataContent(data=..., media_type=...) Content.from_data(data=..., media_type=...)
UriContent(uri=..., media_type=...) Content.from_uri(uri=..., media_type=...)
ErrorContent(message=...) Content.from_error(message=...)
HostedFileContent(file_id=...) Content.from_hosted_file(file_id=...)
FunctionCallContent(name=..., arguments=..., call_id=...) Content.from_function_call(name=..., arguments=..., call_id=...)
FunctionResultContent(call_id=..., result=...) Content.from_function_result(call_id=..., result=...)
FunctionApprovalRequestContent(...) Content.from_function_approval_request(...)
FunctionApprovalResponseContent(...) Content.from_function_approval_response(...)

أساليب جديدة إضافية (لا توجد أساليب سابقة مباشرة):

  • Content.from_text_reasoning(...) — للمحتوى المنطقي/التفكيري
  • Content.from_hosted_vector_store(...) — لمراجع مخزن المتجهات
  • Content.from_usage(...) — للحصول على معلومات الاستخدام/الرمز المميز
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) — لأدوات خادم MCP
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) — لمترجم التعليمات البرمجية
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) — لإنشاء الصور

التحقق من النوع

بدلا من isinstance() عمليات التحقق، استخدم الخاصية type :

قبل:

from agent_framework.core import TextContent, FunctionCallContent

if isinstance(content, TextContent):
    print(content.text)
elif isinstance(content, FunctionCallContent):
    print(content.name)

بعد:

from agent_framework import Content

if content.type == "text":
    print(content.text)
elif content.type == "function_call":
    print(content.name)

مثال أساسي

قبل:

from agent_framework.core import TextContent, DataContent, UriContent

text = TextContent(text="Hello world")
data = DataContent(data=b"binary", media_type="application/octet-stream")
uri = UriContent(uri="https://example.com/image.png", media_type="image/png")

بعد:

from agent_framework import Content

text = Content.from_text("Hello world")
data = Content.from_data(data=b"binary", media_type="application/octet-stream")
uri = Content.from_uri(uri="https://example.com/image.png", media_type="image/png")

🔴 أنواع التعليقات التوضيحية المبسطة إلى Annotation و TextSpanRegion TypedDicts

PR:#3252

تم استبدال أنواع التعليقات التوضيحية المستندة إلى الفئة بتعريفات أبسط TypedDict .

النوع القديم نوع جديد
CitationAnnotation (فئة) Annotation (TypedDict مع type="citation")
BaseAnnotation (فئة) Annotation (TypedDict)
TextSpanRegion (فئة مع SerializationMixin) TextSpanRegion (TypedDict)
Annotations (اكتب الاسم المستعار) Annotation
AnnotatedRegions (اكتب الاسم المستعار) TextSpanRegion

قبل:

from agent_framework import CitationAnnotation, TextSpanRegion

region = TextSpanRegion(start_index=0, end_index=25)
citation = CitationAnnotation(
    annotated_regions=[region],
    url="https://example.com/source",
    title="Source Title"
)

بعد:

from agent_framework import Annotation, TextSpanRegion

region: TextSpanRegion = {"start_index": 0, "end_index": 25}
citation: Annotation = {
    "type": "citation",
    "annotated_regions": [region],
    "url": "https://example.com/source",
    "title": "Source Title"
}

Note

نظرا لأن Annotation و TextSpanRegion هما الآن TypedDict، يمكنك إنشاءهما كقواميس بدلا من مثيلات الفئة.


🔴 response_format أخطاء التحقق من الصحة مرئية الآن للمستخدمين

PR:#3274

ChatResponse.value والآن AgentResponse.value ارفع ValidationError عند فشل التحقق من صحة المخطط بدلا من إرجاع بصمت None.

قبل:

response = await agent.run(query, options={"response_format": MySchema})
if response.value:  # Returns None on validation failure - no error details
    print(response.value.name)

بعد:

from pydantic import ValidationError

# Option 1: Catch validation errors
try:
    print(response.value.name)  # Raises ValidationError on failure
except ValidationError as e:
    print(f"Validation failed: {e}")

# Option 2: Safe parsing (returns None on failure)
if result := response.try_parse_value(MySchema):
    print(result.name)

🔴AG-UI تشغيل المنطق المبسط؛ إصلاحات عميل MCP Anthropic

PR:#3322

run تم تبسيط توقيع الأسلوب وسلوكه في AG-UI.

قبل:

from agent_framework.ag_ui import AGUIEndpoint

endpoint = AGUIEndpoint(agent=agent)
result = await endpoint.run(
    request=request,
    run_config={"streaming": True, "timeout": 30}
)

بعد:

from agent_framework.ag_ui import AgentFrameworkAgent

agui_agent = AgentFrameworkAgent(agent=agent)
async for event in agui_agent.run(request):
    ...

🟡يدعم response_format عميل Anthropic الآن المخرجات المنظمة

PR:#3301

يمكنك الآن استخدام تحليل الإخراج المنظم مع عملاء Anthropic عبر response_format، على غرار OpenAI وعملاء Azure.


🟡Azure توسيع تكوين الذكاء الاصطناعي (reasoning، rai_config)

PRs:#3403، #3265

Azure تم توسيع دعم الذكاء الاصطناعي مع دعم تكوين المنطق وأثناء rai_config إنشاء العامل.


python-1.0.0b260116 (16 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260116

🔴 create_agent تمت إعادة تسميته إلى as_agent

PR:#3249

الأسلوب الذي تمت إعادة تسميته لوضوح أفضل في الغرض منه.

قبل:

from agent_framework.core import ChatClient

client = ChatClient(...)
agent = client.create_agent()

بعد:

from agent_framework.openai import OpenAIChatClient

client = OpenAIChatClient(...)
agent = client.as_agent()

🔴 WorkflowOutputEvent.source_executor_id تمت إعادة تسميته إلى executor_id

PR:#3166

تمت إعادة تسمية الخاصية لتناسق واجهة برمجة التطبيقات.

قبل:

async for event in workflow.run_stream(...):
    if isinstance(event, WorkflowOutputEvent):
        executor = event.source_executor_id

بعد:

async for event in workflow.run(..., stream=True):
    if event.type == "output":
        executor = event.executor_id

🟡 يدعم AG-UI استمرارية الجلسة المدارة بواسطة الخدمة

PR:#3136

يحتفظ AG-UI الآن بهوية المحادثة المدارة بواسطة الخدمة (على سبيل المثال، جلسات/مؤشرات ترابط مدارة بواسطة Foundry) للحفاظ على استمرارية متعددة الأدوار.


python-1.0.0b260114 (14 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260114

🔴 إعادة بناء التعليمات البرمجية للتنسيق

PR:#3023

إعادة بناء التعليمات البرمجية على نطاق واسع وتبسيط التنسيقات في مهام سير عمل إطار عمل العامل:

  • دردشة المجموعة: تقسيم منفذ المنسق إلى عامل مخصص يستند إلى دالة (BaseGroupChatOrchestrator، GroupChatOrchestrator، AgentBasedGroupChatOrchestrator). مبسطة لنجمة الطوبولوجيا مع نموذج البث.
  • التسليم: تمت إزالة المستوى الفردي والمنسق ودعم المنفذ المخصص. تم نقله إلى نموذج البث باستخدام HandoffAgentExecutor.
  • تسلسلي ومتزامن: آلية معلومات الطلب المبسطة للاعتماد على مهام سير العمل الفرعية عبر AgentApprovalExecutor و AgentRequestInfoExecutor.

قبل:

from agent_framework.workflows import GroupChat, HandoffOrchestrator

# Group chat with custom coordinator
group = GroupChat(
    participants=[agent1, agent2],
    coordinator=my_coordinator
)

# Handoff with single tier
handoff = HandoffOrchestrator(
    agents=[agent1, agent2],
    tier="single"
)

بعد:

from agent_framework.orchestrations import (
    GroupChatOrchestrator,
    HandoffAgentExecutor,
)

# Group chat with star topology
group = GroupChatOrchestrator(
    participants=[agent1, agent2]
)

# Handoff with executor-based approach
handoff = HandoffAgentExecutor(
    agents=[agent1, agent2]
)

🔴 الخيارات المقدمة ك TypedDict و Generic

PR:#3140

تتم الآن كتابة الخيارات باستخدام TypedDict لتحسين أمان النوع والإكمال التلقائي ل IDE.

📖 للحصول على إرشادات الترحيل الكاملة، راجع دليل الخيارات التي تم كتابتها.

قبل:

response = await client.get_response(
    "Hello!",
    model_id="gpt-4",
    temperature=0.7,
    max_tokens=1000,
)

بعد:

response = await client.get_response(
    "Hello!",
    options={
        "model": "gpt-4",
        "temperature": 0.7,
        "max_tokens": 1000,
    },
)

🔴 display_name تمت الإزالة؛ context_provider إلى مفرد؛ middleware يجب أن تكون قائمة

PR:#3139

  • display_name تمت إزالة المعلمة من العوامل
  • context_providers يبقى معلمة التسلسل الجمع الحالية للموفرين
  • middleware يتطلب الآن قائمة (لم يعد يقبل مثيلا واحدا)
  • AggregateContextProvider تمت إزالته من التعليمات البرمجية (استخدم نموذج التنفيذ إذا لزم الأمر)

قبل:

from agent_framework.core import Agent, AggregateContextProvider

agent = Agent(
    name="my-agent",
    display_name="My Agent",
    context_providers=[provider1, provider2],
    middleware=my_middleware,  # single instance was allowed
)

aggregate = AggregateContextProvider([provider1, provider2])

بعد:

from agent_framework import Agent

agent = Agent(
    name="my-agent",  # display_name removed
    client=client,
    context_providers=[provider1, provider2],
    middleware=[my_middleware],  # must be a list now
)

# For reusable provider composition, create your own aggregate
class MyAggregateProvider:
    def __init__(self, providers):
        self.providers = providers
    # ... implement aggregation logic

🔴 AgentRunResponse* تمت إعادة تسميته إلى AgentResponse*

PR:#3207

AgentRunResponse AgentRunResponseUpdate وتمت إعادة تسميتها إلى AgentResponse وAgentResponseUpdate.

قبل:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

بعد:

from agent_framework import AgentResponse, AgentResponseUpdate

🟡 تمت إضافة وقت تشغيل سير العمل التعريفي لسير العمل المعرف بواسطة YAML

PR:#2815

تمت إضافة وقت تشغيل يستند إلى الرسم البياني لتنفيذ مهام سير عمل YAML التعريفية، ما يتيح التنسيق متعدد العوامل دون رمز وقت التشغيل المخصص.


🟡 تحسينات تحميل/موثوقية MCP

PR:#3154

اكتسبت عمليات تكامل MCP سلوكا محسنا لفقدان الاتصال ودعم ترقيم الصفحات عند التحميل وخيارات التحكم في التمثيل.


🟡 يدعم Foundry A2ATool الآن الاتصالات بدون عنوان URL الهدف

PR:#3127

A2ATool يمكنه الآن حل اتصالات A2A المدعومة من Foundry عبر بيانات تعريف اتصال المشروع حتى عندما لا يتم تكوين عنوان URL هدف مباشر.


python-1.0.0b260107 (7 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260107

لا توجد تغييرات هامة في هذا الإصدار.


python-1.0.0b260106 (6 يناير 2026)

ملاحظات الإصدار:python-1.0.0b260106

لا توجد تغييرات هامة في هذا الإصدار.


جدول الملخص

Release ملاحظات الإصدار Type التغيير العلاقات العامة
1.23.0 Notes 🔴 كسر تستخدم عمليات تكامل MCP دورة حياة العميل عالية المستوى MCP SDK 2.x؛ تتم إزالة دعم WebSocket والمهام #9236
1.23.0 Notes 🔴 كسر تتطلب نقاط النهاية AG-UI محلل نطاق التخويل أو إعلانا صريحا single_user=True #9413
1.23.0 Notes 🔴 كسر DockerShellTool.extra_run_args تمت إعادة تسميته إلى unsafe_extra_run_args #9453
1.23.0 Notes 🟡 تحسين يقوم A2A بإعادة توجيه سياق التشغيل المحدد وقبوله من خلال قوائم السماح المستقلة #9192، #9193
1.23.0 Notes 🟡 تحسين يمكن للوكلاء التسلسليين إلحاق استدعاء فقط دور المستخدم اللاحق لتوافق الموفر #8779
1.23.0 Notes 🟡 تحسين يتوسع دعم Python 3.15 إلى Hyperlight و A2UI و DuckDB —
1.23.0 Notes 🟡 تحسين مهارة قابلة للتكوين agent-framework-builder-python لوكلاء الترميز المتوافقين #9374
1.22.0 Notes 🔴 كسر يتم دمج ملكية تنفيذ المحتوى ومساحات أسماء بيانات التعريف ودلالات دمج الدفق #8886
1.22.0 Notes 🟡 تحسين تمت إضافة دعم Python 3.15 وإهمال Python 3.10 #9363
1.21.0 Notes 🟡 تحسين يدعم عملاء OpenAI الحد الأقصى من الجهد المنطقي #8857
1.21.0 Notes 🟡 تحسين تمت إضافة موصل مخزن متجهات قاعدة بيانات Oracle AI كحزمة ألفا #8676
1.21.0 Notes 🟡 تحسين تظل جلسات الخدمة المملوكة لموفر الخدمة معزولة عند تشغيل الوكلاء كأدوات #8853
1.20.0 Notes 🔴 كسر يتم تعيين استدعاءات Foundry افتراضيا إلى JSON وSSE المؤطرة #8894
1.20.0 Notes 🔴 كسر تتطلب سمات كائن سير العمل التعريفي أسماء آمنة #8893
1.20.0 Notes 🔴 كسر تفصل استضافة استجابات Foundry المحفوظات وتخزين الاستجابة وتنفيذ الخلفية #8794
1.20.0 Notes 🔴 كسر يستخدم GOOGLE_* Gemini الإعدادات ويضيف Embedding 2 #8798
1.20.0 Notes 🔴 كسر تنتقل جلسات استدعاء Foundry إلى التخزين المستمر #8593
1.20.0 Notes 🔴 كسر تتطلب الموافقات على الأدوات المحلية جلسة الإصدار #8750
1.20.0 Notes 🔴 كسر تستخدم نصوص الموافقة المستمرة عناصر التحكم في الموافقة المكتوبة #8579
1.20.0 Notes 🔴 كسر يتم فصل سياق وقت تشغيل MCP ورؤوس الموافقة #8589
1.20.0 Notes 🔴 كسر حالة Power Fx التعريفية ترفض الدورات وتفرض حدود الاجتياز #8511
1.20.0 Notes 🔴 كسر تتطلب طلبات HTTP لسير العمل عناوين URL مطلقة ل HTTP(S) #8588
1.19.0 Notes 🔴 كسر أرشيفات مهارة MCP هي ZIP فقط ويتم إهمال أخذ العينات #8290، #8401
1.19.0 Notes 🔴 كسر يجب تكوين استمرارية ملف تعريف ارتباط HTTP بشكل صريح #8371
1.19.0 Notes 🔴 كسر تتضمن مفاتيح محفوظات Redis هوية الموفر والجلسة #8236
1.19.0 Notes 🟡 تحسين تضيف واجهات برمجة التطبيقات المشتركة لمتجر المتجهات MongoDB Azure DocumentDB وموصلات Azure Cosmos DB #8184، #8185، #8186
1.18.0 Notes 🔴 كسر يتم تثبيت المختبر بشكل منفصل ويدعم Foundry Azure مشاريع الذكاء الاصطناعي 2.6 #8188
1.18.0 Notes 🔴 كسر تستخدم المتاجر المدعومة بالملفات تسوية المسار المشترك #8123
1.18.0 Notes 🔴 كسر SecretString لم يعد يرث من str #8127
1.18.0 Notes 🔴 كسر GitHub Copilot خطافات ملفات مساحة العمل هي الاشتراك #7517
1.17.0 Notes 🔴 كسر تتطلب مدخلات البرامج الوسيطة تسلسلا ويتم تثبيت Agent Hooks بشكل منفصل #7918
1.15.0 Notes 🟡 تحسين MiddlewareFailure يضيف سلوكا فادحا ومغلق الفشل للبرامج الوسيطة للدالة #7562
1.14.0 Notes 🟡 تحسين المنطق المشفر هو الاشتراك في دردشة Foundry #7536
1.14.0 Notes 🟡 تحسين يضيف Agent Hooks برنامج وسيط تجريبي للاعتراض AGENT-HOOKS-0.1 #7515
1.8.0 Notes 🔴 كسر github-copilot-sdk تمت الترقية إلى الإصدار 1.0.0: SubprocessConfig تمت إزالتها (use RuntimeConnection + kwargs)، مسارات الاستيراد المنقولة إلى copilot.session_events، copilot_home → base_directory، تستخدم معالجات الأذونات أنواع قرارات ملموسة #6292
1.8.0 Notes 🟡 تحسين التعرض التدريجي للأداة عبر FunctionInvocationContext #6233
1.8.0 Notes 🟡 تحسين اكتشاف المهارات المستندة إلى MCP (McpSkillsSource) #6169
1.8.0 Notes 🟡 تحسين دعم الإخراج الأصلي المهيكل ل Bedrock عبر واجهة برمجة تطبيقات العكس #6052
1.8.0 Notes 🟡 تحسين تكامل التقييمات التكيفية ل Foundry (جيل التقييم) #6101
1.8.0 Notes 🟡 تحسين تضمين حزمة العميل في Mistral AI #5480
1.8.0 Notes 🟡 تحسين agent-framework-declarative تمت ترقيته لإصدار مرشح #6256
1.7.0 Notes 🔴 كسر تعريفي: إجراءات Python فقط التي تمت إزالتها وأنواع الأسماء المستعارة التي تمت إعادة تسميتها إلى أسماء C# المتعارف عليها #6126
1.7.0 Notes 🟡 تحسين HarnessAgent تمت إضافة موفر تسخير وكلاء الخلفية والخلفية #6041
1.7.0 Notes 🟡 تحسين A2AAgentSession مع معرفات المهام المشار إليها والدعم المطلوب للإدخال #5980
1.6.0 Notes 🔴 كسر تمكين تقرير عن حالة النظام افتراضيا للحزم الأساسية وحزم المكتشف #5865
1.6.0 Notes 🟡 تحسين أداة Shell مع دعم تنفيذ محلي ودعم تنفيذ Docker #5664
1.6.0 Notes 🟡 تحسين حزمة موفر CodeAct جديدة agent-framework-monty #5915
1.4.0 Notes 🔴 كسر [المهارات التجريبية] محاذاة اكتشاف مجلد مهارة الملفات مع مواصفات agentskills.io #5807
1.4.0 Notes 🔴 كسر [المهارات التجريبية] استخراج بيانات تعريف مواصفات المهارة في SkillFrontmatter #5775
1.4.0 Notes 🔴 كسر DevUI: تشديد عناصر التحكم الافتراضية في الوصول ووضع CORS #5740
1.4.0 Notes 🔴 كسر A2A: الترحيل إلى a2a-sdk v1.0 #5752
1.3.0 Notes 🔴 كسر [المهارات التجريبية] إعادة هيكلة مهارات الوكيل إلى بنية متعددة المصادر #5584
1.3.0 Notes 🟡 تحسين ClassSkill لتعريفات المهارة المستندة إلى الفئة مع بيانات التعريف التعريفية #5678
1.3.0 Notes 🟡 تحسين الدفاع عن حقن المطالبة بالتحكم في تدفق المعلومات #5331
1.3.0 Notes 🟡 تحسين github-copilot-sdk تمت الترقية إلى الإصدار 1.0.0b2 باستخدام instruction_directories و copilot_home #5665
1.2.2 Notes 🔴 كسر يتم توحيد مخرجات محطة التنسيق على أنها AgentResponse؛ Workflow.as_agent() ترجع الإجابة النهائية فقط #5301
1.2.2 Notes 🟡 تحسين Azure حزمة موفر سياق فهم محتوى الذكاء الاصطناعي #4829
1.1.0 Notes 🔴 كسر CosmosCheckpointStorage إلغاء تسلسل المخلل المقيد بشكل افتراضي #5200
1.1.0 Notes 🟡 تحسين GeminiChatClient تمت الإضافة #4847
1.1.0 Notes 🟡 تحسين حزمة Hyperlight CodeAct #5185
1.1.0 Notes 🟡 تحسين دعم مربعات أدوات Foundry #5346
1.1.0 Notes 🟡 تحسين finish_reason في AgentResponse و AgentResponseUpdate #5211
1.0.1 Notes 🔴 كسر FileCheckpointStorage إلغاء تسلسل المخلل المقيد (تصلب الأمان) #4941
1.0.1 Notes 🔴 كسر إصلاح إدارة سياق سير عمل التسليم #5136
1.0.1 Notes 🟡 تحسين Cosmos DB NoSQL تخزين نقاط التفتيش لسير العمل #4916
1.0.0 Notes 🔴 كسر Message(..., text=...) تمت إزالة البناء بالكامل؛ إنشاء رسائل نصية باستخدام contents=[...] بدلا من ذلك #5062
1.0.0 Notes 🟡 تحسين حزم Python التي تم إصدارها (agent-framework، ، agent-framework-core، agent-framework-openai، agent-framework-foundry) لم تعد تتطلب --pre؛ لا تزال موصلات بيتا تفعل #5062
1.0.0 Notes 🔴 كسر Python التضمينات التي تم نقلها إلى agent_framework.foundry؛ FoundryEmbeddingClientاستخدام agent-framework-foundryالإعدادات و و FOUNDRY_MODELS_* بدلا من الحزمة التي تمت إزالتها agent-framework-azure-ai #5056
1.0.0 Notes 🔴 كسر workflow.run() يستخدم الآن بشكل صريح function_invocation_kwargs / client_kwargs، مع استهداف عمومي مقابل لكل منفذ تحدده معرفات المنفذ #5010
1.0.0 Notes 🟡 تحسين GitHubCopilotAgent يستدعي الآن خطافات موفر before_run / after_run السياق ويتضمن سياق المطالبة الذي أضافه الموفر #5013
1.0.0 Notes 🟡 تحسين يقبل الإخراج المنظم Python الآن تعيينات مخطط JSON ك response_format، مع عرض JSON المحلل علىresponse.value #5022
1.0.0rc6 طلب السحب فقط 🔴 كسر تمت إزالة أسطح التوافق Azure/OpenAI المهملة؛ استخدم عملاء OpenAI الرائدين في الموفر أو عملاء Python Foundry بدلا من ذلك #4990
1.0.0rc6 طلب السحب فقط 🔴 كسر إعادة بناء التعليمات البرمجية الرائدة للموفر: تقسيم agent-framework-openaiagent-framework-foundry، و، وagent-framework-foundry-local، وإعادة تسمية عملاء OpenAI؛ ونقل Foundry إلى agent_framework.foundry؛ إهمال مسارات توافق الذكاء الاصطناعي والمساعدين Azure #4818
1.0.0rc6 طلب السحب فقط 🔴 كسر agent-framework-coreأصبح الآن ضئيلا عن قصد؛ تثبيت حزم الموفر الصريحة مثل agent-framework-openai أو ، وتثبيت mcp يدويا لأدوات MCP على الحد الأدنى من التثبيتات، أو استخدام حزمة agent-framework التعريف agent-framework-foundryلتجربة افتراضية أوسع #4904
1.0.0rc6 طلب السحب فقط 🔴 كسر يفضل العملاء العامون agent_framework.openai الآن إشارات التوجيه الصريحة؛ يبقى OpenAI على OpenAI عند OPENAI_API_KEY تعيينه، ويجب أن تمر سيناريوهات Azure Azure مدخلات توجيه صريحة مثل credential أو azure_endpoint، ثم تكوينapi_version #4925
1.0.0rc5 / 1.0.0b260318 غير متاح (مجدول) 🔴 كسر يتم تقسيم kwargs وقت التشغيل العام إلى function_invocation_kwargs و client_kwargs؛ تستخدم الأدوات الآن FunctionInvocationContext / ctx.session #4581
1.0.0rc4 / 1.0.0b260311 Notes 🔴 كسر Azure تستهدف azure-ai-projects عمليات تكامل الذكاء الاصطناعي الآن 2.0 GA؛ foundry_features تمت إزالتها allow_preview وهي الاشتراك في المعاينة #4536
1.0.0rc4 / 1.0.0b260311 Notes 🔴 كسر يستخدم ToolInvocation / ToolResultالتكامل GitHub Copilot الآن ؛ agent-framework-github-copilot يتطلب Python 3.11+ #4551
1.0.0rc3 / 1.0.0b260304 Notes 🔴 كسر يضيف موفر المهارات تعليمة برمجية محددة Skill / SkillResource؛ يجب تحديث عمليات الاستيراد القديمة FileAgentSkillsProvider ومراجع موارد backtick #4387
1.0.0rc2 / 1.0.0b260226 Notes 🔴 كسر تستبدل InvokeTool مهام سير العمل التعريفية ب InvokeFunctionTool و WorkflowFactory.register_tool() #3716
1.0.0rc1 / 1.0.0b260219 Notes 🔴 كسر معالجة بيانات الاعتماد Azure الموحدة عبر حزم Azure #4088
1.0.0rc1 / 1.0.0b260219 Notes 🔴 كسر Python التدرج الهرمي للاستثناء المعاد تصميمه ضمنAgentFrameworkException #4082
1.0.0rc1 / 1.0.0b260219 Notes 🔴 كسر تم تحديد نطاق حالة الموفر الآن بواسطة source_id #3995
1.0.0rc1 / 1.0.0b260219 Notes 🔴 كسر يجب أن تقبل التطبيقات المخصصة get_response()Sequence[Message] #3920
1.0.0rc1 / 1.0.0b260219 Notes 🔴 كسر FunctionTool[Any] تمت إزالة schema passthrough shim #3907
1.0.0rc1 / 1.0.0b260219 Notes 🔴 كسر تم نقل الإعدادات من AFBaseSettings / إعدادات pydantic إلى TypedDict + load_settings() #3843، #4032
1.0.0rc1 / 1.0.0b260219 Notes 🟡 تحسين تم إصلاح تسليم سير عمل نموذج المنطق وتسلسل المحفوظات #4083
1.0.0rc1 / 1.0.0b260219 Notes 🟡 تحسين تم إضافة Bedrock إلى core[all]؛ تم إصلاح الإعدادات الافتراضية لاختيار الأدوات #3953
1.0.0rc1 / 1.0.0b260219 Notes 🟡 تحسين AzureAIClient يحذر من تجاوزات وقت التشغيل غير المدعومة #3919
1.0.0rc1 / 1.0.0b260219 Notes 🟡 تحسين workflow.as_agent() إدخال المحفوظات المحلية عند إلغاء تعيين الموفرين #3918
1.0.0rc1 / 1.0.0b260219 Notes 🟡 تحسين ينشر سياق تتبع OpenTelemetry إلى طلبات MCP #3780
1.0.0rc1 / 1.0.0b260219 Notes 🟡 تحسين تمت إضافة دعم دائم لسير العمل دالات Azure #3630
1.0.0b260212 Notes 🔴 كسر Hosted*Toolتمت إزالة الفئات؛ إنشاء أدوات مستضافة عبر أساليب العميل get_*_tool() #3634
1.0.0b260212 Notes 🔴 كسر تم الانتهاء من البنية الأساسية لبرنامج ربط العمليات التجارية لموفر الجلسة/السياق: AgentThread تمت إزالته، واستخدام AgentSession + context_providers #3850
1.0.0b260212 Notes 🔴 كسر نموذج نقطة التحقق/إعادة بناء التعليمات البرمجية للتخزين (workflow_id تمت إزالتها وإضافتها previous_checkpoint_id وتغيير سلوك التخزين) #3744
1.0.0b260212 Notes 🟡 تحسين AzureOpenAIResponsesClient يمكن إنشاؤه من نقطة نهاية مشروع Foundry أو AIProjectClient #3814
1.0.0b260212 Notes 🔴 كسر لم تعد متابعة البرامج الوسيطة contextتقبل ؛ قم بتحديث call_next(context) إلى call_next() #3829
1.0.0b260210 Notes 🔴 كسر send_responses() / send_responses_streaming() تمت الإزالة؛ استخدام workflow.run(responses=...) #3720
1.0.0b260210 Notes 🔴 كسر SharedState State→ ؛ واجهات برمجة التطبيقات لحالة سير العمل متزامنة وحقل حالة نقطة التحقق تمت إعادة تسميته #3667
1.0.0b260210 Notes 🔴 كسر تم نقل منشئي التنسيق إلى agent_framework.orchestrations الحزمة #3685
1.0.0b260210 Notes 🟡 تحسين تمت إضافة استجابات الخلفية والدعم continuation_token إلى استجابات عامل Python #3808
1.0.0b260210 Notes 🟡 تحسين تمت إضافة أنواع معاينة الجلسة/السياق جنبا إلى جنب (SessionContext، BaseContextProvider) #3763
1.0.0b260210 Notes 🟡 تحسين تتضمن تحديثات مترجم التعليمات البرمجية المتدفقة الآن دلتا التعليمات البرمجية المتزايدة #3775
1.0.0b260210 Notes 🟡 تحسين @tool يضيف مصمم الديكور دعما صريحا لمعالجة المخطط #3734
1.0.0b260210 Notes 🔴 كسر register_executor() / register_agent() تمت إزالتها من WorkflowBuilder؛ استخدم المثيلات مباشرة، وأساليب المساعد لعزل الحالة #3781
1.0.0b260210 Notes 🔴 كسر ChatAgent Agent→ ، ChatMessage → Message، RawChatAgent → RawAgent، ChatClientProtocol →SupportsChatGetResponse #3747
1.0.0b260210 Notes 🔴 كسر مراجعة واجهة برمجة تطبيقات الأنواع: Role/FinishReason تغييرات النوع، وتشديد منشئ الاستجابة/التحديث، وإعادة تسمية المساعد إلى from_updates، وإزالة try_parse_value #3647
1.0.0b260210 Notes 🔴 كسر واجهات برمجة التطبيقات الموحدة حول run/get_response و ResponseStream #3379
1.0.0b260210 Notes 🔴 كسر AgentRunContext تمت إعادة تسميته إلى AgentContext #3714
1.0.0b260210 Notes 🔴 كسر AgentProtocol تمت إعادة تسميته إلى SupportsAgentRun #3717
1.0.0b260210 Notes 🔴 كسر تمت إعادة تسمية معلمة البرنامج الوسيط next إلى call_next #3735
1.0.0b260210 Notes 🔴 كسر تسمية TypeVar قياسية (TName → NameT) #3770
1.0.0b260210 Notes 🔴 كسر سلوك إخراج/دفق سير العمل كعامل يتماشى مع تدفق استجابة العامل الحالي #3649
1.0.0b260210 Notes 🔴 كسر تم نقل أساليب منشئ Fluent إلى معلمات المنشئ عبر 6 بناة #3693
1.0.0b260210 Notes 🔴 كسر أحداث سير العمل موحدة في واحدة WorkflowEvent مع type تمييزية؛ isinstance() → event.type == "..." #3690
1.0.0b260130 Notes 🟡 تحسين ChatOptions / ChatResponse / AgentResponse عام عبر تنسيق الاستجابة #3305
1.0.0b260130 Notes 🟡 تحسين BaseAgent تمت إضافة الدعم لتكاملات Claude Agent SDK #3509
1.0.0b260128 Notes 🔴 كسر AIFunction FunctionTool→ ، @ai_function →@tool #3413
1.0.0b260128 Notes 🔴 كسر نمط المصنع ل GroupChat/Magentic؛ with_standard_managerwith_manager→ ، participant_factories → register_participant #3224
1.0.0b260128 Notes 🔴 كسر Github ← GitHub #3486
1.0.0b260127 Notes 🟡 تحسين BaseAgentتمت إضافة الدعم لتكاملات SDK GitHub Copilot #3404
1.0.0b260123 Notes 🔴 كسر أنواع المحتويات المدمجة في فئة واحدة Content مع فئات #3252
1.0.0b260123 Notes 🔴 كسر response_format تظهر أخطاء التحقق من الصحة الآن ValidationError #3274
1.0.0b260123 Notes 🔴 كسر AG-UI تشغيل المنطق المبسط #3322
1.0.0b260123 Notes 🟡 تحسين يضيف response_format عميل Anthropic دعما للمخرجات المنظمة #3301
1.0.0b260123 Notes 🟡 تحسين تم توسيع تكوين الذكاء الاصطناعي Azure بدعم reasoning و rai_config #3403، #3265
1.0.0b260116 Notes 🔴 كسر create_agent ← as_agent #3249
1.0.0b260116 Notes 🔴 كسر source_executor_id ← executor_id #3166
1.0.0b260116 Notes 🟡 تحسين يدعم AG-UI استمرارية الجلسة/مؤشر الترابط المدار بواسطة الخدمة #3136
1.0.0b260114 Notes 🔴 كسر إعادة بناء التعليمات البرمجية للتزامن (GroupChat، Handoff، تسلسلي، متزامن) #3023
1.0.0b260114 Notes 🔴 كسر خيارات ك TypedDict و Generic #3140
1.0.0b260114 Notes 🔴 كسر display_name تمت الإزالة؛ context_providerscontext_provider → (مفرد)؛ middleware يجب أن تكون قائمة #3139
1.0.0b260114 Notes 🔴 كسر AgentRunResponse / AgentRunResponseUpdate تمت إعادة تسميته إلى AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 Notes 🟡 تحسين تمت إضافة وقت تشغيل سير العمل التعريفي لسير العمل المعرف بواسطة YAML #2815
1.0.0b260114 Notes 🟡 تحسين تحسينات تحميل/موثوقية MCP (معالجة فقدان الاتصال، ترقيم الصفحات، عناصر التحكم في التمثيل) #3154
1.0.0b260114 Notes 🟡 تحسين يدعم Foundry A2ATool الاتصالات دون عنوان URL الهدف الصريح #3127
1.0.0b260107 Notes — لا توجد تغييرات هامة —
1.0.0b260106 Notes — لا توجد تغييرات هامة —

الخطوات التالية