Freigeben über


Python 2026 – Leitfaden für wichtige Änderungen

Dieses Dokument listet alle wichtigen Änderungen in Python-Versionen seit Anfang 2026 auf, darunter wichtige Änderungen und wichtige Verbesserungen, die sich auf Ihren Code auswirken können. Jede Änderung wird markiert als:

  • 🔴 Kompatibilitätsbruch – Erfordert Codeänderungen für das Upgrade
  • 🟡 Verbesserung — Neue Funktion oder Verbesserung; Vorhandener Code funktioniert weiterhin

Dieses Dokument wird entfernt, sobald wir die stabile Version 1.0.0 erreicht haben. Bitte lesen Sie es also beim Upgrade zwischen den Versionen in 2026, um sicherzustellen, dass Sie keine wichtigen Änderungen verpassen. Detaillierte Upgradeanweisungen zu bestimmten Themen (z. B. Optionenmigration) finden Sie in den verknüpften Upgradeleitfäden oder den verknüpften PR.


python-1.0.0rc1 / python-1.0.0b260219 (19. Februar 2026)

Release:agent-framework-core und agent-framework-azure-ai höhergestuft zu 1.0.0rc1. Alle anderen Pakete wurden aktualisiert auf 1.0.0b260219.

🔴 Einheitliche Azure-Anmeldeinformationsverarbeitung für alle Pakete

PR:#4088

Die Parameter ad_token, ad_token_provider und get_entra_auth_token beziehungsweise Hilfsprogramme wurden in allen Azure-bezogenen Python-Paketen durch einen einheitlichen credential-Parameter ersetzt. Der neue Ansatz nutzt azure.identity.get_bearer_token_provider für das automatische Zwischenspeichern und die Aktualisierung von Token.

Betroffene Klassen:AzureOpenAIChatClient, AzureOpenAIResponsesClient, , AzureOpenAIAssistantsClient, AzureAIClientAzureAIAgentClient, AzureAIProjectAgentProvider, AzureAIAgentsProvider, AzureAISearchContextProviderPurviewClient, . PurviewPolicyMiddlewarePurviewChatPolicyMiddleware

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

Der credential Parameter akzeptiert TokenCredential, AsyncTokenCredentialoder ein aufrufbarer Tokenanbieter. Tokenzwischenspeicherung und -aktualisierung werden automatisch behandelt.


🔴 Neu gestaltete Python-Ausnahmehierarchie

PR:#4082

Die flache ServiceException-Familie wurde durch domänenbezogene Ausnahmeverzweigungen unter einem einzigen AgentFrameworkException-Stamm ersetzt. Dadurch erhalten Anrufer präzise except Ziele und klare Fehlersemantik.

Neue 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

Entfernte Ausnahmen: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
    ...

Hinweis

Initialisierungsvalidierungsfehler ValueError/TypeError verwenden jetzt eingebaute Ausnahmen anstelle benutzerdefinierter. Agent Framework-Ausnahmen sind für Fehler auf Domänenebene reserviert.


🔴 Anbieterstatus im Bereich source_id

PR:#3995

Anbieter-Hooks erhalten jetzt ein anbieterbezogenes Statuswörterbuch (state.setdefault(provider.source_id, {})) statt des vollständigen Sitzungszustands. Dies bedeutet, dass Anbieterimplementierungen, die zuvor auf den geschachtelten Zustand über state[self.source_id]["key"] zugegriffen haben, jetzt direkt auf state["key"] zugreifen müssen.

Darüber hinaus InMemoryHistoryProvider wurde die Standardeinstellung source_id von "memory" zu "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")

🔴 Ausrichtung der Chat-/Agent-Nachrichteneingabe (run vs get_response)

PR:#3920

Chat-Client-Implementierungen get_response empfangen Sequence[Message] jetzt einheitlich. agent.run(...) bleibt flexibel (str, Content, Messageoder Sequenzen dieser) und normalisiert Eingaben vor dem Aufrufen von Chatclients.

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] generisches Setup für Schema-Passthrough entfernt

PR:#3907

Schemabasierte Toolpfade basieren nicht mehr auf dem vorherigen generischen FunctionTool[Any] Verhalten. Verwenden Sie FunctionTool direkt und geben Sie entweder ein pydantic BaseModel oder bei Bedarf explizite Schemas an (z. B. mit @tool(schema=...)).

Before:

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

After:

placeholder: FunctionTool = FunctionTool(...)

🔴 Pydantische Einstellungen ersetzt durch TypedDict + load_settings()

PRs:#3843, #4032

Die auf pydantic-settings basierende AFBaseSettings-Klasse wurde durch ein leichtgewichtiges, funktionsbasiertes Einstellungssystem ersetzt, das TypedDict und load_settings() verwendet. Die pydantic-settings Abhängigkeit wurde vollständig entfernt.

Alle Einstellungsklassen (z. B. OpenAISettings, , AzureOpenAISettingsAnthropicSettings) sind jetzt TypedDict Definitionen, und auf Einstellungswerte wird über die Wörterbuchsyntax anstelle des Attributzugriffs zugegriffen.

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

Von Bedeutung

Agent Framework lädt Werte nicht automatisch aus Dateien. Sie müssen sich explizit für das .env Laden durch eine der folgenden Aktionen anmelden:

  • Aufrufen load_dotenv() des python-dotenv Pakets zu Beginn der Anwendung
  • Übergeben env_file_path=".env" an load_settings()
  • Festlegen von Umgebungsvariablen direkt in der Shell oder IDE

Die load_settings Auflösungsreihenfolge lautet: explizite Außerkraftsetzungen → .env Dateiwerte (sofern env_file_path angegeben) → Umgebungsvariablen → Standardwerten. Wenn Sie env_file_path angeben, muss die Datei vorhanden sein, andernfalls wird eine FileNotFoundError ausgelöst.


🟡 Beheben der Workflow-Übergabe des Reasoning-Models und der Serialisierung der Historie

PR:#4083

Behebt mehrere Fehler bei der Verwendung von Argumentationsmodellen (z. B. gpt-5-mini, gpt-5.2) in Multiagenten-Workflows. Die Abschätzungen aus der Responses-API werden jetzt korrekt serialisiert und nur in den Verlauf aufgenommen, wenn auch ein function_call vorhanden ist, um API-Fehler zu verhindern. Verschlüsselter/ausgeblendeter Begründungsinhalt wird jetzt ordnungsgemäß ausgegeben, und das summary Feldformat wird korrigiert. Zusätzlich wird service_session_id auch beim Handover gelöscht, um ein Leck des agentenübergreifenden Zustands zu verhindern.


🟡 Bedrock zum core[all] hinzugefügt und Standardeinstellungen für die Werkzeugauswahl korrigiert

PR:#3953

Amazon Bedrock ist jetzt in den agent-framework-core[all] Extras enthalten und über die agent_framework.amazon Lazy-Import-Schnittstelle verfügbar. Das Toolauswahlverhalten wurde ebenfalls behoben: Nicht festgelegte Toolauswahlwerte bleiben jetzt nicht festgelegt, sodass Anbieter ihre Dienststandardwerte verwenden, während explizit festgelegte Werte beibehalten werden.

from agent_framework.amazon import BedrockClient

🟡 AzureAIClient warnt bei nicht unterstützten Laufzeitüberschreibungen

PR:#3919

AzureAIClient protokolliert jetzt eine Warnung, wenn laufzeit tools oder structured_output von der Erstellungszeitkonfiguration des Agents abweicht. Der Azure AI-Agent-Dienst unterstützt keine Änderungen des Laufzeittools oder des Antwortformats. Verwenden Sie stattdessen AzureOpenAIResponsesClient, wenn Sie dynamische Überschreibungen benötigen.


🟡 workflow.as_agent() Jetzt wird standardmäßig der lokale Verlauf verwendet, wenn Anbieter nicht festgelegt sind.

PR:#3918

Wenn workflow.as_agent() ohne context_providers erstellt wird, wird InMemoryHistoryProvider("memory") jetzt standardmäßig hinzugefügt. Wenn Kontextanbieter explizit angegeben werden, wird diese Liste unverändert beibehalten.

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

🟡 OpenTelemetry-Ablaufverfolgungskontext an MCP-Anforderungen weitergegeben

PR:#3780

Wenn OpenTelemetry installiert ist, wird der Trace-Kontext (z. B. W3C traceparent) automatisch in MCP-Anforderungen über params._meta eingefügt. Dies ermöglicht die Verfolgung des gesamten Ablaufs von Agenten bis zu Aufrufen des MCP-Servers in einer verteilten Umgebung. Es sind keine Codeänderungen erforderlich – dies ist ein additives Verhalten, das aktiviert wird, wenn ein gültiger Span-Kontext vorhanden ist.


🟡 Dauerhafte Workflowunterstützung für Azure Functions

PR:#3630

Das agent-framework-azurefunctions Paket unterstützt jetzt das Ausführen von Workflow Diagrammen in Azure Durable Functions. Übergeben Sie einen workflow Parameter an AgentFunctionApp, um Agententitäten, Aktivitätsfunktionen und HTTP-Endpunkte automatisch zu registrieren.

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

Unterstützt Fan-Out/Fan-In-, Zustandsteilungs- und Human-in-the-Loop-Muster mit konfigurierbarem Timeout und automatischer Ablehnung bei Ablauf.


python-1.0.0b260212 (12. Februar 2026)

Versionshinweise:python-1.0.0b260212

🔴 Hosted*Tool Durch Clientmethoden get_*_tool() ersetzte Klassen

PR:#3634

Die gehosteten Toolklassen wurden zugunsten von klientenspezifischen Factory-Methoden entfernt. Dadurch wird die Verfügbarkeit des Tools vom Anbieter explizit festgelegt.

Klasse entfernt 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()]

🔴 Die Pipeline des Sitzungs-/Kontextanbieters wurde abgeschlossen (AgentSession, context_providers)

PR:#3850

Die Python-Sitzung und die Kontextanbietermigration wurden abgeschlossen. AgentThread und die alten Kontextanbietertypen wurden entfernt.

  • 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= Muster werden durch 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)

🔴 Prüfpunktmodell und Speicherverhalten umgestaltet

PR:#3744

Prüfpunktinsinterne wurden neu gestaltet, was sich auf die permanente Kompatibilität von Prüfpunkten und benutzerdefinierte Speicherimplementierungen auswirkt:

  • WorkflowCheckpoint speichert jetzt Liveobjekte (Serialisierung geschieht im Prüfpunktspeicher)
  • FileCheckpointStorage verwendet jetzt Pickle-Serialisierung
  • workflow_id wurde entfernt und previous_checkpoint_id hinzugefügt.
  • Veraltete Prüfpunkthaken wurden entfernt.

Wenn Sie Prüfpunkte zwischen Versionen beibehalten, generieren oder migrieren Sie vorhandene Prüfpunktartefakte, bevor Sie Workflows fortsetzen.


🟡 AzureOpenAIResponsesClient unterstützt Azure AI Foundry-Projektendpunkte

PR:#3814

Sie können jetzt mit einem Foundry-Projektendpunkt AzureOpenAIResponsesClient oder nicht nur mit direkten Azure OpenAI-Endpunkten AIProjectClient erstellen.

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 akzeptiert nicht mehr context

PR:#3829

Middleware-Fortsetzung akzeptiert jetzt keine Argumente. Wenn Ihre Middleware weiterhin aufruft call_next(context), aktualisieren Sie sie auf 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. Februar 2026)

Versionshinweise:python-1.0.0b260210

🔴 Workflow-Factory-Methoden entfernt von WorkflowBuilder

PR:#3781

register_executor() und register_agent() wurden aus WorkflowBuilderentfernt. Alle Generatormethoden (add_edge, add_fan_out_edges, , add_fan_in_edgesadd_chain, add_switch_case_edge_group, add_multi_selection_edge_group) und start_executor akzeptieren keine Zeichenfolgennamen mehr – sie erfordern Executor- oder Agentinstanzen direkt.

Um die Isolation des Zustands zu gewährleisten, sollten Sie die Instanziierung von Executor/Agent und den Aufbau von Workflows in einer Hilfsmethode kapseln, sodass jeder Aufruf neue Instanzen erzeugt.

WorkflowBuilder mit Executoren

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 mit Agenten

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

Zustandsisolation mit Hilfsmethoden

Für Workflows, die einen isolierten Zustand pro Aufruf benötigen, umschließen Sie die Konstruktion in einer Hilfsmethode:

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

🔴 ChatAgentumbenannt in , Agent umbenannt in ChatMessageMessage

PR:#3747

Core Python-Typen wurden durch Entfernen des redundanten Chat Präfixes vereinfacht. Es werden keine abwärtskompatiblen Aliasnamen bereitgestellt.

Vorher Nach
ChatAgent Agent
RawChatAgent RawAgent
ChatMessage Message
ChatClientProtocol SupportsChatGetResponse

Importe aktualisieren

Before:

from agent_framework import ChatAgent, ChatMessage

After:

from agent_framework import Agent, Message

Aktualisieren von Typverweisen

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

Hinweis

ChatClient, ChatResponse, ChatOptionsund ChatMessageStore werden von dieser Änderung nicht umbenannt.


🔴 Typen-API-Überprüfungsupdates über Antwort-/Nachrichtenmodelle hinweg

PR:#3647

Diese Version enthält eine umfassende, unterbrechende Bereinigung von Nachrichten-/Antworteingaben und Hilfs-APIs.

  • Role und FinishReason sind jetzt NewType Wrapper über str mit RoleLiteral/FinishReasonLiteral für bekannte Werte. Behandeln Sie sie als Zeichenfolgen (keine .value Verwendung).
  • Message Die Konstruktion ist standardisiert Message(role, contents=[...]); Zeichenfolgen werden contents automatisch in Textinhalte konvertiert.
  • ChatResponse und AgentResponse Konstruktoren fokussieren sich jetzt auf messages= (einzelnes Message oder Sequenzen); die Verwendung des Legacy-Konstruktors text= wurde aus den Antworten entfernt.
  • ChatResponseUpdate und AgentResponseUpdate akzeptieren text= nicht mehr; verwenden Sie contents=[Content.from_text(...)].
  • Die Bezeichnungen für die Zusammenführung von Updates wurden vereinfacht.
  • try_parse_value wurde aus ChatResponse und AgentResponseentfernt.

Die Hilfsmethode wird umbenannt.

Vorher Nach
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(...)

Aktualisieren der Antwortaktualisierungskonstruktion

Before:

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

After:

from agent_framework import AgentResponseUpdate, Content

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

Ersetzen Sie try_parse_value durch try/except auf .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}")

🔴Einheitliches run/get_response Modell und Verwendung ResponseStream

PR:#3379

Python-APIs wurden um agent.run(...) und client.get_response(...) konsolidiert, wobei Streaming durch ResponseStream dargestellt wird.

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)

🔴 Kernkontext/Protokolltyp-Umbenennungen

PRs:#3714, #3717

Vorher Nach
AgentRunContext AgentContext
AgentProtocol SupportsAgentRun

Aktualisieren Sie Importe und Typanmerkungen entsprechend.


🔴 Middleware-Fortsetzungsparameter umbenannt in call_next

PR:#3735

Middleware-Signaturen sollten jetzt call_next anstelle von 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)

🔴 TypeVar-Namen standardisiert (TNameNameT)

PR:#3770

Die Codebasis folgt nun einem konsistenten TypeVar-Benennungsstil, in dem Suffix T verwendet wird.

Before:

TMessage = TypeVar("TMessage")

After:

MessageT = TypeVar("MessageT")

Wenn Sie benutzerdefinierte Wrapper um Framework-Generika verwalten, richten Sie Ihre lokalen TypeVar-Namen an der neuen Konvention aus, um die Änderung von Anmerkungen zu reduzieren.


🔴 Workflow-as-agent-Output und Streaming-Änderungen

PR:#3649

workflow.as_agent() Das Verhalten wurde aktualisiert, um die Ausgabe und das Streaming mit standard-Agent-Antwortmustern auszurichten. Überprüfen Sie Workflow-as-Agent-Consumer, die von der Verarbeitung von Legacyausgabe/Aktualisierungen abhängig sind, und aktualisieren Sie sie auf den aktuellen AgentResponse/AgentResponseUpdate Fluss.


🔴 Fluent Builder-Methoden werden in Konstruktorparameter verschoben

PR:#3693

Fließende Methoden mit einer einzigen Konfiguration über 6 Builder (WorkflowBuilder, SequentialBuilder, ConcurrentBuilder, GroupChatBuilder, MagenticBuilder, HandoffBuilder) wurden zu Konstruktorparametern migriert. Fluent-Methoden, die der einzige Konfigurationspfad für eine Einstellung waren, werden zugunsten von Konstruktorargumenten entfernt.

WorkflowBuilder

set_start_executor(), with_checkpointing()und with_output_from() werden entfernt. Verwenden Sie stattdessen Konstruktorparameter.

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()und with_intermediate_outputs() werden entfernt. Verwenden Sie stattdessen Konstruktorparameter.

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()und with_intermediate_outputs() werden entfernt. Verwenden Sie stattdessen Konstruktorparameter.

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()und with_intermediate_outputs() werden entfernt. Verwenden Sie stattdessen Konstruktorparameter.

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() und with_termination_condition() werden entfernt. Verwenden Sie stattdessen Konstruktorparameter.

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

Validierungsänderungen

  • WorkflowBuilder erfordert start_executor jetzt als Konstruktorargument (zuvor über fluent-Methode festgelegt)
  • SequentialBuilder, ConcurrentBuilder, GroupChatBuilder und MagenticBuilder erfordern jetzt entweder participants oder participant_factories bei der Erstellung — keins von beidem führt dazu, dass ValueError

Hinweis

HandoffBuilder wurde bereits als Konstruktorparameter akzeptiert participants/participant_factories und in dieser Hinsicht nicht geändert.


🔴Workflow-Ereignisse mit WorkflowEvent-Diskriminator zu einem einzigen type-Ereignis zusammengeführt

PR:#3690

Alle einzelnen Workflow-Ereignis-Unterklassen wurden durch eine generische WorkflowEvent[DataT]-Klasse ersetzt. Anstatt isinstance() Checks zur Identifizierung von Ereignistypen zu verwenden, überprüfen Sie nun das event.type Zeichenfolgenliteral (z. B. "output", "request_info", "status"). Dies folgt demselben Muster wie die Content Klassenkonsolidierung aus python-1.0.0b260123.

Entfernte Ereignisklassen

Die folgenden exportierten Ereignisunterklassen sind nicht mehr vorhanden:

Alte Klasse Neuer event.type Wert
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"

Importe aktualisieren

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

Aktualisieren von Ereignistypüberprüfungen

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

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

Typanmerkungen

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

Hinweis

WorkflowEvent ist generisch (WorkflowEvent[DataT]), aber für Sammlungen gemischter Ereignisse verwenden WorkflowEvent[Any] oder nichtparameterisiert WorkflowEvent.


🔴 workflow.send_responses* entfernt; verwenden workflow.run(responses=...)

PR:#3720

send_responses() und send_responses_streaming() wurden aus Workflowentfernt. Setzen Sie angehaltene Workflows fort, indem Sie Antworten direkt an 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 umbenannt in State; Workflowstatus-APIs sind synchron

PR:#3667

Status-APIs erfordern awaitnicht mehr, und die Benennung wurde standardisiert:

Vorher Nach
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

🔴 Orchestrierungsentwickler wurden nach agent_framework.orchestrations

PR:#3685

Orchestrierungs-Generatoren befinden sich jetzt in einem dedizierten Paketnamespace.

Before:

from agent_framework import SequentialBuilder, GroupChatBuilder

After:

from agent_framework.orchestrations import SequentialBuilder, GroupChatBuilder

🟡 Lang andauernde Hintergrundantworten und Fortsetzungstokens

PR:#3808

Hintergrundantworten werden jetzt für die Ausführung von Python-Agenten durch options={"background": True} und continuation_token unterstützt.

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

🟡 Vorschautypen für Sitzungs-/Kontextanbieter, die nebeneinander hinzugefügt wurden

PR:#3763

Neue Sitzungs-/Kontextpipelinetypen wurden zusammen mit älteren APIs für die inkrementelle Migration eingeführt, einschließlich SessionContext und BaseContextProvider.


🟡 Code-Interpreter-Streaming umfasst jetzt inkrementelle Code-Deltas

PR:#3775

Streaming-Code-Interpreter führt jetzt Aktualisierungen von Codedelta in den gestreamten Inhalten aus, damit UIs generierten Code schrittweise rendern können.


🟡 @tool unterstützt die explizite Schemabehandlung

PR:#3734

Tooldefinitionen können jetzt die explizite Schemabehandlung verwenden, wenn die abgeleitete Schemaausgabe Anpassungen benötigt.


python-1.0.0b260130 (30. Januar 2026)

Versionshinweise:python-1.0.0b260130

🟡 ChatOptions und ChatResponse/AgentResponse jetzt standardisiert im Hinblick auf das Antwortformat

PR:#3305

ChatOptions, ChatResponseund AgentResponse sind jetzt generische Typen parametrisiert durch den Antwortformattyp. Dies ermöglicht eine bessere Typinferenz beim Verwenden strukturierter Ausgaben mit 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!)

Tipp

Dies ist eine ungebrochene Verbesserung. Vorhandener Code ohne Typparameter funktioniert weiterhin. Sie müssen die Typen im codeausschnitt oben nicht für die Optionen und Antworten angeben. Sie werden hier zur Übersichtlichkeit gezeigt.


🟡 BaseAgent Unterstützung für Claude Agent SDK hinzugefügt

PR:#3509

Das Python SDK enthält jetzt eine BaseAgent Implementierung für das Claude Agent SDK und ermöglicht eine erstklassige, Adapter-basierte Nutzung im Agent Framework.


python-1.0.0b260128 (28. Januar 2026)

Versionshinweise:python-1.0.0b260128

🔴 AIFunction umbenannt in FunctionTool und @ai_function umbenannt in @tool

PR:#3413

Die Klasse und der Dekorateur wurden für Klarheit und Konsistenz mit der Branchenterminologie umbenannt.

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)

🔴 Fabrikmuster zu GroupChat und Magentic hinzugefügt; API-Umbenennungen

PR:#3224

Teilnehmerfabrik und Orchestratorfabrik zum Gruppenchat hinzugefügt. Enthält auch Umbenennungen:

  • 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 umbenannt in GitHub

PR:#3486

Klassen- und Paketnamen wurden aktualisiert, um die korrekte Groß-/Kleinschreibung widerzuspiegeln.

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

Versionshinweise:python-1.0.0b260127

🟡 BaseAgent Unterstützung für GitHub Copilot SDK hinzugefügt

PR:#3404

Das Python SDK enthält jetzt eine BaseAgent Implementierung für GitHub Copilot SDK-Integrationen.


python-1.0.0b260123 (23. Januar 2026)

Versionshinweise:python-1.0.0b260123

🔴 Inhaltstypen, die in eine einzelne Klasse mit Klassenmethodkonstruktoren vereinfacht wurden

PR:#3252

Alle alten Inhaltstypen (abgeleitet von BaseContent) durch eine einzelne Content Klasse durch Klassenmethoden ersetzt, um bestimmte Typen zu erstellen.

Vollständige Migrationsreferenz

Alter Typ Neue Methode
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(...)

Zusätzliche neue Methoden (kein direkter Vorgänger):

  • Content.from_text_reasoning(...) — Zum Nachdenken anregende Inhalte
  • Content.from_hosted_vector_store(...) — Für Vektorspeicherverweise
  • Content.from_usage(...) — Für Nutzungs-/Tokeninformationen
  • Content.from_mcp_server_tool_call(...) / Content.from_mcp_server_tool_result(...) — Für MCP-Servertools
  • Content.from_code_interpreter_tool_call(...) / Content.from_code_interpreter_tool_result(...) — Für Codedolmetscher
  • Content.from_image_generation_tool_call(...) / Content.from_image_generation_tool_result(...) — Für die Bildgenerierung

Typüberprüfung

Verwenden Sie anstelle von isinstance() Überprüfungen die type Eigenschaft:

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)

Einfaches Beispiel

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

🔴 Anmerkungstypen vereinfacht zu Annotation und TextSpanRegion TypedDicts

PR:#3252

Klassenbasierte Anmerkungstypen wurden durch einfachere TypedDict Definitionen ersetzt.

Alter Typ Neuer Typ
CitationAnnotation (Klasse) Annotation (TypedDict mit type="citation")
BaseAnnotation (Klasse) Annotation (TypedDict)
TextSpanRegion (Klasse mit SerializationMixin) TextSpanRegion (TypedDict)
Annotations (Typ-Alias) Annotation
AnnotatedRegions (Typ-Alias) 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"
}

Hinweis

Da Annotation und TextSpanRegion sind jetzt TypedDicts, erstellen Sie sie als Wörterbücher und nicht als Klasseninstanzen.


🔴 response_format Überprüfungsfehler sind jetzt für Benutzer sichtbar

PR:#3274

ChatResponse.value und AgentResponse.value lösen jetzt ValidationError aus, wenn die Schemasvalidierung fehlschlägt, anstatt leise None zurückzugeben.

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-Ausführungslogik wurde vereinfacht; MCP- und Anthropic-Client-Fehlerbehebungen.

PR:#3322

Die run Methodensignatur und das Verhalten in AG-UI wurden vereinfacht.

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
)

🟡 Anthropic Client unterstützt response_format jetzt strukturierte Ausgaben

PR:#3301

Sie können jetzt die strukturierte Ausgabeverarbeitung mit Anthropic-Clients über response_format verwenden, ähnlich wie OpenAI- und Azure-Clients.


🟡 Azure AI-Konfiguration erweitert (reasoning, rai_config)

PRs:#3403, #3265

Die Azure AI-Unterstützung wurde durch die Unterstützung der Begründungskonfiguration und rai_config während der Agenterstellung erweitert.


python-1.0.0b260116 (16. Januar 2026)

Versionshinweise:python-1.0.0b260116

🔴 create_agent umbenannt in as_agent

PR:#3249

Die Methode wurde umbenannt, um den Zweck besser zu verdeutlichen.

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 umbenannt in executor_id

PR:#3166

Eigenschaft wurde für API-Konsistenz umbenannt.

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 unterstützt die dienstverwaltete Sitzungskontinuität.

PR:#3136

AG-UI behält nun die Identität von Dienstverwalteten Unterhaltungen (z. B. von Foundry verwaltete Sessions/Threads) bei, um die Multi-Turn-Kontinuität aufrechtzuerhalten.


python-1.0.0b260114 (14. Januar 2026)

Versionshinweise:python-1.0.0b260114

🔴 Orchestrierungen umgestaltet

PR:#3023

Umfassende Umgestaltung und Vereinfachung von Orchestrierungen in Agent Framework-Workflows:

  • Gruppenchat: Orchestrator-Executor in dedizierte agentenbasierte und funktionsbasierte Komponenten aufteilen (BaseGroupChatOrchestrator, GroupChatOrchestrator, AgentBasedGroupChatOrchestrator). Vereinfacht auf Stern-Topologie mit Broadcast-Modell.
  • Handoff: Unterstützung für Single-Tier, Koordinator und benutzerdefinierten Executor entfernt. Zum Übertragungsmodell mit HandoffAgentExecutor übergegangen.
  • Sequenziell und gleichzeitig: Vereinfachter Anforderungsinformationsmechanismus für die Verwendung von Unterworkflows über AgentApprovalExecutor und 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]
)

🔴 Als TypedDict und Generic eingeführte Optionen

PR:#3140

Optionen werden jetzt mit TypedDict typisiert, um eine bessere Typsicherheit und IDE-Autocomplete zu ermöglichen.

📖 Vollständige Migrationsanweisungen finden Sie im Handbuch für typierte Optionen.

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 entfernt; context_provider in den Singular geändert; middleware muss Liste sein

PR:#3139

  • display_name Parameter, der von Agenten entfernt wurde
  • context_providers (Plural, Akzeptierte Liste) geändert in context_provider (Singular, nur 1 zulässig)
  • middleware erfordert jetzt eine Liste (keine einzelne Instanz mehr akzeptiert)
  • AggregateContextProvider aus Code entfernt (bei Bedarf Beispielimplementierung verwenden)

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* umbenannt in AgentResponse*

PR:#3207

AgentRunResponse und AgentRunResponseUpdate wurden umbenannt in AgentResponse und AgentResponseUpdate.

Before:

from agent_framework import AgentRunResponse, AgentRunResponseUpdate

After:

from agent_framework import AgentResponse, AgentResponseUpdate

🟡 Deklarative Workflowlaufzeit für YAML-definierte Workflows hinzugefügt

PR:#2815

Zum Ausführen deklarativer YAML-Workflows wurde eine graphbasierte Laufzeit hinzugefügt, die die Multi-Agent-Orchestrierung ohne benutzerdefinierten Laufzeitcode ermöglicht.


🟡 Verbesserungen bei der Ladezuverlässigkeit von MCP

PR:#3154

MCP-Integrationen haben ein verbessertes Verbindungsverlustverhalten, Paginierungsunterstützung beim Laden und Darstellungssteuerungsoptionen gewonnen.


🟡 Foundry A2ATool unterstützt jetzt Verbindungen ohne Ziel-URL

PR:#3127

A2ATool kann jetzt Foundry-gestützte A2A-Verbindungen über Projektverbindungsmetadaten ermöglichen, auch wenn eine direkte Ziel-URL nicht konfiguriert ist.


python-1.0.0b260107 (7. Januar 2026)

Versionshinweise:python-1.0.0b260107

Keine signifikanten Änderungen in dieser Version.


python-1.0.0b260106 (6. Januar 2026)

Versionshinweise:python-1.0.0b260106

Keine signifikanten Änderungen in dieser Version.


Zusammenfassungstabelle

Freigabe Veröffentlichungshinweise Typ Veränderung PR
post-1.0.0b260212 (unveröffentlicht) N/A 🔴 Unterbrechung Chat-/Agentennachrichtentextausrichtung: benutzerdefinierte get_response() Implementierungen müssen Sequence[Message] akzeptieren #3920
post-1.0.0b260212 (unveröffentlicht) N/A 🔴 Unterbrechung FunctionTool[Any]Kompatibilitäts-Shim für Schema-Durchgang entfernt; Bei Bedarf FunctionTool mit expliziten Schemas verwenden. #3907
post-1.0.0b260212 (unveröffentlicht) N/A 🟡 Verbesserung workflow.as_agent() wird jetzt standardmäßig InMemoryHistoryProvider("memory") eingefügt, wenn Kontextanbieter nicht gesetzt sind. #3918
1.0.0b260212 Hinweise 🔴 Unterbrechung Hosted*ToolKlassen entfernt; Erstellung von gehosteten Tools mittels Client-Methodenget_*_tool() #3634
1.0.0b260212 🔴 Unterbrechung Die Pipeline des Sitzungs-/Kontextanbieters wurde abgeschlossen: AgentThread entfernt, verwenden AgentSession + context_providers #3850
1.0.0b260212 🔴 Unterbrechung Prüfpunktmodell/Speicherumgestaltung (workflow_id entfernt, previous_checkpoint_id hinzugefügt, Speicherverhalten geändert) #3744
1.0.0b260212 🟡 Verbesserung AzureOpenAIResponsesClient kann vom Azure AI Foundry-Projektendpunkt erstellt werden oder AIProjectClient #3814
1.0.0b260212 🔴 Unterbrechung Die Middleware-Fortsetzung akzeptiert context nicht mehr; aktualisieren Sie call_next(context) auf call_next() #3829
1.0.0b260210 Hinweise 🔴 Unterbrechung send_responses() / send_responses_streaming() Entfernt; Verwenden workflow.run(responses=...) #3720
1.0.0b260210 🔴 Unterbrechung SharedStateState; Workflowstatus-APIs sind synchron und das Prüfpunktstatusfeld wurde umbenannt. #3667
1.0.0b260210 🔴 Unterbrechung Orchestrierungs-Tools wurden in das Paket agent_framework.orchestrations verschoben #3685
1.0.0b260210 🟡 Verbesserung Hintergrundantworten und continuation_token-Unterstützung wurden zu Python-Agentenantworten hinzugefügt. #3808
1.0.0b260210 🟡 Verbesserung Sitzungs-/Kontextvorschautypen, die nebeneinander hinzugefügt wurden (SessionContext, BaseContextProvider) #3763
1.0.0b260210 🟡 Verbesserung Streaming-Code-Interpreter-Updates enthalten jetzt inkrementelle Codedelta #3775
1.0.0b260210 🟡 Verbesserung @tool Decorator fügt explizite Unterstützung für die Schemabehandlung hinzu #3734
1.0.0b260210 Hinweise 🔴 Unterbrechung register_executor() / register_agent() entfernt von WorkflowBuilder; nutzen Sie Instanzen direkt und verwenden Sie Hilfsmethoden zur Zustandsisolierung. #3781
1.0.0b260210 🔴 Unterbrechung ChatAgentAgent, ChatMessageMessage, RawChatAgentRawAgent, ChatClientProtocolSupportsChatGetResponse #3747
1.0.0b260210 🔴 Unterbrechung Überprüfung der Typen-API: Role/FinishReason Typänderungen, Verschärfung des Antwort-/Update-Konstruktors, Umbenennung von Hilfsprogrammen in from_updates, und Entfernung von try_parse_value #3647
1.0.0b260210 🔴 Unterbrechung Vereinheitlichte APIs rund um run/get_response und ResponseStream #3379
1.0.0b260210 🔴 Unterbrechung AgentRunContext umbenannt in AgentContext #3714
1.0.0b260210 🔴 Unterbrechung AgentProtocol umbenannt in SupportsAgentRun #3717
1.0.0b260210 🔴 Unterbrechung Middleware-Parameter next umbenannt in call_next #3735
1.0.0b260210 🔴 Unterbrechung TypeVar-Benennung standardisiert (TNameNameT) #3770
1.0.0b260210 🔴 Unterbrechung Workflow-as-Agent-Ausgabe-/Datenstromverhalten, das am aktuellen Agent-Antwortfluss ausgerichtet ist #3649
1.0.0b260210 🔴 Unterbrechung Fluent Builder-Methoden wurden in Konstruktorparameter bei 6 Buildern verschoben. #3693
1.0.0b260210 🔴 Unterbrechung Workflow-Ereignisse in einem einzigen WorkflowEvent mit type Diskriminator vereinheitlicht; isinstance()event.type == "..." #3690
1.0.0b260130 Hinweise 🟡 Verbesserung ChatOptions / ChatResponse / AgentResponse generisches Überantwortformat #3305
1.0.0b260130 🟡 Verbesserung BaseAgent Unterstützung für Claude Agent SDK-Integrationen hinzugefügt #3509
1.0.0b260128 Hinweise 🔴 Unterbrechung AIFunctionFunctionTool, @ai_function@tool #3413
1.0.0b260128 🔴 Unterbrechung Factory pattern für GroupChat/Magentic; with_standard_managerwith_manager, participant_factoriesregister_participant #3224
1.0.0b260128 🔴 Unterbrechung GithubGitHub #3486
1.0.0b260127 Hinweise 🟡 Verbesserung BaseAgent Unterstützung für GitHub Copilot SDK-Integrationen hinzugefügt #3404
1.0.0b260123 Hinweise 🔴 Unterbrechung Inhaltstypen werden zu einer einzelnen Content Klasse mit Klassenmethoden konsolidiert. #3252
1.0.0b260123 🔴 Unterbrechung response_format Überprüfungsfehler lösen jetzt aus ValidationError #3274
1.0.0b260123 🔴 Unterbrechung AG-UI vereinfachte Ausführungslogik #3322
1.0.0b260123 🟡 Verbesserung Anthropic Client bietet response_format Unterstützung für strukturierte Ausgaben #3301
1.0.0b260123 🟡 Verbesserung Azure AI-Konfiguration mit Unterstützung für reasoning und rai_config erweitert #3403, #3265
1.0.0b260116 Hinweise 🔴 Unterbrechung create_agentas_agent #3249
1.0.0b260116 🔴 Unterbrechung source_executor_idexecutor_id #3166
1.0.0b260116 🟡 Verbesserung AG-UI unterstützt dienstverwaltete Sitzungs-/Threadkontinuität #3136
1.0.0b260114 Hinweise 🔴 Unterbrechung Orchestrierungen umgestaltet (GroupChat, Handoff, Sequenziell, gleichzeitig) #3023
1.0.0b260114 🔴 Unterbrechung Optionen als "TypedDict" und "Generic" #3140
1.0.0b260114 🔴 Unterbrechung display_name Entfernt; context_providerscontext_provider → (Singular); middleware muss eine Liste sein #3139
1.0.0b260114 🔴 Unterbrechung AgentRunResponse / AgentRunResponseUpdate umbenannt in AgentResponse/AgentResponseUpdate #3207
1.0.0b260114 🟡 Verbesserung Deklarative Workflowlaufzeit für YAML-definierte Workflows hinzugefügt #2815
1.0.0b260114 🟡 Verbesserung Verbesserungen bei Lade- und Zuverlässigkeit von MCP (Verbindungsverlustbehandlung, Paginierung, Darstellungsoptionen) #3154
1.0.0b260114 🟡 Verbesserung Foundry A2ATool unterstützt Verbindungen ohne explizite Ziel-URL #3127
1.0.0b260107 Hinweise Keine signifikanten Änderungen
1.0.0b260106 Hinweise Keine signifikanten Änderungen

Nächste Schritte