Integrare il monitoraggio nell'app

Completato

Per generare dati di monitoraggio acquisiti da Application Insights e visualizzati in Monitoraggio di Azure, è necessario eseguire un servizio distribuito tramite Microsoft Foundry.

Un servizio può semplicemente essere un modello linguistico distribuito o un'app di intelligenza artificiale generativa distribuita, ad esempio un assistente di intelligenza artificiale o un agente.

Per integrare il monitoraggio nel codice, è necessario:

  • Usare Microsoft Foundry SDK per eseguire l'inferenza del modello e generare dati di telemetria.
  • Usare lo standard OpenTelemetry per acquisire intervalli che rappresentano ogni chiamata di inferenza e passaggio di esecuzione.
  • Esportare automaticamente i dati in Monitoraggio di Azure e archiviarlo automaticamente con Application Insights.

Annotazioni

I frammenti di codice forniti qui sono solo per evidenziare le parti del codice da eseguire. Nell'esercizio viene fornito un esempio di lavoro completo.

Eseguire l'inferenza del modello

Per iniziare a monitorare l'applicazione di intelligenza artificiale generativa, è necessario usare Microsoft Foundry SDK per eseguire l'inferenza del modello. L'inferenza del modello può essere qualsiasi cosa, dal completamento di un singolo modello linguistico a un assistente completo a più turni.

Microsoft Foundry SDK consente di connettersi con un hub e un progetto di Intelligenza artificiale di Azure specifici. Con Python, questo può essere simile all'esempio di codice seguente:

connection_string = os.getenv('PROJECT_CONNECTION_STRING')
credential = DefaultAzureCredential()
project = AIProjectClient.from_connection_string(
    conn_str=connection_string,
    credential=credential
)

In seguito, è possibile usare il pacchetto di inferenza del modello di intelligenza artificiale di Azure (parte di Microsoft Foundry SDK) per interagire con un servizio distribuito. Per esempio:

chat_client = project.inference.get_chat_completions_client()
model_name = os.environ.get("AZURE_OPENAI_DEPLOYMENT_NAME", "gpt-4o")

response = chat_client.complete(
            model=model_name,
            messages=[
                SystemMessage("You are an AI assistant that acts as a travel guide."),
                UserMessage(content=(
                "What are some recommended supplies for a camping trip in the mountains?"
            ))]

Acquisire intervalli con un tracciatore

Per tracciare facilmente il percorso di una richiesta di inferenza tramite l'applicazione, Azure si integra con lo standard OpenTelemetry .

Lo standard OpenTelemetry usa intervalli e traccia per organizzare i dati di monitoraggio:

  • Intervalli: singole unità di lavoro all'interno dell'applicazione, ad esempio una richiesta di inferenza o una chiamata API. Ogni intervallo registra metadati come durata, stato di esito positivo/errore e attributi personalizzati. Gli intervalli sono i blocchi predefiniti di una traccia.
  • Tracer: il tracer è il componente del codice responsabile della creazione e della gestione degli span. Fa parte di OpenTelemetry SDK e svolge un ruolo centrale nella traccia distribuita.

Nell'applicazione, ad esempio, si inizia ottenendo un'istanza di traccia e generando identificatori univoci per gli intervalli:

# Get the tracer instance
tracer = trace.get_tracer(__name__)

# Generate a session ID for this script execution
SESSION_ID = str(uuid.uuid4())

# Configure the tracer to include session ID in all spans
os.environ['AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED'] = 'true'

È quindi possibile usare la traccia per creare un intervallo denominato generate_completion per rappresentare il processo di generazione di una risposta dal modello di intelligenza artificiale. L'intervallo viene usato prima di interagire con il servizio distribuito, in modo da aggiornare il codice con:

# Generate a chat completion about camping supplies
with tracer.start_as_current_span("generate_completion") as span:
    try:
        span.set_attribute("session.id", SESSION_ID)

        response = chat_client.complete(
            model=model_name,
            messages=[
                SystemMessage("You are an AI assistant that acts as a travel guide."),
                UserMessage(content=(
                "What are some recommended supplies for a camping trip in the mountains?"
            ))]
        )

    except Exception as e:
        span.set_status(Status(StatusCode.ERROR, str(e)))
        span.record_exception(e)
        raise

Esportare automaticamente i dati

Infine, è necessario assicurarsi di connettersi con la risorsa di Applications Insights per esportare automaticamente i dati di monitoraggio generati. Quando si connette una risorsa di Application Insights al progetto Microsoft Foundry, è possibile ottenere la risorsa tramite il progetto:

application_insights_connection_string = project.telemetry.get_connection_string()
configure_azure_monitor(connection_string=application_insights_connection_string)

AIInferenceInstrumentor().instrument()

L'uso di AIinferenceInstrumentor garantisce che tutte le operazioni di inferenza di intelligenza artificiale eseguite da chat_client vengano tracciate e monitorate automaticamente.

Ora che si è appreso come monitorare, è possibile esaminare le operazioni che è possibile eseguire con le informazioni monitorate.