Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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_kwargspro hodnoty, které by měly vidět jenom nástroje nebo funkční middleware. - Používá se
client_kwargspro konfiguraci kwargs na úrovni klienta a middlewaru klienta. - Přístup k datům o nástroji nebo modulu runtime prostřednictvím
FunctionInvocationContext(ctx.kwargsactx.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_featuresfunkce passthrough byla odstraněna z vytváření agenta Azure AI. - Chování ve verzi Preview se teď používá
allow_preview=Trueu 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í
ToolInvocationdataclass místo nezpracovanéhodictsouboru . - Vraťte
ToolResultpomocí snake_case polí, jako jsouresult_typeatext_result_for_llm. - Balíček
agent-framework-github-copilotteď 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 naSkillsProvider. - 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()
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íčkupython-dotenvna začátku vaší aplikace - Předání
env_file_path=".env"doload_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.
-
AgentThread→AgentSession -
agent.get_new_thread()→agent.create_session() -
agent.get_new_thread(service_thread_id=...)→agent.get_session(service_session_id=...) -
context_provider=/chat_message_store_factory=vzory jsou nahrazenycontext_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ě:
-
WorkflowCheckpointnyní ukládá živé objekty (serializace probíhá v úložišti kontrolních bodů). -
FileCheckpointStoragenyní používá serializaci pickle -
workflow_idbyla odebrána aprevious_checkpoint_idbyla 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.
-
RoleaFinishReasonnyní jsouNewTypeobalové prvky nadstrs údajiRoleLiteral/FinishReasonLiteralo známých hodnotách. Považovat je za řetězce (bez.valuepoužití). -
Messagekonstrukce je standardizována naMessage(role, contents=[...]); řetězce vcontentsjsou automaticky převedeny na textový obsah. -
ChatResponseaAgentResponsekonstruktory se nyní zaměřují namessages=(jednoduchéMessagenebo sekvence). Starší využitítext=konstruktora bylo odstraněno z odpovědí. -
ChatResponseUpdateaAgentResponseUpdatejiž nepřijímátext=; používatcontents=[Content.from_text(...)]. - Byly zjednodušeny názvy pomocníků pro kombinování aktualizací.
-
try_parse_valuebyl odebrán zChatResponseaAgentResponse.
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é (TName → NameT)
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
-
WorkflowBuildernyní vyžadujestart_executorjako argument konstruktoru (dříve nastavený pomocí fluent metody). -
SequentialBuilder,ConcurrentBuilder,GroupChatBuilderaMagenticBuildernyní vyžadují buďparticipants, neboparticipant_factoriespř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_manager→with_manager -
participant_factories→register_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í
AgentApprovalExecutoraAgentRequestInfoExecutor.
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_nameparametr odebraný z agentů -
context_providers(množné číslo, přijímá seznam) změněno nacontext_provider(jednotné číslo, povolen pouze 1) -
middlewareteď vyžaduje seznam (už nepřijímá jednu instanci). -
AggregateContextProviderodebrá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í |
SharedState → State; 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í |
ChatAgent → Agent, ChatMessage → Message, RawChatAgent → RawAgent, ChatClientProtocol → SupportsChatGetResponse |
#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é (TName → NameT) |
#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_manager → with_manager, participant_factories → register_participant |
#3224 |
| 1.0.0b260128 | Poznámky | 🔴 Lámání |
Github → GitHub |
#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_agent → as_agent |
#3249 |
| 1.0.0b260116 | Poznámky | 🔴 Lámání |
source_executor_id → executor_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_providers → context_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 | — |