Condividi tramite


Osservabilità dell'agente

Importante

È necessario far parte del programma di anteprima Frontier per ottenere l'accesso early a Microsoft Agent 365. Frontier ti connette direttamente con le ultime innovazioni di intelligenza artificiale di Microsoft. Le anteprime Frontier sono soggette alle condizioni di anteprima esistenti dei tuoi contratti del cliente. Poiché queste funzionalità sono ancora in fase di sviluppo, la disponibilità e le funzionalità possono cambiare nel tempo.

Per partecipare all'ecosistema Agent 365, aggiungi capacità di osservabilità Agent 365 al tuo agente. Agent 365 Observability si basa su OpenTelemetry (OTel) e fornisce un framework unificato per catturare telemetria in modo coerente e sicuro su tutte le piattaforme agent. Implementando questo componente necessario, si abilitano gli amministratori IT a monitorare l'attività dell'agente nell'interfaccia di amministrazione di Microsoft e consentire ai team di sicurezza di usare Defender e Purview per la conformità e il rilevamento delle minacce.

Vantaggi chiave

  • Visibilità end-to-end: acquisisci dati di telemetria completi per ogni chiamata dell'agente, incluse sessioni, chiamate agli strumenti ed eccezioni, offrendo la tracciabilità completa tra le piattaforme.
  • Abilitazioni di sicurezza e conformità: inserire log di controllo unificati in Defender e Purview, abilitando scenari di sicurezza avanzati e report di conformità per l'agente.
  • Flessibilità multipiattaforma: basarsi su standard OTel e supportare runtime e piattaforme diverse, ad esempio Copilot Studio, Foundry e futuri framework per agenti.
  • Efficienza operativa per gli amministratori: offrire un'osservabilità centralizzata in interfaccia di amministrazione di Microsoft 365, ridurre i tempi di risoluzione dei problemi e migliorare la governance con i controlli degli accessi in base al ruolo per i team IT che gestiscono l'agente.

Installazione

Usa questi comandi per installare i moduli di osservabilità per le lingue supportate da Agent 365.

Installa i pacchetti principali di osservabilità e runtime. Tutti gli agenti che usano Agent 365 Observability necessitano di questi pacchetti.

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

Se il tuo agente utilizza il pacchetto Microsoft Agents Hosting, installa il pacchetto di integrazione dell'hosting. Fornisce middleware che popola automaticamente bagagli e ambiti da TurnContexte include la memorizzazione nella cache dei token per l'utilità di esportazione dell'osservabilità.

pip install microsoft-agents-a365-observability-hosting

Se l'agente usa uno dei framework di intelligenza artificiale supportati, installare l'estensione di strumentazione automatica corrispondente per acquisire automaticamente i dati di telemetria senza codice di strumentazione manuale. Per informazioni dettagliate sulla configurazione, vedere Strumentazione automatica.

# 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

Configurazione

Usa le seguenti impostazioni per abilitare e personalizzare l'Osservabilità dell'Agente 365 per il tuo agente.

Imposta la ENABLE_A365_OBSERVABILITY_EXPORTER variabile ambiente a true per l'osservabilità. Questa impostazione esporta i log nel servizio e richiede che venga fornito un oggetto token_resolver . Altrimenti, viene utilizzato l'esportatore della console.

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

Il risolver dei token è escluso dal login alla console.

È possibile personalizzare il comportamento del componente di esportazione passando un'istanza Agent365ExporterOptions a exporter_options. Quando exporter_options viene specificato, ha la precedenza sui token_resolver parametri e 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,
)

Nella tabella seguente vengono descritti i parametri facoltativi per configure().

Parametro Descrizione Default
logger_name Nome del logger Python usato per il debug e l'output del log della console. microsoft_agents_a365.observability.core
exporter_options Agent365ExporterOptions Istanza che configura insieme il sistema di risoluzione dei token e la categoria di cluster. None
suppress_invoke_agent_input Quando True, elimina i messaggi di input su InvokeAgent intervalli. False

Nella tabella seguente vengono descritte le proprietà facoltative per Agent365ExporterOptions.

Proprietà Descrizione Default
use_s2s_endpoint Quando True, utilizza il percorso dell'endpoint tra servizi. False
max_queue_size Dimensione massima della coda per il processore batch. 2048
scheduled_delay_ms Ritardo in millisecondi tra batch di esportazione. 5000
exporter_timeout_ms Timeout in millisecondi per l'operazione di esportazione. 30000
max_export_batch_size Dimensioni massime del batch per le operazioni di esportazione. 512

Attributi di bagaglio

Utilizza BaggageBuilder per impostare informazioni contestuali che passano attraverso tutti gli intervalli di una richiesta. L'SDK implementa una SpanProcessor copia di tutte le voci di baggage non interrotte in intervalli appena avviati senza sovrascrivere gli attributi esistenti.

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

È possibile popolare automaticamente BaggageBuilder da TurnContext utilizzando l'helper populate nel pacchetto microsoft-agents-a365-observability-hosting. Questo helper estrae automaticamente il chiamante, l'agente, il tenant, il canale e i dettagli della conversazione dall'attività.

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

Sistema di risoluzione dei token

Quando si usa l'utilità di esportazione di Agent 365, è necessario fornire una funzione resolver token che restituisce un token di autenticazione. Quando si utilizza l'Agent 365 Observability SDK con il framework di hosting dell'agente, è possibile generare token utilizzando il TurnContext dalle attività dell'agente.

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

Per lo scenario di lavoro digitale, se l'agente usa il pacchetto Microsoft Agent 365 Observability Hosting Library, usare AgenticTokenCache per gestire automaticamente la memorizzazione nella cache dei token. Registrare il token una volta per agente e tenant durante un gestore di attività e passare cache.get_observability_token come token_resolver nella configurazione di osservabilità.

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

Strumentazione automatica

La strumentazione automatica rileva automaticamente i segnali di telemetria esistenti dai framework agentici (SDK) per il tracciamento e li inoltra al servizio di osservabilità di Agent 365. Questa funzione elimina la necessità per gli sviluppatori di scrivere manualmente il codice di monitoraggio, semplifica la configurazione e garantisce un monitoraggio costante delle prestazioni.

Molteplici SDK e piattaforme supportano l'auto-strumentazione:

Piattaforma SDK/framework supportati
.NET Kernel semantico, OpenAI, Agent Framework
Python Kernel semantico, OpenAI, Agent Framework, LangChain
Node.js OpenAI, LangChain

Nota

Il supporto per la strumentazione automatica varia in base all'implementazione della piattaforma e dell'SDK.

Kernel semantico

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

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

Configura l'osservabilità.

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

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

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

Configura l'osservabilità.

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

Framework dell'agente

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

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

Configura l'osservabilità.

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

Framework di LangChain

La strumentazione automatica richiede l'uso del generatore di baggage. Imposta l'ID agente e l'ID tenant usando BaggageBuilder.

Installare il pacchetto .

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

Configura l'osservabilità.

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

Strumentazione manuale

Usa l'SDK di osservabilità dell'Agent 365 per comprendere il funzionamento interno dell'agente. L'SDK fornisce ambiti che è possibile avviare: InvokeAgentScope, ExecuteToolScope, InferenceScopee OutputScope.

Invocazione dell'agente

Usa questo ambito all'inizio del processo dell'agente. Utilizzando l'ambito dell'agente invoke, puoi catturare proprietà come l'agente attualmente invocato, i dati utente dell'agente e altro ancora.

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

Esecuzione dello strumento

I seguenti esempi mostrano come aggiungere il tracciamento dell'osservabilità all'esecuzione dello strumento del tuo agente. Questo tracciamento cattura la telemetria a scopo di monitoraggio e 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)

Inferenza

Gli esempi seguenti illustrano come instrumentare le chiamate di inferenza del modello di intelligenza artificiale con il rilevamento dell'osservabilità per acquisire l'utilizzo dei token, i dettagli del modello e i metadati della risposta.

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)

Risultato

Usare questo ambito per scenari asincroni in cui InvokeAgentScope, ExecuteToolScopeo InferenceScope non è in grado di acquisire i dati di output in modo sincrono. Avviare OutputScope come intervallo figlio per registrare i messaggi di output finali al termine dell'ambito padre.

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

Valida localmente

Per verificare che tu abbia integrato con successo con l'SDK di osservabilità, esamina i log della console generati dal tuo agente.

Impostare la variabile di ambiente ENABLE_A365_OBSERVABILITY_EXPORTER su false. Questa impostazione si estende (traccia) nella console.

Esempi di log

I log potrebbero apparire leggermente diversi a seconda della piattaforma.

Registro della console Invoca agente intervallo

Questo esempio mostra un tipico intervallo di chiamata dell'agente che l'esportazione della console stampa quando la convalida locale è abilitata.

    {
    "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": ""
    }}

Registro della console per lo strumento di esecuzione

Questo esempio mostra un tipico intervallo dello strumento di esecuzione che l'esportazione della console genera durante la convalida locale.

{
    "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": ""
    }
}

Intervallo di inferenza dei log della console

Questo esempio mostra un tipico intervallo di inferenza che l'esportatore della console fornisce per la validazione locale.

{
    "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": ""
    }
}

Requisiti di osservabilità

Gli amministratori IT utilizzano i dati che inserisci nel tuo codice per monitorare l'attività del tuo agente. Dati incompleti significano che non si realizzano pienamente i benefici dell'osservabilità. Gli agenti devono fornire i dati necessari per ricevere tutti i benefici attesi. Un processo di validazione verifica l'esistenza di questi dati.

All'interno della telemetria, esistono concetti di ambito o contesto. Ogni operazione che il tuo agente esegue esiste in un ambito diverso. Devi includere i dati in BaggageScope creati utilizzando attributi baggage, o all'interno degli ambiti individuali come descritto in Strumentazione manuale.

Per validare la tua implementazione, segui le istruzioni per validare localmente e generare log console per la tua strumentazione. Poi rivedi la sezione Valida per la pubblicazione in store per identificare quali attributi sono richiesti e quali sono opzionali. Devi impostare tutti gli attributi richiesti per superare con successo la validazione.

Rivedere le proprietà richieste e i valori dei parametri descritti per queste classi:

  • Le proprietà impostate usando la classe BaggageBuilder potrebbero essere impostate o sovrascritte dalle proprietà dei rispettivi ambiti.

  • Imposta le proprietà nella tabella seguente usando il metodo InvokeAgentScope.start.

    Data Descrizione
    invoke_agent_details.details.agent_id Identificatore univoco per l'agente di intelligenza artificiale
    invoke_agent_details.details.agent_name Nome leggibile dell'agente di intelligenza artificiale
    invoke_agent_details.details.agent_auid ID utente agente (AUID)
    invoke_agent_details.details.agent_upn Nome dell'entità utente dell'agente (UPN)
    invoke_agent_details.details.agent_blueprint_id ID applicazione/blueprint dell'agente
    invoke_agent_details.details.tenant_id ID tenant per l'agente
    invoke_agent_details.details.conversation_id Identificatore della conversazione o della sessione
    invoke_agent_details.endpoint Endpoint per la chiamata dell'agente
    tenant_details.tenant_id Identificatore univoco per il tenant
    request.content Il contenuto del payload inviato all'agente per l'invocazione
    request.execution_type Tipo di invocazione che indica l'origine della richiesta (ad esempio, HumanToAgent o AgentToAgent)
    caller_details.caller_id Identificatore univoco per il chiamante
    caller_details.caller_upn Nome principale utente (UPN) del chiamante
    caller_details.caller_user_id ID utente del chiamante
    caller_details.tenant_id ID tenant del chiamante
  • Imposta le proprietà nella tabella seguente utilizzando il metodo ExecuteToolScope.start.

    Data Descrizione
    details.tool_name Nome dello strumento da eseguire
    details.arguments Argomenti o parametri degli strumenti
    details.tool_call_id Identificatore univoco per la chiamata allo strumento
    details.tool_type Tipo dello strumento in esecuzione
    details.endpoint Se viene effettuata una chiamata di uno strumento esterno
    agent_details.agent_id Identificatore univoco per l'agente di intelligenza artificiale
    agent_details.agent_name Nome leggibile dell'agente di intelligenza artificiale
    agent_details.agent_auid L'ID utente dell'agente
    agent_details.agent_upn Nome dell'entità utente dell'agente (UPN)
    agent_details.agent_blueprint_id Il schema dell'agente o l'ID applicazione
    agent_details.tenant_id ID tenant per l'agente.
    agent_details.conversation_id ID della conversazione per la chiamata dell'agente.
    tenant_details.tenant_id ID tenant per l'agente.
  • Imposta le proprietà nella tabella seguente utilizzando il metodo InferenceScope.start.

    Data Descrizione
    details.operationName Il nome o tipo dell'operazione per l'inferenza
    details.model Il nome o l'identificatore del modello
    details.providerName Il nome del fornitore
    agent_details.agent_id Identificatore univoco per l'agente di intelligenza artificiale
    agent_details.agent_name Nome leggibile dell'agente di intelligenza artificiale
    agent_details.agent_auid ID utente agente (AUID)
    agent_details.agent_upn Nome dell'entità utente dell'agente (UPN)
    agent_details.agent_blueprint_id Il schema dell'agente o l'ID applicazione
    agent_details.tenant_id Identificatore univoco per il tenant
    agent_details.conversation_id Identificatore della conversazione o della sessione
    tenant_details.tenant_id Identificatore univoco per il tenant
    request.content Il contenuto del payload inviato all'agente per effettuare l'inferenza
    request.execution_type Tipo di invocazione che indica l'origine della richiesta (ad esempio, HumanToAgent o AgentToAgent)
    request.source_metadata Rappresenta le informazioni sul canale

Valida per la pubblicazione su piattaforma

Prima di pubblicare, usa i log della console per validare l'integrazione dell'osservabilità per l'agente implementando gli ambiti richiesti di invoke agent, run tool e inference. Poi confronta i log del tuo agente con le seguenti liste di attributi per verificare che tutti gli attributi richiesti siano presenti. Acquisisce attributi su ogni ambito o tramite il generatore di baggage e includi attributi opzionali a tua discrezione.

Per maggiori informazioni sui requisiti di pubblicazione dei negozi, consulta le linee guida per la validazione dei negozi.

Attributi di InvokeAgentScope

L'elenco seguente riassume gli attributi di telemetria richiesti e opzionali registrati quando si avvia un InvokeAgentScope.

"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"
    },

Attributi ExecuteToolScope

L'elenco seguente riassume gli attributi di telemetria richiesti e opzionali registrati quando si avvia un ExecuteToolScope.

"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"
    },

Attributi InferenceScope

L'elenco seguente riassume gli attributi di telemetria richiesti e opzionali registrati quando si avvia un InferenceScope.

"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"
    }

Testare l'agente utilizzando funzioni di monitoraggio e analisi

Dopo aver implementato l'osservabilità nell'agente, testarla per assicurarsi che acquisisca correttamente i dati di telemetria. Segui la guida ai test per impostare il tuo ambiente. Concentrarsi quindi principalmente sulla sezione Visualizza log di osservabilità per verificare che l'implementazione dell'osservabilità funzioni come previsto.

Verifica:

  • Passa a: https://admin.cloud.microsoft/#/agents/all
  • Seleziona il tuo agente > Attività
  • Vedi le sessioni e le chiamate agli strumenti

Risoluzione dei problemi

Questa sezione descrive i problemi comuni durante l'implementazione e l'utilizzo dell'osservabilità.

Suggerimento

La Guida alla risoluzione dei problemi dell'Agente 365 contiene raccomandazioni di alto livello, best practice e link a contenuti di risoluzione dei problemi per ogni fase del ciclo di sviluppo dell'Agente 365.

I dati di osservabilità non compaiono

Sintomi:

  • L'agente è in corsa
  • Niente telemetria nel centro amministrativo
  • Non si vede l'attività degli agenti

Causa radice:

  • L'osservabilità non è abilitata
  • Errori di configurazione
  • Problemi di risoluzione dei token

Soluzioni: Prova i seguenti passaggi per risolvere il problema:

  • Verifica che l'osservabilità sia abilitata

    Abilita i flag di osservabilità nel tuo ambiente.

    # .env file
    ENABLE_A365_OBSERVABILITY_EXPORTER=true
    
  • Controlla la configurazione del token resolver

    Assicurati che il tuo codice implementi correttamente il risolver dei token. Controlla direttamente l'ultimo codice nell'SDK.

  • Controlla la presenza di errori nei log

    Usa il az webapp log tail comando per cercare nei log errori legati all'osservabilità.

    # Look for observability-related errors
    az webapp log tail --name <your-app-name> --resource-group <your-resource-group> | Select-String "observability"
    
  • Verifica l'esportazione della telemetria

    Conferma che la telemetria è generata ed esportata come previsto.

    • Aggiungi l'esportatore console per i test
    • Controlla se la telemetria viene generata localmente

Scopri di più sul test dell'osservabilità: