Dela via


Aktivera observerbarhet för agenter

Den här självstudien visar hur du aktiverar OpenTelemetry på en agent så att interaktioner med agenten loggas och exporteras automatiskt. I den här handledningen skrivs utdata till konsolen med hjälp av OpenTelemetry-konsolexportören.

Anmärkning

Mer information om de standarder som följs av Microsoft Agent Framework finns i Semantiska konventioner för GenAI-agent och ramverk som sträcker sig från Open Telemetry.

Förutsättningar

Förutsättningar finns i steget Skapa och kör en enkel agent i den här självstudien.

Installera NuGet-paket

Om du vill använda Microsoft Agent Framework med Azure OpenAI måste du installera följande NuGet-paket:

dotnet add package Azure.AI.OpenAI --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease

Om du också vill lägga till OpenTelemetry-stöd, med stöd för att skriva till konsolen, installerar du följande ytterligare paket:

dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Exporter.Console

Aktivera OpenTelemetry i din app

Aktivera Agent Framework-telemetri och skapa en OpenTelemetry TracerProvider som exporterar till konsolen. TracerProvider måste vara vid liv medan du kör agenten så att spår exporteras.

using System;
using OpenTelemetry;
using OpenTelemetry.Trace;

// Create a TracerProvider that exports to the console
using var tracerProvider = Sdk.CreateTracerProviderBuilder()
    .AddSource("agent-telemetry-source")
    .AddConsoleExporter()
    .Build();

Skapa och instrumentera agenten

Skapa en agent och anropa med hjälp av builder-mönstret UseOpenTelemetry för att ange ett källnamn. Observera att strängliteralen agent-telemetry-source är det OpenTelemetry-källnamn som du använde när du skapade spårningsprovidern.

using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
using OpenAI;

// Create the agent and enable OpenTelemetry instrumentation
AIAgent agent = new AzureOpenAIClient(
    new Uri("https://<myresource>.openai.azure.com"),
    new AzureCliCredential())
        .GetChatClient("gpt-4o-mini")
        .CreateAIAgent(instructions: "You are good at telling jokes.", name: "Joker")
        .AsBuilder()
        .UseOpenTelemetry(sourceName: "agent-telemetry-source")
        .Build();

Kör agenten och skriv ut textsvaret. Konsolexportören visar spårningsdata i konsolen.

Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));

Förväntade utdata kommer att se ut ungefär så här, där agentanropsspårningen visas först, följt av textsvaret från agenten.

Activity.TraceId:            f2258b51421fe9cf4c0bd428c87b1ae4
Activity.SpanId:             2cad6fc139dcf01d
Activity.TraceFlags:         Recorded
Activity.DisplayName:        invoke_agent Joker
Activity.Kind:               Client
Activity.StartTime:          2025-09-18T11:00:48.6636883Z
Activity.Duration:           00:00:08.6077009
Activity.Tags:
    gen_ai.operation.name: chat
    gen_ai.request.model: gpt-4o-mini
    gen_ai.provider.name: openai
    server.address: <myresource>.openai.azure.com
    server.port: 443
    gen_ai.agent.id: 19e310a72fba4cc0b257b4bb8921f0c7
    gen_ai.agent.name: Joker
    gen_ai.response.finish_reasons: ["stop"]
    gen_ai.response.id: chatcmpl-CH6fgKwMRGDtGNO3H88gA3AG2o7c5
    gen_ai.response.model: gpt-4o-mini-2024-07-18
    gen_ai.usage.input_tokens: 26
    gen_ai.usage.output_tokens: 29
Instrumentation scope (ActivitySource):
    Name: agent-telemetry-source
Resource associated with Activity:
    telemetry.sdk.name: opentelemetry
    telemetry.sdk.language: dotnet
    telemetry.sdk.version: 1.13.1
    service.name: unknown_service:Agent_Step08_Telemetry

Why did the pirate go to school?

Because he wanted to improve his "arrr-ticulation"! ?????

Nästa steg

Den här självstudien visar hur du snabbt aktiverar OpenTelemetry på en agent så att interaktioner med agenten loggas och exporteras automatiskt.

Omfattande dokumentation om observerbarhet, inklusive alla konfigurationsalternativ, miljövariabler och avancerade scenarier finns i användarhandboken för observerbarhet.

Förutsättningar

Förutsättningar finns i steget Skapa och kör en enkel agent i den här självstudien.

Installera paket

Om du vill använda Agent Framework med OpenTelemetry installerar du ramverket:

pip install agent-framework --pre

Inga ytterligare paket behövs för konsolutdata under utvecklingen. Andra exportörer finns i avsnittet Beroenden i användarhandboken.

Aktivera OpenTelemetry i din app

Det enklaste sättet att aktivera observerbarhet är att använda configure_otel_providers():

from agent_framework.observability import configure_otel_providers

# Enable console output for local development
configure_otel_providers(enable_console_exporters=True)

Eller använd miljövariabler för mer flexibilitet:

export ENABLE_INSTRUMENTATION=true
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
from agent_framework.observability import configure_otel_providers

# Reads OTEL_EXPORTER_OTLP_* environment variables automatically
configure_otel_providers()

Skapa och köra agenten

Skapa en agent med Agent Framework. Observerbarhet aktiveras automatiskt när configure_otel_providers() har anropats.

from agent_framework import ChatAgent
from agent_framework.openai import OpenAIChatClient

# Create the agent - telemetry is automatically enabled
agent = ChatAgent(
    chat_client=OpenAIChatClient(),
    name="Joker",
    instructions="You are good at telling jokes."
)

# Run the agent
result = await agent.run("Tell me a joke about a pirate.")
print(result.text)

Konsolexportören visar spårningsdata som liknar:

{
    "name": "invoke_agent Joker",
    "context": {
        "trace_id": "0xf2258b51421fe9cf4c0bd428c87b1ae4",
        "span_id": "0x2cad6fc139dcf01d"
    },
    "attributes": {
        "gen_ai.operation.name": "invoke_agent",
        "gen_ai.agent.name": "Joker",
        "gen_ai.usage.input_tokens": 26,
        "gen_ai.usage.output_tokens": 29
    }
}

Microsoft Foundry-integrering

Om du använder Microsoft Foundry finns det en praktisk metod som automatiskt konfigurerar Azure Monitor med Application Insights. Kontrollera först att Ditt Foundry-projekt har Azure Monitor konfigurerat (se Övervaka program).

pip install azure-monitor-opentelemetry
from agent_framework.azure import AzureAIClient
from azure.ai.projects.aio import AIProjectClient
from azure.identity.aio import AzureCliCredential

async with (
    AzureCliCredential() as credential,
    AIProjectClient(endpoint="https://<your-project>.foundry.azure.com", credential=credential) as project_client,
    AzureAIClient(project_client=project_client) as client,
):
    # Automatically configures Azure Monitor with connection string from project
    await client.configure_azure_monitor(enable_live_metrics=True)

Anpassade agenter med Foundry-observerbarhet

För anpassade agenter som inte har skapats via Foundry kan du registrera dem i Foundry-portalen och använda samma OpenTelemetry-agent-ID. Se Registrera anpassad agent för installationsinstruktioner.

from azure.monitor.opentelemetry import configure_azure_monitor
from agent_framework import ChatAgent
from agent_framework.observability import create_resource, enable_instrumentation
from agent_framework.openai import OpenAIChatClient

# Configure Azure Monitor
configure_azure_monitor(
    connection_string="InstrumentationKey=...",
    resource=create_resource(),
    enable_live_metrics=True,
)
# Optional if ENABLE_INSTRUMENTATION is already set in env vars
enable_instrumentation()

# Create your agent with the same OpenTelemetry agent ID as registered in Foundry
agent = ChatAgent(
    chat_client=OpenAIChatClient(),
    name="My Agent",
    instructions="You are a helpful assistant.",
    id="<OpenTelemetry agent ID>"  # Must match the ID registered in Foundry
)
# Use the agent as normal

Tips/Råd

Mer detaljerade installationsinstruktioner finns i avsnittet Microsoft Foundry-konfiguration i användarhandboken.

Nästa steg

Mer avancerade scenarier för observerbarhet, inklusive anpassade exportörer, integreringar från tredje part (Langfuse osv.), Installation av Aspire Dashboard och detaljerad dokumentation om span/mått finns i användarhandboken för Observability.