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.
Das Microsoft Agent 365 SDK 2.0 ist für Python, JavaScript und .NET verfügbar. Diese Version enthält inkompatible Änderungen, aber die meisten betreffen nur die veralteten Observability-Pakete, und jede Änderung hat einen direkten Migrationspfad. Nutzen Sie diesen Artikel, um die Änderungen zu finden, die für Ihren Agenten gelten, und um Ihren Code zu aktualisieren.
Zusammenfassung der Breaking Changes
| Region | Languages | Ändern | Action |
|---|---|---|---|
| Benachrichtigungen | Python | Der Wert AgentLifecycleEvent.USERDELETED änderte sich. |
Aktualisieren Sie Code, der mit dem rohen String-Wert vergleicht. |
| Werkzeugerweiterungen | .NET |
authToken authentifiziert MCP-Server nicht länger. |
Pass UserAuthorization und authHandlerName, oder setze BEARER_TOKEN Umgebungsvariablen. |
| Laufzeit | Python |
get_observability_authentication_scope() gibt das reine /.default App-Scope zurück. |
Nutze den Scope mit einem App-Only-Token-Resolver. |
| Observabilitätsexport | Python, JavaScript, .NET | Der Export verwendet immer den Service-to-Service-(S2S)-Endpunkt und erfordert einen App-only-Token-Resolver. | Ersetzen Sie Code für delegierte Token durch einen reinen App-Resolver. |
| Observability-Telemetrie | Python, JavaScript, .NET | Nachrichtenattribute, Attributnamen und Inferenzvalidierung wurden geändert. | Aktualisieren Sie Code, Abfragen und Dashboards, die auf dem früheren Format basieren. |
Note
Die Observability-Pakete sind als veraltet markiert. SDK 2.0 stellt sie weiterhin bereit, aber nutzt sie nicht für neue Integrationen. Anstatt eine bestehende Observability-Integration auf SDK 2.0 zu aktualisieren, sollten Sie in Erwägung ziehen, auf die Microsoft OpenTelemetry Distro zu migrieren.
Aktualisieren Sie Ihre Pakete auf Agent 365 SDK 2.0
Aktualisieren Sie jedes Agent 365 SDK-Paket in Ihrem Projekt gleichzeitig auf Version 2.0. Für die vollständige Liste der Pakete siehe Agent 365 SDK Pakete.
pip install --upgrade microsoft-agents-a365-notifications microsoft-agents-a365-tooling microsoft-agents-a365-runtime
Füge alle anderen Agent-365-Pakete, die dein Agent verwendet, wie z. B. Tooling-Erweiterungen, demselben Befehl hinzu.
Benachrichtigungen
Überprüfen Sie den aktualisierten Lebenszyklus-Ereigniswert und die neuen Ereignisse, die in SDK 2.0 verfügbar sind.
Python: Wert des Lebenszyklusereignisses „Benutzer gelöscht“ geändert
Der Wert AgentLifecycleEvent.USERDELETED ist jetzt agenticuserdeleted. In früheren Versionen war der Wert agenticuseridentitydeleted.
Wenn Ihr Code das Lebenszyklusereignis mit einer rohen Zeichenkette vergleicht, vergleichen Sie stattdessen den Eventtyp in Kleinbuchstaben mit dem AgentLifecycleEvent Mitgliedswert:
from microsoft_agents_a365.notifications import AgentLifecycleEvent, AgentNotification
agent_notification = AgentNotification(app)
@agent_notification.on_agent_lifecycle_notification("*")
async def handle_lifecycle(context, state, notification):
event_type = (notification.activity.value_type or "").lower()
if event_type == AgentLifecycleEvent.USERDELETED.value:
await context.send_activity("User identity deleted")
Neue Lebenszyklusereignisse
SDK 2.0 fügt Python und JavaScript fünf Lebenszyklusereignisse und Handler hinzu. Das .NET SDK enthält sie bereits. Die vollständige Liste finden Sie unter Agentenlebenszyklus-Ereignisse.
Werkzeugerweiterungen
Wenn Sie die .NET-Toolingerweiterungen verwenden, aktualisieren Sie, wie sich Ihr Agent bei MCP-Servern authentifiziert.
.NET: Der AuthToken-Parameter authentifiziert MCP-Server nicht mehr
Diese Änderung gilt für die Semantischer Kernel, das Agent Framework und die Azure AI Foundry Tooling-Erweiterungen.
Wenn du nicht UserAuthorization und authHandlerName lieferst, verwendet die Erweiterung authToken nur, um MCP-Server über das Tooling-Gateway zu entdecken. Anschließend authentifiziert es jeden MCP-Server nur mit einem Token aus der Umgebungsvariable BEARER_TOKEN_<SERVERNAME> oder BEARER_TOKEN. Die Erweiterung überspringt und protokolliert jeden Server, der kein Token hat, sodass ein Agent, der sich allein auf authToken verlassen hat, ohne Fehler keine MCP-Tools zurückgeben kann.
Diese Änderung betrifft auch die folgenden Azure AI Foundry -Methoden, die immer diesen Pfad verwenden:
-
AddToolServersToAgent(synchron) GetMcpToolDefinitionsAndResourcesAsync(agentInstanceId, authToken, turnContext)
Um zu migrieren, verwenden Sie eine der folgenden Optionen:
Agentische Authentifizierung (empfohlen): Übergeben Sie
UserAuthorizationundauthHandlerName, damit die Erweiterung Token durch den agentischen On-Behalf-Of-(OBO)-Flow erhält.// Semantic Kernel await toolService.AddToolServersToAgentAsync(kernel, userAuthorization, authHandlerName, turnContext); // Azure AI Foundry: use the async method instead of AddToolServersToAgent await toolService.AddToolServersToAgentAsync(agentClient, userAuthorization, authHandlerName, turnContext);Umgebungsvariablen: Legen Sie
BEARER_TOKEN_<SERVERNAME>für jeden MCP-Server fest oderBEARER_TOKEN, um ein Token für alle Server zu verwenden. Diese Option eignet sich für lokale Entwicklung und Tests.
Weitere Informationen finden Sie unter Werkzeuge bei Ihrem Orchestrator registrieren.
Runtime
Wenn Ihr Python-Agent das Laufzeitpaket verwendet, um den Observability-Authentifizierungsbereich zu erhalten, prüfen Sie die folgende Änderung.
Python: Der Umfang der Observability-Authentifizierung ist nur für Apps
get_observability_authentication_scope() gibt nun den Observability-Ressourcenbereich /.default zurück, api://9b975845-388f-4429-889e-eab1ef63949c/.default. In früheren Versionen wurde der delegierte Agent365.Observability.OtelWrite Scope zurückgegeben.
Nutze diesen Scope nur, um ein reines App-Token für die exportierende Agenteninstanz zu erhalten. Details finden Sie unter Observability-Export verwendet reine App-Authentifizierung.
Beobachtbarkeitsänderungen in SDK 2.0
Die folgenden Änderungen gelten für die veralteten Agent-365-Observabilitätspakete in allen drei Sprachen.
Der Export von Observability verwendet nur App-Authentifizierung
SDK 2.0 entfernt die delegierte Authentifizierung für den Export der Observabilität:
- Der Exporteur sendet immer Telemetrie an die S2S-Route. Die
use_s2s_endpointOptionen (Python),useS2SEndpoint(JavaScript) undUseS2SEndpoint(.NET) werden ignoriert, selbst wenn sie auffalsegesetzt sind. - Der Exporter benötigt einen Token-Resolver, der für die Instanz des exportierenden Agents ein nur für die App bestimmtes Token zurückgibt. Die S2S-Route lehnt delegierte Token ab.
- Der Hosting-Token-Cache erwirbt App-Token. Die delegierten Registrierungsmethoden rufen keine Token mehr ab.
- In .NET gibt
/.defaultden nur für die App verfügbarenEnvironmentUtils.GetObservabilityAuthenticationScope()-Scope statt des delegiertenAgent365.Observability.OtelWrite-Scope zurück.
| Language | Entfernen | Stattdessen verwenden |
|---|---|---|
| Python |
AgenticTokenCache.register_observability(...), das jetzt ein No-Op ist und einen Fehler protokolliert |
AgenticTokenCache.refresh_observability_token(agent_id, tenant_id, token_resolver) |
| JavaScript |
RefreshObservabilityToken mit einem TurnContext und Authorization, und runWithExportToken für Exporter-Tokens |
RefreshObservabilityToken(agentId, tenantId, tokenResolver) mit withTokenResolver(...) oder exporterOptions.tokenResolver |
| .NET |
AgenticTokenCache.RegisterObservability(...) mit AgenticTokenStruct, was nun veraltet ist und einen Compilerfehler verursacht |
ObservabilityTokenResolver mit AgenticTokenCache.RefreshObservabilityToken(...), und TokenResolver oder ContextualTokenResolver in den Exportoptionen |
Die Workload-Authentifizierung für MCP-Server, Microsoft Graph und OBO-Flows ändert sich nicht.
Für Resolver-Anforderungen und Codebeispiele in jeder Sprache siehe Token Resolver.
Änderungen des Observabilitäts-Telemetrieformats
Aktualisieren Sie den Code zur Erstellung von Telemetriedaten sowie alle Abfragen oder Dashboards, die vom Nachrichtenformat, den Validierungsregeln oder den in diesem Abschnitt beschriebenen Attributnamen abhängen.
Nachrichtenattribute sind JSON-Arrays
Die Attribute gen_ai.output.messages und gen_ai.input.messages folgen nun den semantischen Konventionen für generative KI von OpenTelemetry. Sie serialisieren als einfaches JSON-Array, wie zum Beispiel [{"role": ..., "parts": [...]}], statt als Wrapper {"version": "0.1.0", "messages": [...]} .
-
Python: Die Konstante
A365_MESSAGE_SCHEMA_VERSIONund dasversionFeld aufInputMessagesundOutputMessageswurden entfernt. Der Standardwert vonOutputMessage.finish_reasonist"stop". -
JavaScript: Der Export
A365_MESSAGE_SCHEMA_VERSIONund dieversionEigenschaft aufInputMessagesundOutputMessageswurden entfernt. Verwenden Sie stattdessenDEFAULT_FINISH_REASON. Ausgabe-Nachrichten, die du aus einfachen Strings erstellst, sind standardmäßig vonfinish_reasonbis"stop". -
.NET: Die Klasse
MessageConstantsund dieInputMessages.Version- undOutputMessages.Version-Eigenschaften werden entfernt.OutputMessage.FinishReasonist nicht nullierbar und standardmäßig auf"stop"festgelegt.
Aktualisieren Sie Code, Abfragen oder Dashboards, die diese Attribute analysieren, sodass sie ein JSON-Array erwarten.
Inferenzdetails werden validiert
-
Python:
InferenceCallDetailserfordert eine nicht leeremodeloderresponseModel. Wenn beide fehlen oder leer sind, löst die KonstruktionValueErroraus. -
JavaScript:
InferenceDetails.providerNameist erforderlich.modelist optional, aber du musst einen nicht leeren Wert fürmodeloderresponseModelangeben.InferenceScope.start()wirft, wenn diese Werte fehlen. Es wirft außerdem, wennendpoint.portkeine ganze Zahl von 1 bis 65535 ist.
Attribut- und Operationsnamensänderungen
-
Python: Inferenzoperationennamen und Span-Name-Präfixe verwenden die kanonischen Kleinbuchstaben der OpenTelemetry-Werte
chat,text_completionundgenerate_content.Chat gpt-4wird beispielsweise zuchat gpt-4. Aktualisieren Sie die die Groß-/Kleinschreibung beachtenden Filter, Dashboards und Benachrichtigungen. -
JavaScript:
- Die Inferenz umfasst den Eintrag,
server.portwenn der Port443ist. - OpenAI-Erweiterungs-Antwortspannen melden das bereitgestellte Modell in
gen_ai.response.modelstattgen_ai.request.model. - Die LangChain-Erweiterung verwendet das bereitgestellte Modell nicht mehr als Fallback für
gen_ai.request.model. Es meldet das bereitgestellte Modell nur ingen_ai.response.model.
- Die Inferenz umfasst den Eintrag,
-
.NET: Das Attribut
gen_ai.tool.argumentswird ingen_ai.tool.call.argumentsumbenannt.
Änderungen an der Schnittstelle .NET: IA365EtwLogger
Die IA365EtwLogger Schnittstelle fügt jeder bestehenden Exception? error Methode eine Log* Methode und einen optionalen LogApplyGuardrail(...) Parameter hinzu. Wenn du IA365EtwLogger implementierst, aktualisiere deine Implementierung und kompiliere neu.