ADK-Anwendungen mit OpenTelemetry instrumentieren

In diesem Dokument wird erläutert, wie Sie einen KI-Agenten instrumentieren, der mit dem Agent Development Kit (ADK) Framework erstellt wurde. Das ADK-Framework umfasst OpenTelemetry-Instrumentierung, die Telemetriedaten von den wichtigsten Aktionen des Agenten erfasst. Wenn Sie die integrierte Instrumentierung aktivieren, werden Informationen wie Textprompts und Agentenantworten an Ihr Google Cloud Projekt gesendet. In diesem Dokument werden die erforderlichen Änderungen beschrieben und ein Link zu einer Beispielanwendung bereitgestellt.

Anwendungen, die ADK 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.

Die standardmäßige Beobachtbarkeit von ADK reicht möglicherweise nicht für den Anwendungsfall Ihrer Anwendung aus. Sie können zusätzliche Instrumentierungsbibliotheken mit OpenTelemetry hinzufügen, um Telemetriedaten aus anderen Teilen Ihrer App zu erfassen, oder Ihre eigene benutzerdefinierte Instrumentierung verwenden, um anwendungsspezifische Daten zu erfassen und so eine detailliertere Beobachtbarkeit zu erhalten. In Ihrer Anwendung können Sie beispielsweise Instrumentierungscode schreiben, um:

  • den Ressourcenverbrauch von von Agenten aufgerufenen Tools zu verfolgen.
  • anwendungsspezifische Validierungsfehler, Verstöße gegen Geschäftsregeln oder benutzerdefinierte Mechanismen zur Fehlerbehebung zu verfolgen.
  • Qualitätsbewertungen für Agentenantworten basierend auf Ihren domainspezifischen Kriterien zu verfolgen.

Generative KI-Anwendung für die Erfassung von Telemetriedaten instrumentieren

So instrumentieren Sie Ihren KI-Agenten, um Log-, Messwert- und Tracedaten zu erfassen:

  1. OpenTelemetry-Pakete installieren.
  2. ADK-Umgebung konfigurieren.

Im Rest dieses Abschnitts werden die vorherigen Schritte beschrieben.

OpenTelemetry-Pakete installieren

Fügen Sie die folgenden OpenTelemetry-Instrumentierungen und ‑Exporterpakete hinzu:

uv add 'google-adk>=1.17.0' \
  'opentelemetry-instrumentation-google-genai>=0.4b0' \
  'opentelemetry-instrumentation-sqlite3' \
  'opentelemetry-exporter-gcp-logging' \
  'opentelemetry-exporter-otlp-proto-grpc' \
  'opentelemetry-instrumentation-vertexai>=2.0b0'

Logdaten werden über die Cloud Logging API oder die Cloud Monitoring API an Ihr Google Cloud Projekt gesendet. Die opentelemetry-exporter-gcp-logging Bibliothek ruft Endpunkte in der Cloud Logging API auf.

Messwertdaten werden nicht erfasst. In der Regel enthalten Anwendungen, die keine Collector-basierte Lösung verwenden, die opentelemetry-exporter-gcp-monitoring Bibliothek. Diese Bibliothek ruft Endpunkte in der Cloud Monitoring API auf.

Tracedaten werden über die Telemetry (OTLP) API angesendet Google Cloud , die das OpenTelemetry Protocol 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 Protocol 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.

ADK-Umgebung konfigurieren

Die ADK-Framework-Versionen 1.17.0 und höher bieten integrierte Unterstützung für OpenTelemetry und das Senden von OpenTelemetry-Telemetriedaten an Google Cloud Observability. Konfigurieren Sie dazu Ihre ADK-Umgebung:

  • Wenn Sie Ihre Anwendung mit dem Befehl adk web ausführen, fügen Sie das Flag --otel_to_cloud hinzu.

  • Legen Sie in der Datei opentelemetry.env die folgenden Umgebungsvariablen fest:

    OTEL_SERVICE_NAME='adk-sql-agent'
    OTEL_PYTHON_LOGGING_AUTO_INSTRUMENTATION_ENABLED='true'
    
  • Konfigurieren Sie OpenTelemetry so, dass die neuesten semantischen Konventionen für generative KI verwendet werden.

    OTEL_SEMCONV_STABILITY_OPT_IN='gen_ai_latest_experimental'
    
  • Konfigurieren Sie OpenTelemetry so, dass Nachrichten als Ereignisse angehängt werden.

    OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT='EVENT_ONLY'
    

    Weitere Informationen zu zulässigen aufgezählten Werten finden Sie unter genai/types.py.

  • Wir empfehlen, der Datei opentelemetry.env auch die folgende Umgebungsvariable hinzuzufügen:

    ADK_CAPTURE_MESSAGE_CONTENT_IN_SPANS='false'
    

    Diese Umgebungsvariable hat folgende Auswirkungen:

    • Verhindert, dass die ADK-Instrumentierung Span-Attribute anhängt, die das Größenlimit für Attribute überschreiten.
    • Verhindert, dass personenidentifizierbare Informationen (PII) als Attribute an Spans angehängt werden.
  • Möglicherweise müssen Sie weitere Umgebungsvariablen festlegen. Wenn Sie beispielsweise in der Gemini Enterprise Agent Platformbereitstellen, sollten Sie auch die folgende Umgebungsvariable festlegen:

    GOOGLE_CLOUD_AGENT_ENGINE_ENABLE_TELEMETRY='true'
    

Beispielanwendung herunterladen und ausführen

Dieser Beispielcode implementiert einen generativen KI-Agenten, der mit ADK erstellt wurde. Der Agent ist mit OpenTelemetry instrumentiert und so konfiguriert, dass Messwerte, Traces und Logs an Ihr Google Cloud Projekt gesendet werden. Die an Ihr Projekt gesendeten Telemetriedaten enthalten Prompts und Antworten der generativen KI.

ADK-Agentenpersona

Der generative KI-Agent ist als SQL-Experte definiert, der vollen Zugriff auf eine temporäre SQLite-Datenbank hat. Der Agent wird mit dem Agent Development Kit erstellt und greift mit dem SQLDatabaseToolkit auf eine Datenbank zu. Die Datenbank ist anfangs leer.

Hinweis

  1. Melden Sie sich in Ihrem Google Cloud Konto an. Wenn Sie noch kein Konto haben Google Cloud, erstellen Sie eines, um zu sehen, wie sich unsere Produkte in realen Szenarien schlagen. 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 Projekt aus.

    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. Informationen zum Zuweisen von Rollen.
    • Google Cloud Projekt erstellen:

      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 Projekt aktiviert ist.

  7. Aktivieren Sie die Vertex AI, Service Usage, 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 Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen.

    gcloud services enable aiplatform.googleapis.com serviceusage.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 Projekt aus.

    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. Informationen zum Zuweisen von Rollen.
    • Google Cloud Projekt erstellen:

      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 Projekt aktiviert ist.

  13. Aktivieren Sie die Vertex AI, Service Usage, 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 Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Informationen zum Zuweisen von Rollen.

    gcloud services enable aiplatform.googleapis.com serviceusage.googleapis.com telemetry.googleapis.com logging.googleapis.com monitoring.googleapis.com cloudtrace.googleapis.com
  14. Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen, um die Berechtigungen zu erhalten, die Sie benötigen, damit die Beispielanwendung Log-, Messwert- und Tracedaten schreiben kann: bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen für Ihr Projekt zuzuweisen:

    Diese Berechtigungen reichen aus, wenn Sie das Beispiel in der Cloud Shell, auf Google Cloud Ressourcen oder in einer lokalen Entwicklungsumgebung ausführen.

  15. Achten Sie darauf, dass Sie ein Kontingentprojekt angeben. Für die Vertex AI API (aiplatform.googleapis.com) muss ein Kontingentprojekt angegeben werden. Weitere Informationen finden Sie unter Kontingentprojekt festlegen. Mit dem folgenden Befehl kann beispielsweise ein Kontingentprojekt festgelegt werden.

    gcloud config set billing/quota_project PROJECT_ID

Anwendung starten

So starten Sie die Beispielanwendung:

  1. Klonen Sie in Cloud Shell das Repository:

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

    cd opentelemetry-samples/python/adk-sql-agent
    

    Das Beispiel enthält eine .env-Datei, in der zwei Umgebungsvariablen festgelegt sind. Eine Variable steuert, welche Endpunkte das SDK verwendet. Die andere Variable legt einen Standort fest.

    Wenn Sie ein anderes Modell verwenden möchten, bearbeiten Sie main.py. Achten Sie darauf, dass das ausgewählte Modell den in der .env-Datei angegebenen Standort unterstützt. Informationen zu Modellen finden Sie unter Google-Modelle.

  3. Erstellen Sie eine virtuelle Umgebung und führen Sie das Beispiel aus:

    uv run --env-file opentelemetry.env adk web --otel_to_cloud
    

    Die Anwendung zeigt eine Meldung ähnlich der folgenden an:

    Appplication startup complete
    Uvicorn running on http://127.0.0.1:8080
    
  4. Wenn Sie mit dem Agenten interagieren möchten, wählen Sie die URL aus, die in der Ausgabe des vorherigen Schritts angezeigt wird.

  5. Maximieren Sie Select an app (App auswählen) und wählen Sie sql_agent aus der Liste der Agenten aus.

Mit dem Agenten interagieren

Wenn Sie mit dem Agenten interagieren möchten, stellen Sie ihm eine Frage oder geben Sie ihm einen Befehl. Sie können beispielsweise Folgendes fragen:

What can you do for me ?

Da der sql_agent die Persona eines SQL-Experten hat, können Sie ihn auch bitten, Tabellen für Ihre Anwendungen zu erstellen und Abfragen zu schreiben, um mit den erstellten Tabellen zu arbeiten. Der Agent kann nur eine temporäre Datenbank erstellen, die durch eine .db-Datei gesichert wird, die auf dem Computer erstellt wird, auf dem die Anwendung ausgeführt wird.

Das folgende Beispiel zeigt eine Interaktion zwischen dem sql_agent und dem Nutzer:

Anzeige der Interaktion mit dem sql_agent.

Die Aktionen von generativen KI-Agenten sind nicht deterministisch. Daher kann es sein, dass Sie für denselben Prompt eine andere Antwort erhalten.

Anwendung schließen

Geben Sie in der Shell, mit der Sie die Anwendung gestartet haben, Ctrl-C ein, um die Anwendung zu beenden.

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

Auf der Seite Trace Explorer können Sie die von der Anwendung erstellten Ereignisse der generativen KI ansehen:

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

    Trace Explorer aufrufen

    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 wählen Sie dann call_llm aus.

    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 die 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 generative KI-Agenten angezeigt. Weitere Informationen zu diesen Ereignissen finden Sie unter Ereignisse der generativen KI ansehen.

      Die folgende Abbildung zeigt einen Trace, in dem ein Span den Namen call_llm hat. Dieser Span ruft das LLM (Large Language Model) auf, das diesen Agenten unterstützt. In diesem Beispiel ist es Gemini. Der Gemini-Span enthält Ereignisse der generativen KI:

      Anzeige von Veranstaltungen zu generativer KI.

    • Auf dem Tab Logs &Ereignisse sind 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 sql_agent. 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": {
          "content": {
            "parts": [
              0: {
                "text": "Now I can create the table."
              }
              1: {1}
              ],
            "role": "model"
          }
        },
        ...
      }
      

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