Google Chat-App mit einem Agent2Agent-Agent erstellen

Auf dieser Seite wird beschrieben, wie Sie ein Google Workspace-Add-on erstellen, das in Google Chat funktioniert und mit einem KI-Agenten interagiert, der das Agent2Agent-Protokoll (A2A) verwendet. Sie entwickeln den Agenten mit dem Agent Development Kit (ADK) und hosten ihn in der Vertex AI Agent Engine.

KI-Agenten nehmen ihre Umgebung autonom wahr, ziehen Schlussfolgerungen und führen komplexe, mehrstufige Aktionen aus, um ein definiertes Ziel zu erreichen. In dieser Anleitung stellen Sie das LLM Auditor-Beispiel mit mehreren Agenten bereit, das Fakten mithilfe von Gemini und Google Suche-Fundierung kritisiert und überarbeitet.

Beispiel für ein System mit mehreren Agenten für LLM Auditor als Chat-App.

Das folgende Diagramm zeigt die Architektur und das Messaging-Muster:

Architektur einer Chat-App, die mit einem A2A-KI-Agenten implementiert wurde.

Im Diagramm wird der Informationsfluss bei der Interaktion eines Nutzers mit einer Chat-App, die mit einem A2A-Agenten implementiert wurde, so dargestellt:

  1. Ein Nutzer sendet eine Nachricht an eine Chat-App, entweder als Direktnachricht oder in einem Chat-Bereich.
  2. Die in Apps Script oder als Webserver mit HTTP-Endpunkten implementierte Chat-App-Logik empfängt und verarbeitet die Nachricht.
  3. Der A2A-Agent, der mit Vertex AI Agent Engine gehostet wird, empfängt und verarbeitet die Interaktion.
  4. Optional kann die Chat-App oder der KI-Agent in Google Workspace-Dienste wie Google Kalender oder Google Tabellen oder in andere Google-Dienste wie Google Maps oder YouTube eingebunden werden.
  5. Die Chat-App sendet Antworten asynchron und verwendet die Google Chat API, um den Fortschritt des KI-Agents zu kommunizieren.
  6. Die Antworten werden an den Nutzer gesendet.

Ziele

  • die Umgebung einrichten
  • Stellen Sie den A2A-Agenten bereit.
  • Stellen Sie die Chat App bereit.
  • Konfigurieren Sie die Chat App.
  • Chat App testen

Vorbereitung

Umgebung einrichten

Google Cloud APIs aktivieren

Bevor Sie Google APIs verwenden können, müssen Sie sie in einem Google Cloud-Projekt aktivieren. Sie können eine oder mehrere APIs in einem einzelnen Google Cloud-Projekt aktivieren.
  • Aktivieren Sie in der Google Cloud Console die Google Chat API, die Vertex AI API und die Cloud Resource Manager API.

    APIs aktivieren

OAuth-Zustimmungsbildschirm konfigurieren

Für alle Apps, die OAuth 2.0 verwenden, ist eine Konfiguration des Zustimmungsbildschirms erforderlich. Wenn Sie den OAuth-Zustimmungsbildschirm Ihrer App konfigurieren, legen Sie fest, was Nutzern und App-Prüfern angezeigt wird. Außerdem wird Ihre App registriert, damit Sie sie später veröffentlichen können.

  1. Rufen Sie in der Google Cloud Console das Menü  > Google Auth platform > Branding auf.

    Zum Branding

  2. Wenn Sie die Google Auth platformbereits konfiguriert haben, können Sie die folgenden Einstellungen für den OAuth-Zustimmungsbildschirm unter Branding, Zielgruppe und Datenzugriff konfigurieren. Wenn Sie die Meldung Google Auth platform noch nicht konfiguriert sehen, klicken Sie auf Jetzt starten:
    1. Geben Sie unter App-Informationen im Feld App-Name einen Namen für die App ein.
    2. Wählen Sie unter E-Mail-Adresse des Nutzersupports eine Support-E-Mail-Adresse aus, über die Nutzer Sie mit Fragen zu ihrer Einwilligung kontaktieren können.
    3. Klicken Sie auf Weiter.
    4. Wählen Sie unter Zielgruppe die Option Intern aus.
    5. Klicken Sie auf Weiter.
    6. Geben Sie unter Kontaktdaten eine E-Mail-Adresse ein, unter der Sie über Änderungen an Ihrem Projekt benachrichtigt werden können.
    7. Klicken Sie auf Weiter.
    8. Sehen Sie sich unter Abschließen die Nutzerdatenrichtlinie für Google API-Dienste an. Wenn Sie damit einverstanden sind, wählen Sie Ich stimme der Nutzerdatenrichtlinie für Google API-Dienste zu aus.
    9. Klicken Sie auf Weiter.
    10. Klicken Sie auf Erstellen.
  3. Sie können das Hinzufügen von Bereichen vorerst überspringen. Wenn Sie in Zukunft eine App für die Verwendung außerhalb Ihrer Google Workspace-Organisation erstellen, müssen Sie den Nutzertyp in Extern ändern. Fügen Sie dann die Autorisierungsbereiche hinzu, die für Ihre App erforderlich sind. Weitere Informationen finden Sie in der vollständigen Anleitung OAuth-Zustimmung konfigurieren.

Dienstkonto in der Google Cloud Console erstellen

Erstellen Sie ein neues Dienstkonto mit der Rolle Vertex AI User. Gehen Sie dazu so vor:

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console das Menü  > IAM & Verwaltung > Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Klicken Sie auf Dienstkonto erstellen.
  3. Geben Sie die Dienstkontodetails ein und klicken Sie dann auf Erstellen und fortfahren.
  4. Optional: Weisen Sie Ihrem Dienstkonto Rollen zu, um Zugriff auf die Ressourcen Ihres Google Cloud-Projekts zu gewähren. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.
  5. Klicken Sie auf Weiter.
  6. Optional: Geben Sie Nutzer oder Gruppen ein, die dieses Dienstkonto verwalten und Aktionen damit ausführen können. Weitere Informationen finden Sie unter Identitätswechsel von Dienstkonten verwalten.
  7. Klicken Sie auf Fertig. Notieren Sie sich die E-Mail-Adresse des Dienstkontos.

gcloud-CLI

  1. Erstellen Sie das Dienstkonto:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Optional: Weisen Sie Ihrem Dienstkonto Rollen zu, um Zugriff auf die Ressourcen Ihres Google Cloud-Projekts zu gewähren. Weitere Informationen finden Sie unter Zugriff auf Ressourcen erteilen, ändern und entziehen.

Das Dienstkonto wird auf der Seite mit den Dienstkonten angezeigt.

Privaten Schlüssel erstellen

So erstellen und laden Sie einen privaten Schlüssel für das Dienstkonto herunter:

  1. Rufen Sie in der Google Cloud Console das Menü  > IAM & Verwaltung > Dienstkonten auf.

    Zur Seite „Dienstkonten“

  2. Wählen Sie Ihr Dienstkonto aus.
  3. Klicken Sie auf Schlüssel > Schlüssel hinzufügen > Neuen Schlüssel erstellen.
  4. Wählen Sie JSON aus und klicken Sie auf Erstellen.

    Ihr neues öffentliches/privates Schlüsselpaar wird generiert und als neue Datei auf Ihren Computer heruntergeladen. Speichern Sie die heruntergeladene JSON-Datei als credentials.json in Ihrem Arbeitsverzeichnis. Diese Datei ist die einzige Kopie dieses Schlüssels. Informationen dazu, wie Sie den Schlüssel sicher speichern, finden Sie unter Dienstkontoschlüssel verwalten.

  5. Klicken Sie auf Schließen.

Weitere Informationen zu Dienstkonten finden Sie in der IAM-Dokumentation zu Dienstkonten.

A2A-Agenten bereitstellen

  1. Falls noch nicht geschehen, authentifizieren Sie sich mit Ihrem Google Cloud-Konto und konfigurieren Sie die Google Cloud CLI für die Verwendung Ihres Google Cloud-Projekts.

    gcloud auth application-default login
    gcloud config set project PROJECT_ID
    gcloud auth application-default set-quota-project PROJECT_ID

    Ersetzen Sie PROJECT_ID durch die ID Ihres Cloud-Projekts.

  2. Laden Sie das GitHub-Repository mit ADK-Beispielen über diese Schaltfläche herunter:

    ADK-Beispiele herunterladen

  3. Extrahieren Sie in Ihrer bevorzugten lokalen Entwicklungsumgebung die heruntergeladene Archivdatei und öffnen Sie das Verzeichnis adk-samples/python/agents/llm-auditor.

    unzip adk-samples-main.zip
    cd adk-samples-main/python/agents/llm-auditor
  4. Aktualisieren Sie die Implementierung, um den ADK-Agenten als A2A-Remote-Agenten bereitzustellen:

    1. pyproject.toml: Fügen Sie der Bereitstellungsgruppe ADK- und A2A SDK-Abhängigkeiten hinzu.

      apps-script/chat/a2a-ai-agent/llm-auditor/pyproject.toml
      [project]
      name = "llm-auditor"
      version = "0.1.0"
      description = "The LLM Auditor evaluates LLM-generated answers, verifies actual accuracy using the web, and refines the response to ensure alignment with real-world knowledge."
      authors = [
          { name = "Chun-Sung Ferng", email = "csferng@google.com" },
          { name = "Cyrus Rashtchian", email = "cyroid@google.com" },
          { name = "Da-Cheng Juan", email = "dacheng@google.com" },
          { name = "Ivan Kuznetsov", email = "ivanku@google.com" },
      ]
      license = "Apache License 2.0"
      readme = "README.md"
      
      [tool.poetry.dependencies]
      python = "^3.10"
      google-adk = "^1.0.0"
      google-cloud-aiplatform = { extras = [
          "adk",
          "agent-engines",
      ], version = "^1.93.0" }
      google-genai = "^1.9.0"
      pydantic = "^2.10.6"
      python-dotenv = "^1.0.1"
      
      [tool.poetry.group.dev]
      optional = true
      
      [tool.poetry.group.dev.dependencies]
      google-adk = { version = "^1.0.0", extras = ["eval"] }
      pytest = "^8.3.5"
      pytest-asyncio = "^0.26.0"
      
      [tool.poetry.group.deployment]
      optional = true
      
      [tool.poetry.group.deployment.dependencies]
      absl-py = "^2.2.1"
      google-adk = "^1.0.0"
      a2a-sdk = "^0.3.0"
      
      [build-system]
      requires = ["poetry-core>=2.0.0,<3.0.0"]
      build-backend = "poetry.core.masonry.api"
    2. deployment/deploy.py: Ersetzen Sie die ADK-App-Bereitstellung durch einen A2A-Agenten und eine Karte.

      apps-script/chat/a2a-ai-agent/llm-auditor/deployment/deploy.py
      # Copyright 2025 Google LLC
      #
      # Licensed under the Apache License, Version 2.0 (the "License");
      # you may not use this file except in compliance with the License.
      # You may obtain a copy of the License at
      #
      #     http://www.apache.org/licenses/LICENSE-2.0
      #
      # Unless required by applicable law or agreed to in writing, software
      # distributed under the License is distributed on an "AS IS" BASIS,
      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      # See the License for the specific language governing permissions and
      # limitations under the License.
      
      """Deployment script for LLM Auditor."""
      
      import os
      
      from absl import app
      from absl import flags
      from dotenv import load_dotenv
      from llm_auditor.agent import root_agent
      import vertexai
      from vertexai import agent_engines
      
      # A2A wrapping
      from a2a.types import AgentSkill
      from google.adk.a2a.executor.a2a_agent_executor import A2aAgentExecutor
      from google.adk.runners import InMemoryRunner
      from vertexai.preview.reasoning_engines.templates.a2a import create_agent_card
      from vertexai.preview.reasoning_engines import A2aAgent
      
      FLAGS = flags.FLAGS
      flags.DEFINE_string("project_id", None, "GCP project ID.")
      flags.DEFINE_string("location", None, "GCP location.")
      flags.DEFINE_string("bucket", None, "GCP bucket.")
      flags.DEFINE_string("resource_id", None, "ReasoningEngine resource ID.")
      
      flags.DEFINE_bool("list", False, "List all agents.")
      flags.DEFINE_bool("create", False, "Creates a new agent.")
      flags.DEFINE_bool("delete", False, "Deletes an existing agent.")
      flags.mark_bool_flags_as_mutual_exclusive(["create", "delete"])
      
      
      def create() -> None:
          """Creates an agent engine for LLM Auditor."""
          agent_card = create_agent_card(
              agent_name=root_agent.name,
              description=root_agent.description,
              skills=[AgentSkill(
                  id='audit_llm_output',
                  name='Audit LLM Output',
                  description='Critiques and revises outputs from large language models.',
                  tags=['LLM', 'Audit', 'Revision'],
                  examples=[
                      'The earth is flat.',
                      'The capital of France is Berlin.',
                      'The last winner of the Super Bowl was the New England Patriots in 2020.',
                  ],
              )]
          )
          a2a_agent = A2aAgent(
              agent_card=agent_card,
              agent_executor_builder=lambda: A2aAgentExecutor(
                  runner=InMemoryRunner(
                      app_name=root_agent.name,
                      agent=root_agent,
                  )
              )
          )
          a2a_agent.set_up()
      
          remote_agent = agent_engines.create(
              a2a_agent,
              display_name=root_agent.name,
              requirements=[
                      "google-adk (>=0.0.2)",
                      "google-cloud-aiplatform[agent_engines] (>=1.88.0,<2.0.0)",
                      "google-genai (>=1.5.0,<2.0.0)",
                      "pydantic (>=2.10.6,<3.0.0)",
                      "absl-py (>=2.2.1,<3.0.0)",
                      "a2a-sdk>=0.3.22",
                      "uvicorn",
              ],
              # In-memory runner
              max_instances=1,
              env_vars ={
                  "NUM_WORKERS": "1"
              },
              extra_packages=["./llm_auditor"],
          )
          print(f"Created remote agent: {remote_agent.resource_name}")
      
      
      def delete(resource_id: str) -> None:
          remote_agent = agent_engines.get(resource_id)
          remote_agent.delete(force=True)
          print(f"Deleted remote agent: {resource_id}")
      
      
      def list_agents() -> None:
          remote_agents = agent_engines.list()
          TEMPLATE = '''
      {agent.name} ("{agent.display_name}")
      - Create time: {agent.create_time}
      - Update time: {agent.update_time}
      '''
          remote_agents_string = '\n'.join(TEMPLATE.format(agent=agent) for agent in remote_agents)
          print(f"All remote agents:\n{remote_agents_string}")
      
      def main(argv: list[str]) -> None:
          del argv  # unused
          load_dotenv()
      
          project_id = (
              FLAGS.project_id
              if FLAGS.project_id
              else os.getenv("GOOGLE_CLOUD_PROJECT")
          )
          location = (
              FLAGS.location if FLAGS.location else os.getenv("GOOGLE_CLOUD_LOCATION")
          )
          bucket = (
              FLAGS.bucket if FLAGS.bucket
              else os.getenv("GOOGLE_CLOUD_STORAGE_BUCKET")
          )
      
          print(f"PROJECT: {project_id}")
          print(f"LOCATION: {location}")
          print(f"BUCKET: {bucket}")
      
          if not project_id:
              print("Missing required environment variable: GOOGLE_CLOUD_PROJECT")
              return
          elif not location:
              print("Missing required environment variable: GOOGLE_CLOUD_LOCATION")
              return
          elif not bucket:
              print(
                  "Missing required environment variable: GOOGLE_CLOUD_STORAGE_BUCKET"
              )
              return
      
          vertexai.init(
              project=project_id,
              location=location,
              staging_bucket=f"gs://{bucket}",
          )
      
          if FLAGS.list:
              list_agents()
          elif FLAGS.create:
              create()
          elif FLAGS.delete:
              if not FLAGS.resource_id:
                  print("resource_id is required for delete")
                  return
              delete(FLAGS.resource_id)
          else:
              print("Unknown command")
      
      
      if __name__ == "__main__":
          app.run(main)
  5. Erstellen Sie einen neuen Cloud Storage-Bucket, der dem ADK-Agenten gewidmet ist.

    gcloud storage buckets create gs://CLOUD_STORAGE_BUCKET_NAME --project=PROJECT_ID --location=PROJECT_LOCATION

    Ersetzen Sie Folgendes:

    1. Ersetzen Sie CLOUD_STORAGE_BUCKET_NAME durch einen eindeutigen Bucket-Namen, den Sie verwenden möchten.
    2. PROJECT_ID durch die ID Ihres Cloud-Projekts.
    3. PROJECT_LOCATION durch den Standort Ihres Cloud-Projekts.
  6. Legen Sie die folgenden Umgebungsvariablen fest:

    export GOOGLE_GENAI_USE_VERTEXAI=true
    export GOOGLE_CLOUD_PROJECT=PROJECT_ID
    export GOOGLE_CLOUD_LOCATION=PROJECT_LOCATION
    export GOOGLE_CLOUD_STORAGE_BUCKET=CLOUD_STORAGE_BUCKET_NAME

    Ersetzen Sie Folgendes:

    1. CLOUD_STORAGE_BUCKET_NAME durch den Namen des Buckets, den Sie erstellt haben.
    2. PROJECT_ID durch die ID Ihres Cloud-Projekts.
    3. Ersetzen Sie PROJECT_LOCATION durch den Standort Ihres Cloud-Projekts.
  7. ADK-Agent aus der virtuellen Umgebung installieren und bereitstellen.

    python3 -m venv myenv
    source myenv/bin/activate
    poetry install --with deployment
    python3 deployment/deploy.py --create
  8. Rufen Sie die Agent-ID ab. Sie benötigen sie später, wenn Sie die Chat-App konfigurieren.

    python3 deployment/deploy.py --list

Chat-App-Projekt erstellen und konfigurieren

  1. Klicken Sie auf die folgende Schaltfläche, um das Apps Script-Projekt A2A AI Agent Quickstart zu öffnen.

    Projekt öffnen

  2. Klicken Sie auf  Übersicht > Symbol zum Erstellen einer Kopie Kopie erstellen.

  3. Klicken Sie in Ihrem Apps Script-Projekt auf Symbol für die Projekteinstellungen Projekteinstellungen > Skripteigenschaften bearbeiten > Skripteigenschaft hinzufügen, um die folgenden Skripteigenschaften hinzuzufügen:

    1. REASONING_ENGINE_RESOURCE_NAME durch den Namen der Vertex AI-Agent-Ressource, die Sie in den vorherigen Schritten kopiert haben.
    2. Ersetzen Sie SERVICE_ACCOUNT_KEY durch den JSON-Schlüssel des Dienstkontos, der in den vorherigen Schritten heruntergeladen wurde, z. B. { ... }.
  4. Klicken Sie auf Skripteigenschaften speichern.

  5. Rufen Sie in der Google Cloud Console das Menü  > IAM und Verwaltung > Einstellungen auf.

    Weiter zur Seite „IAM & Verwaltung“

  6. Kopieren Sie den Wert aus dem Feld Projektnummer.

  7. Klicken Sie in Ihrem Apps Script-Projekt auf Symbol für die Projekteinstellungen Projekteinstellungen.

  8. Klicken Sie unter Google Cloud Platform-Projekt (GCP) auf Projekt wechseln.

  9. Fügen Sie unter GCP-Projektnummer die Google Cloud-Projektnummer ein, die Sie in den vorherigen Schritten kopiert haben.

  10. Klicken Sie auf Projekt festlegen. Das Cloud-Projekt und das Apps Script-Projekt sind jetzt verbunden.

Testbereitstellung erstellen

Sie benötigen eine Bereitstellungs-ID für dieses Apps Script-Projekt, damit Sie es im nächsten Schritt verwenden können.

So rufen Sie die ID des Head-Deployments ab:

  1. Klicken Sie im Apps Script-Projekt der Chat-App auf Bereitstellen > Bereitstellungen testen.
  2. Klicken Sie unter Head-Deployment-ID auf Symbol zum Erstellen einer Kopie Kopieren.
  3. Klicken Sie auf Fertig.

Chat App konfigurieren

Gehen Sie so vor, um die Google Chat-App mithilfe Ihres Apps Script-Deployments zum Testen bereitzustellen:

  1. Suchen Sie in der Konsole nach Google Chat API und klicken Sie auf Google Chat API.
  2. Klicken Sie auf Verwalten.
  3. Klicken Sie auf Konfiguration und richten Sie die Chat-App ein:

    1. Geben Sie im Feld App-Name den Namen A2A Quickstart ein.
    2. Geben Sie im Feld Avatar-URL https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png ein.
    3. Geben Sie im Feld Beschreibung den Text A2A Quickstart ein.
    4. Wählen Sie unter Funktionsweise die Option Gruppenbereichen und Gruppenunterhaltungen beitreten aus.
    5. Wählen Sie unter „Verbindungseinstellungen“ die Option Apps Script-Projekt aus.
    6. Fügen Sie in das Feld Deployment ID (Deployment-ID) die Head-Deployment-ID ein, die Sie zuvor kopiert haben.
    7. Wählen Sie unter „Sichtbarkeit“ die Option Bestimmte Personen und Gruppen in Ihrer Domain aus und geben Sie Ihre E‑Mail-Adresse ein.
  4. Klicken Sie auf Speichern.

Die Chat App ist bereit, auf Nachrichten zu antworten.

Chat App testen

So testen Sie Ihre Chat-App: Öffnen Sie einen Direktnachrichtenbereich mit der Chat-App und senden Sie eine Nachricht:

  1. Öffnen Sie Google Chat mit dem Google Workspace-Konto, das Sie angegeben haben, als Sie sich als vertrauenswürdiger Tester hinzugefügt haben.

    Zu Google Chat wechseln

  2. Klicken Sie auf  Neuer Chat.
  3. Geben Sie im Feld Eine oder mehrere Personen hinzufügen den Namen Ihrer Chat-App ein.
  4. Wählen Sie Ihre Chat-App aus den Ergebnissen aus. Eine Direktnachricht wird geöffnet.

  5. Geben Sie in der neuen Direktnachricht mit der App The Eiffel Tower was completed in 1900 ein und drücken Sieenter.

    Die Chat-App antwortet mit den Antworten der Unter-Agents Critic und Reviser.

Weitere Informationen zum Hinzufügen von vertrauenswürdigen Testern und zum Testen interaktiver Funktionen finden Sie unter Interaktive Funktionen für Google Chat-Apps testen.

Fehlerbehebung

Wenn eine Google Chat-App oder Karte einen Fehler zurückgibt, wird in der Chat-Benutzeroberfläche die Meldung „Ein Fehler ist aufgetreten“ angezeigt. oder „Ihre Anfrage kann nicht bearbeitet werden.“ Manchmal wird in der Chat-Benutzeroberfläche keine Fehlermeldung angezeigt, aber die Chat-App oder ‑Karte liefert ein unerwartetes Ergebnis, z. B. wird eine Kartennachricht nicht angezeigt.

Auch wenn in der Chat-Benutzeroberfläche keine Fehlermeldung angezeigt wird, sind aussagekräftige Fehlermeldungen und Protokolldaten verfügbar, die Ihnen helfen, Fehler zu beheben, wenn die Fehlerprotokollierung für Chat-Apps aktiviert ist. Informationen zum Ansehen, Debuggen und Beheben von Fehlern finden Sie unter Google Chat-Fehler beheben.

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, empfehlen wir, das Cloud-Projekt zu löschen.

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten. Klicken Sie auf das Menü > IAM & Verwaltung > Ressourcen verwalten.

    Zum Ressourcenmanager

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen .
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Beenden, um das Projekt zu löschen.