Aracılığıyla paylaş


Python 2026 Önemli Değişiklikler Kılavuzu

Bu belgede, 2026'nın başlangıcından bu yana Python sürümlerindeki önemli değişiklikler ve kodunuzu etkileyebilecek önemli geliştirmeler de dahil olmak üzere tüm önemli değişiklikler listelenmiştir. Her değişiklik şu şekilde işaretlenir:

  • 🔴 Hata — Yükseltme için kod değişiklikleri gerektirir
  • 🟡 Geliştirme — Yeni yetenek veya geliştirme; mevcut kod çalışmaya devam ediyor

Bu belge, 1.0.0 kararlı sürümüne ulaştığımızda kaldırılacaktır, bu nedenle önemli değişiklikleri kaçırmadığınızdan emin olmak için lütfen 2026'daki sürümler arasında yükseltme yaparken bu belgeye başvurun. Belirli konularla ilgili ayrıntılı yükseltme yönergeleri (örneğin, seçenekler geçişi) için ilgili yükseltme kılavuzlarına veya çekme isteklerine bakın.


python-1.0.0rc5 / python-1.0.0b260319 (19 Mart 2026)

🔴 Sohbet istemcisi işlem hattı yeniden sıralandı: FunctionInvocation artık ChatMiddleware'i sarmalar

Pr:#4746

ChatClient işlem hattı sıralaması değiştirildi. FunctionInvocation artık en dıştaki katmandır ve ChatMiddleware'yi sarar, bu da sohbet ara katmanının, işlev çağırma dizisinin tamamında bir kez yerine model çağrısı başına (araç çağırma döngüsünün her yinelemesi dahil) çalıştırıldığı anlamına gelir.

Eski işlem hattı sırası:

ChatMiddleware → FunctionInvocation → RawChatClient

Yeni işlem hattı sırası:

FunctionInvocation → ChatMiddleware → ChatTelemetry → RawChatClient

Özel sohbet ara yazılımınız, her ajan çağrısı başına yalnızca bir kez çalışacak şekilde tasarlandıysa (tüm araç çağrı döngüsünü kapsayacak şekilde), tekrarlayan çalıştırma için güvenli hale gelecek şekilde güncelleyin. Artık, araç sonuçlarını modele geri gönderen istekler de dahil olmak üzere, her bir LLM isteği için chat middleware çağrılır.

Buna ek olarak, ChatTelemetry şimdi işlem hattı içinde ChatMiddleware'den ayrı bir katmandır ve RawChatClient'ye en yakın şekilde çalışır.

🔴 Açık demetlere bölünmüş genel çalışma zamanı kwargs

Pr:#4581

Python genel aracısı ve sohbet API'leri artık kapsamlı genel **kwargs iletmeyi birincil çalışma zamanı veri mekanizması olarak kabul etmiyor. Çalışma zamanı değerleri artık amaca göre bölünür:

  • Yalnızca araçların veya işlev ara yazılımının görmesi gereken değerler için kullanın function_invocation_kwargs .
  • client_kwargs'i istemci katmanı kwargs ve istemci ara yazılım yapılandırması için kullanın.
  • FunctionInvocationContext ve ctx.kwargs aracılığıyla ctx.session ile araç/çalışma zamanı verilerine erişme.
  • Araçları yerine eklenen bağlam parametresiyle **kwargstanımlayın; eklenen bağlam parametreleri modelin gördüğü şemada gösterilmez.
  • Bir alt aracıya araç olarak atadığınızda, eğer alt ajan çağıranın oturumunu paylaşmalıysa, agent.as_tool(propagate_session=True) kullanın.

Before:

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",
)

After:

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",
    },
)

Özel bir run() veya get_response() yöntem uygularsanız, bu imzalara function_invocation_kwargs ve client_kwargs ekleyin. Araçlar için, FunctionInvocationContext olarak açıklama ekli bir parametreyi tercih edin; bu, ctx, context veya başka bir açıklamalı ad olarak adlandırılabilir. Belirgin bir şema/giriş modeli sağlarsanız, ctx olarak adlandırılan düz ve notlandırılmamış bir parametre de tanınır. Aynı bağlam nesnesi, işlev ara yazılımı için de kullanılabilir ve çalışma zamanı işlevi kwargs ve oturum durumunun canlı olduğu yerdir. Hala kullanan **kwargs araç tanımları yalnızca eski bir uyumluluk yolu kullanır ve kaldırılır.


python-1.0.0rc4 / python-1.0.0b260311 (11 Mart 2026)

Sürüm Notları:python-1.0.0rc4

🔴Azure yapay zeka tümleştirmeleri artık 2.0 GA'yi hedeflemektedir azure-ai-projects

Pr:#4536

Python Azure AI tümleştirmeleri artık GA 2.0 azure-ai-projects yüzeyini varsayıyor.

  • Desteklenen bağımlılık aralığı artık azure-ai-projects>=2.0.0,<3.0şeklindedir.
  • foundry_features Passthrough, Azure AI aracısı oluşturma işleminden kaldırıldı.
  • Önizleme davranışı artık desteklenen istemcilerde/sağlayıcılarda allow_preview=True kullanıyor.
  • Karma beta/GA uyumluluk ara katmanları kaldırıldı, bu nedenle içeri aktarımları ve tür adlarını 2.0 GA SDK yüzeyine güncelleyin.

🔴GitHub Copilot araç işleyicileri artık ve Python 3.11+ kullanıyor ToolInvocation / ToolResult

Pr:#4551

agent-framework-github-copilot şimdi takip eder github-copilot-sdk>=0.1.32.

  • Araç işleyicileri ham ToolInvocationyerine bir dict veri sınıfı alır.
  • ToolResultresult_type ve text_result_for_llm gibi snake_case alanları kullanarak geri dönün.
  • Paket agent-framework-github-copilot artık Python 3.11+ gerektirir.

Before:

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')}",
    }

After:

from copilot.types 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 Mart 2026)

Sürüm Notları:python-1.0.0rc3

🔴 Kod tanımlı çerçevede tamamlanan beceri sağlayıcısı Skill / SkillResource

Pr:#4387

Python Aracısı Becerileri artık dosya tabanlı becerilerin yanı sıra kod tanımlı Skill ve SkillResource nesneleri destekliyor ve genel sağlayıcı yüzeyi üzerinde SkillsProviderstandartlaştırılıyor.

  • Eski önizleme/iç sürümü FileAgentSkillsProvider hala içeri aktarıyorsanız, SkillsProvider ögesine geçin.
  • Dosya tabanlı kaynak arama artık SKILL.md içindeki `backtick` işaretli referanslara dayanmamaktadır; kaynaklar bunun yerine beceri kütüphanesinden bulunur.

Önizleme ve/veya iç kodunuz FileAgentSkillsProvider içeri aktarıyorsa, mevcut genel arayüze geçin.

from agent_framework import Skill, SkillResource, SkillsProvider

python-1.0.0rc2 / python-1.0.0b260226 (26 Şubat 2026)

Sürüm Notları:python-1.0.0rc2

🔴 Bildirim temelli iş akışları InvokeTool ile InvokeFunctionTool değiştirilir

Pr:#3716

Bildirim temelli Python iş akışları artık eski InvokeTool eylem türünü kullanmıyor. InvokeFunctionTool ile değiştirin ve Python fonksiyonlarını WorkflowFactory.register_tool() ile kaydedin.

Before:

actions:
  - kind: InvokeTool
    toolName: send_email

After:

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

python-1.0.0rc1 / python-1.0.0b260219 (19 Şubat 2026)

Sürüm:agent-framework-core ve agent-framework-azure-ai, 1.0.0rc1 olarak yükseltildi. Diğer tüm paketler 1.0.0b260219 olarak güncellendi.

🔴 Tüm paketlerde Birleşik Azure kimlik bilgileri işleme

Pr:#4088

ad_token, ad_token_providerve get_entra_auth_token parametreleri/yardımcıları, Azure ile ilgili tüm Python paketlerinde birleşik credential bir parametreyle değiştirilmiştir. Yeni yaklaşım, otomatik belirteç önbelleğe alma ve yenileme için kullanır azure.identity.get_bearer_token_provider .

Etkilenen sınıflar:AzureOpenAIChatClient, AzureOpenAIResponsesClient, AzureOpenAIAssistantsClient, AzureAIClient, , AzureAIAgentClient, AzureAIProjectAgentProvider, AzureAIAgentsProviderAzureAISearchContextProviderPurviewClientPurviewPolicyMiddlewarePurviewChatPolicyMiddleware, .

Before:

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,
    ...
)

After:

from azure.identity import AzureCliCredential

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

credential parametresi TokenCredential, AsyncTokenCredential veya çağrılabilen bir belirteç sağlayıcısı kabul eder. Belirteç önbelleğe alma ve yenileme otomatik olarak işlenir.


🔴 Yeniden tasarlanan Python özel durum hiyerarşisi

Pr:#4082

Düz ServiceException aile, tek AgentFrameworkException bir kök altında etki alanı kapsamlı özel durum dallarıyla değiştirildi. Bu, arayanlara kesin except hedefler ve net hata semantiği sağlar.

Yeni hiyerarşi:

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

Kaldırılan özel durumlar:ServiceException, ServiceInitializationError, ServiceResponseException, ServiceContentFilterException, ServiceInvalidAuthError, , ServiceInvalidExecutionSettingsError, ServiceInvalidRequestError, ServiceInvalidResponseError, AgentExecutionExceptionAgentInvocationErrorAgentInitializationErrorAgentSessionExceptionChatClientInitializationErrorCheckpointDecodingError.

Before:

from agent_framework.exceptions import ServiceException, ServiceResponseException

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

After:

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
    ...

Uyarı

Init doğrulama hataları artık özel durumlar yerine yerleşik ValueError/TypeError kullanır. Agent Framework özel durumları etki alanı düzeyindeki hatalar için ayrılmıştır.


🔴 Kapsamı şu şekilde belirlenmiş sağlayıcı durumu: source_id

Pr:#3995

Sağlayıcı kancaları artık tam oturum durumu yerine sağlayıcıya özgü bir durum sözlüğü (state.setdefault(provider.source_id, {})) alır. Bu, önceden state[self.source_id]["key"] aracılığıyla iç içe yerleştirilmiş duruma erişen sağlayıcı uygulamalarının artık doğrudan state["key"] erişmesi gerektiği anlamına gelir.

Ayrıca, InMemoryHistoryProvider varsayılan source_id"memory"'dan "in_memory"'e değiştirildi.

Before:

# 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")

After:

# 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")

🔴 Sohbet/aracı iletisi yazma hizalaması (run vs get_response)

Pr:#3920

Sohbet istemcisi get_response uygulamaları, artık Sequence[Message] tutarlı olarak alır. agent.run(...) esnek (str, Content, Messageveya bunların dizileri) kalır ve sohbet istemcilerini çağırmadan önce girişleri normalleştirir.

Before:

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

After:

from collections.abc import Sequence
from agent_framework import Message

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

🔴 FunctionTool[Any] şema geçişi için genel kurulum kaldırıldı

Pr:#3907

Şema tabanlı araç yolları artık önceki FunctionTool[Any] genel davranışa bağlı değildir. FunctionTool doğrudan kullanın ve gerektiğinde Pydantic BaseModel veya açık şemalar sağlayın (örneğin, @tool(schema=...) ile).

Before:

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

After:

placeholder: FunctionTool = FunctionTool(...)

🔴 Pydantic Settings yerine TypedDict + load_settings()

PR'ler:#3843, #4032

pydantic-settings tabanlı AFBaseSettings sınıfı, TypedDict ve load_settings() kullanılarak çok daha hafif ve işlev tabanlı bir ayar sistemiyle değiştirilmiştir. pydantic-settings Bağımlılık tamamen kaldırıldı.

Tüm ayarlar sınıfları (örneğin, OpenAISettings, AzureOpenAISettings, ) AnthropicSettingsartık TypedDict tanımlardır ve ayar değerlerine öznitelik erişimi yerine sözlük söz dizimi aracılığıyla erişilir.

Before:

from agent_framework.openai import OpenAISettings

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

After:

from agent_framework.openai import OpenAISettings, load_settings

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

Önemli

Agent Framework dosyalardan değerleri otomatik olarak .env. Aşağıdakilerden birini yaparak yüklemeyi açıkça kabul .env etmeniz gerekir:

  • Uygulamanızın başlangıcında load_dotenv() paketinden python-dotenv çağırmak
  • env_file_path=".env" load_settings() ile geçiyor
  • Ortam değişkenlerini doğrudan kabuğunuzda veya IDE'nizde ayarlama

Çözümleme load_settings sırası: açık geçersiz kılmalar → .env dosya değerleri (sağlandığında env_file_path) → ortam değişkenleri → varsayılanlar. Eğer env_file_path belirtirseniz, dosya mevcut olmalıdır veya FileNotFoundError hatası meydana gelir.


🟡 Akıl yürütme modeli iş akışı iletimi ve geçmiş serileştirmesi düzeltilir

Pr:#4083

Çok aracılı iş akışlarında mantık modelleri (örn. gpt-5-mini, gpt-5.2) kullanılırken oluşan birden çok hatayı düzeltir. Yanıtlar API'sinden gelen neden öğeleri artık doğru bir şekilde serileştiriliyor ve yalnızca bir function_call mevcut olduğunda geçmişe dahil ediliyor, bu da API hatalarını önlüyor. Şifrelenmiş/gizli akıl yürütme içeriği artık düzgün bir şekilde yayılıyor ve summary alan biçimi düzeltildi. Ayrıca service_session_id , aracılar arası durum sızıntısını önlemek için iletimde temizlenir.


Bedrock 🟡 öğesine eklendi ve araç seçimi varsayılanları düzeltildi core[all]

Pr:#3953

Amazon Bedrock artık agent-framework-core[all] ekstralara dahildir ve agent_framework.amazon ertelenmiş içe aktarma yüzeyi aracılığıyla kullanılabilir. Araç seçimi davranışı da düzeltildi: ayarsız araç seçimi değerleri artık ayarlanmamış olarak kalır ve sağlayıcılar hizmet varsayılanlarını kullanırken açıkça ayarlanan değerler korunur.

from agent_framework.amazon import BedrockClient

🟡 AzureAIClient desteklenmeyen çalışma zamanı ayarları geçersiz kılmaları konusunda uyarı verir

Pr:#3919

AzureAIClient artık çalışma zamanı tools veya structured_output aracının oluşturulma zamanı yapılandırmasından farklı olduğunda bir uyarı günlüğe kaydeder. Azure AI Aracısı Hizmeti çalışma zamanı aracını veya yanıt biçimi değişikliklerini desteklemez; bunun yerine dinamik geçersiz kılmalara ihtiyacınız varsa kullanın AzureOpenAIResponsesClient .


🟡 workflow.as_agent() şimdi sağlayıcılar ayarsız olduğunda yerel geçmişi varsayılan olarak ayarlar

Pr:#3918

workflow.as_agent() olmadan context_providersoluşturulduğunda, artık varsayılan olarak eklenirInMemoryHistoryProvider("memory"). Bağlam sağlayıcıları açıkça sağlanıyorsa, bu liste değiştirilmeden korunur.

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

🟡 OpenTelemetry izleme bağlamı MCP isteklerine iletildi

Pr:#3780

OpenTelemetry yüklendiğinde, izleme bağlamı (örn. W3C traceparent) params._meta aracılığıyla MCP isteklerine otomatik olarak enjekte edilir. Bu, aracı → MCP sunucu çağrıları arasında uçtan uca dağıtılmış izlemeyi etkinleştirir. Kod değişikliği gerekmez; bu, geçerli bir yayılma bağlamı mevcut olduğunda etkinleştiren ek bir davranıştır.


🟡 Azure İşlevleri için dayanıklı iş akışı desteği

Pr:#3630

Paket agent-framework-azurefunctions artık Workflow grafikleri Azure Dayanıklı İşlevler'de çalıştırmayı destekliyor. workflow parametresini AgentFunctionApp'e ileterek aracı varlıkları, etkinlik işlevlerini ve HTTP uç noktalarını otomatik olarak kaydedin.

from agent_framework.azurefunctions 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

Yapılandırılabilir zaman aşımı ve süre sonunda otomatik reddetme ile fan-out/fan-in, paylaşılan durum ve human-in-the-loop desenlerini destekler.


python-1.0.0b260212 (12 Şubat 2026)

Sürüm Notları:python-1.0.0b260212

🔴 Hosted*Tool sınıflar istemci get_*_tool() yöntemleriyle değiştirildi

Pr:#3634

Barındırılan araç sınıfları, istemci kapsamlı fabrika yöntemleri lehine kaldırıldı. Bu, araç kullanılabilirliğini sağlayıcıya göre açık hale getirir.

Sınıf kaldırıldı Replacement
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(...)

Before:

from agent_framework import HostedCodeInterpreterTool, HostedWebSearchTool

tools = [HostedCodeInterpreterTool(), HostedWebSearchTool()]

After:

from agent_framework.openai import OpenAIResponsesClient

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

🔴 Oturum/bağlam sağlayıcısı işlem hattı sonlandırıldı (AgentSession, context_providers)

Pr:#3850

Python oturumu ve bağlam sağlayıcısı geçişi tamamlandı. AgentThread ve eski bağlam sağlayıcısı türleri kaldırıldı.

  • 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= desenleri context_providers=[...] ile değiştirilir

Before:

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

After:

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

🔴 Denetim noktası modeli ve depolama davranışı yeniden düzenlenmiş

Pr:#3744

Denetim noktası iç işlevleri yeniden tasarlandı ve bu da kalıcı denetim noktası uyumluluğunu ve özel depolama uygulamalarını etkiler:

  • WorkflowCheckpoint şimdi canlı nesneleri depolar (serileştirme denetim noktası depolamasında gerçekleşir)
  • FileCheckpointStorage şimdi turşu serileştirmesi kullanıyor
  • workflow_id kaldırıldı ve previous_checkpoint_id eklendi
  • Kullanım dışı denetim noktası kancaları kaldırıldı

Eğer sürümler arasında denetim noktalarını kalıcı hale getirirseniz, iş akışlarına devam etmeden önce mevcut denetim noktası yapıtlarını yeniden oluşturun veya geçirin.


🟡 AzureOpenAIResponsesClient Microsoft Foundry proje uç noktalarını destekler

Pr:#3814

Foundry proje uç noktası veya AzureOpenAIResponsesClient ile AIProjectClient oluşturabilir, yalnızca doğrudan Azure OpenAI uç noktaları ile sınırlı kalmayabilirsiniz.

from azure.identity import DefaultAzureCredential
from agent_framework.azure import AzureOpenAIResponsesClient

client = AzureOpenAIResponsesClient(
    project_endpoint="https://<your-project>.services.ai.azure.com",
    deployment_name="gpt-4o-mini",
    credential=DefaultAzureCredential(),
)

🔴 Ara yazılım call_next artık kabul etmemektedir context

Pr:#3829

Orta katman devam fonksiyonu artık hiçbir argüman almaz. Ara yazılımınız hala call_next(context) öğesini çağırıyorsa, call_next() olarak güncelleştirin.

Before:

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

After:

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

python-1.0.0b260210 (10 Şubat 2026)

Sürüm Notları:python-1.0.0b260210

🔴 İş akışı fabrika metotları kaldırıldı WorkflowBuilder

Pr:#3781

register_executor() ve register_agent(), WorkflowBuilder'den kaldırıldı. Tüm oluşturucu yöntemleri (, , , , , add_edge, add_fan_out_edges) ve add_fan_in_edges artık dize adlarını kabul etmemektedir; bunlar doğrudan yürütücü veya aracı örnekleri gerektirir. add_chainadd_switch_case_edge_groupadd_multi_selection_edge_groupstart_executor

Yazılım yalıtımı için, her çağrının yeni örnekler üretmesi amacıyla yürütücü/aracı örneği oluşturmaları ve iş akışı oluşturmalarını saran bir yardımcı yöntemin içinde sarmalayın.

WorkflowBuilder yürütücülerle

Before:

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()
)

After:

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

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

WorkflowBuilder aracılarla

Before:

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()

After:

writer_agent = create_writer_agent()
reviewer_agent = create_reviewer_agent()

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

Yardımcı metodlarla durum yalıtımı

Çağrı başına yalıtılmış duruma ihtiyaç duyan iş akışları için, yapıyı bir yardımcı yöntemle sarmalayın:

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 olarak yeniden adlandırıldı Agent, ChatMessage olarak yeniden adlandırıldı Message

Pr:#3747

Çekirdek Python türleri, yedekli Chat ön ek kaldırılarak basitleştirildi. Geriye dönük uyumluluk takma adları sağlanmadı.

Önce Sonra
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

İçeri aktarmaları güncelleştirme

Before:

from agent_framework import ChatAgent, ChatMessage

After:

from agent_framework import Agent, Message

Tür başvurularını güncelleştir

Before:

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

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

After:

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

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

Uyarı

ChatClient, ChatResponse, ChatOptionsve ChatMessageStore bu değişiklik tarafından yeniden adlandırılmaz .


🔴 Yanıt/ileti modellerinde tür API'sini gözden geçirme güncelleştirmeleri

Pr:#3647

Bu sürüm, ileti/yanıt yazma ve yardımcı API'ler için kapsamlı ve mevcut sistemleri etkileyebilecek değişiklikler içeren bir temizleme sağlar.

  • Role ve FinishReason artık NewTypestr ile RoleLiteral/FinishReasonLiteral bilinen değerler için sarmalayıcılardır. Bunları dize olarak değerlendirin ( .value kullanılmadan).
  • Message yapısı üzerinde Message(role, contents=[...])standartlaştırılmıştır; içindeki contents dizeler otomatik olarak metin içeriğine dönüştürülür.
  • ChatResponse ve AgentResponse oluşturucular artık messages= üzerine odaklanır (tek Message veya dizi); eski text= oluşturucu kullanımı yanıtlardan çıkartıldı.
  • ChatResponseUpdate ve AgentResponseUpdate artık text= kabul etmez; contents=[Content.from_text(...)] kullanın.
  • Güncelleme birleştirme yardımcısı adları basitleştirildi.
  • try_parse_valueve ChatResponseöğesinden AgentResponse kaldırıldı.

Yardımcı yöntemi yeniden adlandırır

Önce Sonra
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(...)

Güncelleştirme yanıtı-güncelleştirme yapısı

Before:

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

After:

from agent_framework import AgentResponseUpdate, Content

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

try_parse_value öğesini try/except ile .value üzerinde değiştir

Before:

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

After:

from pydantic import ValidationError

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

🔴 Birleşik run/get_response model ve ResponseStream kullanım

Pr:#3379

Python API'leri agent.run(...) ve client.get_response(...) etrafında birleştirilmiş ve akış ResponseStream ile temsil edilmiştir.

Before:

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

After:

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

🔴 Çekirdek bağlam/protokol türü yeniden adlandırmaları

PR'ler:#3714, #3717

Önce Sonra
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

İçeri aktarmaları ve tür açıklamalarını uygun şekilde güncelleyin.


🔴 Ara yazılım devamlılık parametresi olarak yeniden adlandırıldı call_next

Pr:#3735

Ara yazılım imzaları artık call_nextyerine next kullanmalıdır.

Before:

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

After:

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

🔴 TypeVar adları standartlaştırılmış (TNameNameT)

Pr:#3770

Kod tabanı artık son ekin T kullanıldığı tutarlı bir TypeVar adlandırma stilini izler.

Before:

TMessage = TypeVar("TMessage")

After:

MessageT = TypeVar("MessageT")

Framework generic'leri çevresinde özel sarmalayıcılar tutarsanız, ek açıklama değişim frekansını azaltmak için yerel TypeVar adlarınızı yeni kuralla hizalayın.


🔴 Aracı olarak iş akışı çıkışı ve akış değişiklikleri

Pr:#3649

workflow.as_agent() davranışı, çıktıyı ve akışı standart aracı yanıt desenleriyle uyumlu hale getirmek için güncelleştirildi. Eski çıkış/güncelleştirme işlemeye bağımlı olan aracı olarak iş akışı tüketicilerini gözden geçirin ve bunları geçerli AgentResponse/AgentResponseUpdate akışa güncelleştirin.


🔴 Akıcı oluşturucu yöntemler, oluşturucu parametrelerine taşındı

Pr:#3693

6 oluşturucu (WorkflowBuilder, , SequentialBuilder, ConcurrentBuilder, GroupChatBuilder, MagenticBuilder, HandoffBuilder) arasında tek yapılandırmalı akıcı yöntemler oluşturucu parametrelerine geçirilmiştir. Fluent yöntemlerinin tek yapılandırma yolu olduğu durumlarda, bu yöntemler kaldırılarak yerlerine oluşturucu bağımsız değişkenleri tercih edilmektedir.

WorkflowBuilder

set_start_executor(), with_checkpointing()ve with_output_from() kaldırılır. Bunun yerine oluşturucu parametrelerini kullanın.

Before:

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()
)

After:

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_checkpointing()ve with_intermediate_outputs() kaldırılır. Bunun yerine oluşturucu parametrelerini kullanın.

Before:

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

After:

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

GroupChatBuilder

participants(), register_participants(), with_orchestrator(), with_termination_condition(), , with_max_rounds(), with_checkpointing()ve with_intermediate_outputs() kaldırılır. Bunun yerine oluşturucu parametrelerini kullanın.

Before:

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

After:

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

MagenticBuilder

participants(), register_participants(), with_manager(), with_plan_review(), , with_checkpointing()ve with_intermediate_outputs() kaldırılır. Bunun yerine oluşturucu parametrelerini kullanın.

Before:

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

After:

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

HandoffBuilder

with_checkpointing() ve with_termination_condition() kaldırılır. Bunun yerine oluşturucu parametrelerini kullanın.

Before:

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

After:

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

Doğrulama değişiklikleri

  • WorkflowBuilder şimdi start_executor'i oluşturucu bağımsız değişkeni olarak gerektiriyor (daha önce fluent yöntemi kullanılarak ayarlanıyordu)
  • SequentialBuilder, ConcurrentBuilder, GroupChatBuilder ve MagenticBuilder şimdi yapım zamanında ya participants ya da participant_factories gerektiriyor — ikisi de sağlanmazsa ValueError yükseltilir.

Uyarı

HandoffBuilder zaten oluşturucu parametreleri olarak kabul edildi participants/participant_factories ve bu konuda değiştirilmedi.


🔴 Ayrıştırıcı ile tek bir WorkflowEvent içine iş akışı olayları birleştirildi

Pr:#3690

Tek tek tüm iş akışı olayı alt sınıfları tek bir genel WorkflowEvent[DataT] sınıfla değiştirilmiştir. Olay türlerini tanımlamak için isinstance() denetimleri kullanmak yerine artık event.type dize değişmezini (örneğin, "output", "request_info", "status") denetlersiniz. Bu, Content öğesinden gelen python-1.0.0b260123 sınıf birleştirmesiyle aynı deseni takip eder.

Olay sınıfları kaldırıldı

Dışarı aktarılan aşağıdaki olay alt sınıfları artık yok:

Eski Sınıf Yeni event.type Değer
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"

İçeri aktarmaları güncelleştirme

Before:

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

After:

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

Olay türü denetimlerini güncelleştirme

Before:

async for event in workflow.run_stream(input_message):
    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}")

After:

async for event in workflow.run_stream(input_message):
    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 ile akış yapmak

Before:

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}")

After:

from agent_framework import AgentResponseUpdate

async for event in workflow.run_stream("Write a blog post about AI agents."):
    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}")

Tür anotasyonları

Before:

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

After:

from typing import Any
from agent_framework import WorkflowEvent

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

Uyarı

WorkflowEvent geneldir (WorkflowEvent[DataT] ), ancak karma olay koleksiyonları için kullanın WorkflowEvent[Any] veya parametresiz kullanın WorkflowEvent.


🔴 workflow.send_responses* Kaldırıldı; Kullanın workflow.run(responses=...)

Pr:#3720

send_responses() ve send_responses_streaming(), Workflow'den kaldırıldı. Yanıtları doğrudan run() öğesine geçirerek duraklatılmış iş akışlarına devam edin.

Before:

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

After:

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

🔴 SharedState, State olarak yeniden adlandırıldı; iş akışı durumu API'leri zaman uyumlu

Pr:#3667

Durum API'leri artık await gerektirmiyor ve adlandırma standartlaştırıldı.

Önce Sonra
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

🔴 Orchestration oluşturucuları taşındı agent_framework.orchestrations

Pr:#3685

Orchestration oluşturucuları artık ayrılmış bir paket ad alanındadır.

Before:

from agent_framework import SequentialBuilder, GroupChatBuilder

After:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟡 Uzun süre çalışan arka plan yanıtları ve devamlılık belirteçleri

Pr:#3808

Arka plan yanıtları artık options={"background": True} ve continuation_token üzerinden Python ajan çalıştırmaları için desteklenmektedir.

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})

🟡 Oturum/bağlam sağlayıcısı önizleme türleri yan yana eklendi

Pr:#3763

Yeni oturum/bağlam işlem hattı türleri, artımlı geçiş için eski API'ler ile birlikte SessionContext ve BaseContextProvider dahil olmak üzere tanıtılmıştır.


🟡 Kod yorumlayıcı akışı artık artımlı kod değişimleri içeriyor

Pr:#3775

Akış kod yorumlayıcı, artık akış içeriğinde kod değişikliği güncelleştirmelerini göstererek kullanıcı arayüzlerinin oluşturulan kodu aşamalı olarak gösterebilmesini sağlar.


🟡 @tool açık şema işlemeyi destekler

Pr:#3734

Araç tanımları artık çıkarım yapılan şema çıktısı özelleştirmeye ihtiyaç duyduğunda açık şema işlemeyi kullanabilir.


python-1.0.0b260130 (30 Ocak 2026)

Sürüm Notları:python-1.0.0b260130

🟡 ChatOptions ve ChatResponse/AgentResponse artık yanıt formatı üzerinde genel

Pr:#3305

ChatOptions, ChatResponseve AgentResponse artık yanıt biçimi türüne göre parametrelendirilen genel türlerdir. Bu, response_format yapılandırılmış çıkışlar kullanılırken daha iyi tür çıkarımı sağlar.

Before:

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

After:

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!)

İpucu

Bu, kesintiye neden olmayan bir geliştirmedir. Tür parametresi olmayan mevcut kod çalışmaya devam eder. Seçenekler ve yanıt için yukarıdaki kod parçacığında türleri belirtmeniz gerekmez; bunlar netlik için burada gösterilir.


🟡 BaseAgent Claude Aracısı SDK'sı için destek eklendi

Pr:#3509

Python SDK'sı artık Claude Aracısı SDK'sı için bir BaseAgent uygulama içerir ve Agent Framework'te birinci sınıf bağdaştırıcı tabanlı kullanımı etkinleştirir.


python-1.0.0b260128 (28 Ocak 2026)

Sürüm Notları:python-1.0.0b260128

🔴 AIFunction olarak yeniden adlandırıldı FunctionTool ve @ai_function olarak yeniden adlandırıldı @tool

Pr:#3413

Sınıf ve dekoratör, endüstri terminolojisiyle netlik ve tutarlılık için yeniden adlandırıldı.

Before:

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)

After:

from agent_framework.core import tool, FunctionTool

@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 ve Magentic'e fabrika düzeni eklendi; API yeniden adlandırır

Pr:#3224

Grup sohbetine katılımcı fabrikası ve orkestratör fabrikası eklendi. Ayrıca yeniden adlandırmaları da içerir:

  • with_standard_managerwith_manager
  • participant_factoriesregister_participant

Before:

from agent_framework.workflows import MagenticBuilder

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

After:

from agent_framework.workflows import MagenticBuilder

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

🔴 Github olarak yeniden adlandırıldı GitHub

Pr:#3486

Sınıf ve paket adları doğru büyük/küçük harf kullanacak şekilde güncelleştirildi.

Before:

from agent_framework_github_copilot import GithubCopilotAgent

agent = GithubCopilotAgent(...)

After:

from agent_framework_github_copilot import GitHubCopilotAgent

agent = GitHubCopilotAgent(...)

python-1.0.0b260127 (27 Ocak 2026)

Sürüm Notları:python-1.0.0b260127

🟡 BaseAgent GitHub Copilot SDK desteği eklendi

Pr:#3404

Python SDK artık GitHub Copilot SDK tümleştirmeleri için bir BaseAgent uygulama içeriyor.


python-1.0.0b260123 (23 Ocak 2026)

Sürüm Notları:python-1.0.0b260123

🔴 Classmethod oluşturucuları ile tek bir sınıfa basitleştirilmiş içerik türleri

Pr:#3252

Belirli türleri oluşturmak için, BaseContent öğesinden türetilmiş tüm eski İçerik türleri, classmethods içeren tek bir Content sınıfıyla değiştirildi.

Tam Geçiş Rehberi

Eski Tür Yeni Yöntem
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(...)

Ek yeni yöntemler (doğrudan öncül olmadan):

  • Content.from_text_reasoning(...) — Akıl yürütme/düşünme içeriği için
  • Content.from_hosted_vector_store(...) — Vektör deposu referansları için
  • Content.from_usage(...) — Kullanım/belirteç bilgileri için
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) — MCP sunucu araçları için
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) — Kod yorumlayıcı için
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) — Görüntü oluşturma için

Tür Denetimi

isinstance() kontrolleri yerine type özelliğini kullanın.

Before:

from agent_framework.core import TextContent, FunctionCallContent

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

After:

from agent_framework.core import Content

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

Temel Örnek

Before:

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")

After:

from agent_framework.core 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")

🔴 Anotasyon türleri Annotation ve TextSpanRegion TypedDict'ler olarak sadeleştirildi.

Pr:#3252

Sınıf tabanlı ek açıklama türleri daha TypedDict basit tanımlarla değiştirildi.

Eski Tür Yeni Tür
CitationAnnotation (sınıf) Annotation (TypedDict ile type="citation")
BaseAnnotation (sınıf) Annotation (TypedDict)
TextSpanRegion (SerializationMixin ile sınıf) TextSpanRegion (TypedDict)
Annotations (diğer ad yazın) Annotation
AnnotatedRegions (diğer ad yazın) TextSpanRegion

Before:

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"
)

After:

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"
}

Uyarı

ve AnnotationTextSpanRegion artık TypedDictolduğundan, bunları sınıf örnekleri yerine sözlükler olarak oluşturursunuz.


🔴 response_format doğrulama hataları artık kullanıcılar tarafından görülebilir

Pr:#3274

ChatResponse.value ve AgentResponse.value, şimdi şema doğrulaması başarısız olduğunda ValidationError yükseltir ve sessizce None döndürmez.

Before:

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

After:

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 mantık yürütme basitleştirildi; MCP ve Anthropic istemci hataları düzeltildi

Pr:#3322

runAG-UI yöntem imzası ve davranışı basitleştirildi.

Before:

from agent_framework.ag_ui import AGUIEndpoint

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

After:

from agent_framework.ag_ui import AGUIEndpoint

endpoint = AGUIEndpoint(agent=agent)
result = await endpoint.run(
    request=request,
    streaming=True,
    timeout=30
)

🟡Antropik istemci artık yapılandırılmış çıkışları destekliyor response_format

Pr:#3301

Artık, OpenAI ve Azure istemcilerine benzer şekilde, Anthropic istemcileri aracılığıyla response_format ile yapılandırılmış çıktı ayrıştırma kullanabilirsiniz.


🟡 Genişletilmiş Azure AI yapılandırması (reasoning, rai_config)

PR'ler:#3403, #3265

Azure yapay zeka desteği, mantıksal yapılandırma desteğiyle ve rai_config aracı oluşturma sırasında genişletilmiştir.


python-1.0.0b260116 (16 Ocak 2026)

Sürüm Notları:python-1.0.0b260116

🔴 create_agent olarak yeniden adlandırıldı as_agent

Pr:#3249

Amacına daha iyi açıklık getirmek için yöntem yeniden adlandırıldı.

Before:

from agent_framework.core import ChatClient

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

After:

from agent_framework.core import ChatClient

client = ChatClient(...)
agent = client.as_agent()

🔴 WorkflowOutputEvent.source_executor_id olarak yeniden adlandırıldı executor_id

Pr:#3166

Api tutarlılığı için özellik yeniden adlandırıldı.

Before:

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

After:

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

🟡 AG-UI hizmet tarafından yönetilen oturum sürekliliğini destekler

Pr:#3136

AG-UI artık çok aşamalı sürekliliği korumak için hizmet tarafından yönetilen konuşma kimliğini (örneğin, Foundry tarafından yönetilen oturumlar/iş parçacıkları) korur.


python-1.0.0b260114 (14 Ocak 2026)

Sürüm Notları:python-1.0.0b260114

🔴 Yeniden düzenlenmiş orkestrasyonlar

Pr:#3023

Agent Framework İş Akışlarındaki orkestrasyonların kapsamlı yeniden yapılandırılması ve basitleştirilmesi:

  • Grup Sohbeti: Düzenleyici yürütücüsünü, aracı tabanlı ve işlev tabanlı olarak ayrılmış bir şekilde bölün (BaseGroupChatOrchestrator, GroupChatOrchestrator, AgentBasedGroupChatOrchestrator). Yayın modeli ile yıldız topolojisi basitleştirilmiştir.
  • Aktarım: Tek katmanlı yapı, koordinatör ve özel yürütücü desteği kaldırıldı. ile HandoffAgentExecutoryayın modeline taşındı.
  • Sıralı & Eşzamanlı: AgentApprovalExecutor ve AgentRequestInfoExecutor aracılığıyla alt iş akışlarına güvenmek için basitleştirilmiş istek bilgisi mekanizması.

Before:

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"
)

After:

from agent_framework.workflows import (
    GroupChatOrchestrator,
    HandoffAgentExecutor,
    AgentApprovalExecutor
)

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

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

🔴 TypedDict ve Generic olarak sunulan seçenekler

Pr:#3140

Seçenekler artık daha iyi tür güvenliği ve IDE otomatik tamamlama sağlamak amacıyla TypedDict kullanılarak yazılmaktadır.

📖 Tam geçiş yönergeleri için , Bkz. Yazılan Seçenekler Kılavuzu.

Before:

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

After:

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

🔴 display_name Kaldırıldı; context_provider tekil olarak; middleware liste olmalıdır

Pr:#3139

  • display_name parametre aracılardan kaldırıldı
  • context_providers (çoğul, kabul eden liste) olarak değiştirildi context_provider (tekil, yalnızca 1 izin verilir)
  • middleware şimdi bir liste gerektiriyor (artık tek örneği kabul etmemektedir)
  • AggregateContextProvider koddan kaldırıldı (gerekirse örnek uygulamayı kullanın)

Before:

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])

After:

from agent_framework.core import Agent

# Only one context provider allowed; combine manually if needed
agent = Agent(
    name="my-agent",  # display_name removed
    context_provider=provider1,  # singular, only 1
    middleware=[my_middleware],  # must be a list now
)

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

🔴 AgentRunResponse* olarak yeniden adlandırıldı AgentResponse*

Pr:#3207

AgentRunResponse ve AgentRunResponseUpdate olarak yeniden adlandırıldı AgentResponseAgentResponseUpdate.

Before:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

After:

from agent_framework import AgentResponse, AgentResponseUpdate

🟡 YAML tanımlı iş akışları için bildirim temelli iş akışı çalışma zamanı eklendi

Pr:#2815

Bildirim temelli YAML iş akışlarını yürütmek için graf tabanlı bir çalışma zamanı eklenerek özel çalışma zamanı kodu olmadan çok aracılı düzenleme etkinleştirildi.


🟡 MCP yükleme/güvenilirlik geliştirmeleri

Pr:#3154

MCP tümleştirmeleri geliştirilmiş bağlantı kaybı davranışı, yükleme sırasında sayfalandırma desteği ve gösterim denetimi seçenekleri kazandı.


🟡 Foundry A2ATool artık hedef URL'si olmayan bağlantıları destekliyor

Pr:#3127

A2ATool artık doğrudan hedef URL yapılandırılmamış olsa bile proje bağlantısı meta verileri aracılığıyla Foundry destekli A2A bağlantılarını çözümleyebilir.


python-1.0.0b260107 (7 Ocak 2026)

Sürüm Notları:python-1.0.0b260107

Bu sürümde önemli bir değişiklik yok.


python-1.0.0b260106 (6 Ocak 2026)

Sürüm Notları:python-1.0.0b260106

Bu sürümde önemli bir değişiklik yok.


Özet Tablosu

Salıverme Sürüm Notları Türü Değişiklik PR
1.0.0rc5 / 1.0.0b260318 Yok (zamanlanmış) 🔴 Çığır Açan Genel çalışma zamanı parametreleri function_invocation_kwargs ve client_kwargs olarak bölünmüş. Araçlar artık FunctionInvocationContext / ctx.session kullanıyor. #4581
1.0.0rc4 / 1.0.0b260311 Notlar 🔴 Çığır Açan Azure AI tümleştirmeleri artık 2.0 GA'yi hedeflemektedir azure-ai-projects ; foundry_features kaldırılmıştır ve allow_preview önizlemeyi kabul etme özelliğidir #4536
1.0.0rc4 / 1.0.0b260311 Notlar 🔴 Çığır Açan GitHub Copilot tümleştirmesi artık ToolInvocation / ToolResult kullanıyor ve agent-framework-github-copilot Python 3.11+ gerektirir. #4551
1.0.0rc3 / 1.0.0b260304 Notlar 🔴 Çığır Açan Beceri sağlayıcısı, kod tanımlı Skill / SkillResource ekler; eski FileAgentSkillsProvider içe aktarmalar ve `backtick` kaynak başvuruları güncelleştirilmelidir. #4387
1.0.0rc2 / 1.0.0b260226 Notlar 🔴 Çığır Açan Bildirim temelli iş akışları, InvokeTool ile InvokeFunctionTool ve WorkflowFactory.register_tool() ile değiştirilir #3716
1.0.0rc1 / 1.0.0b260219 Notlar 🔴 Çığır Açan Azure paketleri arasında birleşik Azure kimlik bilgileri işleme #4088
1.0.0rc1 / 1.0.0b260219 Notlar 🔴 Çığır Açan Python özel durum hiyerarşisi AgentFrameworkException altında yeniden tasarlandı. #4082
1.0.0rc1 / 1.0.0b260219 Notlar 🔴 Çığır Açan Sağlayıcı durumunun kapsamı artık source_id ile belirlenmiştir. #3995
1.0.0rc1 / 1.0.0b260219 Notlar 🔴 Çığır Açan Özel get_response() implementasyonlar kabul etmelidir Sequence[Message] #3920
1.0.0rc1 / 1.0.0b260219 Notlar 🔴 Çığır Açan FunctionTool[Any] şema geçiş dolgusu kaldırıldı #3907
1.0.0rc1 / 1.0.0b260219 Notlar 🔴 Çığır Açan ayarları, /pydantic-settings'den taşındı #3843, #4032
1.0.0rc1 / 1.0.0b260219 Notlar 🟡 Geliştirme Mantık modeli iş akışı teslimi ve geçmiş serileştirme düzeltildi #4083
1.0.0rc1 / 1.0.0b260219 Notlar 🟡 Geliştirme ana kaya core[all]'ya eklendi; araç seçimi varsayılanları düzeltildi #3953
1.0.0rc1 / 1.0.0b260219 Notlar 🟡 Geliştirme AzureAIClient desteklenmeyen çalışma zamanı geçişlerini uyarır #3919
1.0.0rc1 / 1.0.0b260219 Notlar 🟡 Geliştirme workflow.as_agent() sağlayıcılar ayarlanmamışken yerel geçmişi içe aktarıyor #3918
1.0.0rc1 / 1.0.0b260219 Notlar 🟡 Geliştirme OpenTelemetry izleme bağlamı MCP isteklerine yayılır #3780
1.0.0rc1 / 1.0.0b260219 Notlar 🟡 Geliştirme Azure İşlevleri için dayanıklı iş akışı desteği eklendi #3630
1.0.0b260212 Notlar 🔴 Çığır Açan Hosted*Tool sınıfları kaldırın; istemci get_*_tool() yöntemleriyle barındırılan araçlar oluşturun #3634
1.0.0b260212 Notlar 🔴 Çığır Açan Oturum/bağlam sağlayıcısı işlem hattı sonlandırıldı: AgentThread kaldırıldı, kullanın AgentSession + context_providers #3850
1.0.0b260212 Notlar 🔴 Çığır Açan Denetim noktası modeli/depolama yeniden düzenlemesi (workflow_id kaldırıldı, previous_checkpoint_id eklendi, depolama davranışı değiştirildi) #3744
1.0.0b260212 Notlar 🟡 Geliştirme AzureOpenAIResponsesClient Foundry proje uç noktasından oluşturulabilir veya AIProjectClient #3814
1.0.0b260212 Notlar 🔴 Çığır Açan Ara yazılım devamı artık context kabul etmemektedir; call_next(context), call_next() olarak güncellenmelidir. #3829
1.0.0b260210 Notlar 🔴 Çığır Açan send_responses() / send_responses_streaming() Kaldırıldı; Kullanın workflow.run(responses=...) #3720
1.0.0b260210 Notlar 🔴 Çığır Açan SharedStateState; iş akışı durumu API’leri eşzamanlı ve kontrol noktası durum alanı yeniden adlandırıldı #3667
1.0.0b260210 Notlar 🔴 Çığır Açan Orkestrasyon oluşturucuları agent_framework.orchestrations paketine taşındı #3685
1.0.0b260210 Notlar 🟡 Geliştirme Python aracı yanıtlarına arka plan yanıtları ve continuation_token desteği eklendi #3808
1.0.0b260210 Notlar 🟡 Geliştirme Yan yana eklenen oturum/bağlam önizleme türleri (SessionContext, BaseContextProvider) #3763
1.0.0b260210 Notlar 🟡 Geliştirme Akış kod yorumlayıcısı güncelleştirmeleri artık artımlı kod değişimleri içeriyor #3775
1.0.0b260210 Notlar 🟡 Geliştirme @tool dekoratör açık şema işleme desteği ekler #3734
1.0.0b260210 Notlar 🔴 Çığır Açan register_executor() / register_agent() öğesi WorkflowBuilder'ten kaldırıldı; durumu yalıtmak için örnekleri doğrudan kullanın ve yardımcı metotlar kullanın. #3781
1.0.0b260210 Notlar 🔴 Çığır Açan , , , #3747
1.0.0b260210 Notlar 🔴 Çığır Açan Tür API'si incelemesi: Role/FinishReason tür değişiklikleri, yanıt/güncelleştirme oluşturucu sıkılaştırma, yardımcıların from_updates olarak yeniden adlandırılması ve kaldırma try_parse_value #3647
1.0.0b260210 Notlar 🔴 Çığır Açan run / get_response ve ResponseStream etrafında birleştirilmiş API'ler #3379
1.0.0b260210 Notlar 🔴 Çığır Açan AgentRunContext olarak yeniden adlandırıldı AgentContext #3714
1.0.0b260210 Notlar 🔴 Çığır Açan AgentProtocol olarak yeniden adlandırıldı SupportsAgentRun #3717
1.0.0b260210 Notlar 🔴 Çığır Açan Ara yazılım next parametresi call_next olarak yeniden adlandırıldı. #3735
1.0.0b260210 Notlar 🔴 Çığır Açan TypeVar adlandırma standartlaştırılmış (TNameNameT) #3770
1.0.0b260210 Notlar 🔴 Çığır Açan Geçerli aracı yanıt akışıyla uyumlu ajans olarak iş akışı çıktısı/akış davranışı #3649
1.0.0b260210 Notlar 🔴 Çığır Açan Fluent builder yöntemleri 6 oluşturucu arasında oluşturucu parametrelerine taşındı #3693
1.0.0b260210 Notlar 🔴 Çığır Açan Ayrıştırıcı ile WorkflowEvent tek type bir iş akışı olayları birleştirilir; isinstance()event.type == "..." #3690
1.0.0b260130 Notlar 🟡 Geliştirme ChatOptions / ChatResponse / AgentResponse yanıt biçimi üzerinde genel #3305
1.0.0b260130 Notlar 🟡 Geliştirme BaseAgent Claude Aracısı SDK tümleştirmeleri için destek eklendi #3509
1.0.0b260128 Notlar 🔴 Çığır Açan AIFunctionFunctionTool, @ai_function@tool #3413
1.0.0b260128 Notlar 🔴 Çığır Açan GroupChat/Magentic için fabrika düzeni; with_standard_managerwith_manager→, participant_factoriesregister_participant #3224
1.0.0b260128 Notlar 🔴 Çığır Açan GithubGitHub #3486
1.0.0b260127 Notlar 🟡 Geliştirme BaseAgent GitHub Copilot SDK tümleştirmeleri için destek eklendi #3404
1.0.0b260123 Notlar 🔴 Çığır Açan Classmethods kullanılarak tek bir Content sınıfta birleştirilen içerik türleri #3252
1.0.0b260123 Notlar 🔴 Çığır Açan response_format doğrulama hataları şimdi ortaya çıkar ValidationError #3274
1.0.0b260123 Notlar 🔴 Çığır Açan AG-UI çalıştırma mantığı basitleştirildi #3322
1.0.0b260123 Notlar 🟡 Geliştirme Antropik istemci yapılandırılmış çıkışlar için destek ekler response_format #3301
1.0.0b260123 Notlar 🟡 Geliştirme Azure AI yapılandırması, reasoning ve rai_config desteğiyle genişletildi. #3403, #3265
1.0.0b260116 Notlar 🔴 Çığır Açan create_agentas_agent #3249
1.0.0b260116 Notlar 🔴 Çığır Açan source_executor_idexecutor_id #3166
1.0.0b260116 Notlar 🟡 Geliştirme AG-UI hizmet tarafından yönetilen oturum/iş parçacığı sürekliliğini destekler #3136
1.0.0b260114 Notlar 🔴 Çığır Açan Yeniden yapılandırılmış orkestrasyonlar (GroupChat, Handoff, Sıralı, Eşzamanlı) #3023
1.0.0b260114 Notlar 🔴 Çığır Açan TypedDict ve Genel Olarak Seçenekler #3140
1.0.0b260114 Notlar 🔴 Çığır Açan display_name Kaldırıldı; context_providerscontext_provider → (tekil); middleware liste olmalıdır #3139
1.0.0b260114 Notlar 🔴 Çığır Açan AgentRunResponse / AgentRunResponseUpdate olarak yeniden adlandırıldı AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 Notlar 🟡 Geliştirme YAML tanımlı iş akışları için bildirim temelli iş akışı çalışma zamanı eklendi #2815
1.0.0b260114 Notlar 🟡 Geliştirme MCP yükleme/güvenilirlik geliştirmeleri (bağlantı kaybı işleme, sayfalandırma, gösterim denetimleri) #3154
1.0.0b260114 Notlar 🟡 Geliştirme Foundry A2ATool , açık hedef URL'si olmayan bağlantıları destekler #3127
1.0.0b260107 Notlar Önemli bir değişiklik yok
1.0.0b260106 Notlar Önemli bir değişiklik yok

Sonraki Adımlar