Sdílet prostřednictvím


Průvodce významnými změnami v Pythonu 2026

Tento dokument uvádí všechny významné změny ve verzích Pythonu od začátku roku 2026, včetně zásadních změn a důležitých vylepšení, která můžou ovlivnit váš kód. Každá změna je označená jako:

  • 🔴 Zásadní – vyžaduje změny kódu pro upgrade.
  • 🟡 Vylepšení – nová schopnost nebo vylepšení; stávající kód nadále funguje.

Tento dokument se odebere, jakmile dosáhneme stabilní verze 1.0.0, proto si ho při upgradu mezi verzemi v roce 2026 projděte a ujistěte se, že nezmeškáte žádné důležité změny. Podrobné pokyny k upgradu pro konkrétní témata (např. migrace možností) najdete v odkazech na průvodce upgradem nebo PR.


python-1.0.0rc5 / python-1.0.0b260319 (19. března 2026)

🔴 Potrubí klienta chatu přeuspořádáno: FunctionInvocation nyní obklopuje ChatMiddleware

PR:#4746

Pořadí v pipeline ChatClient se změnilo. FunctionInvocation je nyní nejkrajnější vrstvou a zabalí ChatMiddlewarese, což znamená, že middleware chatu běží pro každé volání modelu (včetně každé iterace smyčky volání nástroje) místo toho, aby běžel jednou kolem celou sekvencí volání funkce.

Původní objednávka pipeline:

ChatMiddleware → FunctionInvocation → RawChatClient

Nové pořadí kanálů:

FunctionInvocation → ChatMiddleware → ChatTelemetry → RawChatClient

Pokud máte vlastní middleware pro chat, který předpokládal, že běží pouze jednou při každém volání agenta (obalující celou smyčku volání nástroje), aktualizujte ho tak, aby byl bezpečný pro opakované spuštění. Pro každý jednotlivý požadavek LLM se nyní vyvolá middleware pro chat, včetně těch, které odesílají výsledky nástrojů zpět do modelu.

Navíc ChatTelemetry je teď oddělená vrstva od ChatMiddleware v potrubí, běžící nejblíže k RawChatClient.

🔴 Veřejné moduly runtime kwargs rozdělené do explicitních kontejnerů

PR:#4581

Veřejný agent Pythonu a rozhraní API chatu už nepovažují univerzální veřejné **kwargs přesměrování za primární mechanismus runtime dat. Hodnoty modulu runtime jsou teď rozdělené podle účelu:

  • Použijte function_invocation_kwargs pro hodnoty, které by měly vidět jenom nástroje nebo funkční middleware.
  • Používá se client_kwargs pro konfiguraci kwargs na úrovni klienta a middlewaru klienta.
  • Přístup k datům o nástroji nebo modulu runtime prostřednictvím FunctionInvocationContext (ctx.kwargs a ctx.session).
  • Definujte nástroje s vloženým parametrem kontextu místo **kwargs; vložené parametry kontextu nejsou zobrazeny ve schématu, které model vidí.
  • Při delegování na dílčího agenta použijte agent.as_tool(propagate_session=True), pokud podřízený agent musí sdílet relaci volajícího.

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

Pokud implementujete vlastní veřejné run() nebo get_response() metody, přidejte function_invocation_kwargs a client_kwargs do signatur těchto metod. U nástrojů upřednostňujte parametr anotovaný jako FunctionInvocationContext – může mít název ctx, contextnebo jakýkoli jiný název s poznámkami. Pokud zadáte explicitní model schématu nebo vstupu, rozpozná se také prostý nenotovaný parametr s názvem ctx . Stejný kontextový objekt je k dispozici pro middleware funkcí a je tam, kde je nyní aktivní funkce modulu runtime kwargs a stav relace. Definice nástrojů, které stále spoléhají pouze na **kwargs, využívají starou cestu kompatibility a budou odebrány.


python-1.0.0rc4 / python-1.0.0b260311 (11. března 2026)

Poznámky k verzi:python-1.0.0rc4

🔴 Integrace Azure AI nyní cílí na azure-ai-projects GA 2.0

PR:#4536

Integrace Azure AI v Pythonu teď předpokládají plochu GA 2.0 azure-ai-projects .

  • Podporovaný rozsah závislostí je nyní azure-ai-projects>=2.0.0,<3.0.
  • foundry_features funkce passthrough byla odstraněna z vytváření agenta Azure AI.
  • Chování ve verzi Preview se teď používá allow_preview=True u podporovaných klientů nebo poskytovatelů.
  • Odstraněny byly smíšené beta/GA kompatibilní mezivrstvy, proto aktualizujte všechny importy a názvy typů na rozhraní sady SDK verze 2.0 GA.

🔴 Obslužné rutiny nástrojů GitHub Copilot teď používají ToolInvocation / ToolResult a Python 3.11 nebo novější

PR:#4551

agent-framework-github-copilot nyní sleduje github-copilot-sdk>=0.1.32.

  • Obslužné rutiny nástrojů přijímají ToolInvocation dataclass místo nezpracovaného dictsouboru .
  • Vraťte ToolResult pomocí snake_case polí, jako jsou result_type a text_result_for_llm.
  • Balíček agent-framework-github-copilot teď vyžaduje Python 3.11 nebo novější.

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. března 2026)

Poznámky k verzi:python-1.0.0rc3

🔴 Poskytovatel dovedností dokončil práci související s definovaným kódem Skill / SkillResource

PR:#4387

Dovednosti agenta Pythonu teď podporují kódově definované Skill a SkillResource objekty společně se souborovými dovednostmi a povrch veřejného poskytovatele je standardizovaný na SkillsProvider.

  • Pokud stále importujete starší verzi Preview nebo interní FileAgentSkillsProvider, přepněte na SkillsProvider.
  • Vyhledávání prostředků založené na souborech už nevyužívá zpětné odkazy v SKILL.md. Prostředky se místo toho zjišťují z adresáře dovedností.

Pokud jste používali náhledový nebo interní kód importující FileAgentSkillsProvider, přepněte na veřejné rozhraní:

from agent_framework import Skill, SkillResource, SkillsProvider

python-1.0.0rc2 / python-1.0.0b260226 (26. února 2026)

Poznámky k verzi:python-1.0.0rc2

🔴Deklarativní pracovní postupy nahrazují InvokeToolInvokeFunctionTool

PR:#3716

Deklarativní pracovní postupy Pythonu už nepoužívají starý InvokeTool druh akce. Nahraďte ho InvokeFunctionTool a registrujte Python funkce s WorkflowFactory.register_tool().

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. února 2026)

Vydání:agent-framework-core a agent-framework-azure-ai byly povýšeny na 1.0.0rc1. Všechny ostatní balíčky byly aktualizovány na 1.0.0b260219.

🔴 Jednotné zpracování přihlašovacích údajů Azure napříč všemi balíčky

PR:#4088

Parametry ad_token, ad_token_provider a pomocné rutiny get_entra_auth_token byly nahrazeny jednotným parametrem credential ve všech balíčcích Pythonu týkajících se Azure. Nový přístup se používá azure.identity.get_bearer_token_provider k automatickému ukládání tokenů do mezipaměti a aktualizaci.

Ovlivněné třídy:AzureOpenAIChatClient, AzureOpenAIResponsesClient, , AzureOpenAIAssistantsClient, AzureAIClientAzureAIAgentClient, AzureAIProjectAgentProviderAzureAIAgentsProviderAzureAISearchContextProvider, , PurviewClientPurviewPolicyMiddleware, . PurviewChatPolicyMiddleware

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

Parametr credential přijímá TokenCredential, AsyncTokenCredentialnebo volatelného zprostředkovatele tokenu. Ukládání tokenů do mezipaměti a aktualizace se zpracovává automaticky.


🔴 Přepracovaná hierarchie výjimek Pythonu

PR:#4082

Plochá ServiceException rodina byla nahrazena výjimkovými větvemi omezenými na doménu pod jediným AgentFrameworkException kořenem. Díky tomu mají volající přesné except cíle a jasně definovaný význam chyb.

Nová hierarchie:

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

Odebrané výjimky:ServiceException, ServiceInitializationError, ServiceResponseException, ServiceContentFilterException, ServiceInvalidAuthError, ServiceInvalidExecutionSettingsError, ServiceInvalidRequestError, ServiceInvalidResponseError, AgentExecutionException, AgentInvocationError, AgentInitializationError, AgentSessionException, ChatClientInitializationError, CheckpointDecodingError.

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

Poznámka:

Chyby ověřování inicializace nyní používají integrované ValueError/TypeError místo vlastních výjimek. Výjimky rozhraní Agent Framework jsou vyhrazené pro selhání na úrovni domény.


🔴 Stav zprostředkovatele vymezený podle source_id

PR:#3995

Háky zprostředkovatele teď místo úplného stavu relace obdrží slovník stavu s oborem zprostředkovatele (state.setdefault(provider.source_id, {})). To znamená, že implementace poskytovatelů, které dříve přistupovaly ke vnořenému stavu přes state[self.source_id]["key"], nyní musí přistupovat přímo přes state["key"].

Kromě toho se InMemoryHistoryProvider výchozí source_id nastavení změnilo z "memory" na "in_memory".

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

🔴 Zarovnání zpráv psaných v chatu/agentem (run vs get_response)

PR:#3920

Implementace chatovacího klienta get_response nyní konzistentně přijímají Sequence[Message]. agent.run(...) zůstává flexibilní (str, , Content, Messagenebo sekvence těchto) a normalizuje vstupy před voláním klientů chatu.

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] Obecné nastavení bylo odebráno pro propustnost schématu.

PR:#3907

Cesty nástrojů založené na schématu už nespoléhají na předchozí FunctionTool[Any] obecné chování. Použijte FunctionTool přímo a zadejte buď pydantic BaseModel, nebo explicitní schémata tam, kde je to potřeba (například pomocí @tool(schema=...)).

Before:

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

After:

placeholder: FunctionTool = FunctionTool(...)

🔴 Pydantické nastavení nahrazeno TypedDict + load_settings()

PR:#3843, #4032

Třída založená na pydantic-settings byla AFBaseSettings nahrazena lehkým systémem nastavení na bázi funkcí pomocí TypedDict a load_settings(). Závislost pydantic-settings byla zcela odebrána.

Všechny třídy nastavení (např OpenAISettings. , AzureOpenAISettings, AnthropicSettings) jsou nyní TypedDict definice a hodnoty nastavení jsou přístupné prostřednictvím syntaxe slovníku místo přístupu k atributům.

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

Důležité

Agent Framework nenačítá hodnoty ze .env souborů automaticky. K načítání musíte explicitně vyjádřit výslovný souhlas .env :

  • Volání load_dotenv() z balíčku python-dotenv na začátku vaší aplikace
  • Předání env_file_path=".env" do load_settings()
  • Nastavení proměnných prostředí přímo v shellu nebo integrovaném vývojovém prostředí (IDE)

Pořadí load_settings vyhodnocení je: explicitní přepsání → .env hodnot souboru (pokud je k dispozici env_file_path) → proměnné prostředí → výchozí hodnoty. Pokud zadáte env_file_path, soubor musí existovat nebo je vyvolán FileNotFoundError .


🟡 Oprava předání pracovního postupu modelu a serializace historie

PR:#4083

Opravuje více selhání při použití modelů odůvodnění (např. gpt-5-mini, gpt-5.2) v pracovních postupech s více agenty. Položky odůvodnění z API odpovědí jsou nyní správně serializovány a jsou zahrnuty pouze v historii, pokud je také přítomen function_call, což brání chybám rozhraní API. Šifrovaný nebo skrytý obsah odůvodnění je nyní správně vygenerován a summary formát pole je opraven. Zároveň se service_session_id vymaže při předání, aby se zabránilo úniku stavu mezi agenty.


🟡Bedrock přidán do core[all] a výchozí volby nástrojů byly opraveny

PR:#3953

Amazon Bedrock je nyní součástí agent-framework-core[all] extras a je k dispozici prostřednictvím agent_framework.amazon lazy import surface. Bylo také opraveno chování při volbě nástroje: Nenastavené hodnoty volby nástroje nyní zůstávají nenastavené, takže poskytovatelé používají výchozí hodnoty služby, zatímco explicitně nastavené hodnoty jsou zachovány.

from agent_framework.amazon import BedrockClient

🟡 AzureAIClient varuje při nepodporovaných přebitích běhového prostředí

PR:#3919

Teď AzureAIClient zaznamená upozornění, když se runtime tools nebo structured_output liší od konfigurace při vytvoření agenta. Služba Azure AI Agent nepodporuje změny modulu runtime ani formátu odpovědi — pokud potřebujete dynamické přepsání, použijte místo toho AzureOpenAIResponsesClient.


🟡 workflow.as_agent() Místní historie se teď nastavuje jako výchozí, když poskytovatelé nejsou uvedeni.

PR:#3918

Při vytváření workflow.as_agent() bez context_providers se nyní ve výchozím nastavení přidává InMemoryHistoryProvider("memory"). Pokud jsou explicitně zadáni zprostředkovatelé kontextu, zůstane tento seznam beze změny.

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

🟡 Kontext trasování OpenTelemetry je přenášen do požadavků MCP.

PR:#3780

Při instalaci OpenTelemetry se kontext trasování (např. W3C traceparent) automaticky vloží do požadavků MCP prostřednictvím params._meta. To umožňuje kompletní end-to-end distribuované trasování napříč voláními mezi agenty a serverem MCP. Není potřeba měnit žádný kód – toto je doplňkové chování, které se aktivuje, když existuje platný kontext rozsahu.


🟡 Podpora trvalých pracovních postupů pro Azure Functions

PR:#3630

Balíček agent-framework-azurefunctions teď podporuje spouštění Workflow grafů ve službě Azure Durable Functions. Předáním parametru do workflow se automaticky zaregistrují entity agentů, funkce aktivit a koncové body HTTP.

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

Podporuje vzory fan-out/fan-in, shared state a human-in-the-loop s konfigurovatelným časovým limitem a automatickým zamítnutím při vypršení platnosti.


python-1.0.0b260212 (12. února 2026)

Poznámky k verzi:python-1.0.0b260212

🔴 Hosted*Tool třídy nahrazené klientskými get_*_tool() metodami

PR:#3634

Hostované třídy nástrojů byly odebrány ve prospěch továrních metod v kontextu klienta. Díky tomu je dostupnost nástroje explicitní podle poskytovatele.

Odebraná třída 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()]

🔴 Finalizovaný kanál zprostředkovatele relace/kontextu (AgentSession, context_providers)

PR:#3850

Migrace relace Pythonu a poskytovatele kontextu byla dokončena. AgentThread a staré typy zprostředkovatele kontextu byly odebrány.

  • 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= vzory jsou nahrazeny context_providers=[...]

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)

🔴 Byl refaktorován model kontrolního bodu a chování úložiště

PR:#3744

Interní kontrolní body byly přepracovány, což má vliv na trvalou kompatibilitu kontrolních bodů a vlastní implementace úložiště:

  • WorkflowCheckpoint nyní ukládá živé objekty (serializace probíhá v úložišti kontrolních bodů).
  • FileCheckpointStorage nyní používá serializaci pickle
  • workflow_id byla odebrána a previous_checkpoint_id byla přidána
  • Byly odstraněny zastaralé háčky kontrolních bodů

Pokud zachováte kontrolní body mezi verzemi, znovu vygenerujete nebo migrujete existující artefakty kontrolních bodů před obnovením pracovních postupů.


🟡 AzureOpenAIResponsesClient podporuje koncové body projektu Microsoft Foundry.

PR:#3814

Teď můžete vytvořit AzureOpenAIResponsesClient koncový bod projektu Foundry nebo AIProjectClient, nejen přímé koncové body Azure OpenAI.

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

🔴 Middleware call_next už nepřijímá context

PR:#3829

Pokračování middlewaru teď nepřijímá žádné argumenty. Pokud váš middleware stále volá call_next(context), aktualizujte ho na call_next().

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. února 2026)

Poznámky k verzi:python-1.0.0b260210

🔴 Metody vytváření pracovních postupů odebrané z WorkflowBuilder

PR:#3781

register_executor() a register_agent() byly odebrány z WorkflowBuilder. Všechny metody tvůrce (add_edge, , add_fan_out_edges, add_fan_in_edgesadd_chain, add_switch_case_edge_group, add_multi_selection_edge_group) a start_executor již nepřijímají názvy řetězců – vyžadují exekutor nebo instance agenta přímo.

Pro izolaci stavu zabalte instanciaci exekutora/agenta a sestavení pracovního postupu uvnitř pomocné metody, aby každé volání vytvářelo nové instance.

WorkflowBuilder s vykonavateli

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 s agenty

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

Izolace stavu pomocí pomocných metod

Pro pracovní postupy, které potřebují izolovaný stav pro každé volání, zabalte konstrukci do pomocné funkce.

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 přejmenováno na Agent, ChatMessage přejmenováno na Message

PR:#3747

Základní typy Pythonu byly zjednodušeny odebráním redundantní Chat předpony. Nejsou k dispozici žádné aliasy zpětné kompatibility.

Před Po
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

Aktualizace importů

Before:

from agent_framework import ChatAgent, ChatMessage

After:

from agent_framework import Agent, Message

Odkazy na typy aktualizací

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

Poznámka:

ChatClient, ChatResponse, ChatOptionsa ChatMessageStorenejsou přejmenovány touto změnou.


🔴 Typy rozhraní API pro kontrolu aktualizací napříč modely odpovědí a zpráv

PR:#3647

Tato verze zahrnuje zásadní a rozsáhlé přepracování typování zpráv a odpovědí a pomocných rozhraní API.

  • Role a FinishReason nyní jsou NewType obalové prvky nad str s údaji RoleLiteral/FinishReasonLiteral o známých hodnotách. Považovat je za řetězce (bez .value použití).
  • Message konstrukce je standardizována na Message(role, contents=[...]); řetězce v contents jsou automaticky převedeny na textový obsah.
  • ChatResponse a AgentResponse konstruktory se nyní zaměřují na messages= (jednoduché Message nebo sekvence). Starší využití text= konstruktora bylo odstraněno z odpovědí.
  • ChatResponseUpdate a AgentResponseUpdate již nepřijímá text=; používat contents=[Content.from_text(...)].
  • Byly zjednodušeny názvy pomocníků pro kombinování aktualizací.
  • try_parse_value byl odebrán z ChatResponse a AgentResponse.

Pomocná metoda přejmenování

Před Po
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(...)

Aktualizace konstrukce aktualizace odpovědí

Before:

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

After:

from agent_framework import AgentResponseUpdate, Content

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

Nahradit try_parse_value s try/except na .value

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

🔴 run / get_response Jednotný model a ResponseStream využití

PR:#3379

Rozhraní API Pythonu byla konsolidována kolem agent.run(...) a client.get_response(...), přičemž streamování bylo reprezentováno ResponseStream.

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)

🔴 Přejmenování základního kontextu nebo typu protokolu

Žádosti o přijetí změn:#3714, #3717

Před Po
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

Aktualizujte importy a typové anotace odpovídajícím způsobem.


🔴 Parametr pokračování middlewaru přejmenovaný na call_next

PR:#3735

Podpisy middlewaru by teď měly používat call_next místo next.

Before:

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

After:

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

🔴 Názvy TypeVar standardizované (TNameNameT)

PR:#3770

Základ kódu se teď řídí konzistentním stylem pojmenování TypeVar, kde se používá přípona T .

Before:

TMessage = TypeVar("TMessage")

After:

MessageT = TypeVar("MessageT")

Pokud udržujete vlastní obálky kolem obecných typů frameworku, zarovnejte místní názvy TypeVar s novou konvencí, aby se snížily změny v anotacích.


🔴 Workflow-as-agent výstup a změny ve streamování

PR:#3649

workflow.as_agent() chování bylo aktualizováno, aby výstup a streamování odpovídaly standardním vzorům odpovědí agentů. Zkontrolujte uživatele, kteří používají agentové workflow závislé na zastaralém zpracování výstupů nebo aktualizací, a aktualizujte je na aktuální tok AgentResponse/AgentResponseUpdate.


🔴 Metody fluent builderu přesunuté na parametry konstruktoru

PR:#3693

Fluentní metody s jednou konfigurací napříč 6 buildery (WorkflowBuilder, SequentialBuilder, ConcurrentBuilder, GroupChatBuilder, MagenticBuilder, HandoffBuilder) byly převedeny na parametry konstruktoru. Metody Fluent, které byly jedinou cestou konfigurace pro nastavení, jsou odstraněny ve prospěch použití argumentů konstruktoru.

WorkflowBuilder

set_start_executor(), with_checkpointing()a with_output_from() jsou odebrány. Místo toho použijte parametry konstruktoru.

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()a with_intermediate_outputs() jsou odebrány. Místo toho použijte parametry konstruktoru.

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(), a with_intermediate_outputs() jsou odebrány. Místo toho použijte parametry konstruktoru.

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()a with_intermediate_outputs() jsou odebrány. Místo toho použijte parametry konstruktoru.

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() a with_termination_condition() jsou odebrány. Místo toho použijte parametry konstruktoru.

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

Změny validace

  • WorkflowBuilder nyní vyžaduje start_executor jako argument konstruktoru (dříve nastavený pomocí fluent metody).
  • SequentialBuilder, ConcurrentBuilder, GroupChatBuilder a MagenticBuilder nyní vyžadují buď participants, nebo participant_factories při konstrukci – nevynechání žádného z nich vyvolá ValueError.

Poznámka:

HandoffBuilder již přijata participants/participant_factories jako parametry konstruktoru a nebyla v tomto ohledu změněna.


🔴Události pracovního postupu sjednocené do jednoho WorkflowEvent s diskriminátorem type

PR:#3690

Všechny jednotlivé podtřídy událostí pracovního postupu byly nahrazeny jedinou obecnou WorkflowEvent[DataT] třídou. Místo použití isinstance() kontrol k identifikaci typů událostí teď event.type řetězcový literál zkontrolujete (např. "output", "request_info", "status"). To se řídí stejným vzorem Content jako sloučení tříd z python-1.0.0b260123.

Odebrané třídy událostí

Následující exportované podtřídy událostí již neexistují:

Stará třída Nová event.type hodnota
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"

Aktualizace importů

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

Aktualizace kontrol typů událostí

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

Streamování s využitím AgentResponseUpdate

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

Datové anotace

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

Poznámka:

WorkflowEvent je obecný (WorkflowEvent[DataT]), ale pro kolekce smíšených událostí použijte WorkflowEvent[Any] nebo neparametrizovanou WorkflowEvent.


🔴 workflow.send_responses* Odstraněn; Použít workflow.run(responses=...)

PR:#3720

send_responses() a send_responses_streaming() byly odebrány z Workflow. Pokračujte pozastavené pracovní postupy předáním odpovědí přímo do run().

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 přejmenováno na State; rozhraní API stavu pracovního postupu jsou synchronní

PR:#3667

Stavová rozhraní API již nevyžadují await, a pojmenování bylo standardizováno.

Před Po
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

🔴 Tvůrci orchestrace se přesunuli do agent_framework.orchestrations

PR:#3685

Tvůrci orchestrace jsou teď ve vyhrazeném prostoru názvů balíčků.

Before:

from agent_framework import SequentialBuilder, GroupChatBuilder

After:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟡 Dlouhotrvající odpovědi na pozadí a tokeny pokračování

PR:#3808

Odpovědi na pozadí jsou nyní podporovány pro běhy agenta Python options={"background": True} a 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})

🟡 Typy náhledu zprostředkovatele relací/kontextu přidané vedle sebe

PR:#3763

Nové typy kanálů relací/kontextu byly zavedeny spolu se staršími rozhraními API pro postupnou migraci, včetně SessionContext a BaseContextProvider.


🟡 Streamování interpretu kódu teď zahrnuje přírůstkové změny kódu.

PR:#3775

Streamovací interpret kódu nyní poskytuje rozdílové aktualizace kódu ve streamovaném obsahu, takže uživatelská rozhraní mohou postupně vykreslovat vygenerovaný kód.


🟡 @tool podporuje explicitní zpracování schématu.

PR:#3734

Definice nástrojů teď můžou použít explicitní zpracování schématu, když odvozený výstup schématu vyžaduje přizpůsobení.


python-1.0.0b260130 (30. ledna 2026)

Poznámky k verzi:python-1.0.0b260130

🟡 ChatOptions a ChatResponse/AgentResponse jsou nyní generické vůči formátu odpovědi

PR:#3305

ChatOptions, ChatResponsea AgentResponse jsou nyní obecné typy parametrizované podle typu formátu odpovědi. To umožňuje lepší odvození typů při použití strukturovaných výstupů s response_format.

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

Návod

Jedná se o vylepšení, které nezpůsobuje přerušení. Stávající kód bez parametrů typu nadále funguje. Pro možnosti a odpověď nemusíte zadávat typy ve výše uvedeném fragmentu kódu. jsou zde uvedeny pro přehlednost.


🟡 BaseAgent Byla přidána podpora pro sadu Claude Agent SDK

PR:#3509

Sada Python SDK nyní obsahuje BaseAgent implementaci sady Claude Agent SDK, která umožňuje prvotřídní použití založené na adaptérech v rozhraní Agent Framework.


python-1.0.0b260128 (28. ledna 2026)

Poznámky k verzi:python-1.0.0b260128

🔴 AIFunction přejmenováno na FunctionTool a @ai_function přejmenováno na @tool

PR:#3413

Třída a dekorátor byly přejmenovány kvůli přehlednosti a konzistenci s terminologií v odvětví.

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)

🔴 Model továrny přidaný do GroupChat a Magentic; Přejmenování rozhraní API

PR:#3224

Přidání objektu pro vytváření účastníků a orchestrátoru do skupinového chatu Zahrnuje také přejmenování:

  • 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 přejmenováno na GitHub

PR:#3486

Názvy tříd a balíčků byly aktualizovány tak, aby používaly správné písmena.

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. ledna 2026)

Poznámky k verzi:python-1.0.0b260127

🟡 BaseAgent Byla přidána podpora pro sadu GitHub Copilot SDK

PR:#3404

Sada Python SDK teď obsahuje BaseAgent implementaci integrace sady GitHub Copilot SDK.


python-1.0.0b260123 (23. ledna 2026)

Poznámky k verzi:python-1.0.0b260123

🔴 Typy obsahu zjednodušené na jednu třídu s konstruktory třídy (classmethod)

PR:#3252

Nahradili jsme všechny staré typy obsahu, které byly odvozeny z BaseContent, jedinou třídou Content s třídními metodami pro vytvoření konkrétních typů.

Úplné referenční informace k migraci

Starý typ Nová metoda
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(...)

Další nové metody (žádný přímý předchůdce):

  • Content.from_text_reasoning(...) — Obsah týkající se uvažování/myšlení
  • Content.from_hosted_vector_store(...) — Pro odkazy na úložiště vektorů
  • Content.from_usage(...) — Informace o využití/tokenu
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) — Pro serverové nástroje MCP
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) — Pro interpret kódu
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) — Pro generování imagí

Kontrola typů

isinstance() Místo kontrol použijte type vlastnost:

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)

Základní příklad

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

🔴 Typy anotací zjednodušené na Annotation a TextSpanRegionTypedDicts

PR:#3252

Nahradili jsme typy poznámek založené na třídách jednoduššími TypedDict definicemi.

Starý typ Nový typ
CitationAnnotation (třída) Annotation (TypedDict with type="citation")
BaseAnnotation (třída) Annotation (TypedDict)
TextSpanRegion (třída s SerializationMixin) TextSpanRegion (TypedDict)
Annotations (alias typu) Annotation
AnnotatedRegions (alias typu) 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"
}

Poznámka:

Protože Annotation a TextSpanRegion jsou teď TypedDicty, vytvoříte je jako slovníky, nikoli jako instance třídy.


🔴 response_format Chyby ověřování jsou teď viditelné uživatelům.

PR:#3274

ChatResponse.value a AgentResponse.value nyní vyvolají ValidationError , pokud se ověření schématu nezdaří, místo toho, aby vracely None beze slova.

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 zjednodušená logika spouštění; Opravy klienta MCP a Anthropic

PR:#3322

Definice run metody a její chování v rámci AG-UI bylo zjednodušené.

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
)

🟡 Klient Anthropic teď podporuje response_format strukturované výstupy.

PR:#3301

Teď můžete použít strukturované analýzy výstupu s klienty Anthropic prostřednictvím response_format, podobně jako OpenAI a klienti Azure.


🟡 Rozšířená konfigurace Azure AI (reasoning, rai_config)

Žádosti o přijetí změn:#3403, #3265

Podpora Azure AI byla rozšířena o podporu konfigurace uvažování a rai_config při vytváření agenta.


python-1.0.0b260116 (16. ledna 2026)

Poznámky k verzi:python-1.0.0b260116

🔴 create_agent přejmenováno na as_agent

PR:#3249

Byla přejmenována metoda pro lepší srozumitelnost vzhledem ke svému účelu.

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 přejmenováno na executor_id

PR:#3166

Vlastnost byla přejmenována pro konzistenci rozhraní API.

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 podporuje kontinuitu relací spravovaných službami

PR:#3136

AG-UI teď zachovává identitu konverzací spravovanou službou (například relace/vlákna spravovaná službou Foundry), aby se zachovala kontinuita více procesů.


python-1.0.0b260114 (14. ledna 2026)

Poznámky k verzi:python-1.0.0b260114

🔴 Refaktoring orchestrací

PR:#3023

Rozsáhlé refaktorování a zjednodušení orchestrací v pracovních postupech Agent Frameworku:

  • Skupinový chat: Rozdělit exekutor orchestrátoru na vyhrazeného agenta a na funkce (BaseGroupChatOrchestrator, GroupChatOrchestrator, AgentBasedGroupChatOrchestrator). Zjednodušená na hvězdicovou topologii s modelem vysílání.
  • Předání: Odebrání podpory jedné úrovně, koordinátoru a vlastního vykonavatele. Přesun na model vysílání s HandoffAgentExecutor.
  • Sekvenční a konkurenční: Zjednodušený mechanismus pro informace o žádostech, který spoléhá na dílčí pracovní postupy pomocí AgentApprovalExecutor a AgentRequestInfoExecutor.

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

🔴 Možnosti představené jako TypedDict a Generic

PR:#3140

Možnosti jsou nyní zadávány pomocí TypedDict pro lepší zabezpečení typů a automatické doplňování v integrovaném vývojovém prostředí (IDE).

📖 Úplné pokyny k migraci najdete v průvodci typovanými možnostmi.

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 Odstraněn; context_provider na jednotné číslo; middleware musí být seznam

PR:#3139

  • display_name parametr odebraný z agentů
  • context_providers (množné číslo, přijímá seznam) změněno na context_provider (jednotné číslo, povolen pouze 1)
  • middleware teď vyžaduje seznam (už nepřijímá jednu instanci).
  • AggregateContextProvider odebráno z kódu (v případě potřeby použijte ukázkovou implementaci).

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* přejmenováno na AgentResponse*

PR:#3207

AgentRunResponse a AgentRunResponseUpdate byly přejmenovány na AgentResponse a AgentResponseUpdate.

Before:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

After:

from agent_framework import AgentResponse, AgentResponseUpdate

🟡 Přidán modul runtime deklarativního pracovního postupu pro pracovní postupy definované v YAML

PR:#2815

Byl přidán modul runtime založený na grafu pro provádění deklarativních pracovních postupů YAML, který umožňuje orchestraci s více agenty bez vlastního kódu modulu runtime.


🟡 Vylepšení načítání a spolehlivosti MCP

PR:#3154

Integrace MCP získaly lepší chování při ztrátě připojení, podporu stránkování při načítání a možnosti řízení reprezentace.


🟡 Foundry A2ATool teď podporuje připojení bez cílové adresy URL.

PR:#3127

A2ATool teď dokáže vyřešit připojení A2A s podporou Foundry prostřednictvím metadat připojení projektu i v případě, že není nakonfigurovaná přímá cílová adresa URL.


python-1.0.0b260107 (7. ledna 2026)

Poznámky k verzi:python-1.0.0b260107

V této verzi nejsou žádné významné změny.


python-1.0.0b260106 (6. ledna 2026)

Poznámky k verzi:python-1.0.0b260106

V této verzi nejsou žádné významné změny.


Souhrnná tabulka

Vydání Poznámky k vydání Typ Změna PR
1.0.0rc5 / 1.0.0b260318 Není k dispozici (naplánované) 🔴 Lámání Veřejné moduly runtime kwargs rozdělené do function_invocation_kwargs a client_kwargs; nástroje nyní používají FunctionInvocationContext / ctx.session #4581
1.0.0rc4 / 1.0.0b260311 Poznámky 🔴 Lámání Integrace Azure AI teď cílí na azure-ai-projects GA 2.0; foundry_features byla odebrána a allow_preview je volitelnou možností verze Preview. #4536
1.0.0rc4 / 1.0.0b260311 Poznámky 🔴 Lámání Integrace GitHub Copilotu se teď používá ToolInvocation / ToolResult, agent-framework-github-copilot vyžaduje Python 3.11 nebo novější. #4551
1.0.0rc3 / 1.0.0b260304 Poznámky 🔴 Lámání Poskytovatel dovedností přidá kód definovaný Skill / SkillResourcekódem; starší FileAgentSkillsProvider importy a odkazy na prostředky backtick se musí aktualizovat. #4387
1.0.0rc2 / 1.0.0b260226 Poznámky 🔴 Lámání Deklarativní pracovní postupy nahrazující InvokeToolInvokeFunctionTool a WorkflowFactory.register_tool() #3716
1.0.0rc1 / 1.0.0b260219 Poznámky 🔴 Lámání Jednotné zpracování přihlašovacích údajů Azure napříč balíčky Azure #4088
1.0.0rc1 / 1.0.0b260219 Poznámky 🔴 Lámání Přepracovaná hierarchie výjimek Pythonu v části AgentFrameworkException #4082
1.0.0rc1 / 1.0.0b260219 Poznámky 🔴 Lámání Stav zprostředkovatele je nyní definován v rámci source_id. #3995
1.0.0rc1 / 1.0.0b260219 Poznámky 🔴 Lámání Vlastní get_response() implementace musí přijmout Sequence[Message] #3920
1.0.0rc1 / 1.0.0b260219 Poznámky 🔴 Lámání FunctionTool[Any] Odebraná průchozí vrstva schématu #3907
1.0.0rc1 / 1.0.0b260219 Poznámky 🔴 Lámání Nastavení přesunuta z AFBaseSettings / pydantic-settings na TypedDict + load_settings() Č. 3843, č. 4032
1.0.0rc1 / 1.0.0b260219 Poznámky 🟡 Vylepšení Oprava předání pracovního postupu modelu a serializace historie #4083
1.0.0rc1 / 1.0.0b260219 Poznámky 🟡 Vylepšení Bedrock přidán do core[all]; opravena výchozí nastavení volby nástrojů #3953
1.0.0rc1 / 1.0.0b260219 Poznámky 🟡 Vylepšení AzureAIClient upozornění na nepodporované přepsání modulu runtime #3919
1.0.0rc1 / 1.0.0b260219 Poznámky 🟡 Vylepšení workflow.as_agent() vloží místní historii, když poskytovatelé nejsou nastaveni. #3918
1.0.0rc1 / 1.0.0b260219 Poznámky 🟡 Vylepšení Kontext trasování OpenTelemetry se přenáší do požadavků MCP. #3780
1.0.0rc1 / 1.0.0b260219 Poznámky 🟡 Vylepšení Přidání podpory trvalých pracovních postupů pro Azure Functions #3630
1.0.0b260212 Poznámky 🔴 Lámání Hosted*Tool třídy odebrané; vytváření hostovaných nástrojů prostřednictvím klientských get_*_tool() metod #3634
1.0.0b260212 Poznámky 🔴 Lámání Kanál zprostředkovatele relace/kontextu byl finalizován: AgentThread odebrán, používán AgentSession + context_providers #3850
1.0.0b260212 Poznámky 🔴 Lámání Refaktoring modelu kontrolního bodu/úložiště (workflow_id odstraněno, previous_checkpoint_id přidáno, změna chování úložiště) #3744
1.0.0b260212 Poznámky 🟡 Vylepšení AzureOpenAIResponsesClient lze vytvořit z koncového bodu projektu Foundry nebo AIProjectClient #3814
1.0.0b260212 Poznámky 🔴 Lámání Pokračování operací middlewaru již nepřijímá context; aktualizujte call_next(context) na call_next() #3829
1.0.0b260210 Poznámky 🔴 Lámání send_responses() / send_responses_streaming() Odstraněn; Použít workflow.run(responses=...) #3720
1.0.0b260210 Poznámky 🔴 Lámání SharedStateState; rozhraní API pro stav pracovního postupu jsou synchronní a pole stavu kontrolního bodu bylo přejmenováno #3667
1.0.0b260210 Poznámky 🔴 Lámání Tvůrci orchestrace přesunuti do agent_framework.orchestrations balíčku #3685
1.0.0b260210 Poznámky 🟡 Vylepšení Odpovědi na pozadí a continuation_token podpora přidaná do odpovědí agenta Pythonu #3808
1.0.0b260210 Poznámky 🟡 Vylepšení Typy náhledu relace/kontextu přidané vedle sebe (SessionContext, BaseContextProvider) #3763
1.0.0b260210 Poznámky 🟡 Vylepšení Aktualizace streamovaného interpreta kódu nyní zahrnují postupné změny kódu. #3775
1.0.0b260210 Poznámky 🟡 Vylepšení @tool Dekorátor přidá podporu explicitního zpracování schématu. #3734
1.0.0b260210 Poznámky 🔴 Lámání register_executor() / register_agent() odebrané z WorkflowBuilder; používejte instance přímo a používejte pomocné metody pro izolaci stavu. #3781
1.0.0b260210 Poznámky 🔴 Lámání ChatAgentAgent, ChatMessageMessage, RawChatAgentRawAgent, ChatClientProtocolSupportsChatGetResponse #3747
1.0.0b260210 Poznámky 🔴 Lámání Kontrola rozhraní API typů: Role/FinishReason změny typu, zpřísnění konstruktoru odpovědi/aktualizace, přejmenování pomocné rutiny na from_updatesa odebrání try_parse_value #3647
1.0.0b260210 Poznámky 🔴 Lámání Rozhraní API sjednocená kolem run/get_response a ResponseStream #3379
1.0.0b260210 Poznámky 🔴 Lámání AgentRunContext přejmenováno na AgentContext #3714
1.0.0b260210 Poznámky 🔴 Lámání AgentProtocol přejmenováno na SupportsAgentRun #3717
1.0.0b260210 Poznámky 🔴 Lámání Parametr middlewaru next přejmenovaný na call_next #3735
1.0.0b260210 Poznámky 🔴 Lámání Pojmenování TypeVar standardizované (TNameNameT) #3770
1.0.0b260210 Poznámky 🔴 Lámání Chování výstupu/streamu pracovního postupu jako agenta v souladu s aktuálním tokem odezvy agenta #3649
1.0.0b260210 Poznámky 🔴 Lámání Metody fluent builderu byly přesunuty na parametry konstruktoru u 6 builderů. #3693
1.0.0b260210 Poznámky 🔴 Lámání Události pracovního postupu sjednocené do jednoho WorkflowEvent s diskriminátorem type ; isinstance()event.type == "..." #3690
1.0.0b260130 Poznámky 🟡 Vylepšení ChatOptions / ChatResponse / AgentResponse obecný formát odpovědi #3305
1.0.0b260130 Poznámky 🟡 Vylepšení BaseAgent Byla přidána podpora pro integrace Claude Agent SDK #3509
1.0.0b260128 Poznámky 🔴 Lámání AIFunction FunctionTool@ai_function@tool #3413
1.0.0b260128 Poznámky 🔴 Lámání Tovární vzor pro GroupChat/Magentic; with_standard_managerwith_manager, participant_factoriesregister_participant #3224
1.0.0b260128 Poznámky 🔴 Lámání GithubGitHub #3486
1.0.0b260127 Poznámky 🟡 Vylepšení BaseAgent Přidání podpory pro integrace sady GitHub Copilot SDK #3404
1.0.0b260123 Poznámky 🔴 Lámání Typy obsahu konsolidované do jedné Content třídy s classmethods #3252
1.0.0b260123 Poznámky 🔴 Lámání response_format Chyby ověřování nyní vyvolávají ValidationError #3274
1.0.0b260123 Poznámky 🔴 Lámání AG-UI zjednodušená logika spuštění #3322
1.0.0b260123 Poznámky 🟡 Vylepšení Klient Anthropic přidává response_format podporu strukturovaných výstupů. #3301
1.0.0b260123 Poznámky 🟡 Vylepšení Konfigurace Azure AI rozšířena o podporu reasoning a rai_config Č. 3403, č. 3265
1.0.0b260116 Poznámky 🔴 Lámání create_agentas_agent #3249
1.0.0b260116 Poznámky 🔴 Lámání source_executor_idexecutor_id #3166
1.0.0b260116 Poznámky 🟡 Vylepšení AG-UI podporuje kontinuitu relace/vláken spravovanou službou. #3136
1.0.0b260114 Poznámky 🔴 Lámání Refaktoring orchestrací (GroupChat, Handoff, Sekvenční, Souběžný) #3023
1.0.0b260114 Poznámky 🔴 Lámání Možnosti jako TypedDict a Generic #3140
1.0.0b260114 Poznámky 🔴 Lámání display_name odstraněn; context_providerscontext_provider (v jednotném čísle); middleware musí být seznam #3139
1.0.0b260114 Poznámky 🔴 Lámání AgentRunResponse / AgentRunResponseUpdate přejmenováno na AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 Poznámky 🟡 Vylepšení Přidán modul runtime pro deklarativní pracovní postupy definované jazykem YAML #2815
1.0.0b260114 Poznámky 🟡 Vylepšení Vylepšení načítání a spolehlivosti MCP (zpracování ztrát připojení, stránkování, ovládací prvky reprezentace) #3154
1.0.0b260114 Poznámky 🟡 Vylepšení Foundry A2ATool podporuje připojení bez explicitní cílové adresy URL. #3127
1.0.0b260107 Poznámky Žádné významné změny
1.0.0b260106 Poznámky Žádné významné změny

Další kroky