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.
Wichtig
Sie müssen Teil des vorschauprogramms Frontier sein, um early access zu Microsoft Agent 365 zu erhalten. Frontier verbindet Sie direkt mit den neuesten KI-Innovationen von Microsoft. Frontier-Vorschauversionen unterliegen den bestehenden Vorschauversionsbedingungen Ihrer Kundenvereinbarungen. Da sich diese Funktionen noch in der Entwicklung befinden, können sich ihre Verfügbarkeit und Merkmale im Laufe der Zeit ändern.
Um am Agent-365-Ökosystem teilzunehmen, fügen Sie Ihrem Agenten Agent 365 Observability-Funktionen hinzu. Agent 365 Observability baut auf OpenTelemetry (OTel) auf und bietet ein einheitliches Rahmenwerk, um Telemetrie konsistent und sicher über alle Agentenplattformen hinweg zu erfassen. Durch die Implementierung dieser erforderlichen Komponente aktivieren Sie IT-Administratoren, die Aktivitäten Ihres Agents im Microsoft Admin Center zu überwachen und Sicherheitsteams die Verwendung von Defender und Purview für die Compliance- und Bedrohungserkennung zu ermöglichen.
Wesentliche Vorteile
- End-to-End-Sichtbarkeit: Erfassen Sie umfassende Telemetrie für jede Agentenaufrufe, einschließlich Sitzungen, Tool-Calls und Ausnahmen, sodass Sie plattformübergreifend vollständig nachverfolgt werden.
- Security and compliance enablement: Einheitliche Protokolldaten in Defender und Purview speisen und erweiterte Sicherheitsoptionen sowie Compliance-Berichte für Ihren Agenten ermöglichen.
- Cross-Platform-Flexibilität: Bauen Sie auf OTel-Standards auf, und unterstützen Sie verschiedene Laufzeiten und Plattformen wie Copilot Studio, Foundry und zukünftige Agent-Frameworks.
- Operationaleffizienz für Administratoren: Stellen Sie zentrale Observability in Microsoft 365 Admin Center bereit, reduzieren Sie die Problembehandlungszeit und verbessern Sie die Governance mit rollenbasierten Zugriffssteuerungen für IT-Teams, die Ihren Agent verwalten.
Installation
Verwenden Sie diese Befehle, um die Observability-Module für die von Agent 365 unterstützten Sprachen zu installieren.
Installieren Sie die Kern-, Überwachbarkeits- und Laufzeitpakete. Diese Pakete sind für alle Agents erforderlich, die Agent 365 Observability verwenden.
pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime
Wenn Ihr Agent das Hostingpaket Microsoft Agents Hosting verwendet, installieren Sie das Hostingintegrationspaket. Es stellt Middleware bereit, die automatisch Baggage und Scopes von TurnContext übernimmt, einschließlich der Token-Zwischenspeicherung für den Observability-Exporter.
pip install microsoft-agents-a365-observability-hosting
Wenn Ihr Agent eines der unterstützten KI-Frameworks verwendet, installieren Sie die entsprechende Erweiterung für die automatische Instrumentierung, um Telemetrie automatisch ohne manuellen Instrumentierungscode zu erfassen. Konfigurationsdetails finden Sie unter "Automatische Instrumentierung".
# For Semantic Kernel
pip install microsoft-agents-a365-observability-extensions-semantic-kernel
# For OpenAI Agents SDK
pip install microsoft-agents-a365-observability-extensions-openai
# For Microsoft Agent Framework
pip install microsoft-agents-a365-observability-extensions-agent-framework
# For LangChain
pip install microsoft-agents-a365-observability-extensions-langchain
Konfiguration
Verwenden Sie die folgenden Einstellungen, um die Agent 365 Observability für Ihren Agenten zu aktivieren und anzupassen.
Setze die ENABLE_A365_OBSERVABILITY_EXPORTER Umgebungsvariable auf true für Beobachtbarkeit. Diese Einstellung exportiert Protokolle in den Dienst und setzt voraus, dass token_resolver bereitgestellt wird. Ansonsten wird der Konsolen-Exporter verwendet.
from microsoft_agents_a365.observability.core import configure
def token_resolver(agent_id: str, tenant_id: str) -> str | None:
# Implement secure token retrieval here
return "Bearer <token>"
configure(
service_name="my-agent-service",
service_namespace="my.namespace",
token_resolver=token_resolver,
)
Die Tokenlöserfunktion ist von der Protokollierung in der Konsole ausgeschlossen.
Sie können das Exporterverhalten anpassen, indem Sie eine Agent365ExporterOptions Instanz an exporter_options. Wenn exporter_options bereitgestellt wird, hat es Vorrang vor den Parametern token_resolver und cluster_category.
from microsoft_agents_a365.observability.core import configure, Agent365ExporterOptions
configure(
service_name="my-agent-service",
service_namespace="my.namespace",
exporter_options=Agent365ExporterOptions(
cluster_category="prod",
token_resolver=token_resolver,
),
suppress_invoke_agent_input=True,
)
In der folgenden Tabelle werden die optionalen Parameter für configure() beschrieben.
| Parameter | Beschreibung | Vorgabe |
|---|---|---|
logger_name |
Der Name des Python Loggers, der für das Debuggen und die Konsolenprotokollausgabe verwendet wird. | microsoft_agents_a365.observability.core |
exporter_options |
Eine Agent365ExporterOptions Instanz, die die Tokenlöser- und Clusterkategorie zusammen konfiguriert. |
None |
suppress_invoke_agent_input |
Wenn True, unterdrückt Eingabemeldungen auf InvokeAgent Spans. |
False |
Die folgende Tabelle beschreibt die optionalen Eigenschaften für Agent365ExporterOptions.
| Eigentum | Beschreibung | Vorgabe |
|---|---|---|
use_s2s_endpoint |
Wenn True, verwendet den Dienst-zu-Dienst-Endpunktpfad. |
False |
max_queue_size |
Maximale Warteschlangengröße für den Batchprozessor. | 2048 |
scheduled_delay_ms |
Verzögerung in Millisekunden zwischen Exportbatches. | 5000 |
exporter_timeout_ms |
Timeout in Millisekunden für den Exportvorgang. | 30000 |
max_export_batch_size |
Maximale Batchgröße für Exportvorgänge. | 512 |
Gepäckattribute
Verwenden Sie BaggageBuilder, um Kontextinformationen festzulegen, die über alle Spannen in einer Anforderung fließen.
Das SDK implementiert einen SpanProcessor, der alle nicht leeren Gepäckeinträge in neu gestartete Abschnitte kopiert, ohne vorhandene Attribute zu überschreiben.
from microsoft_agents_a365.observability.core import BaggageBuilder
with (
BaggageBuilder()
.tenant_id("tenant-123")
.agent_id("agent-456")
.conversation_id("conv-789")
.build()
):
# Any spans started in this context will receive these as attributes
pass
Mithilfe des populate Hilfsprogramms im microsoft-agents-a365-observability-hosting Paket können Sie das BaggageBuilder automatisch von TurnContext ausfüllen. Dieses Tool extrahiert automatisch Anrufer-, Agenten-, Mandanten-, Kommunikationskanal- und Unterhaltungsdetails aus der Aktivität.
from microsoft_agents.hosting.core.turn_context import TurnContext
from microsoft_agents_a365.observability.core import BaggageBuilder
from microsoft_agents_a365.observability.hosting.scope_helpers.populate_baggage import populate
builder = BaggageBuilder()
populate(builder, turn_context)
with builder.build():
# Baggage is auto-populated from the TurnContext activity
pass
Tokenlöser
Wenn Sie den Agent 365-Exporter verwenden, müssen Sie eine Tokenlöserfunktion bereitstellen, die ein Authentifizierungstoken zurückgibt.
Wenn Sie das Agent 365 Observability SDK mit dem Agent Hosting Framework verwenden, können Sie Token mithilfe der TurnContext von Agentaktivitäten generieren.
from microsoft_agents.activity import load_configuration_from_env
from microsoft_agents.authentication.msal import MsalConnectionManager
from microsoft_agents.hosting.aiohttp import CloudAdapter
from microsoft_agents.hosting.core import (
AgentApplication,
Authorization,
MemoryStorage,
TurnContext,
TurnState,
)
from microsoft_agents_a365.runtime import (
get_observability_authentication_scope,
)
agents_sdk_config = load_configuration_from_env(environ)
STORAGE = MemoryStorage()
CONNECTION_MANAGER = MsalConnectionManager(**agents_sdk_config)
ADAPTER = CloudAdapter(connection_manager=CONNECTION_MANAGER)
ADAPTER.use(TranscriptLoggerMiddleware(ConsoleTranscriptLogger()))
AUTHORIZATION = Authorization(STORAGE, CONNECTION_MANAGER, **agents_sdk_config)
AGENT_APP = AgentApplication[TurnState](
storage=STORAGE, adapter=ADAPTER, authorization=AUTHORIZATION, **agents_sdk_config
)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
aau_auth_token = await AGENT_APP.auth.exchange_token(
context,
scopes=get_observability_authentication_scope(),
auth_handler_id="AGENTIC",
)
# cache this auth token and return via token resolver
Für das digitale Arbeiterszenario, wenn Ihr Agent das Microsoft Agent 365 Observability Hosting Library-Paket verwendet, verwenden Sie AgenticTokenCache, um die Tokenzwischenspeicherung automatisch zu handhaben. Registrieren Sie das Token einmal pro Agent und Mandant während eines Aktivitäts-Handlers, und übergeben Sie es in Ihrer Observability-Konfiguration cache.get_observability_token als token_resolver.
from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.hosting.token_cache_helpers import (
AgenticTokenCache,
AgenticTokenStruct,
)
from microsoft_agents_a365.runtime import get_observability_authentication_scope
# Create a shared cache instance
token_cache = AgenticTokenCache()
# Use the cache as your token resolver in configure()
configure(
service_name="my-agent-service",
service_namespace="my.namespace",
token_resolver=token_cache.get_observability_token,
)
@AGENT_APP.activity("message", auth_handlers=["AGENTIC"])
async def on_message(context: TurnContext, _state: TurnState):
token_cache.register_observability(
agent_id="agent-456",
tenant_id="tenant-123",
token_generator=AgenticTokenStruct(
authorization=AGENT_APP.auth,
turn_context=context,
),
observability_scopes=get_observability_authentication_scope(),
)
Automatische Instrumentierung
Die automatische Instrumentierung lauscht automatisch auf agentische Frameworks (SDKs) vorhandene Telemetriesignale für Ablaufverfolgungen und leitet sie an den Agent 365-Einblick-Service weiter. Diese Funktion beseitigt die Notwendigkeit für Entwickler, Überwachungscode manuell zu schreiben, vereinfacht die Einrichtung und gewährleistet eine konsistente Leistungsverfolgung.
Mehrere SDKs und Plattformen unterstützen Autoinstrumentierung:
| Plattform | Unterstützte SDKs / Frameworks |
|---|---|
| .NET | Semantischer Kernel, OpenAI, Agent Framework |
| Python | Semantischer Kernel, OpenAI, Agent Framework, LangChain |
| Node.js | OpenAI,LangChain |
Anmerkung
Die Unterstützung für die automatische Instrumentierung variiert je nach Plattform und SDK-Implementierung.
Semantischer Kernel
Die automatische Instrumentierung erfordert die Verwendung des BaggageBuilders. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.
Installieren des Pakets.
pip install microsoft-agents-a365-observability-extensions-semantic-kernel
Konfigurieren der Beobachtbarkeit
from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.semantickernel.trace_instrumentor import SemanticKernelInstrumentor
# Configure observability
configure(
service_name="my-semantic-kernel-agent",
service_namespace="ai.agents"
)
# Enable auto-instrumentation
instrumentor = SemanticKernelInstrumentor()
instrumentor.instrument()
# Your Semantic Kernel code is now automatically traced
OpenAI
Die automatische Instrumentierung erfordert die Verwendung des BaggageBuilders. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.
Installieren des Pakets.
pip install microsoft-agents-a365-observability-extensions-openai
Konfigurieren der Beobachtbarkeit
from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.openai import OpenAIAgentsTraceInstrumentor
# Configure observability
configure(
service_name="my-openai-agent",
service_namespace="ai.agents"
)
# Enable auto-instrumentation
instrumentor = OpenAIAgentsTraceInstrumentor()
instrumentor.instrument()
# Your OpenAI Agents code is now automatically traced
Agenten-Framework
Die automatische Instrumentierung erfordert die Verwendung des BaggageBuilders. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.
Installieren des Pakets.
pip install microsoft-agents-a365-observability-extensions-agent-framework
Konfigurieren der Beobachtbarkeit
from microsoft_agents_a365.observability.core import configure
from microsoft_agents_a365.observability.extensions.agentframework import (
AgentFrameworkInstrumentor,
)
# Configure observability
configure(
service_name="AgentFrameworkTracingWithAzureOpenAI",
service_namespace="AgentFrameworkTesting",
)
# Enable auto-instrumentation
AgentFrameworkInstrumentor().instrument()
LangChain-Framework
Die automatische Instrumentierung erfordert die Verwendung von BaggageBuilder. Setzen Sie die Agenten-ID und die Mieter-ID mit BaggageBuilder.
Installieren des Pakets.
pip install microsoft-agents-a365-observability-extensions-langchain
Konfigurieren der Beobachtbarkeit
from microsoft_agents_a365.observability.core.config import configure
from microsoft_agents_a365.observability.extensions.langchain import CustomLangChainInstrumentor
# Configure observability
configure(
service_name="my-langchain-agent",
service_namespace="ai.agents"
)
# Enable auto-instrumentation
CustomLangChainInstrumentor()
# Your LangChain code is now automatically traced
Manuelle Instrumentierung
Verwenden Sie das Agent 365 Observability SDK, um die interne Funktionsweise des Agenten zu verstehen.
Das SDK bietet drei Bereiche, die Sie starten können: InvokeAgentScope, ExecuteToolScope, und InferenceScope.
Agent-Aufruf
Nutzen Sie diesen Umfang zu Beginn Ihres Maklerprozesses. Durch die Nutzung des Aufruf-Agenten-Umfangs können Sie Eigenschaften wie den aktuell aufgerufenen Agenten, Agentenbenutzerdaten und mehr erfassen.
from microsoft_agents_a365.observability.core import (
InvokeAgentScope,
InvokeAgentScopeDetails,
AgentDetails,
CallerDetails,
UserDetails,
Channel,
Request,
ServiceEndpoint,
)
agent_details = AgentDetails(
agent_id="agent-456",
agent_name="My Agent",
agent_description="An AI agent powered by Azure OpenAI",
agentic_user_id="auid-123",
agentic_user_email="agent@contoso.com",
agent_blueprint_id="blueprint-789",
tenant_id="tenant-123",
)
scope_details = InvokeAgentScopeDetails(
endpoint=ServiceEndpoint(hostname="myagent.contoso.com", port=443),
)
request = Request(
content="User asks a question",
session_id="session-42",
conversation_id="conv-xyz",
channel=Channel(name="msteams"),
)
caller_details = CallerDetails(
user_details=UserDetails(
user_id="user-123",
user_email="jane.doe@contoso.com",
user_name="Jane Doe",
),
)
with InvokeAgentScope.start(request, scope_details, agent_details, caller_details):
# Perform agent invocation logic
response = call_agent(...)
Werkzeugausführung
Die folgenden Beispiele zeigen, wie Sie die Observability-Verfolgung bei der Werkzeugausführung Ihres Agents implementieren können. Dieses Tracking erfasst Telemetrie zu Überwachungs- und Auditzwecken.
from microsoft_agents_a365.observability.core import (
ExecuteToolScope,
ToolCallDetails,
Request,
ServiceEndpoint,
)
# Use the same agent_details and request instances from the InvokeAgentScope example above
tool_details = ToolCallDetails(
tool_name="summarize",
tool_type="function",
tool_call_id="tc-001",
arguments="{'text': '...'}",
description="Summarize provided text",
endpoint=ServiceEndpoint(hostname="tools.contoso.com", port=8080),
)
with ExecuteToolScope.start(request, tool_details, agent_details) as scope:
result = run_tool(tool_details)
scope.record_response(result)
Schlussfolgerung
Die folgenden Beispiele zeigen, wie Sie KI-Modellinferenzaufrufe mit Beobachtungsverfolgung zur Erfassung der Tokennutzung, Modelldetails und Antwortmetadaten instrumentieren.
from microsoft_agents_a365.observability.core import (
InferenceScope,
InferenceCallDetails,
InferenceOperationType,
)
# Use the same agent_details and request instances from the InvokeAgentScope example above
inference_details = InferenceCallDetails(
operationName=InferenceOperationType.CHAT,
model="gpt-4o-mini",
providerName="azure-openai",
inputTokens=123,
outputTokens=456,
finishReasons=["stop"],
)
with InferenceScope.start(request, inference_details, agent_details) as scope:
completion = call_llm(...)
scope.record_output_messages([completion.text])
scope.record_input_tokens(completion.usage.input_tokens)
scope.record_output_tokens(completion.usage.output_tokens)
Output
Verwenden Sie diesen Bereich für asynchrone Szenarien, in denen InvokeAgentScope, ExecuteToolScope oder InferenceScope Ausgabedaten nicht synchron erfassen können. Starten Sie OutputScope als untergeordneten Span, um abschließende Ausgabemeldungen aufzuzeichnen, nachdem der übergeordnete Bereich beendet wurde.
from microsoft_agents_a365.observability.core import (
OutputScope,
Response,
SpanDetails,
)
# Use the same agent_details and request instances from the InvokeAgentScope example above
# Get the parent context from the originating scope
parent_context = invoke_scope.get_context()
response = Response(messages=["Here is your organized inbox with 15 urgent emails."])
with OutputScope.start(
request,
response,
agent_details,
span_details=SpanDetails(parent_context=parent_context),
):
# Output messages are recorded automatically from the response
pass
Lokal validieren
Um sicherzustellen, dass Sie erfolgreich mit dem Observability-SDK integriert sind, prüfen Sie die von Ihrem Agenten generierten Konsolenprotokolle.
Legen Sie die Umgebungsvariable ENABLE_A365_OBSERVABILITY_EXPORTER auf false fest. Diese Einstellung exportiert Bereiche (Ablaufverfolgungen) in die Konsole.
Beispielprotokolle
Die Logs können je nach Plattform leicht unterschiedlich aussehen.
Konsolenprotokoll – Bereich für Aufruf-Agent
Dieses Beispiel zeigt eine typische Aufruf-Agenten-Spanne, die der Konsolenexporter druckt, wenn die lokale Validierung aktiviert ist.
{
"name": "invoke_agent Azure OpenAI Agent",
"context": {
"trace_id": "0x4bd8f606688c3f3347d69c1b6539c957",
"span_id": "0x0766d68605234692",
"trace_state": "[]"
},
"kind": "SpanKind.CLIENT",
"parent_id": null,
"start_time": "2025-11-24T16:16:54.017403Z",
"end_time": "2025-11-24T16:17:09.373357Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"operation.source": "SDK",
"correlation.id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"gen_ai.conversation.item.link": "http://localhost:56150/_connector",
"gen_ai.agent.upn": "Delivery Agent",
"gen_ai.agent.user.id": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"gen_ai.caller.id": "bbbbbbbb-cccc-dddd-2222-333333333333",
"gen_ai.caller.name": "Alex Wilber",
"gen_ai.caller.upn": "Sample UPN",
"gen_ai.channel.name": "msteams",
"gen_ai.system": "az.ai.agent365",
"gen_ai.operation.name": "invoke_agent",
"gen_ai.agent.id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gen_ai.agent.name": "Azure OpenAI Agent",
"gen_ai.agent.description": "An AI agent powered by Azure OpenAI",
"gen_ai.agent.applicationid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"gen_ai.conversation.id": "__PERSONAL_CHAT_ID__",
"tenant.id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"session.id": "__PERSONAL_CHAT_ID__",
"gen_ai.execution.type": "HumanToAgent",
"gen_ai.input.messages": "[\"hi, what can you do\"]",
"gen_ai.output.messages": "[\"Hi! I can assist you with a variety of tasks, including answering questions, providing information on a wide range of topics, helping with problem-solving, offering writing assistance, and more. Just let me know what you need help with!\"]"
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.38.0",
"service.namespace": "MyAgentTesting",
"service.name": "MyAgentTracing"
},
"schema_url": ""
}}
Konsolenlog für das Ausführungstool
Dieses Beispiel zeigt einen typischen Ausführungstoolbereich, die der Konsolenexporter während der lokalen Validierung erzeugt.
{
"name": "execute_tool get_weather",
"context": {
"trace_id": "0xa9a1be6323bd52476d6a28b8893c6aa8",
"span_id": "0x1dec90d34ecc0823",
"trace_state": "[]"
},
"kind": "SpanKind.INTERNAL",
"parent_id": "0x2e727b4c133cbd50",
"start_time": "2025-11-24T18:47:55.960305Z",
"end_time": "2025-11-24T18:47:55.962306Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"operation.source": "SDK",
"correlation.id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"gen_ai.conversation.item.link": "http://localhost:56150/_connector",
"gen_ai.agent.upn": "Delivery Agent",
"gen_ai.agent.user.id": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"gen_ai.execution.type": "HumanToAgent",
"gen_ai.channel.name": "msteams",
"gen_ai.system": "az.ai.agent365",
"gen_ai.operation.name": "execute_tool",
"gen_ai.agent.id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gen_ai.agent.name": "Azure OpenAI Agent",
"gen_ai.agent.description": "An AI agent powered by Azure OpenAI",
"gen_ai.agent.applicationid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"gen_ai.conversation.id": "__PERSONAL_CHAT_ID__",
"tenant.id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"gen_ai.tool.name": "get_weather",
"gen_ai.tool.arguments": "current location",
"gen_ai.tool.type": "function",
"gen_ai.tool.call.id": "bbbbbbbb-1111-2222-3333-cccccccccccc",
"gen_ai.tool.description": "Executing get_weather tool"
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.38.0",
"service.namespace": "MyAgentTesting",
"service.name": "MyAgentTracing"
},
"schema_url": ""
}
}
Inferenzbereich des Konsolenprotokolls
Dieses Beispiel zeigt eine typische Inferenzspanne, die der Konsolenexporteur für lokale Validierung ausgibt.
{
"name": "Chat gpt-4o-mini",
"context": {
"trace_id": "0xceb86559a6f7c2c16a45ec6e0b201ae1",
"span_id": "0x475beec8c1c4fa56",
"trace_state": "[]"
},
"kind": "SpanKind.CLIENT",
"parent_id": "0x959a854f18fa2c22",
"start_time": "2025-11-24T18:04:07.061703Z",
"end_time": "2025-11-24T18:04:09.506951Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"operation.source": "SDK",
"correlation.id": "aaaa0000-bb11-2222-33cc-444444dddddd",
"gen_ai.conversation.item.link": "http://localhost:56150/_connector",
"gen_ai.agent.upn": "Delivery Agent",
"gen_ai.agent.user.id": "aaaaaaaa-bbbb-cccc-1111-222222222222",
"gen_ai.execution.type": "HumanToAgent",
"gen_ai.channel.name": "msteams",
"gen_ai.system": "az.ai.agent365",
"gen_ai.agent.id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"gen_ai.agent.name": "Azure OpenAI Agent",
"gen_ai.agent.description": "An AI agent powered by Azure OpenAI",
"gen_ai.agent.applicationid": "00001111-aaaa-2222-bbbb-3333cccc4444",
"gen_ai.conversation.id": "__PERSONAL_CHAT_ID__",
"tenant.id": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
"gen_ai.input.messages": "hi, what can you do",
"gen_ai.operation.name": "Chat",
"gen_ai.request.model": "gpt-4o-mini",
"gen_ai.provider.name": "Azure OpenAI",
"gen_ai.output.messages": "\"Hello! I can help answer questions, provide information, assist with problem-solving, offer writing suggestions, and more. Just let me know what you need!\"",
"gen_ai.usage.input_tokens": "33",
"gen_ai.usage.output_tokens": "32",
"gen_ai.response.finish_reasons": "[\"stop\"]"
},
"events": [],
"links": [],
"resource": {
"attributes": {
"telemetry.sdk.language": "python",
"telemetry.sdk.name": "opentelemetry",
"telemetry.sdk.version": "1.38.0",
"service.namespace": "MyAgentTesting",
"service.name": "MyAgentTracing"
},
"schema_url": ""
}
}
Anforderungen an die Beobachtbarkeit
IT-Administratoren nutzen die in Ihrem Code eingestellten Daten, um die Aktivitäten Ihres Agenten zu überwachen. Unvollständige Daten bedeuten, dass man die Vorteile der Beobachtbarkeit nicht vollständig ausschöpft. Agenten müssen die erforderlichen Daten bereitstellen, um alle erwarteten Vorteile zu erhalten. Ein Validierungsprozess überprüft, dass diese Daten existieren.
Innerhalb der Telemetrie gibt es Konzepte wie Umfang oder Kontext. Jede Operation, die Ihr Agent ausführt, liegt in einem anderen Rahmen. Sie müssen die Daten innerhalb des BaggageScope, der mit Gepäckattributen erstellt wurde, oder innerhalb der einzelnen Bereiche, wie in Manuelle Instrumentierung beschrieben, einbeziehen.
Um Ihre Implementierung zu validieren, folgen Sie den Anweisungen zur lokalen Validierung zur Erstellung von Konsolenprotokollen für Ihre Instrumentierung. Dann überprüfe ich den Bereich "Validate for Store Publishing ", um herauszufinden, welche Attribute erforderlich und welche optional sind. Sie müssen alle erforderlichen Attribute einstellen, um die Validierung erfolgreich zu bestehen.
Überprüfen Sie die erforderlichen Eigenschaften und Parameterwerte, die für diese Klassen beschrieben sind:
Eigenschaften, die Sie mit der BaggageBuilder-Klasse festlegen, könnten von den Eigenschaften der jeweiligen Bereiche festgelegt oder überschrieben werden.
Setzen Sie die Eigenschaften in der folgenden Tabelle mit der Methode InvokeAgentScope.start.
Daten Beschreibung invoke_agent_details.details.agent_idDer eindeutige Bezeichner für den KI-Agent invoke_agent_details.details.agent_nameDer lesbare Name des KI-Agenten invoke_agent_details.details.agent_auidDie Agent-Benutzer-ID (AUID) invoke_agent_details.details.agent_upnDer Benutzerprinzipalname (UPN) des Agents invoke_agent_details.details.agent_blueprint_idDie Blueprint-/Anwendungs-ID des Agents invoke_agent_details.details.tenant_idDie Mandanten-ID für den Agenten invoke_agent_details.details.conversation_idDer Bezeichner für das Gespräch oder die Sitzung invoke_agent_details.endpointDer Endpunkt für den Agent-Aufruf tenant_details.tenant_idDer eindeutige Bezeichner für den Mandanten request.contentDer Nutzlastinhalt, der zum Aufruf an den Agenten gesendet wird request.execution_typeInvocation-Typ, der den Ursprung der Anfrage angibt (zum Beispiel HumanToAgentoderAgentToAgent)caller_details.caller_idDer eindeutige Bezeichner für den Aufrufer caller_details.caller_upnDer Benutzerprinzipalname (UPN) des Aufrufers caller_details.caller_user_idDie Benutzer-ID des Anrufers caller_details.tenant_idDie Mandanten-ID des Anrufers Setzen Sie die Eigenschaften in der folgenden Tabelle mit der Methode ExecuteToolScope.start.
Daten Beschreibung details.tool_nameDer Name des Tools, das ausgeführt wird details.argumentsWerkzeugargumente oder -parameter details.tool_call_idDer eindeutige Bezeichner für den Toolaufruf details.tool_typeDer Typ des auszuführenden Tools details.endpointWenn ein externer Werkzeugaufruf durchgeführt wird agent_details.agent_idDer eindeutige Bezeichner für den KI-Agent agent_details.agent_nameDer lesbare Name des KI-Agenten agent_details.agent_auidDie Agent-Benutzer-ID agent_details.agent_upnDer Benutzerprinzipalname (UPN) des Agents agent_details.agent_blueprint_idDer Agenten-Blueprint oder die Anwendungs-ID agent_details.tenant_idDie Mandanten-ID des Agents. agent_details.conversation_idDie Konversationskennung für den Agentenaufruf. tenant_details.tenant_idDie Mandanten-ID des Agents. Setzen Sie die Eigenschaften in der folgenden Tabelle mit der Methode InferenceScope.start.
Daten Beschreibung details.operationNameDer Operationsname oder -typ für die Schlussfolgerung details.modelDer Modellname oder die Kennung details.providerNameDer Name des Anbieters agent_details.agent_idDer eindeutige Bezeichner für den KI-Agent agent_details.agent_nameDer lesbare Name des KI-Agenten agent_details.agent_auidDie Agent-Benutzer-ID (AUID) agent_details.agent_upnDer Benutzerprinzipalname (UPN) des Agents agent_details.agent_blueprint_idDer Agenten-Blueprint oder die Anwendungs-ID agent_details.tenant_idDer eindeutige Bezeichner für den Mandanten agent_details.conversation_idDer Bezeichner für das Gespräch oder die Sitzung tenant_details.tenant_idDer eindeutige Bezeichner für den Mandanten request.contentDer Nutzlastinhalt wurde dem Agent für Rückschlüsse übermittelt request.execution_typeInvocation-Typ, der den Ursprung der Anfrage angibt (zum Beispiel HumanToAgentoderAgentToAgent)request.source_metadataStellen Sie die Kanalinformationen dar
Für die Veröffentlichung im Store validieren
Verwenden Sie vor der Veröffentlichung Konsolenprotokolle, um Ihre Observabilitätsintegration für den Agenten zu validieren, indem Sie den erforderlichen Aufruf-Agenten, das Ausführungstool und die Inferenzbereiche implementieren. Vergleichen Sie dann die Logs Ihres Agenten mit den folgenden Attributlisten, um sicherzustellen, dass alle erforderlichen Attribute vorhanden sind. Erfassen Sie Attribute in jedem Scope oder über den Baggage-Builder und fügen Sie nach Belieben optionale Attribute hinzu.
Für weitere Informationen zu den Anforderungen an die Veröffentlichung im Store siehe die Store-Validierungsrichtlinien.
InvokeAgentScope-Attribute
Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines InvokeAgentScope aufgezeichnet werden.
"attributes": {
"correlation.id": "Optional",
"gen_ai.agent.applicationid": "Required",
"gen_ai.agent.description": "Optional",
"gen_ai.agent.id": "Required",
"gen_ai.agent.name": "Required",
"gen_ai.agent.platformid": "Optional",
"gen_ai.agent.type": "Optional",
"gen_ai.agent.thought.process": "Optional",
"gen_ai.agent.upn": "Required",
"gen_ai.agent.user.id": "Required",
"gen_ai.caller.agent.applicationid": "Required (if execution type is agent to agent)",
"gen_ai.caller.agent.id": "Required (if execution type is agent to agent)",
"gen_ai.caller.agent.name": "Required (if execution type is agent to agent)",
"gen_ai.caller.agent.platformid": "Optional",
"gen_ai.caller.agent.type": "Optional",
"gen_ai.caller.client.ip": "Required",
"gen_ai.caller.id": "Required",
"gen_ai.caller.name": "Optional",
"gen_ai.caller.upn": "Required",
"gen_ai.channel.link": "Optional",
"gen_ai.channel.name": "Required",
"gen_ai.conversation.id": "Required",
"gen_ai.conversation.item.link": "Optional",
"gen_ai.execution.type": "Required",
"gen_ai.input.messages": "Required",
"gen_ai.operation.name": "Required (Set by the SDK)",
"gen_ai.output.messages": "Required",
"gen_ai.system": "Optional",
"hiring.manager.id": "Optional",
"operation.source": "Required (SDK sets a default value)",
"server.address": "Required",
"server.port": "Required",
"session.id": "Optional",
"session.description": "Optional",
"tenant.id": "Required"
},
ExecuteToolScope-Attribute
Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines ExecuteToolScope aufgezeichnet werden.
"attributes": {
"correlation.id": "Optional",
"gen_ai.agent.applicationid": "Required",
"gen_ai.agent.description": "Optional",
"gen_ai.agent.id": "Required",
"gen_ai.agent.name": "Required",
"gen_ai.agent.platformid": "Optional",
"gen_ai.agent.type": "Optional",
"gen_ai.agent.upn": "Required",
"gen_ai.agent.user.id": "Required",
"gen_ai.caller.client.ip": "Required",
"gen_ai.channel.name": "Required",
"gen_ai.conversation.id": "Required",
"gen_ai.conversation.item.link": "Optional",
"gen_ai.execution.type": "Optional",
"gen_ai.operation.name": "Required (Set by the SDK)",
"gen_ai.system": "Optional",
"gen_ai.tool.arguments": "Required",
"gen_ai.tool.call.id": "Required",
"gen_ai.tool.description": "Optional",
"gen_ai.tool.name": "Required",
"gen_ai.tool.type": "Required",
"hiring.manager.id": "Optional",
"operation.source": "Required (SDK sets a default value)",
"server.address": "Required (if tool call is external)",
"server.port": "Required (if tool call is external)",
"session.id": "Optional",
"session.description": "Optional",
"tenant.id": "Required"
},
InferenceScope-Attribute
Die folgende Liste fasst die erforderlichen und optionalen Telemetrieattribute zusammen, die beim Starten eines InferenceScope aufgezeichnet werden.
"attributes": {
"correlation.id": "Optional",
"gen_ai.agent.applicationid": "Required",
"gen_ai.agent.description": "Optional",
"gen_ai.agent.id": "Required",
"gen_ai.agent.name": "Required",
"gen_ai.agent.platformid": "Optional",
"gen_ai.agent.type": "Optional",
"gen_ai.agent.thought.process": "Optional",
"gen_ai.agent.upn": "Required",
"gen_ai.agent.user.id": "Required",
"gen_ai.caller.client.ip": "Required",
"gen_ai.channel.link": "Optional",
"gen_ai.channel.name": "Required",
"gen_ai.conversation.id": "Required",
"gen_ai.conversation.item.link": "Optional",
"gen_ai.execution.type": "Optional",
"gen_ai.input.messages": "Required",
"gen_ai.operation.name": "Required (Set by the SDK)",
"gen_ai.output.messages": "Required",
"gen_ai.provider.name": "Required",
"gen_ai.request.model": "Required",
"gen_ai.response.finish_reasons": "Optional",
"gen_ai.usage.input_tokens": "Optional",
"gen_ai.usage.output_tokens": "Optional",
"hiring.manager.id": "Optional",
"operation.source": "Required (SDK sets a default value)",
"session.description": "Optional",
"session.id": "Optional",
"tenant.id": "Required"
}
Testen Sie Ihren Agenten mit Observierbarkeit
Nachdem Sie die Observierbarkeit in Ihrem Agent implementiert haben, testen Sie ihn, um sicherzustellen, dass die Telemetrie ordnungsgemäß erfasst wird. Folgen Sie dem Testleitfaden, um Ihre Umgebung einzurichten. Konzentrieren Sie sich dann in erster Linie auf den Abschnitt " Observability-Protokolle anzeigen ", um zu überprüfen, ob die Observability-Implementierung erwartungsgemäß funktioniert.
Überprüfung:
- Navigieren Sie zu
https://admin.cloud.microsoft/#/agents/all - Wählen Sie die >-Aktivität Ihres Agents aus
- Sie sehen Sitzungen und Toolaufrufe.
Problembehandlung
Dieser Abschnitt beschreibt häufige Probleme bei der Implementierung und Anwendung von Observability.
Tipp
Der Agent 365 Troubleshooting Guide enthält übergeordnete Empfehlungen zur Fehlerbehebung, Best Practices und Links zu Inhalten zur Fehlerbehebung für jeden Teil des Entwicklungszyklus von Agent 365.
Observabilitätsdaten erscheinen nicht
Symptome:
- Agent wird ausgeführt
- Keine Telemetrie im Verwaltungszentrum
- Kann keine Agentenaktivität sehen
Grundursache:
- Observabilität ist nicht aktiviert
- Konfigurationsfehler
- Probleme des Token-Resolvers
Lösungen: Probieren Sie die folgenden Schritte aus, um das Problem zu lösen:
Überprüfen Sie die aktivierte Observabilität
Aktivieren Sie Observabilitätsflaggen in Ihrer Umgebung.
# .env file ENABLE_A365_OBSERVABILITY_EXPORTER=trueÜberprüfen Sie die Token-Resolver-Konfiguration
Stelle sicher, dass dein Code den Token-Resolver korrekt implementiert. Überprüfen Sie direkt den neuesten Code im SDK.
Überprüfen Sie auf Fehler in den Logs
Verwenden Sie den
az webapp log tailBefehl , um Protokolle nach beobachtbarkeitsbezogenen Fehlern zu durchsuchen.# Look for observability-related errors az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"Telemetrie-Export überprüfen
Bestätigen Sie, dass Telemetrie wie erwartet generiert und exportiert wird.
- Konsolen-Exporter zum Testen hinzufügen
- Überprüfen Sie, ob Telemetrie lokal generiert wird
Erfahren Sie mehr über das Testen der Observabilität: