Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Importante
Gli elementi contrassegnati come anteprima in questo articolo sono attualmente in anteprima. Questa anteprima viene fornita senza un contratto di servizio e Microsoft non lo consiglia per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o potrebbero avere funzionalità limitate. Per altre informazioni, vedere Condizioni supplementari per l'utilizzo delle anteprime di Microsoft Azure.
Microsoft Foundry acquisisce automaticamente le tracce lato server per gli agenti operativi nel portale. Il tracciamento lato client estende tale visibilità nel proprio codice dell'applicazione. Instrumentando l'applicazione agente con OpenTelemetry, è possibile acquisire intervalli per chiamate di modelli, chiamate di strumenti e logica personalizzata, quindi esportarli in Monitoraggio di Azure Application Insights, nella console o in qualsiasi back-end di osservabilità che supporta il protocollo OpenTelemetry (OTLP), ad esempio Datadog, Grafana Tempo, Jaeger o Honeycomb.
Questo articolo illustra come:
- Installare i pacchetti di traccia OpenTelemetry necessari.
- Abilitare la strumentazione per il tracciamento GenAI per le applicazioni degli agenti.
- Esportare tracce in Monitoraggio di Azure, nella console o in un back-end compatibile con OTLP.
- Abilitare la registrazione del contenuto per acquisire il contenuto dei messaggi.
- Abilitare la propagazione del contesto di traccia per la traccia distribuita (Python).
- Traccia le funzioni personalizzate.
Prerequisiti
Progetto Foundry con una risorsa di Application Insights connessa.
Modello di intelligenza artificiale distribuito nel progetto. Prendere nota del nome della distribuzione.
interfaccia della riga di comando di Azure installato. Accedi eseguendo
az login.Ruolo collaboratore o superiore nel progetto Foundry. Per visualizzare le tracce, è necessario anche Log Analytics Reader nella risorsa di Application Insights connessa. Se tali tabelle di Log Analytics sono protette, assegnare anche il ruolo Privileged Monitoring Data Reader. Per altre informazioni, vedere Controllo degli accessi in base al ruolo in Foundry.
Le variabili di ambiente seguenti impostate con valori personalizzati:
Variabile Descrizione FOUNDRY_PROJECT_ENDPOINTURL dell'endpoint del progetto Foundry. Trovarlo nella pagina Panoramica del progetto nel portale foundry. FOUNDRY_MODEL_NAMENome della distribuzione di un modello di intelligenza artificiale nel progetto. Lo trovi in Modelli nel portale Foundry.
Prerequisiti specifici della lingua
- Python 3.10 o versione successiva.
- Pacchetto
azure-ai-projectsversione 2.0.0 o successiva.
Installare i pacchetti di traccia
Installare Microsoft Foundry SDK, OpenTelemetry e l'utilità di esportazione Monitoraggio di Azure:
pip install azure-ai-projects azure-identity opentelemetry-sdk azure-core-tracing-opentelemetry azure-monitor-opentelemetry
Per l'esportazione limitata a console o OTLP (ad esempio Aspire Dashboard), installare l'utilità di esportazione OTLP:
pip install opentelemetry-exporter-otlp
Abilitare il tracciamento GenAI
La strumentazione di tracciamento GenAI è una funzionalità sperimentale in anteprima. Gli intervalli, gli attributi e gli eventi potrebbero cambiare nelle versioni future. È necessario acconsentire esplicitamente prima che il tracciamento sia attivo.
Impostare la variabile di ambiente AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACINGtrue prima di chiamare AIProjectInstrumentor().instrument():
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Enable instrumentation
AIProjectInstrumentor().instrument()
Se la variabile non è impostata o non corrisponde a true (indipendentemente dalle maiuscole), la strumentazione di tracciamento non è abilitata e viene registrato un avviso.
Esportare tracce in Monitoraggio di Azure
Inviare tracce a
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import PromptAgentDefinition
from azure.identity import DefaultAzureCredential
from azure.monitor.opentelemetry import configure_azure_monitor
from opentelemetry import trace
endpoint = os.environ["FOUNDRY_PROJECT_ENDPOINT"]
with (
DefaultAzureCredential() as credential,
AIProjectClient(endpoint=endpoint, credential=credential) as project,
):
# Get the Application Insights connection string from the project
connection_string = project.telemetry.get_application_insights_connection_string()
configure_azure_monitor(connection_string=connection_string)
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("agent-tracing-scenario"):
with project.get_openai_client() as openai:
# Create an agent
agent = project.agents.create_version(
agent_name="MyAgent",
definition=PromptAgentDefinition(
model=os.environ["FOUNDRY_MODEL_NAME"],
instructions="You are a helpful assistant.",
),
)
print(f"Agent created (id: {agent.id}, name: {agent.name})")
# Create a conversation and get a response
conversation = openai.conversations.create()
response = openai.responses.create(
conversation=conversation.id,
extra_body={"agent_reference": {"name": agent.name, "id": agent.id, "type": "agent_reference"}},
input="What is the largest city in France?",
)
print(f"Response: {response.output_text}")
# Clean up
openai.conversations.delete(conversation_id=conversation.id)
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
Riferimento: AIProjectClient, DefaultAzureCredential, configure_azure_monitor
Nota
Per correlare le tracce con un agente specifico nel portale Foundry, includere il agent_reference sia con name che id nella chiamata responses.create() (come illustrato nell'esempio Python precedente). Le tracce vengono in genere visualizzate entro 2-5 minuti.
Esportare tracce nella console
L'esportazione della console è utile per il debug locale. Le tracce vengono stampate direttamente nell'output standard.
import os
os.environ["AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING"] = "true"
from azure.ai.projects.telemetry import AIProjectInstrumentor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import ConsoleSpanExporter, SimpleSpanProcessor
# Set up console tracing
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(
SimpleSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(tracer_provider)
# Enable instrumentation
AIProjectInstrumentor().instrument()
tracer = trace.get_tracer(__name__)
È anche possibile usare Aspire Dashboard come visualizzatore locale compatibile con OTLP. Installare l'esportatore OTLP (pip install opentelemetry-exporter-otlp) e configurarlo come esportatore al posto di ConsoleSpanExporter.
Riferimento: AIProjectInstrumentor, ConsoleSpanExporter
Abilitare la registrazione del contenuto
La registrazione dei contenuti cattura il contenuto dei messaggi e gli argomenti delle chiamate delle applicazioni nelle tracce. Questi dati possono includere informazioni riservate sull'utente.
Attenzione
La registrazione del contenuto acquisisce messaggi utente, argomenti di chiamata dello strumento e output del modello. Abilitare questa impostazione solo negli ambienti di sviluppo. Non abilitare la registrazione del contenuto nell'ambiente di produzione, a meno che i requisiti di conformità e privacy non lo consentano.
Impostare la variabile di ambiente prima di instrumentare:
import os
os.environ["OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT"] = "true"
Importante
Questa variabile controlla la registrazione solo per le tracce predefinite. Quando si usa l'elemento @trace_function Decorator nelle proprie funzioni, tutti i parametri e i valori restituiti vengono sempre tracciati indipendentemente da questa impostazione.
Disabilitare la strumentazione automatica (Python)
L'SDK di Python strumentalizza automaticamente le chiamate API Risposte e Conversazioni di OpenAI. Per disabilitare questa strumentazione automatica, impostare AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API su false prima di chiamare AIProjectInstrumentor().instrument(). Se disabilitato, vengono registrati solo intervalli personalizzati espliciti.
import os
os.environ["AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API"] = "false"
Traccia i dati binari (Python)
Quando la registrazione del contenuto è abilitata, per impostazione predefinita, l'SDK traccia gli ID file e i nomi file. Per includere gli URL delle immagini completi (inclusi gli URI dati base64) e i dati dei file negli intervalli, impostare AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA su true.
import os
os.environ["AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA"] = "true"
Avviso
L'abilitazione AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA può aumentare significativamente le dimensioni del payload di traccia. Alcuni back-end di traccia presentano limitazioni per le dimensioni massime dei dati di intervallo. Verificare che il back-end di osservabilità supporti le dimensioni previste del payload prima di abilitare questa impostazione.
Abilitare la propagazione del contesto di traccia (Python)
La propagazione del contesto di traccia consente ai tracciamenti lato client di correlarsi con i tracciamenti lato server di Azure OpenAI e altri servizi Azure. Se abilitato, l'SDK inserisce automaticamente le intestazioni del contesto di traccia W3C (traceparent e tracestate) nelle richieste HTTP effettuate dai client OpenAI ottenute tramite get_openai_client().
La propagazione del contesto di traccia è abilitata per impostazione predefinita quando la traccia è abilitata. Per disabilitarla, impostare la AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION variabile di ambiente su falseo passare direttamente il parametro :
from azure.ai.projects.telemetry import AIProjectInstrumentor
# Disable trace context propagation
AIProjectInstrumentor().instrument(enable_trace_context_propagation=False)
Le modifiche apportate a questa impostazione influiscono solo sui client OpenAI ottenuti tramite get_openai_client()dopo la modifica. I client acquisiti in precedenza non sono interessati.
Propagazione bagaglio di controllo (Python)
Per impostazione predefinita, vengono propagate solo le intestazioni traceparent e tracestate. Per includere anche l'intestazione baggage, impostare AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE su true.
Importante
L'intestazione baggage può contenere coppie chiave-valore arbitrarie, inclusi identificatori utente, informazioni sulla sessione o altri dati potenzialmente sensibili. Prima di abilitare la propagazione dei bagagli:
- Verificare quali dati la vostra applicazione e le librerie di terze parti aggiungono al bagaglio di OpenTelemetry.
- Comprendere che il bagaglio viene inviato a Azure OpenAI e potrebbe essere registrato dai servizi Azure.
- Non aggiungere mai informazioni riservate al bagaglio quando la propagazione è abilitata.
Nota
L'SDK C# si basa sulla propagazione standard di .NET System.Diagnostics.Activity. L'inserimento esplicito del contesto di tracciamento per richiesta non è disponibile come funzionalità SDK separata.
Tracciare le funzioni personalizzate
Python — usare il decoratore @trace_function
L'elemento decorator trace_function crea un intervallo OpenTelemetry per ogni chiamata alla funzione. I parametri vengono registrati come code.function.parameter.<name> e il valore restituito come code.function.return.value.
from azure.ai.projects.telemetry import trace_function
@trace_function
def fetch_weather(location: str) -> str:
"""Get the current weather for a location."""
return f"Weather in {location}: sunny, 72°F"
Per usare un nome span personalizzato anziché il nome della funzione, passarlo come parametro:
@trace_function("get-current-weather")
def fetch_weather(location: str) -> str:
"""Get the current weather for a location."""
return f"Weather in {location}: sunny, 72°F"
Record dell'elemento Decorator:
-
Parametri come gli attributi span
code.function.parameter.<name>. -
Restituisce valori come
code.function.return.value. -
Tipi supportati:
str,int,floatbool, e raccolte (list,dict,tuple,set). I tipi di oggetto vengono omessi.
Nota
La OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT variabile di ambiente non influisce sulla traccia della funzione personalizzata. L'elemento @trace_function decorator traccia sempre i parametri e restituisce valori.
C# : usare ActivitySource manualmente
C# SDK non include un Decorator di tracciamento. Usare lo standard .NET ActivitySource per instrumentare le proprie funzioni:
using System.Diagnostics;
using ActivitySource source = new("MyApp.CustomFunctions");
string FetchWeather(string location)
{
using var activity = source.StartActivity("FetchWeather");
activity?.SetTag("input.location", location);
var result = $"Weather in {location}: sunny, 72°F";
activity?.SetTag("output", result);
return result;
}
Registrare l'origine personalizzata insieme all'origine SDK nel provider di traccia:
var tracerProvider = Sdk.CreateTracerProviderBuilder()
.AddSource("Azure.AI.Projects.*")
.AddSource("MyApp.CustomFunctions")
.SetResourceBuilder(
ResourceBuilder.CreateDefault().AddService("MyApp"))
.AddConsoleExporter()
.Build();
Configurare la strumentazione a livello di codice (Python)
In alternativa alle variabili di ambiente, passare i parametri di configurazione direttamente a AIProjectInstrumentor().instrument():
from azure.ai.projects.telemetry import AIProjectInstrumentor
AIProjectInstrumentor().instrument(
enable_content_recording=True,
enable_trace_context_propagation=True,
enable_baggage_propagation=False,
)
| Parametro | Equivalente alla variabile di ambiente | Predefinito |
|---|---|---|
enable_content_recording |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT |
False |
enable_trace_context_propagation |
AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION |
True* |
enable_baggage_propagation |
AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE |
False |
* Il valore predefinito è True quando la traccia è abilitata.
Quando vengono impostati sia un parametro che la variabile di ambiente corrispondente, il valore del parametro assume la priorità.
Aggiungere attributi personalizzati per gli intervalli
Creare un oggetto personalizzato SpanProcessor per inserire metadati come gli ID sessione in ogni intervallo:
from opentelemetry.sdk.trace import SpanProcessor, ReadableSpan
from opentelemetry.trace import Span
class CustomAttributeSpanProcessor(SpanProcessor):
def on_start(self, span: Span, parent_context=None):
span.set_attribute("session.id", "user-session-abc")
def on_end(self, span: ReadableSpan):
pass
Registrare il processore con il provider di traccia globale:
from typing import cast
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
provider = cast(TracerProvider, trace.get_tracer_provider())
provider.add_span_processor(CustomAttributeSpanProcessor())
Controllare il comportamento di tracciamento con le variabili di ambiente
Nella tabella seguente sono elencate tutte le variabili di ambiente che è possibile usare per configurare il comportamento di traccia:
| Variabile | Lingua | Predefinito | Descrizione |
|---|---|---|---|
AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING |
Python, C# | false |
Abilitare la strumentazione di tracciamento GenAI. |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT |
Python, C# | false |
Acquisire il contenuto dei messaggi e i parametri di chiamata dello strumento. |
AZURE_TRACING_GEN_AI_ENABLE_TRACE_CONTEXT_PROPAGATION |
Python | true* |
Inserire le intestazioni del contesto di traccia W3C nelle richieste. |
AZURE_TRACING_GEN_AI_TRACE_CONTEXT_PROPAGATION_INCLUDE_BAGGAGE |
Python | false |
Includere l'intestazione baggage nella propagazione del contesto di traccia. |
AZURE_TRACING_GEN_AI_INSTRUMENT_RESPONSES_API |
Python | true |
API per le risposte e le conversazioni con strumenti automatici. |
AZURE_TRACING_GEN_AI_INCLUDE_BINARY_DATA |
Python | false |
Includere dati di immagine e file in intervalli (non solo ID file). |
* Il valore predefinito è true quando la traccia è abilitata.
Per l'elenco completo delle variabili di ambiente e del loro comportamento, vedere il README dell'SDK dei progetti di traccia di Azure AI.
Sicurezza e privacy
La tracciatura sul lato client può acquisire informazioni e dati riservati. Seguire queste procedure per ridurre i rischi:
- Registrazione del contenuto: acquisisce gli input utente, le risposte del modello e gli argomenti di chiamata dello strumento. Disabilitare nell'ambiente di produzione, a meno che non sia necessario.
- Propagazione dei dati: è possibile esporre informazioni personali identificabili (PII) e dati di sessione Disabilitato per impostazione predefinita.
- Propagazione del contesto di tracciamento: Invia ID di tracciamento ai servizi di Azure. Se i requisiti di conformità impediscono la condivisione degli identificatori di traccia, disabilitarli.
- Segreti: Non archiviare segreti, credenziali o token nei prompt, negli argomenti dello strumento o negli attributi di intervallo.
- Controllo di accesso: considera i dati di traccia come dati di telemetria di produzione. Applicare gli stessi controlli di accesso e criteri di conservazione usati per i log e le metriche.
Risoluzione dei problemi
| Problema | Risoluzione |
|---|---|
| La traccia non produce intervalli | Verificare che AZURE_EXPERIMENTAL_ENABLE_GENAI_TRACING sia impostato su trueprima di chiamare AIProjectInstrumentor().instrument() (Python) o prima di creare il provider di tracer (C#). |
| Il contenuto del messaggio non viene visualizzato nei span | Impostare OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT su true. |
| Le tracce non vengono visualizzate in Monitoraggio di Azure | Verificare che il stringa di connessione di Application Insights sia corretto e che la risorsa sia accessibile. Verificare che l'account abbia il ruolo Lettore Log Analytics. Se le tabelle sono protette, assegnare anche Privileged Monitoring Data Reader. |
| Gli intervalli lato client e lato server non sono correlati | (Python) Verificare che la propagazione del contesto di traccia sia abilitata e che i client OpenAI siano ottenuti tramite get_openai_client()post-strumentazione. |
| Le tracce appaiono con ritardo | Le tracce richiedono in genere 2-5 minuti per essere visualizzate nel portale di Foundry e Monitoraggio di Azure. Attendere e aggiornare. |