Freigeben über


Agent-Beobachtbarkeit

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_id Der eindeutige Bezeichner für den KI-Agent
    invoke_agent_details.details.agent_name Der lesbare Name des KI-Agenten
    invoke_agent_details.details.agent_auid Die Agent-Benutzer-ID (AUID)
    invoke_agent_details.details.agent_upn Der Benutzerprinzipalname (UPN) des Agents
    invoke_agent_details.details.agent_blueprint_id Die Blueprint-/Anwendungs-ID des Agents
    invoke_agent_details.details.tenant_id Die Mandanten-ID für den Agenten
    invoke_agent_details.details.conversation_id Der Bezeichner für das Gespräch oder die Sitzung
    invoke_agent_details.endpoint Der Endpunkt für den Agent-Aufruf
    tenant_details.tenant_id Der eindeutige Bezeichner für den Mandanten
    request.content Der Nutzlastinhalt, der zum Aufruf an den Agenten gesendet wird
    request.execution_type Invocation-Typ, der den Ursprung der Anfrage angibt (zum Beispiel HumanToAgent oder AgentToAgent)
    caller_details.caller_id Der eindeutige Bezeichner für den Aufrufer
    caller_details.caller_upn Der Benutzerprinzipalname (UPN) des Aufrufers
    caller_details.caller_user_id Die Benutzer-ID des Anrufers
    caller_details.tenant_id Die Mandanten-ID des Anrufers
  • Setzen Sie die Eigenschaften in der folgenden Tabelle mit der Methode ExecuteToolScope.start.

    Daten Beschreibung
    details.tool_name Der Name des Tools, das ausgeführt wird
    details.arguments Werkzeugargumente oder -parameter
    details.tool_call_id Der eindeutige Bezeichner für den Toolaufruf
    details.tool_type Der Typ des auszuführenden Tools
    details.endpoint Wenn ein externer Werkzeugaufruf durchgeführt wird
    agent_details.agent_id Der eindeutige Bezeichner für den KI-Agent
    agent_details.agent_name Der lesbare Name des KI-Agenten
    agent_details.agent_auid Die Agent-Benutzer-ID
    agent_details.agent_upn Der Benutzerprinzipalname (UPN) des Agents
    agent_details.agent_blueprint_id Der Agenten-Blueprint oder die Anwendungs-ID
    agent_details.tenant_id Die Mandanten-ID des Agents.
    agent_details.conversation_id Die Konversationskennung für den Agentenaufruf.
    tenant_details.tenant_id Die Mandanten-ID des Agents.
  • Setzen Sie die Eigenschaften in der folgenden Tabelle mit der Methode InferenceScope.start.

    Daten Beschreibung
    details.operationName Der Operationsname oder -typ für die Schlussfolgerung
    details.model Der Modellname oder die Kennung
    details.providerName Der Name des Anbieters
    agent_details.agent_id Der eindeutige Bezeichner für den KI-Agent
    agent_details.agent_name Der lesbare Name des KI-Agenten
    agent_details.agent_auid Die Agent-Benutzer-ID (AUID)
    agent_details.agent_upn Der Benutzerprinzipalname (UPN) des Agents
    agent_details.agent_blueprint_id Der Agenten-Blueprint oder die Anwendungs-ID
    agent_details.tenant_id Der eindeutige Bezeichner für den Mandanten
    agent_details.conversation_id Der Bezeichner für das Gespräch oder die Sitzung
    tenant_details.tenant_id Der eindeutige Bezeichner für den Mandanten
    request.content Der Nutzlastinhalt wurde dem Agent für Rückschlüsse übermittelt
    request.execution_type Invocation-Typ, der den Ursprung der Anfrage angibt (zum Beispiel HumanToAgent oder AgentToAgent)
    request.source_metadata Stellen 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 tail Befehl , 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: