إشعار
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تسجيل الدخول أو تغيير الدلائل.
يتطلب الوصول إلى هذه الصفحة تخويلاً. يمكنك محاولة تغيير الدلائل.
يسرد هذا المستند جميع التغييرات الهامة في إصدارات Python منذ بداية 2026، بما في ذلك التغييرات العاجلة والتحسينات الهامة التي قد تؤثر على التعليمات البرمجية الخاصة بك. يتم وضع علامة على كل تغيير على أنه:
- 🔴 التعطل — يتطلب تغييرات في التعليمات البرمجية للترقية
- 🟡 التحسين - إمكانية جديدة أو تحسين؛ التعليمات البرمجية الموجودة تستمر في العمل
يتتبع هذا المستند التغييرات الهامة Python عبر جميع إصدارات 2026، لذا يرجى الرجوع إليه عند الترقية بين الإصدارات للتأكد من عدم تفويت أي تغييرات مهمة. للحصول على إرشادات ترقية مفصلة حول مواضيع محددة (على سبيل المثال، ترحيل الخيارات)، راجع أدلة الترقية المرتبطة أو العلاقات العامة المرتبطة.
غير تم الإصدار
🔴 تتطلب مدخلات البرامج الوسيطة تسلسلا، ويتم تثبيت 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 موفر تسخير وكلاء الخلفية والخلفية
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: قناة عرض نتائج الأداة وطرح ترقية المرشح
يضيف قناة عرض نتائج الأداة إلى 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/AzureAIAgentsProviderFoundryChatClient→ أوFoundryAgent، اعتمادا على ما إذا كان تطبيقك يمتلك تعريف العامل -
OpenAIAssistantsClient/OpenAIAssistantProviderOpenAIChatClient→ لعمل 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 -
AzureOpenAIAssistantsClientOpenAIChatClient→ لترحيل واجهة برمجة تطبيقات الاستجابات المباشرة، أو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-project.services.ai.azure.com",
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_MODELOpenAI الآن ل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_MODELAnthropic و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 --preيدويا. لدعم WebSocket MCP، قم بتثبيتmcp[ws] --pre. - إذا كنت تريد تجربة "كل شيء مضمن" واسعة، فقم بتثبيت حزمة
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معالجات الأدوات فئة بيانات بدلا من rawdict. - العودة
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()
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 يتم رفعه.
🟡 إصلاح تسليم سير عمل نموذج المنطق وتسلسل المحفوظات
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-project>.services.ai.azure.com",
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)
🔴 إعادة تسمية نوع السياق/البروتوكول الأساسي
| قبل | بعد |
|---|---|
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)
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 | التغيير | العلاقات العامة |
|---|---|---|---|---|
| غير تم الإصدار | — | 🔴 كسر | تتطلب مدخلات البرامج الوسيطة تسلسلا؛ تثبيت agent-hooks-sdk مباشرة بدلا من استخدام الذاكرة الأساسية التي تمت إزالتها |
#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 | — | لا توجد تغييرات هامة | — |