Instrumentare un agente LangGraph ReAct con OpenTelemetry

Questo documento illustra i passaggi per eseguire l'instrumentazione di un agente ReAct di LangGraph con OpenTelemetry, in modo da consentire la raccolta della telemetria dall'agente. I prompt dell'utente, le risposte e le scelte dell'agente sono inclusi nella telemetria come attributi associati agli span. Le risposte dell'agente sono incluse anche 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.

Instrumenta l'applicazione di AI generativa per raccogliere la telemetria

Per eseguire l'instrumentazione dell'applicazione di AI generativa in modo da raccogliere dati su log, metriche e tracce:

  1. Installare i pacchetti OpenTelemetry
  2. Configurare OpenTelemetry per raccogliere e inviare la telemetria
  3. Tracciare l'invocazione dell'agente di AI generativa

Installa i pacchetti OpenTelemetry

Aggiungi i seguenti pacchetti di esportazione e strumenti OpenTelemetry:

pip install 'opentelemetry-instrumentation-vertexai>=2.0b0' \
  'opentelemetry-instrumentation-sqlite' \
  'opentelemetry-exporter-gcp-logging' \
  'opentelemetry-exporter-gcp-monitoring' \
  'opentelemetry-exporter-otlp-proto-grpc'

I dati di log e delle metriche vengono inviati al tuo Google Cloud progetto utilizzando l'API Cloud Logging o l'API Cloud Monitoring. Le librerie opentelemetry-exporter-gcp-logging e opentelemetry-exporter-gcp-monitoring invocano gli endpoint in queste API.

I dati di Trace vengono inviati a Google Cloud utilizzando l'API Telemetry (OTLP), che supporta il formato OTLP. I dati ricevuti tramite questo endpoint vengono archiviati anche nel formato OTLP. La libreria opentelemetry-exporter-otlp-proto-grpc invoca l'endpoint API Telemetry (OTLP).

Configurare OpenTelemetry per raccogliere e inviare la telemetria

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

Per visualizzare l'esempio completo, fai clic su Altro, quindi seleziona Visualizza su GitHub.

def setup_opentelemetry() -> None:
    credentials, project_id = google.auth.default()
    resource = Resource.create(
        attributes={
            SERVICE_NAME: "langgraph-sql-agent",
            # The project to send spans to
            "gcp.project_id": project_id,
        }
    )

    # 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(CloudLoggingExporter())
    )
    logs.set_logger_provider(logger_provider)

    event_logger_provider = EventLoggerProvider(logger_provider)
    events.set_event_logger_provider(event_logger_provider)

    reader = PeriodicExportingMetricReader(CloudMonitoringMetricsExporter())
    meter_provider = MeterProvider(metric_readers=[reader], resource=resource)
    metrics.set_meter_provider(meter_provider)

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

Trace l'invocazione dell'agente di AI generativa

Per monitorare l'esecuzione dell'invocazione dell'agente LangGraph, crea uno spazio personalizzato attorno all'invocazione dell'agente:

Per visualizzare l'esempio completo, fai clic su Altro, quindi seleziona Visualizza su GitHub.

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

Ti consigliamo di includere il codice precedente in punti chiave del codice dell'applicazione.

Per scoprire di più sull'aggiunta di intervalli e metriche personalizzate, consulta Aggiungere tracce e metriche personalizzate all'app.

Esegui il sample

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

Persona dell'agente LangGraph

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

Prima di iniziare

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Enable the Vertex AI, Telemetry, Cloud Logging, Cloud Monitoring, and Cloud Trace APIs:

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

Esegui sample

Per eseguire il sample:

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Clona il repository:

    git clone https://github.com/GoogleCloudPlatform/opentelemetry-operations-python.git
    
  3. Vai alla directory di esempio:

    cd opentelemetry-operations-python/samples/langgraph-sql-agent
    
  4. 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
    
  5. Crea un ambiente virtuale ed esegui il sample:

    python -m venv venv/
    source venv/bin/activate
    pip install -r requirements.txt
    python main.py
    

    L'applicazione mostra un messaggio simile al seguente:

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

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

    Di seguito sono riportate 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: I need to know what columns the table should have. What information about the weather do you want to store? For example, I could include columns for date, location, temperature, humidity, and precipitation.
    
    Talk to the SQL agent >> Create a new table to hold weather data. Include date, location, temperature, humidity, and precipitation.
    👤 User: Create a new table to hold weather data. Include date, location, temperature, humidity, and precipitation.
    🤖 Agent
    
    CREATE TABLE weather (
      date DATE,
      location VARCHAR(255),
      temperature REAL,
      humidity REAL,
      precipitation REAL
    );
    
    
  7. Per uscire, inserisci Ctrl-C.

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

Visualizza le tracce, le metriche e i 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 traccia, 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 di AI generativa, utilizza la pagina Esplora tracce:

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

    Vai a Trace Explorer

    Puoi trovare questa pagina anche utilizzando la barra di ricerca.

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

    La sezione Esegui sample include un'esecuzione di esempio in cui vengono inviati due prompt all'applicazione. Di seguito è illustrata 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 delle tracce. La creazione del database può richiedere alcuni minuti e durante questo periodo non è possibile visualizzare i dati delle tracce.

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

    Viene visualizzata la pagina Dettagli. Questa pagina mostra la traccia associata e i relativi span. La tabella nella pagina mostra informazioni dettagliate per l'intervallo selezionato. Queste informazioni includono:

    • La scheda GenAI mostra gli eventi per gli agenti di AI generativa. Per scoprire di più su questi eventi, consulta Visualizzare 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 Gemini include gli eventi di AI generativa:

      Visualizzazione di eventi di AI generativa.

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

      I dati dei 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: {
          finish_reason: "stop"
          message: {
            role: "model"
            content: [
              0: {
                text: "I need to know what columns the table should have. What information about the weather do you want to store? For example, I could include columns for date, location, temperature, humidity, and precipitation."
              }
            ]
          }
        index: 0
        }
      ...
      }
      

L'attuale sample è strumentato per inviare dati metrici al tuo Google Cloud progetto, ma non genera metriche.