LangGraph ReAct-Agent mit OpenTelemetry instrumentieren

In diesem Dokument werden die Schritte zum Instrumentieren eines LangGraph ReAct-Agents mit OpenTelemetry beschrieben, um Telemetriedaten vom Agenten zu erfassen. Nutzerprompts und Agent-Antworten und -Auswahlen sind in den Telemetriedaten als Attribute enthalten, die an Spans angehängt sind. Agent-Antworten sind auch in den Logeinträgen enthalten, die mit Spans korreliert sind, die Ereignisse der generativen KI enthalten. Die Anleitung in diesem Dokument gilt, wenn der Agent ChatVertexAI von Langchain verwendet, um ein Gemini-Modell aufzurufen.

Anwendungen, die einen LangGraph ReAct-Agenten verwenden, können auch multimodale Prompts und Antworten erfassen. In diesem Dokument wird beschrieben, wie Sie Textprompts und -antworten erfassen. Wenn Sie multimodale Daten erfassen möchten, ist eine zusätzliche Konfiguration erforderlich. Weitere Informationen finden Sie unter Multimodale Prompts und Antworten erfassen und ansehen.

Anwendung für generative KI instrumentieren, um Telemetriedaten zu erfassen

So instrumentieren Sie Ihre Anwendung für generative KI, um Log-, Messwert- und Tracedaten zu erfassen:

  1. OpenTelemetry-Pakete installieren
  2. OpenTelemetry so konfigurieren, dass Telemetriedaten erfasst und gesendet werden
  3. Aufruf des Agents für generative KI verfolgen

OpenTelemetry-Pakete installieren

Fügen Sie die folgenden OpenTelemetry-Instrumentierungs- und Exportpakete hinzu:

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

Log- und Messwertdaten werden mit der Cloud Logging API oder der Cloud Monitoring API an Ihr Google Cloud Projektgesendet. Die opentelemetry-exporter-gcp-logging und opentelemetry-exporter-gcp-monitoring Bibliotheken rufen Endpunkte in diesen APIs auf.

Tracedaten werden an Google Cloud mit der Telemetry (OTLP) API gesendet, die das OpenTelemetry OTLP-Protokoll implementiert. Die opentelemetry-exporter-otlp-proto-grpc Bibliothek ruft den Telemetry (OTLP) API-Endpunkt auf.

Ihre Tracedaten werden in einem Format gespeichert, das im Allgemeinen mit den Protobuf-Dateien übereinstimmt, die vom OpenTelemetry OTLP-Protokoll definiert werden. Felder können jedoch vor der Speicherung von einem OpenTelemetry-spezifischen Datentyp in einen JSON-Datentyp konvertiert werden. Weitere Informationen zum Speicherformat finden Sie unter Schema für Tracedaten.

OpenTelemetry so konfigurieren, dass Telemetriedaten erfasst und gesendet werden

Konfigurieren Sie im Initialisierungscode Ihres LangGraph-Agents OpenTelemetry so, dass Telemetriedaten erfasst und an Ihr Google Cloud Projektgesendet werden:

Wenn Sie das vollständige Beispiel sehen möchten, klicken Sie auf Mehr, und wählen Sie dann Auf GitHub ansehen aus.

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()

Aufruf des Agents für generative KI verfolgen

Wenn Sie die Ausführung des LangGraph-Agent-Aufrufs verfolgen möchten, erstellen Sie einen benutzerdefinierten Span um den Agent-Aufruf:

Wenn Sie das vollständige Beispiel sehen möchten, klicken Sie auf Mehr, und wählen Sie dann Auf GitHub ansehen aus.

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

Sie können den vorherigen Code an wichtigen Stellen in Ihrem Anwendungscode einfügen.

Weitere Informationen zum Hinzufügen benutzerdefinierter Spans und Messwerte finden Sie unter Benutzerdefinierte Traces und Messwerte in Ihre Anwendung hinzufügen.

Beispiel ausführen

Dieses Beispiel ist ein LangGraph-Agent, der mit OpenTelemetry instrumentiert wurde, um Traces und Logs mit Prompts und Antworten der generativen KI sowie Messwerte an Ihr Google Cloud Projekt zu senden.

LangGraph-Agent-Persona

Der LangGraph-Agent ist als SQL-Experte definiert, der uneingeschränkten Zugriff auf eine kurzlebige SQLite-Datenbank hat. Der Agent wird mit dem vorgefertigten ReAct-Agent von LangGraph implementiert und greift mit dem SQLDatabaseToolkit auf die Datenbank zu, die anfangs leer ist.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Kontoan. Wenn Sie noch kein Konto bei Google Cloudhaben, erstellen Sie ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis zu sehen und zu bewerten. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. Installieren Sie die Google Cloud CLI.

  3. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  4. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  5. Erstellen oder wählen Sie ein Google Cloud Projektaus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können ein beliebiges Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die resourcemanager.projects.create Berechtigung enthält. Rollen zuweisen.
    • Projekt erstellen: Google Cloud

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud Projekt, das Sie erstellen.

    • Wählen Sie das Google Cloud Projekt aus, das Sie erstellt haben:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud Projekts.

  6. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projektaktiviert ist.

  7. Aktivieren Sie die Vertex AI, Telemetry, Cloud Logging, Cloud Monitoring und Cloud Trace APIs:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Rollen zuweisen.

    gcloud services enable aiplatform.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
  8. Installieren Sie die Google Cloud CLI.

  9. Wenn Sie einen externen Identitätsanbieter (IdP) verwenden, müssen Sie sich zuerst mit Ihrer föderierten Identität in der gcloud CLI anmelden.

  10. Führen Sie den folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  11. Erstellen oder wählen Sie ein Google Cloud Projektaus.

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können ein beliebiges Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die resourcemanager.projects.create Berechtigung enthält. Rollen zuweisen.
    • Projekt erstellen: Google Cloud

      gcloud projects create PROJECT_ID

      Ersetzen Sie PROJECT_ID durch einen Namen für das Google Cloud Projekt, das Sie erstellen.

    • Wählen Sie das Google Cloud Projekt aus, das Sie erstellt haben:

      gcloud config set project PROJECT_ID

      Ersetzen Sie PROJECT_ID durch den Namen Ihres Google Cloud Projekts.

  12. Prüfen Sie, ob die Abrechnung für Ihr Google Cloud Projektaktiviert ist.

  13. Aktivieren Sie die Vertex AI, Telemetry, Cloud Logging, Cloud Monitoring und Cloud Trace APIs:

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die IAM-Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin), die die Berechtigung serviceusage.services.enable enthält. Rollen zuweisen.

    gcloud services enable aiplatform.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
  14. Wenn Sie das Beispiel in Cloud Shell, auf Google Cloud Ressourcen oder in einer lokalen Entwicklungsumgebung ausführen, reichen die in diesem Abschnitt aufgeführten Berechtigungen aus. Bei Produktionsanwendungen stellt in der Regel ein Dienstkonto die Anmeldedaten zum Schreiben von Log-, Messwert- und Tracedaten bereit.

    Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die für die Beispielanwendung zum Schreiben von Log-, Messwert- und Tracedaten erforderlich sind:

Beispiel ausführen

So führen Sie das Beispiel aus:

  1. Geben Sie in Cloud Shell den folgenden Befehl ein:

    git clone https://github.com/GoogleCloudPlatform/opentelemetry-operations-python.git
    
  2. Gehen Sie zum Beispielverzeichnis:

    cd opentelemetry-operations-python/samples/langgraph-sql-agent
    
  3. Konfigurieren Sie Umgebungsvariablen:

    # 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
    
  4. Erstellen Sie eine virtuelle Umgebung und führen Sie das Beispiel aus:

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

    Die Anwendung zeigt eine Meldung ähnlich der folgenden an:

    Starting agent using ephemeral SQLite DB.
    
  5. Wenn Sie eine Datenbank erstellen möchten, geben Sie einen Wert bei der Eingabeaufforderung Talk to the SQL agent >> ein und drücken Sie die Eingabetaste.

    Die vom Agenten ausgeführten Aktionen werden dann in Cloud Shell angezeigt.

    Das folgende Beispiel veranschaulicht die Interaktionen zwischen einem Nutzer und der Anwendung:

    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. Zum Beenden geben Sie Ctrl-C ein.

Die von Agents für generative KI ausgeführten Aktionen sind nicht deterministisch. Daher kann es sein, dass Sie für denselben Prompt eine andere Antwort erhalten.

Traces, Messwerte und Logs ansehen

In diesem Abschnitt wird beschrieben, wie Sie Ereignisse der generativen KI ansehen können.

Hinweis

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Aufrufen Ihrer Log-, Messwert- und Tracedaten benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Telemetriedaten ansehen

Verwenden Sie die Seite Trace Explorer, um die Ereignisse der generativen KI anzusehen:

  1. Rufen Sie in der Google Cloud Console die Seite Trace Explorer auf:

    Zum Trace Explorer

    Sie können diese Seite auch über die Suchleiste finden.

  2. Wählen Sie in der Symbolleiste Filter hinzufügen aus, wählen Sie Span-Name aus und dann wählen Sie invoke agent aus.

    Im Abschnitt Beispiel ausführen wurde eine Beispielausführung beschrieben, bei der zwei Prompts an die Anwendung gesendet werden. Die folgende Abbildung zeigt die Seite Trace Explorer nach dem Filtern der Daten:

    Anzeige von Trace-Spans.

    Wenn Sie Cloud Trace noch nie verwendet haben, muss Google Cloud Observability eine Datenbank erstellen, um Ihre Tracedaten zu speichern. Das Erstellen der Datenbank kann einige Minuten dauern. In dieser Zeit sind keine Tracedaten verfügbar.

  3. Wählen Sie in der Tabelle Spans einen Span aus, um Ihre Span- und Logdaten zu untersuchen.

    Die Seite Details wird geöffnet. Auf dieser Seite werden der zugehörige Trace und seine Spans angezeigt. Die Tabelle auf der Seite enthält detaillierte Informationen zum ausgewählten Span. Dazu gehören:

    • Auf dem Tab Ein-/Ausgaben werden Ereignisse für Agents für generative KI angezeigt. Weitere Informationen zu diesen Ereignissen finden Sie unter Ereignisse der generativen KI ansehen.

      Der folgende Screenshot zeigt einen Trace, in dem ein Span den Namen invoke_agent hat. Dieser Span ruft Gemini auf. Der Gemini-Span enthält Ereignisse der generativen KI:

      Anzeige von Ereignissen im Zusammenhang mit generativer KI.

    • Auf dem Tab Logs und Ereignisse werden Logeinträge und Ereignisse aufgeführt, die mit dem Span verknüpft sind. Wenn Sie die Logdaten im Log-Explorer ansehen möchten, wählen Sie in der Symbolleiste dieses Tabs Logs ansehen aus.

      Die Logdaten enthalten die Antwort des LangGraph-Agents. Für die Beispielausführung enthält die JSON-Nutzlast beispielsweise die folgenden Inhalte:

      {
        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
        }
      ...
      }
      

Das Beispiel ist so instrumentiert, dass Messwertdaten an Ihr Google Cloud Projektgesendet werden, aber es werden keine Messwerte generiert.