Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak povolit OpenTelemetry pro agenta, aby se interakce s agentem automaticky protokolovaly a exportovaly. V tomto kurzu se výstup zapíše do konzoly pomocí exportéru konzoly OpenTelemetry.
Poznámka:
Další informace o standardech, které dodržuje Microsoft Agent Framework, najdete v části Sémantické konvence pro agenta GenAI a frameworky od Open Telemetry.
Požadavky
Požadavky si přečtěte v části Vytvoření a spuštění jednoduchého agenta v tomto kurzu.
Instalace balíčků NuGet
Pokud chcete používat rozhraní Microsoft Agent Framework s Azure OpenAI, musíte nainstalovat následující balíčky NuGet:
dotnet add package Azure.AI.OpenAI --prerelease
dotnet add package Azure.Identity
dotnet add package Microsoft.Agents.AI.OpenAI --prerelease
Pokud chcete také přidat podporu OpenTelemetry s podporou zápisu do konzoly, nainstalujte tyto další balíčky:
dotnet add package OpenTelemetry
dotnet add package OpenTelemetry.Exporter.Console
Povolení OpenTelemetry v aplikaci
Povolte telemetrii rozhraní Agent Framework a vytvořte OpenTelemetry TracerProvider , která exportuje do konzoly.
TracerProvider musí zůstat aktivní, když spouštíte agenta, aby mohly být exportovány stopy.
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();
Vytvoření a instrumentace agenta
Vytvořte agenta a pomocí vzoru tvůrce zavolejte UseOpenTelemetry pro zadání názvu zdroje.
Všimněte si, že řetězcový literál agent-telemetry-source je název zdroje OpenTelemetry, který jste použili při vytváření zprostředkovatele traceru.
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();
Spusťte agenta a vytiskněte textovou odpověď. Konzolový exportér zobrazí data trasování v konzoli.
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate."));
Očekávaný výstup bude vypadat přibližně takto, kde se nejprve zobrazí trasování vyvolání agenta a za ním textová odpověď od agenta.
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"! ?????
Další kroky
V tomto kurzu se dozvíte, jak povolit OpenTelemetry pro agenta, aby se interakce s agentem automaticky protokolovaly a exportovaly. V tomto kurzu se výstup zapíše do konzoly pomocí exportéru konzoly OpenTelemetry.
Požadavky
Požadavky si přečtěte v části Vytvoření a spuštění jednoduchého agenta v tomto kurzu.
Instalace balíčků
Pokud chcete používat Agent Framework s Azure OpenAI, musíte nainstalovat následující balíčky. Agent Framework automaticky zahrnuje všechny nezbytné závislosti OpenTelemetry:
pip install agent-framework --pre
Ve výchozím nastavení jsou zahrnuty následující balíčky OpenTelemetry:
opentelemetry-api
opentelemetry-sdk
opentelemetry-exporter-otlp-proto-grpc
opentelemetry-semantic-conventions-ai
Pokud chcete exportovat do služby Azure Monitor (Application Insights), musíte balíček nainstalovat azure-monitor-opentelemetry také:
pip install azure-monitor-opentelemetry
Povolení OpenTelemetry v aplikaci
Agent Framework poskytuje pohodlnou setup_observability funkci, která konfiguruje OpenTelemetry s rozumnými výchozími nastaveními.
Ve výchozím nastavení exportuje do konzoly, pokud není nakonfigurovaný žádný konkrétní vývozce.
import asyncio
from agent_framework.observability import setup_observability
# Enable Agent Framework telemetry with console output (default behavior)
setup_observability(enable_sensitive_data=True)
Pochopení setup_observability parametrů
Funkce setup_observability přijímá následující parametry pro přizpůsobení konfigurace pozorovatelnosti:
enable_otel(bool, volitelné): Povolí trasování a metriky OpenTelemetry. Výchozí hodnota jeFalsepři použití pouze proměnných prostředí, ale při voláníTrueprostřednictvím kódu programu se předpokládásetup_observability(). Při použití proměnných prostředí nastavteENABLE_OTEL=true.enable_sensitive_data(bool, volitelné): Určuje, jestli jsou do trasování zahrnuta citlivá data, jako jsou výzvy, odpovědi, argumenty volání funkce a výsledky. Výchozí hodnota jeFalse. Nastavte naTrue, abyste viděli skutečné výzvy systému a odpovědi ve svých trasách. Upozornění: Buďte opatrní při tomto nastavení, protože může vystavit citlivá data ve vašich protokolech. Lze také nastavit prostřednictvímENABLE_SENSITIVE_DATA=trueproměnné prostředí.otlp_endpoint(str, volitelné): Adresa URL koncového bodu OTLP pro export telemetrických dat. Výchozí hodnota jeNone. Běžně nastaveno na hodnotuhttp://localhost:4317. Tím se vytvoří OTLPExporter pro rozsahy, metriky a protokoly. Lze použít s libovolným koncovým bodem kompatibilním s OTLP, jako je OpenTelemetry Collector, Aspire Dashboard nebo jiné koncové body OTLP. Lze také nastavit prostřednictvímOTLP_ENDPOINTproměnné prostředí.applicationinsights_connection_string(str, volitelné): Připojovací řetězec Azure Application Insights pro export do Služby Azure Monitor. Výchozí hodnota jeNone. Vytvoří AzureMonitorTraceExporter, AzureMonitorMetricExporter a AzureMonitorLogExporter. Tento připojovací řetězec najdete na webu Azure Portal v části Přehled vašeho prostředku Application Insights. Lze také nastavit prostřednictvímAPPLICATIONINSIGHTS_CONNECTION_STRINGproměnné prostředí. Vyžaduje instalaciazure-monitor-opentelemetrybalíčku.vs_code_extension_port(int, volitelné): Číslo portu pro rozšíření AI Toolkit nebo Azure AI Foundry VS Code Výchozí hodnota je4317. Umožňuje integraci s rozšířeními VS Code pro místní vývoj a ladění. Lze také nastavit prostřednictvímVS_CODE_EXTENSION_PORTproměnné prostředí.exporters(seznam, volitelné): Vlastní seznam exportérů OpenTelemetry pro pokročilé scénáře. Výchozí hodnota jeNone. Umožňuje poskytovat vlastní nakonfigurované vývozce, pokud standardní možnosti nevyhovují vašim potřebám.
Důležité
Pokud nejsou poskytnuty žádné exportéry (prostřednictvím parametrů, proměnných prostředí nebo jako explicitní exportéry), je exportér konzole výchozí konfigurovaný pro místní ladění.
Možnosti nastavení
Pozorovatelnost můžete nakonfigurovat třemi způsoby:
1. Proměnné prostředí (nejjednodušší přístup):
export ENABLE_OTEL=true
export ENABLE_SENSITIVE_DATA=true
export OTLP_ENDPOINT=http://localhost:4317
Pak v kódu:
from agent_framework.observability import setup_observability
setup_observability() # Reads from environment variables
2. Programová konfigurace:
from agent_framework.observability import setup_observability
# note that ENABLE_OTEL is implied to be True when calling setup_observability programmatically
setup_observability(
enable_sensitive_data=True,
otlp_endpoint="http://localhost:4317",
applicationinsights_connection_string="InstrumentationKey=your_key"
)
3. Vlastní vývozci (pro pokročilé scénáře):
from agent_framework.observability import setup_observability
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace.export import ConsoleSpanExporter
custom_exporters = [
OTLPSpanExporter(endpoint="http://localhost:4317"),
ConsoleSpanExporter()
]
setup_observability(exporters=custom_exporters, enable_sensitive_data=True)
Funkce setup_observability nastaví globálního zprostředkovatele trasování a poskytovatele měřičů, což vám umožní vytvářet vlastní rozsahy a metriky:
from agent_framework.observability import get_tracer, get_meter
tracer = get_tracer()
meter = get_meter()
with tracer.start_as_current_span("my_custom_span"):
# Your code here
pass
counter = meter.create_counter("my_custom_counter")
counter.add(1, {"key": "value"})
Vytvoření a spuštění agenta
Vytvořte agenta pomocí rozhraní Agent Framework. Pozorovatelnost bude automaticky povolena pro agenta, jakmile bude setup_observability zavoláno.
from agent_framework import ChatAgent
from agent_framework.azure import AzureOpenAIChatClient
from azure.identity import AzureCliCredential
# Create the agent - telemetry is automatically enabled
agent = ChatAgent(
chat_client=AzureOpenAIChatClient(
credential=AzureCliCredential(),
model="gpt-4o-mini"
),
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)
Exportér konzole zobrazí v konzoli údaje o trasování podobné následujícímu.
{
"name": "invoke_agent Joker",
"context": {
"trace_id": "0xf2258b51421fe9cf4c0bd428c87b1ae4",
"span_id": "0x2cad6fc139dcf01d",
"trace_state": "[]"
},
"kind": "SpanKind.CLIENT",
"parent_id": null,
"start_time": "2025-09-25T11:00:48.663688Z",
"end_time": "2025-09-25T11:00:57.271389Z",
"status": {
"status_code": "UNSET"
},
"attributes": {
"gen_ai.operation.name": "invoke_agent",
"gen_ai.system": "openai",
"gen_ai.agent.id": "Joker",
"gen_ai.agent.name": "Joker",
"gen_ai.request.instructions": "You are good at telling jokes.",
"gen_ai.response.id": "chatcmpl-CH6fgKwMRGDtGNO3H88gA3AG2o7c5",
"gen_ai.usage.input_tokens": 26,
"gen_ai.usage.output_tokens": 29
}
}
Následuje textová odpověď od agenta:
Why did the pirate go to school?
Because he wanted to improve his "arrr-ticulation"! ⛵
Vysvětlení výstupu telemetrie
Jakmile je povolená pozorovatelnost, rozhraní Agent Framework automaticky vytvoří následující rozsahy:
invoke_agent <agent_name>: Rozsah nejvyšší úrovně pro každé vyvolání agenta. Obsahuje všechny ostatní rozsahy jako podřízené prvky a obsahuje metadata, například ID agenta, název a pokyny.chat <model_name>: Vytvořeno, když agent volá podkladový chatový model. Obsahuje výzvu a odpověď jako atributy, pokudenable_sensitive_datajeTrue, spolu s informacemi o využití tokenu.execute_tool <function_name>: Vytvořeno, když agent volá funkční nástroj. Obsahuje argumenty funkce a výsledky jako atributy, pokudenable_sensitive_datajeTrue.
Shromažďují se také následující metriky:
Pro činnost chatu:
-
gen_ai.client.operation.duration(histogram): Doba trvání každé operace v sekundách -
gen_ai.client.token.usage(histogram): Využití tokenů v počtu tokenů
Volání funkcí:
-
agent_framework.function.invocation.duration(histogram): Doba trvání každého spuštění funkce v sekundách
Integrace Azure AI Foundry
Pokud používáte klienty Azure AI Foundry, existuje vhodná metoda automatického nastavení:
from agent_framework.azure import AzureAIAgentClient
from azure.identity import AzureCliCredential
agent_client = AzureAIAgentClient(
credential=AzureCliCredential(),
# endpoint and model_deployment_name can be taken from environment variables
# project_endpoint="https://<your-project>.foundry.azure.com"
# model_deployment_name="<your-deployment-name>"
)
# Automatically configures observability with Application Insights
await agent_client.setup_azure_ai_observability()
Tato metoda načte připojovací řetězec Application Insights z projektu Azure AI Foundry a automaticky volá setup_observability . Pokud chcete používat telemetrii Foundry s jinými typy agentů, můžete to samé udělat takto:
from agent_framework.observability import setup_observability
from azure.ai.projects import AIProjectClient
from azure.identity import AzureCliCredential
project_client = AIProjectClient(endpoint, credential=AzureCliCredential())
conn_string = project_client.telemetry.get_application_insights_connection_string()
setup_observability(applicationinsights_connection_string=conn_string)
Projděte si také příslušnou dokumentaci k Foundry.
Poznámka:
Pokud pro telemetrii používáte Azure Monitor, musíte balíček nainstalovat azure-monitor-opentelemetry explicitně, protože ve výchozím nastavení není součástí agenta Framework.
Další kroky
Pokročilejší scénáře a příklady pozorovatelnosti najdete v uživatelské příručce Agent Observability a ukázkách pozorovatelnosti v úložišti GitHub.