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

يسرد هذا المستند جميع التغييرات الهامة في إصدارات 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_eventscopilot.session_events.
  • الإعدادات التي تمت إعادة تسميتهاcopilot_homebase_directory; متغير البيئة الآن GITHUB_COPILOT_BASE_DIRECTORY (كان GITHUB_COPILOT_COPILOT_HOME).
  • معالجات الأذونات — استخدم أنواع القرارات الملموسة بدلا من PermissionRequestResult(kind=...). يستبدل المضمن PermissionHandler.approve_all أنماط الموافقة اليدوية.
  • معالج الرفض الافتراضي — يرجع PermissionDecisionUserNotAvailable() الآن (مطابقة السلوك الاحتياطي ل SDK).
  • نوع معالج الأذونات — يدعم الآن كلا من عمليات رد الاتصال المزامنة وغير المتزامنة (Callable[..., PermissionRequestResult | Awaitable[PermissionRequestResult]]).

قبل:

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

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

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

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

بعد:

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

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

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

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

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

PR:#6233

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

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


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

PR:#6169

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


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

PR:#6052

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


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

PR:#6101

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


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

PR:#5480

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


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

PR:#6256

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


python-1.7.0 (28 مايو 2026)

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

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

PR:#6126

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

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

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

PRs:#6041, #6069

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


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

PR:#5980

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


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

PR:#5959

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


python-1.6.0 (21 مايو 2026)

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

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

PR:#5865

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

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

قبل:

from agent_framework import Agent
from agent_framework.observability import configure_otel_providers

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

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

بعد:

from agent_framework import Agent

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

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

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

PR:#5664

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


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

PR:#5915

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


python-1.4.0 (14 مايو 2026)

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

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

PR:#5807

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

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

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

PR:#5775

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

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

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

PR:#5740

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

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

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

PR:#5752

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

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

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

PRs:#5762، #5844

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


python-1.3.0 (7 مايو 2026)

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

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

PR:#5584

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

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

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

PR:#5678

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


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

PR:#5331

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


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

PR:#5665

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


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

PR:#5562

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


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

PR:#5322

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


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

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

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

PR:#5301

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

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

قبل:

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

بعد:

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

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

PR:#4829

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


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

PR:#5531

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


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

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

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

PR:#5200

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

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

قبل:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

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

بعد:

from agent_framework.azure.cosmos import CosmosCheckpointStorage

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

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

PR:#4847

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


🟡 حزمة Hyperlight CodeAct

PR:#5185

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


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

PR:#5346

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


🟡 finish_reason في AgentResponse و AgentResponseUpdate

PR:#5211

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


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

PR:#5379

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


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

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

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

PR:#4941

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

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

قبل:

from agent_framework.workflows import FileCheckpointStorage

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

بعد:

from agent_framework import FileCheckpointStorage

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

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

PR:#5136

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


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

PR:#4916

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


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

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

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

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

PR:#5062

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

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

قبل:

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

بعد:

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

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

PR:#5062

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

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

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

PR:#5056

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

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

قبل:

import os

from agent_framework.azure import AzureAIInferenceEmbeddingClient

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

بعد:

import os

from agent_framework.foundry import FoundryEmbeddingClient

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

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

PR:#5010

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

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

قبل:

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

بعد:

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

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

PR:#5013

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

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

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


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

PR:#5022

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

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

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


python-1.0.0rc6

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

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

PR:#4999

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

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

قبل:

from agent_framework.anthropic import AnthropicClient

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

بعد:

from agent_framework.anthropic import AnthropicClient

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

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

PR:#4992

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

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

قبل:

from agent_framework import BaseHistoryProvider

class CustomHistoryProvider(BaseHistoryProvider):
    ...

بعد:

from agent_framework import Agent, HistoryProvider

class CustomHistoryProvider(HistoryProvider):
    ...

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

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

PR:#4990

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

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

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

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

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

PR:#4818

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

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

تعيين الحزمة

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

قبل:

from agent_framework.openai import OpenAIResponsesClient

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

بعد:

from agent_framework.openai import OpenAIChatClient

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

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

  • AzureOpenAIResponsesClientOpenAIChatClient
  • AzureOpenAIChatClientOpenAIChatCompletionClient
  • AzureOpenAIEmbeddingClientOpenAIEmbeddingClient
  • AzureOpenAIAssistantsClient OpenAIChatClient→ لترحيل واجهة برمجة تطبيقات الاستجابات المباشرة، أو FoundryAgent إذا كنت بحاجة إلى عامل Foundry مدار بواسطة الخدمة

تغيير التعليمات البرمجية هو في الغالب نقل اسم الفئة بالإضافة إلى deployment_namemodel. 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_MODEL OpenAI الآن ل OpenAIChatClientو AZURE_OPENAI_CHAT_COMPLETION_MODEL و OpenAIChatCompletionClientAZURE_OPENAI_MODEL ك الاحتياطي المشترك.
  • استخدم azure_endpoint لعناوين URL لمورد OpenAI Azure، أو base_url إذا كان لديك عنوان URL كامل .../openai/v1 بالفعل، وقم بتعيينه api_version لسطح واجهة برمجة تطبيقات OpenAI Azure الذي تستخدمه
  • اعتماد الإعدادات الخاصة ب Foundry مثل FOUNDRY_PROJECT_ENDPOINTو FOUNDRY_MODELFOUNDRY_AGENT_NAMEو FOUNDRY_AGENT_VERSION لعملاء Cloud Foundry
  • استخدام ANTHROPIC_CHAT_MODEL Anthropic و FOUNDRY_LOCAL_MODEL ل Foundry Local

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


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

PR:#4904

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

  • agent-framework-core هو الآن الحد الأدنى عمدا.
  • إذا قمت باستيراد agent_framework.openai، فقم بتثبيت agent-framework-openai.
  • إذا قمت باستيراد agent_framework.foundryوتثبيت agent-framework-foundry لاستدلال مشروع Foundry والوكلاء المدارين بواسطة الخدمة وموفري الذاكرة والتضمينات. يستخدم agent-framework-foundry-local --pre في أوقات التشغيل المحلية.
  • إذا كنت تستخدم أدوات MCP أو Agent.as_mcp_server()أو عمليات تكامل MCP الأخرى على الحد الأدنى من التثبيت، فقم بتثبيتها mcp --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(),
)

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

  • AzureOpenAIEmbeddingClientOpenAIEmbeddingClient
  • AZURE_OPENAI_EMBEDDING_MODELmodel
  • OPENAI_EMBEDDING_MODEL يبقى متغير بيئة التضمين من جانب OpenAI

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

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

PR:#4746

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

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

ChatMiddleware → FunctionInvocation → RawChatClient

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

FunctionInvocation → ChatMiddleware → ChatTelemetry → RawChatClient

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

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

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

PR:#4581

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

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

قبل:

from typing import Any

from agent_framework import tool


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


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

بعد:

from agent_framework import FunctionInvocationContext, tool


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


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

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


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

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

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

PR:#4536

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

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

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

PR:#4551

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

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

قبل:

from typing import Any


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

بعد:

from copilot.tools import ToolInvocation, ToolResult


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

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

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

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

PR:#4387

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

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

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

from agent_framework import Skill, SkillResource, SkillsProvider

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

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

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

PR:#3716

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

قبل:

actions:
  - kind: InvokeTool
    toolName: send_email

بعد:

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

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

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

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

PR:#4088

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

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

قبل:

from azure.identity import AzureCliCredential, get_bearer_token_provider

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

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

بعد:

from azure.identity import AzureCliCredential

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

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


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

PR:#4082

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

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

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

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

قبل:

from agent_framework.exceptions import ServiceException, ServiceResponseException

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

بعد:

from agent_framework.exceptions import AgentException, AgentInvalidResponseException, AgentFrameworkException

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

Note

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


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

PR:#3995

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

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

قبل:

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

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

بعد:

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

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

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

PR:#3920

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

قبل:

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

بعد:

from collections.abc import Sequence
from agent_framework import Message

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

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

PR:#3907

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

قبل:

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

بعد:

placeholder: FunctionTool = FunctionTool(...)

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

PRs:#3843، #4032

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 وتمت إزالة أنواع موفر السياق القديمة.

  • AgentThreadAgentSession
  • 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)

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

PRs:#3714، #3717

قبل بعد
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

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


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

PR:#3735

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

قبل:

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

بعد:

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

🔴 أسماء TypeVar القياسية (TNameNameT)

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_managerwith_manager
  • participant_factoriesregister_participant

قبل:

from agent_framework.workflows import MagenticBuilder

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

بعد:

from agent_framework.orchestrations import MagenticBuilder

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

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

PR:#3486

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

قبل:

from agent_framework_github_copilot import GithubCopilotAgent

agent = GithubCopilotAgent(...)

بعد:

from agent_framework_github_copilot import GitHubCopilotAgent

agent = GitHubCopilotAgent(...)

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

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

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

PR:#3404

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


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

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

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

PR:#3252

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

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

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

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

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

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

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

قبل:

from agent_framework.core import TextContent, FunctionCallContent

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

بعد:

from agent_framework import Content

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

مثال أساسي

قبل:

from agent_framework.core import TextContent, DataContent, UriContent

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

بعد:

from agent_framework import Content

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

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

PR:#3252

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

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

قبل:

from agent_framework import CitationAnnotation, TextSpanRegion

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

بعد:

from agent_framework import Annotation, TextSpanRegion

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

Note

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


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

PR:#3274

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

قبل:

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

بعد:

from pydantic import ValidationError

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

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

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

PR:#3322

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

قبل:

from agent_framework.ag_ui import AGUIEndpoint

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

بعد:

from agent_framework.ag_ui import AgentFrameworkAgent

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

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

PR:#3301

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


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

PRs:#3403، #3265

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


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

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

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

PR:#3249

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

قبل:

from agent_framework.core import ChatClient

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

بعد:

from agent_framework.openai import OpenAIChatClient

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

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

PR:#3166

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

قبل:

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

بعد:

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

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

PR:#3136

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


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

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

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

PR:#3023

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

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

قبل:

from agent_framework.workflows import GroupChat, HandoffOrchestrator

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

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

بعد:

from agent_framework.orchestrations import (
    GroupChatOrchestrator,
    HandoffAgentExecutor,
)

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

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

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

PR:#3140

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

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

قبل:

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

بعد:

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

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

PR:#3139

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

قبل:

from agent_framework.core import Agent, AggregateContextProvider

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

aggregate = AggregateContextProvider([provider1, provider2])

بعد:

from agent_framework import Agent

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

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

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

PR:#3207

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

قبل:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

بعد:

from agent_framework import AgentResponse, AgentResponseUpdate

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

PR:#2815

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


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

PR:#3154

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


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

PR:#3127

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


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

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

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


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

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

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


جدول الملخص

Release ملاحظات الإصدار Type التغيير العلاقات العامة
غير تم الإصدار 🔴 كسر تتطلب مدخلات البرامج الوسيطة تسلسلا؛ تثبيت 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_homebase_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→ ، ChatMessageMessage، RawChatAgentRawAgent، ChatClientProtocolSupportsChatGetResponse #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 قياسية (TNameNameT) #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_factoriesregister_participant #3224
1.0.0b260128 Notes 🔴 كسر GithubGitHub #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_agentas_agent #3249
1.0.0b260116 Notes 🔴 كسر source_executor_idexecutor_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 لا توجد تغييرات هامة

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