Instrumenta un agente LangGraph ReAct con OpenTelemetry

Questo documento descrive i passaggi per instrumentare un agente LangGraph ReAct con OpenTelemetry, consentendo la raccolta di dati di telemetria dall'agente. I prompt degli utenti e le risposte e le scelte degli agenti sono inclusi nella telemetria come attributi associati agli span. Anche le risposte dell'agente sono incluse nelle voci di log correlate agli intervalli contenenti eventi di AI generativa. Le istruzioni riportate in questo documento si applicano quando l'agente utilizza ChatVertexAI di Langchain per chiamare un modello Gemini.

Le applicazioni che utilizzano un agente ReAct LangGraph possono anche raccogliere prompt e risposte multimodali. Questo documento descrive come raccogliere prompt testuali e risposte. Se vuoi raccogliere dati multimodali, è necessaria una configurazione aggiuntiva. Per saperne di più, consulta Raccogli e visualizza prompt e risposte multimodali.

Strumenta la tua applicazione di AI generativa per raccogliere dati di telemetria

Per instrumentare l'applicazione di AI generativa in modo da raccogliere dati di log, metriche e tracce, segui questi passaggi:

  1. Installa i pacchetti OpenTelemetry
  2. Configura OpenTelemetry per raccogliere e inviare dati di telemetria
  3. Traccia la chiamata dell'agente AI generativa

Installa i pacchetti OpenTelemetry

Aggiungi i seguenti pacchetti di strumentazione ed esportazione OpenTelemetry:

uv add 'opentelemetry-instrumentation-vertexai>=2.0b0' \
  'opentelemetry-instrumentation-sqlite3' \
  'opentelemetry-exporter-otlp-proto-grpc'

I dati di log, metriche e tracce vengono inviati a Google Cloud utilizzando l'API Telemetry (OTLP), che implementa il protocollo OpenTelemetry. La libreria opentelemetry-exporter-otlp-proto-grpc richiama l'endpoint API Telemetry (OTLP).

I dati di traccia vengono archiviati in un formato generalmente coerente con i file proto definiti dal protocollo OpenTelemetry. Tuttavia, i campi potrebbero essere convertiti da un tipo di dati specifico di OpenTelemetry a un tipo di dati JSON prima dell'archiviazione. Per scoprire di più sul formato di archiviazione, consulta Schema per i dati di traccia.

Configura OpenTelemetry per raccogliere e inviare dati di telemetria

All'interno del codice di inizializzazione dell'agente LangGraph, configura OpenTelemetry per acquisire e inviare la telemetria al tuo progetto Google Cloud :

Per visualizzare l'esempio completo, seleziona il logo GitHub nella barra degli strumenti dell'esempio.

def setup_opentelemetry() -> None:
    credentials, project_id = google.auth.default()
    resource = Resource.create(
        attributes={
            SERVICE_NAME: "langgraph-sql-agent",
            CLOUD_PROVIDER: "gcp",
            CLOUD_ACCOUNT_ID: project_id,
            # The project to send spans to
            "gcp.project_id": project_id,
            CLOUD_REGION: "us-central1",
            SERVICE_NAMESPACE: "local",
            SERVICE_INSTANCE_ID: "local-instance",
        }
    )

    # Set up OTLP auth
    request = google.auth.transport.requests.Request()
    auth_metadata_plugin = AuthMetadataPlugin(credentials=credentials, request=request)
    channel_creds = grpc.composite_channel_credentials(
        grpc.ssl_channel_credentials(),
        grpc.metadata_call_credentials(auth_metadata_plugin),
    )

    # Set up OpenTelemetry Python SDK
    tracer_provider = TracerProvider(resource=resource)
    tracer_provider.add_span_processor(
        BatchSpanProcessor(
            OTLPSpanExporter(
                credentials=channel_creds,
                endpoint="https://telemetry.googleapis.com:443/v1/traces",
            )
        )
    )
    trace.set_tracer_provider(tracer_provider)

    logger_provider = LoggerProvider(resource=resource)
    logger_provider.add_log_record_processor(
        BatchLogRecordProcessor(
            OTLPLogExporter(
                credentials=channel_creds,
                endpoint="https://telemetry.googleapis.com:443/v1/logs",
            )
        )
    )
    logs.set_logger_provider(logger_provider)

    reader = PeriodicExportingMetricReader(
        OTLPMetricExporter(
            credentials=channel_creds,
            endpoint="https://telemetry.googleapis.com:443/v1/metrics",
        )
    )
    meter_provider = MeterProvider(metric_readers=[reader], resource=resource)
    metrics.set_meter_provider(meter_provider)

    # Load instrumentors
    SQLite3Instrumentor().instrument()
    GoogleGenAiSdkInstrumentor().instrument()

Trace la chiamata dell'agente AI generativa

Per tracciare l'esecuzione della chiamata dell'agente LangGraph, crea uno span personalizzato attorno alla chiamata dell'agente:

Per visualizzare l'esempio completo, seleziona il logo GitHub nella barra degli strumenti dell'esempio.

# Invoke the agent within a span
with tracer.start_as_current_span("invoke agent"):
    result = agent.invoke({"messages": [prompt]}, config=config)

Potresti voler includere il codice precedente in punti chiave del codice dell'applicazione.

Per scoprire di più sull'aggiunta di intervalli e metriche personalizzati, consulta Aggiungi tracce e metriche personalizzate alla tua app.

Esegui l'esempio

Questo esempio è un agente LangGraph instrumentato con OpenTelemetry per inviare tracce e log con prompt e risposte dell'AI generativa e metriche al tuo progettoGoogle Cloud .

Persona dell'agente LangGraph

L'agente LangGraph è definito come un esperto SQL con accesso completo a un database SQLite temporaneo. L'agente è implementato con l'agente ReAct predefinito di LangGraph e accede al database, che inizialmente è vuoto, utilizzando SQLDatabaseToolkit.

Prima di iniziare

  1. Accedi al tuo account Google Cloud . Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti senza costi per l'esecuzione, il test e il deployment dei workload.
  2. Installa Google Cloud CLI.

  3. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  4. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  5. Crea o seleziona un progetto Google Cloud .

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Crea un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  6. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .

  7. Abilita le API Vertex AI, Service Usage, Telemetry, Cloud Logging, Cloud Monitoring e API Cloud Trace, se non sono già abilitate:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable aiplatform.googleapis.com serviceusage.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
  8. Installa Google Cloud CLI.

  9. Se utilizzi un provider di identità (IdP) esterno, devi prima accedere a gcloud CLI con la tua identità federata.

  10. Per inizializzare gcloud CLI, esegui questo comando:

    gcloud init
  11. Crea o seleziona un progetto Google Cloud .

    Ruoli richiesti per selezionare o creare un progetto

    • Seleziona un progetto: la selezione di un progetto non richiede un ruolo IAM specifico. Puoi selezionare qualsiasi progetto per cui ti è stato concesso un ruolo.
    • Crea un progetto: per creare un progetto, devi disporre del ruolo Autore progetto (roles/resourcemanager.projectCreator), che contiene l'autorizzazione resourcemanager.projects.create. Scopri come concedere i ruoli.
    • Crea un progetto Google Cloud :

      gcloud projects create PROJECT_ID

      Sostituisci PROJECT_ID con un nome per il progetto Google Cloud che stai creando.

    • Seleziona il progetto Google Cloud che hai creato:

      gcloud config set project PROJECT_ID

      Sostituisci PROJECT_ID con il nome del progetto Google Cloud .

  12. Verifica che la fatturazione sia attivata per il tuo progetto Google Cloud .

  13. Abilita le API Vertex AI, Service Usage, Telemetry, Cloud Logging, Cloud Monitoring e API Cloud Trace, se non sono già abilitate:

    Ruoli richiesti per abilitare le API

    Per abilitare le API, devi disporre dell'autorizzazione serviceusage.services.enable. Se hai creato il progetto, probabilmente disponi già di questa autorizzazione tramite il ruolo Proprietario (roles/owner). In caso contrario, puoi ottenere questa autorizzazione tramite il ruolo Amministratore Service Usage (roles/serviceusage.serviceUsageAdmin). Scopri come concedere i ruoli.

    gcloud services enable aiplatform.googleapis.com serviceusage.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
  14. Per ottenere le autorizzazioni necessarie per consentire all'applicazione di esempio di scrivere dati di log, metriche e tracce, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

    Queste autorizzazioni sono sufficienti se esegui l'esempio in Cloud Shell, su risorse Google Cloud o in un ambiente di sviluppo locale.

  15. Assicurati di specificare un progetto di quota. L'API Vertex AI (aiplatform.googleapis.com) richiede la specifica di un progetto di quota. Per saperne di più, consulta Imposta il progetto di quota. Ad esempio, il seguente comando può impostare un progetto di quota.

    gcloud config set billing/quota_project PROJECT_ID

Esegui l'esempio

Per eseguire l'esempio:

  1. In Cloud Shell, clona il repository:

    git clone https://github.com/GoogleCloudPlatform/opentelemetry-samples.git
    
  2. Vai alla directory di esempio:

    cd opentelemetry-samples/python/langgraph-sql-agent
    
  3. Configura le variabili di ambiente:

    # Capture GenAI prompts and responses
    export OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT=true
    # Capture application logs automatically
    export OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED=true
    # Set the location to one that supports gemini-3.5-flash
    export GOOGLE_CLOUD_REGION=global
    

    Se preferisci utilizzare un modello diverso, modifica main.py. Assicurati che il modello supporti la località specificata. Per informazioni sui modelli, consulta Modelli di Google.

  4. Crea un ambiente virtuale ed esegui l'esempio:

    uv run main.py
    

    L'applicazione visualizza un messaggio simile al seguente:

    Starting agent using ephemeral SQLite DB.
    
  5. Per creare un database, inserisci un valore nel prompt Parla con l'agente SQL >>, quindi premi Invio.

    Le azioni intraprese dall'agente vengono quindi visualizzate in Cloud Shell.

    Di seguito sono riportate alcune interazioni di esempio tra un utente e l'applicazione:

    Talk to the SQL agent >> Create a new table to hold weather data.
    👤 User: Create a new table to hold weather data.
    🤖 Agent: Okay, I'll create a table to hold weather data. First, I need to decide on the schema for the table. I'll include columns for date, location, temperature, humidity, and precipitation.
    
    CREATE TABLE weather (
      date DATE,
      location VARCHAR(255),
      temperature REAL,
      humidity REAL,
      precipitation REAL
    );
    
    🤖 Agent: I have created the weather table.
    👤 User: Add altitude to the table.
    🤖 Agent
    
    ALTER TABLE weather ADD COLUMN altitude REAL;
    
    
  6. Per uscire, inserisci Ctrl-C.

Le azioni eseguite dagli agenti di AI generativa non sono deterministiche, quindi potresti visualizzare una risposta diversa per lo stesso prompt.

Visualizza tracce, metriche e log

Questa sezione descrive come visualizzare gli eventi di AI generativa.

Prima di iniziare

Per ottenere le autorizzazioni necessarie per visualizzare i dati di log, metriche e tracce, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Visualizza la telemetria

Per visualizzare gli eventi dell'AI generativa, utilizza la pagina Esplora tracce:

  1. Nella console Google Cloud , vai alla pagina Esplora tracce:

    Vai a Esplora tracce

    Puoi trovare questa pagina anche utilizzando la barra di ricerca.

  2. Nella barra degli strumenti, seleziona Aggiungi filtro, seleziona Nome intervallo, quindi seleziona invoke agent.

    La sezione Esegui l'esempio includeva un'esecuzione di esempio in cui vengono inviati due prompt all'applicazione. Di seguito è riportata la pagina Esplora tracce dopo aver filtrato i dati:

    Visualizzazione degli intervalli di traccia.

    Se non hai mai utilizzato Cloud Trace, Google Cloud Observability deve creare un database per archiviare i dati di traccia. La creazione del database può richiedere alcuni minuti e, durante questo periodo, non sono disponibili dati di traccia da visualizzare.

  3. Per esplorare i dati di intervalli e log, seleziona un intervallo nella tabella Intervalli.

    Viene visualizzata la pagina Dettagli. In questa pagina vengono visualizzati la traccia associata e i relativi intervalli. La tabella nella pagina mostra informazioni dettagliate sull'intervallo selezionato. Queste informazioni includono:

    • La scheda Input/Output mostra gli eventi per gli agenti AI generativa. Per scoprire di più su questi eventi, consulta Visualizza gli eventi di AI generativa.

      Lo screenshot seguente mostra una traccia in cui uno span ha il nome invoke_agent. Questo intervallo richiama Gemini. L'intervallo di Gemini include eventi di AI generativa:

      Visualizzazione degli eventi di AI generativa.

    • La scheda Log ed eventi elenca le voci di log e gli eventi associati allo span. Se vuoi visualizzare i dati di log in Esplora log, seleziona Visualizza log nella barra degli strumenti di questa scheda.

      I dati di log includono la risposta dell'agente LangGraph. Ad esempio, per l'esecuzione di esempio, il payload JSON include i seguenti contenuti:

      {
        logName: "projects/my-project/logs/otel_python_inprocess_log_name_temp"
        jsonPayload: {
          message: {
            role: "model"
            content: [
              0: {
                text: "Okay, I'll create a table to hold weather data. First, I need to decide on the schema for the table. I'll include columns for date, location, temperature, humidity, and precipitation.
      
                CREATE TABLE weather (
                    date DATE,
                    location VARCHAR(255),
                    temperature REAL,
                    humidity REAL,
                    precipitation REAL
                );
                "
              }
            ]
          }
        index: 0
        }
      ...
      }
      

L'esempio è instrumentato per inviare i dati delle metriche al tuo progetto Google Cloud , ma non genera alcuna metrica.