Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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()
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()despython-dotenvPakets zu Beginn der Anwendung - Übergeben
env_file_path=".env"anload_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.
-
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=Muster werden durchcontext_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:
-
WorkflowCheckpointspeichert jetzt Liveobjekte (Serialisierung geschieht im Prüfpunktspeicher) -
FileCheckpointStorageverwendet jetzt Pickle-Serialisierung -
workflow_idwurde entfernt undprevious_checkpoint_idhinzugefü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.
-
RoleundFinishReasonsind jetztNewTypeWrapper überstrmitRoleLiteral/FinishReasonLiteralfür bekannte Werte. Behandeln Sie sie als Zeichenfolgen (keine.valueVerwendung). -
MessageDie Konstruktion ist standardisiertMessage(role, contents=[...]); Zeichenfolgen werdencontentsautomatisch in Textinhalte konvertiert. -
ChatResponseundAgentResponseKonstruktoren fokussieren sich jetzt aufmessages=(einzelnesMessageoder Sequenzen); die Verwendung des Legacy-Konstruktorstext=wurde aus den Antworten entfernt. -
ChatResponseUpdateundAgentResponseUpdateakzeptierentext=nicht mehr; verwenden Siecontents=[Content.from_text(...)]. - Die Bezeichnungen für die Zusammenführung von Updates wurden vereinfacht.
-
try_parse_valuewurde ausChatResponseundAgentResponseentfernt.
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
| 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 (TName → NameT)
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
-
WorkflowBuildererfordertstart_executorjetzt als Konstruktorargument (zuvor über fluent-Methode festgelegt) -
SequentialBuilder,ConcurrentBuilder,GroupChatBuilderundMagenticBuildererfordern jetzt entwederparticipantsoderparticipant_factoriesbei der Erstellung — keins von beidem führt dazu, dassValueError
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_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 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)
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
AgentApprovalExecutorundAgentRequestInfoExecutor.
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_nameParameter, der von Agenten entfernt wurde -
context_providers(Plural, Akzeptierte Liste) geändert incontext_provider(Singular, nur 1 zulässig) -
middlewareerfordert jetzt eine Liste (keine einzelne Instanz mehr akzeptiert) -
AggregateContextProvideraus 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 |
SharedState → State; 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 |
ChatAgent → Agent, ChatMessage → Message, RawChatAgent → RawAgent, ChatClientProtocol → SupportsChatGetResponse |
#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 (TName → NameT) |
#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 |
AIFunction → FunctionTool, @ai_function → @tool |
#3413 |
| 1.0.0b260128 | 🔴 Unterbrechung | Factory pattern für GroupChat/Magentic; with_standard_manager → with_manager, participant_factories → register_participant |
#3224 | |
| 1.0.0b260128 | 🔴 Unterbrechung |
Github → GitHub |
#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_agent → as_agent |
#3249 |
| 1.0.0b260116 | 🔴 Unterbrechung |
source_executor_id → executor_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 | — |