Observabilité de l’agent

Important

Vous devez faire partie du programme de préversion Frontier pour obtenir un accès anticipé à Microsoft Agent 365. Frontier vous connecte directement avec les dernières innovations ia de Microsoft. Les versions préliminaires Frontier sont soumises aux conditions existantes de vos contrats clients qui régissent les versions préliminaires. Comme ces fonctionnalités sont encore en cours de développement, leur disponibilité et leurs capacités peuvent évoluer au fil du temps.

Pour participer à l’écosystème Agent 365, ajoutez des capacités d’observabilité Agent 365 à votre agent. Agent 365 Observability s’appuie sur OpenTelemetry (OTel) et offre un cadre unifié pour capturer la télémétrie de manière cohérente et sécurisée sur toutes les plateformes agents. En implémentant ce composant requis, vous allez autoriser les administrateurs informatiques à surveiller l'activité de votre agent dans Microsoft centre d'administration et à autoriser les équipes de sécurité à utiliser Defender et Purview pour la conformité et la détection des menaces.

Principaux avantages

  • Visibilité de bout en bout : Capturez une télémétrie complète pour chaque invocation d’agent, y compris les sessions, appels d’outils et exceptions, vous offrant ainsi une traçabilité complète sur toutes les plateformes.
  • Activation de la sécurité et de la conformité : alimentez les journaux d’audit unifiés dans Defender et Purview, ce qui permet des scénarios de sécurité avancés et des rapports de conformité pour votre agent.
  • Flexibilité multiplateforme : Reposez-vous sur les normes OTel et prenez en charge divers environnements d'exécution et plateformes tels que Copilot Studio, Foundry, et les futures infrastructures d'agent.
  • Efficacité opérationnelle pour les administrateurs : fournissez une observabilité centralisée dans le centre d'administration de Microsoft 365, réduisant le temps de dépannage et améliorant la gouvernance avec des contrôles d'accès basés sur les rôles pour les équipes informatiques qui gèrent votre agent.

Agents pris en charge

Les types d’agents suivants prennent en charge l’observabilité d’Agent 365 :

Installation

Utilisez ces commandes pour installer les modules d’observabilité pour les langues prises en charge par Agent 365.

Installez les packages d’observabilité et d’exécution de base. Tous les agents qui utilisent l’observabilité de l’agent 365 ont besoin de ces packages.

pip install microsoft-agents-a365-observability-core
pip install microsoft-agents-a365-runtime

Si votre agent utilise le package Microsoft Agents Hosting, installez le package d’intégration d’hébergement. Il fournit un intergiciel qui remplit automatiquement les bagages et les étendues à partir de TurnContext, et inclut la mise en cache des jetons pour l’exportateur d’observabilité.

pip install microsoft-agents-a365-observability-hosting

Si votre agent utilise l’une des infrastructures IA prises en charge, installez l’extension d’instrumentation automatique correspondante pour capturer automatiquement les données de télémétrie sans code d’instrumentation manuel. Pour plus d’informations sur la configuration, consultez l’instrumentation automatique.

# 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

Configuration

Utilisez les paramètres suivants pour activer et personnaliser l’observabilité de l’Agent 365 pour votre agent.

Fixer la ENABLE_A365_OBSERVABILITY_EXPORTER variable environnement à true pour l’observabilité. Ce paramètre exporte les journaux vers le service et nécessite qu’un token_resolver soit fourni. Sinon, l’exportateur console est utilisé.

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

Le résolveur de jeton est exclu de la connexion à la console.

Vous pouvez personnaliser le comportement de l’exportateur en passant une Agent365ExporterOptions instance à exporter_options. Quand exporter_options est fourni, il prend le pas sur les paramètres token_resolver et 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,
)

Le tableau suivant décrit les paramètres facultatifs pour configure().

Paramètre Description Par défaut
logger_name Nom de l’enregistreur d’événements Python utilisé pour le débogage et la sortie du journal de la console. microsoft_agents_a365.observability.core
exporter_options Instance Agent365ExporterOptions qui configure ensemble le résolveur de jetons et la catégorie de cluster. None
suppress_invoke_agent_input Lorsque True, les messages d’entrée dans les étendues InvokeAgent sont supprimés. False

Le tableau suivant décrit les propriétés facultatives pour Agent365ExporterOptions.

Propriété Description Par défaut
use_s2s_endpoint Lorsque True, le chemin du point de terminaison de service à service est utilisé. False
max_queue_size Taille de file d’attente maximale pour le processeur par lots. 2048
scheduled_delay_ms Retard en millisecondes entre les lots d’exportation. 5000
exporter_timeout_ms Délai d’expiration en millisecondes pour l’opération d’exportation. 30000
max_export_batch_size Taille de lot maximale pour les opérations d’exportation. 512

Attributs des bagages

Utilisez BaggageBuilder pour définir des informations contextuelles qui transitent par toutes les portées d’une requête. Le kit de développement logiciel (SDK) implémente une SpanProcessor et copie de toutes les entrées de bagages sans avoir à remplacer les attributs existants.

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

Pour remplir automatiquement le BaggageBuilder à partir du TurnContext, utilisez l’outil populate dans le package microsoft-agents-a365-observability-hosting. Cet utilitaire extrait automatiquement l’appelant, l’assistant, le locataire, le canal et les détails de conversation de l’activité.

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

Intergiciels de bagages

Si votre agent utilise le package d’intégration d’hébergement, inscrivez l’intergiciel des bagages pour remplir automatiquement les bagages pour chaque demande entrante. Cette étape supprime la nécessité d’appeler BaggageBuilder manuellement dans chaque gestionnaire d’activités.

Enregistrez BaggageMiddleware dans l'ensemble de middlewares de l'adaptateur. Il extrait automatiquement l’appelant, l’agent, le locataire, le canal et les détails de conversation de chaque entrant TurnContext et encapsule la demande dans une étendue de bagages.

from microsoft_agents_a365.observability.hosting import BaggageMiddleware

adapter.use(BaggageMiddleware())

Vous pouvez également utiliser ObservabilityHostingManager pour configurer le middleware de gestion des bagages avec d'autres fonctionnalités d'hébergement.

from microsoft_agents_a365.observability.hosting import ObservabilityHostingManager, ObservabilityHostingOptions

options = ObservabilityHostingOptions(enable_baggage=True)
ObservabilityHostingManager.configure(adapter.middleware_set, options)

L’intergiciel ignore la configuration des bagages pour les réponses asynchrones (ContinueConversation événements) afin d’éviter de remplacer les bagages que la demande d’origine a déjà définie.

Programme de résolution de jetons

Lorsque vous utilisez l’exportateur Agent 365, vous devez fournir une fonction de programme de résolution de jeton qui retourne un jeton d’authentification. Lorsque vous utilisez le SDK Observability Agent 365 avec le framework d'hébergement Agent, vous pouvez générer des jetons à l'aide de TurnContext provenant des activités de l’agent.

L’extrait de code suivant montre comment un jeton peut être généré à l’aide du microsoft_agents.hosting.core Kit de développement logiciel (SDK). Le jeton d’authentification généré ici est utilisé pour exporter les étendues vers le service d’ingestion A365. Les agents sont libres de générer eux-mêmes un jeton, par exemple à l’aide de la bibliothèque d’authentification Microsoft (MSAL), mais ils doivent s’assurer que le jeton a l’étendue d’observabilité.

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

Pour un agent créé avec la CLI A365 qui utilise un agent IA et le package Bibliothèque d’hébergement d’observabilité Microsoft Agent 365, utilisez AgenticTokenCache pour gérer automatiquement la mise en cache des jetons. Enregistrez le jeton une fois par assistant et par locataire dans un gestionnaire d’activité, puis passez cache.get_observability_token comme token_resolver dans votre configuration d’observabilité.

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

Instrumentation automatique

L’instrumentation automatique écoute automatiquement les signaux de télémétrie existants des frameworks agentiques (SDK) pour les traces et les transfère au service d’observabilité Agent 365. Cette fonctionnalité élimine le besoin pour les développeurs d’écrire manuellement du code de surveillance, simplifie la configuration et assure un suivi cohérent des performances.

Plusieurs SDK et plateformes prennent en charge l’auto-instrumentation :

Plateforme Kits de développement logiciel (SDK) / Frameworks pris en charge
.NET Noyau sémantique, OpenAI, Agent Framework
Python Noyau sémantique, OpenAI, Agent Framework, LangChain
Node.js OpenAI, LangChain

Note

La prise en charge de l’instrumentation automatique varie selon l’implémentation de la plateforme et du SDK.

Noyau Sémantique

L’instrumentation automatique nécessite l’utilisation du générateur de bagages. Définissez l’ID de l’agent et l’ID du locataire en utilisant BaggageBuilder.

Installez le package .

pip install microsoft-agents-a365-observability-extensions-semantic-kernel

Configurez l’observabilité.

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

L’instrumentation automatique nécessite l’utilisation du générateur de bagages. Définissez l’ID de l’agent et l’ID du locataire en utilisant BaggageBuilder.

Installez le package .

pip install microsoft-agents-a365-observability-extensions-openai

Configurez l’observabilité.

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

Cadre d’agent

L’instrumentation automatique nécessite l’utilisation du générateur de bagages. Définissez l’ID de l’agent et l’ID du locataire en utilisant BaggageBuilder.

Installez le package .

pip install microsoft-agents-a365-observability-extensions-agent-framework

Configurez l’observabilité.

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

Cadre LangChain

L’instrumentation automatique nécessite l’utilisation du générateur de bagages. Définissez l’ID de l’agent et l’ID du locataire en utilisant BaggageBuilder.

Installez le package .

pip install microsoft-agents-a365-observability-extensions-langchain

Configurez l’observabilité.

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

Instrumentation manuelle

Utilisez le SDK d’observabilité de l’agent 365 pour comprendre le fonctionnement interne de l’agent. Le Kit de développement logiciel (SDK) fournit des étendues que vous pouvez démarrer : InvokeAgentScope, ExecuteToolScope, InferenceScope, et OutputScope.

Invocation de l’agent

Cette étendue doit être utilisée au début du processus de votre assistant. En utilisant la portée de l’agent invoke, vous pouvez capturer des propriétés comme l’agent en cours d’invocation, les données utilisateur de l’agent, et plus encore.

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

Exécution de l’outil

Les exemples suivants montrent comment ajouter un suivi d'observabilité à l'exécution des outils de votre agent. Ce suivi capture la télémétrie à des fins de surveillance et d’audit.

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)

Inférence

Les exemples suivants montrent comment instrumenter les appels d’inférence de modèle IA avec le suivi de l’observabilité pour capturer l’utilisation des jetons, les détails du modèle et les métadonnées de réponse.

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)

Sortie

Utilisez cette étendue pour les scénarios asynchrones où InvokeAgentScope, ExecuteToolScopeou InferenceScope ne peut pas capturer les données de sortie de manière synchrone. Démarrez OutputScope comme étendue enfant pour enregistrer les messages de sortie finaux une fois l’étendue parente terminée.

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

Valider localement

Pour vérifier que vous avez correctement intégré le Kit de développement logiciel (SDK) d’observabilité, examinez les journaux de console générés par votre agent et vos journaux d’activité à partir du Kit de développement logiciel (SDK) d’observabilité.

Définissez la variable d’environnement ENABLE_A365_OBSERVABILITY_EXPORTER sur false. Ce réglage exporte les spans (traces) vers la console.

Pour examiner les échecs d’exportation, activez la journalisation détaillée en définissant ENABLE_A365_OBSERVABILITY_EXPORTERtrue et en configurant la journalisation de débogage au démarrage de votre application :

import logging

logging.basicConfig(level=logging.DEBUG)
logging.getLogger("microsoft_agents_a365.observability.core").setLevel(logging.DEBUG)

# Or target only the exporter:
logging.getLogger(
    "microsoft_agents_a365.observability.core.exporters.agent365_exporter"
).setLevel(logging.DEBUG)

Messages de journal clés :

DEBUG  Token resolved for agent {agentId} tenant {tenantId}
DEBUG  Exporting {n} spans to {url}
DEBUG  HTTP 200 - correlation ID: abc-123
ERROR  Token resolution failed: {error}
ERROR  HTTP 401 exporting spans - correlation ID: abc-123
INFO   No spans with tenant/agent identity found; nothing exported.

Affichage des journaux exportés

Pour afficher les données de télémétrie de l’agent dans Microsoft Purview ou Microsoft Defender, vérifiez que les conditions suivantes sont remplies :

Validation pour la publication en boutique

Important

Pour une validation réussie de la boutique, votre agent doit implémenter les périmètres InvokeAgentScope, InferenceScope et ExecuteToolScope. Ces trois étendues sont requises pour la publication.

Avant de publier, utilisez les journaux de console pour valider votre intégration d’observabilité pour l’agent en implémentant les étendues requises invoke agent, execute tool, inference, et output. Ensuite, comparez les journaux de votre agent avec les listes d’attributs suivantes pour vérifier que tous les attributs requis sont présents. Capturez les attributs dans chaque étendue ou via le générateur de contexte, et incluez des attributs optionnels à votre discrétion.

Pour plus d’informations sur les exigences de publication en magasin, consultez les directives de validation des magasins.

Attributs InvokeAgentScope

La liste suivante résume les attributs de télémétrie requis et optionnels enregistrés lorsque vous démarrez un InvokeAgentScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "microsoft.a365.caller.agent.blueprint.id": "Optional",
        "microsoft.a365.caller.agent.id": "Optional",
        "microsoft.a365.caller.agent.name": "Optional",
        "microsoft.a365.caller.agent.platform.id": "Optional",
        "microsoft.a365.caller.agent.user.email": "Optional",
        "microsoft.a365.caller.agent.user.id": "Optional",
        "microsoft.a365.caller.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "server.address": "Required",
        "server.port": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Attributs ExecuteToolScope

La liste suivante résume les attributs de télémétrie requis et optionnels enregistrés lorsque vous démarrez un ExecuteToolScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.tool.call.arguments": "Required",
        "gen_ai.tool.call.id": "Required",
        "gen_ai.tool.call.result": "Required",
        "gen_ai.tool.description": "Optional",
        "gen_ai.tool.name": "Required",
        "gen_ai.tool.type": "Required",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Attributs InferenceScope

La liste suivante résume les attributs de télémétrie requis et optionnels enregistrés lorsque vous démarrez un InferenceScope.

"attributes": {
        "error.type": "Optional",
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.a365.agent.thought.process": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.input.messages": "Required",
        "gen_ai.operation.name": "Required",
        "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",
        "server.address": "Optional",
        "server.port": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.session.id": "Optional",
        "microsoft.tenant.id": "Required"
    }

Attributs OutputScope

La liste suivante résume les attributs de télémétrie requis et optionnels enregistrés lorsque vous démarrez un OutputScope. Utilisez cette étendue pour les scénarios asynchrones où l’étendue parente ne peut pas capturer les données de sortie de manière synchrone.

"attributes": {
        "microsoft.a365.agent.blueprint.id": "Required",
        "gen_ai.agent.description": "Optional",
        "gen_ai.agent.id": "Required",
        "gen_ai.agent.name": "Required",
        "microsoft.a365.agent.platform.id": "Optional",
        "microsoft.agent.user.email": "Required",
        "microsoft.agent.user.id": "Required",
        "gen_ai.agent.version": "Optional",
        "client.address": "Required",
        "user.id": "Required",
        "user.name": "Optional",
        "user.email": "Required",
        "microsoft.channel.link": "Optional",
        "microsoft.channel.name": "Required",
        "gen_ai.conversation.id": "Required",
        "microsoft.conversation.item.link": "Optional",
        "gen_ai.operation.name": "Required",
        "gen_ai.output.messages": "Required",
        "microsoft.session.id": "Optional",
        "microsoft.session.description": "Optional",
        "microsoft.tenant.id": "Required"
    }

Testez votre agent avec l’observabilité

Après avoir implémenté l’observabilité dans votre agent, testez-la pour vous assurer qu’elle capture correctement les données de télémétrie. Suivez le guide de test pour configurer votre environnement. Ensuite, concentrez-vous principalement sur la section Afficher les journaux d’observation pour valider votre implémentation d’observabilité fonctionne comme prévu.

Vérification :

  • Accédez à https://admin.cloud.microsoft/#/agents/all.
  • Sélectionnez votre agent > Activité
  • Vous voyez des sessions et des appels d’outils

Résolution des problèmes

Cette section décrit les problèmes courants lors de la mise en œuvre et de l’utilisation de l’observabilité.

Conseil / Astuce

Le Guide de dépannage de l’Agent 365 contient des recommandations générales de dépannage, les meilleures pratiques et des liens vers du contenu de dépannage pour chaque étape du cycle de développement de l’Agent 365.

Les données d’observabilité n’apparaissent pas

Symptômes :

  • L’agent est en fuite
  • Pas de télémétrie dans le centre administratif
  • Impossible de voir l’activité des agents

Cause racine :

  • L’observabilité n’est pas activée
  • Erreurs de configuration
  • Problèmes de résolution de jetons

Solutions : Essayez les étapes suivantes pour résoudre le problème :

  • Vérifier que l’exportateur d’observabilité est activé

    Vous devez activer explicitement l’exportateur Agent 365. En cas de désactivation, le SDK revient à un exportateur de console et la télémétrie n’est pas envoyée au service. Pour plus d’informations sur la configuration, consultez Configuration.

  • Vérifier la configuration du résolveur de jeton

    L’exportateur requiert un programme de résolution de jeton valide qui retourne un jeton porteur pour chaque demande d’exportation. Si le programme de résolution de jeton est manquant ou retourne null, l’exportation est ignorée sans notification. Assurez-vous que votre code implémente correctement le résolveur de jetons. Pour plus d’informations, consultez résolveur de jeton.

  • Vérifier les erreurs dans les journaux

    Activez la journalisation détaillée et utilisez la commande pour rechercher des erreurs liées à l’observabilitéaz webapp log tail. Pour plus d’informations sur l’activation de la journalisation par plateforme, consultez Valider localement.

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Vérifier l’exportation de télémétrie

    Confirmez que la télémétrie est générée et exportée comme prévu.

    • Ajoutez un exportateur de console et vérifiez si la télémétrie est générée localement. Pour plus d’informations sur l’utilisation de l’exportateur de console et la validation de la sortie, consultez Valider localement.

ID de locataire ou ID d’agent manquant : sections ignorées

Symptômes: Le système supprime silencieusement les étendues et ne les exporte jamais. Certains SDK consigneront un nombre d’étendues ignorées ou un message tel que « Aucune étendue avec l’identité de locataire/agent trouvée ». D’autres les supprimeront sans les enregistrer.

Résolution :

  • Avant l'exportation, le Kit de développement logiciel (SDK) partitionne les intervalles selon l'identité du locataire et de l'agent. Le système supprime les portées qui n’ont pas d’ID de locataire ou d’ID d’agent et ne les envoie jamais au service.
  • Vérifiez que BaggageBuilder soit configuré avec l’ID de locataire et l’ID de l’agent avant de créer des spans. Ces valeurs se propagent via le contexte OpenTelemetry et s’attachent à toutes les traces créées dans le contexte du baggage. Pour obtenir l’API spécifique à la plateforme, consultez les attributs de bagages.
  • Vérifiez que l’activité TurnContext a un destinataire valide avec l’identité de l’agent si vous utilisez l’intergiciel de bagages ou tournez l’assistance de contexte à partir du package d’intégration d’hébergement pour remplir ces ID.

Échec de résolution de jeton : exportation ignorée ou non autorisée

Symptômes: Le programme de résolution de jeton retourne null ou lève une erreur. Selon le Kit de développement logiciel (SDK), l’exportation est ignorée entièrement ou la requête est envoyée sans en-tête d’autorisation et échoue avec HTTP 401.

Résolution :

  • Le programme de résolution de jeton est requis lors de l’initialisation. S’il est manquant, l’exportateur génère une erreur au démarrage. Vérifiez qu’un programme de résolution de jeton est fourni et retourne un jeton porteur valide.
  • Vérifiez que l’ID de locataire et l’ID d’agent appropriés sont utilisés pour BaggageBuilder, car ces valeurs sont passées au programme de résolution de jeton.
  • Pour les agents hébergés Azure, vérifiez que l’identité managée dispose de l’autorisation API requise pour l’étendue d’observabilité.

HTTP 401 Non autorisé

Symptômes: L’exportation échoue avec HTTP 401. L’exportateur ne réessaye pas cette erreur.

Résolution :

  • Vérifiez que l’audience du jeton correspond à l’étendue du point de terminaison d’observabilité.
  • Vérifiez que le résolveur de jetons ne retourne pas de jeton d'utilisateur délégué, un jeton pour un public incorrect ou un jeton expiré.

HTTP 403 Interdit

Symptômes: L’exportation échoue avec HTTP 403. L’exportateur ne réessaye pas cette erreur.

Cause: Une erreur HTTP 403 peut avoir des causes différentes. Vérifiez les résolutions suivantes dans l’ordre.

Résolution :

  • Licence manquante — Vérifiez que votre client dispose de l'une des licences suivantes attribuées dans le Centre d'administration Microsoft 365 :

    • Test - Microsoft 365 E7
    • Microsoft 365 E7
    • Microsoft Agent 365 Frontier
  • Autorisation manquante Agent365.Observability.OtelWrite : si vous avez récemment mis à niveau vos packages d’observabilité, vous devez accorder cette autorisation. Consultez la note importante ci-dessous.

Important

Les agents existants mis à niveau vers ces versions de package nécessitent une étape supplémentaire

Cette étape s’applique uniquement si vous mettez à niveau un agent existant. Les nouvelles installations d’agent ne nécessitent pas cette étape. Si vous effectuez une mise à niveau vers une de ces versions de package ou une version ultérieure, vous devez accorder la nouvelle autorisation Agent365.Observability.OtelWrite à votre identité (Managed Identity ou inscription d'application). Sans cette autorisation, l’exportation de télémétrie échoue avec HTTP 403.

Plateforme Version minimale nécessitant cette étape
.NET 0.3-beta
Node.JS 0.2.0-preview.1
Python 0.3.0

Accordez l’autorisation à l’aide de l’une des options suivantes.

Option A — Agent 365 CLI (nécessite a365.config.json et a365.generated.config.json dans votre répertoire de configuration, un compte Administrateur général et Agent 365 CLI v1.1.139-preview ou version ultérieure)

a365 setup admin --config-dir "<path-to-config-dir>"

Cette commande accorde toutes les autorisations manquantes, y compris les nouvelles étendues d’observabilité.

Option B — Entra Portal (aucun fichier de configuration requis ; nécessite l’accès administrateur général à l’inscription de l’application blueprint)

  1. Accédez au portail Entra>inscriptions d'applications> sélectionnez votre application Blueprint.
  2. Accédez aux autorisations d’API>Ajouter une autorisation>APIs que mon organisation utilise> recherchez9b975845-388f-4429-889e-eab1ef63949c.
  3. Sélectionnez Autorisations déléguées> pour vérifier Agent365.Observability.OtelWrite>Ajouter des autorisations.
  4. Répétez l’étape 2 à 3, cette fois,sélectionnez Autorisations > vérifier Agent365.Observability.OtelWrite>Ajouter des autorisations.
  5. Cliquez sur Accorder le consentement de l’administrateur et confirmez.

Les deux Agent365.Observability.OtelWrite (délégués) et Agent365.Observability.OtelWrite (Application) doivent afficher l’état Granted .

HTTP 429 / 5xx — Erreurs temporaires

Symptômes: L’exportation échoue avec un code d’état HTTP temporaire tel que 429 ou 5xx.

Résolution :

  • Ces erreurs sont généralement temporaires et résolues par elles-mêmes. Les SDK Python et JavaScript tentent de nouveau automatiquement sur les codes d’état HTTP 408, 429 et 5xx jusqu’à trois fois avec une temporisation exponentielle. Le sdk .NET ne réessaye pas automatiquement.
  • Si les erreurs persistent, consultez le tableau de bord d’intégrité du service.
  • Envisagez de réduire la fréquence d’exportation en augmentant le délai planifié entre les lots ou en augmentant la taille maximale du lot d’exportation. Pour connaître les options de configuration par plateforme, consultez le Agent365ExporterOptions tableau dans Configuration.

Délai d’expiration de l’exportation

Symptômes: Les tentatives d’exportation expirent.

Résolution :

  • Vérifiez la connectivité réseau au point de terminaison d’observabilité.
  • Les valeurs par défaut du délai d’expiration varient selon la plateforme. Le délai d’expiration de la requête HTTP par défaut est de 30 secondes. Certains kits SDK ont également un délai d’expiration global d’exportation distinct qui couvre l’ensemble du cycle d’exportation, y compris les nouvelles tentatives. Pour connaître les propriétés exactes et les valeurs par défaut par plateforme, consultez la Agent365ExporterOptions table dans Configuration.
  • Si des délais d’expiration se produisent fréquemment, augmentez la valeur de délai d’expiration appropriée dans vos options d’exportation.

L'exportation réussit, mais la télémétrie n'apparaît pas dans Defender ou Purview

Symptoms : Les journaux indiquent une exportation réussie, mais la télémétrie n'est pas visible dans Microsoft Defender ou Microsoft Purview.

Résolution :

  • Vérifiez que vous remplissez les conditions préalables à l’affichage des journaux exportés. Pour Purview, l’audit doit être activé. Pour Defender, vous devez configurer la chasse avancée. Pour en savoir plus, consultez Consulter les journaux exportés.
  • La télémétrie peut prendre plusieurs minutes pour se mettre à jour après une exportation réussie. Attendez que les données apparaissent avant d’examiner plus en détail.

Pour en savoir plus sur les tests d’observabilité, consultez :