Compila una app de Google Chat con un agente Agent2Agent

En esta página, se explica cómo compilar un complemento de Google Workspace que funcione en Google Chat y se conecte con un agente de IA que use el protocolo Agent2Agent (A2A). Desarrollas el agente con el Kit de desarrollo de agentes (ADK) y lo alojas en Vertex AI Agent Engine.

Los agentes de IA perciben su entorno, razonan y ejecutan acciones complejas de varios pasos de forma autónoma para lograr un objetivo definido. En este instructivo, implementarás el ejemplo multiagente de LLM Auditor, que critica y revisa hechos con la fundamentación de Gemini y la Búsqueda de Google.

Muestra de LLM Auditor multiagente como app de chat.

En el siguiente diagrama, se muestran la arquitectura y el patrón de mensajería:

Arquitectura de una app de chat implementada con un agente de IA A2A.

En el diagrama, un usuario que interactúa con una app de chat implementada con un agente de A2A tiene el siguiente flujo de información:

  1. Un usuario envía un mensaje a una app de Chat, ya sea en un mensaje directo o en un espacio de Chat.
  2. La lógica de la app de Chat implementada en Apps Script o como un servidor web con extremos HTTP recibe y procesa el mensaje.
  3. El agente de A2A alojado con Vertex AI Agent Engine recibe y procesa la interacción.
  4. De manera opcional, la app de Chat o el agente de IA pueden integrarse con los servicios de Google Workspace, como Calendario o Hojas de cálculo, o con otros servicios de Google, como Google Maps o YouTube.
  5. La app de Chat envía respuestas de forma asíncrona, ya que usa la API de Google Chat para comunicar el progreso del agente de IA.
  6. Las respuestas se entregan al usuario.

Objetivos

  • Configura el entorno.
  • Implementa el agente A2A.
  • Implementa la app de Chat.
  • Configura la app de Chat.
  • Prueba la app de Chat.

Requisitos previos

Configura tu entorno

Habilita las APIs de Google Cloud

Antes de usar las APIs de Google, debes activarlas en un proyecto de Google Cloud. Puedes activar una o más APIs en un solo proyecto de Google Cloud.
  • En la consola de Google Cloud, habilita las APIs de Google Chat, Vertex AI y Cloud Resource Manager.

    Habilitar las API

Cómo configurar la pantalla de consentimiento de OAuth

Todas las apps que usan OAuth 2.0 requieren una configuración de pantalla de consentimiento. Cuando configuras la pantalla de consentimiento de OAuth de tu app, defines lo que se muestra a los usuarios y revisores de apps, y registras tu app para que puedas publicarla más adelante.

  1. En la consola de Google Cloud, ve a Menú > Google Auth platform > Branding.

    Ir a Branding

  2. Si ya configuraste el Google Auth platform, puedes configurar los siguientes parámetros de configuración de la pantalla de consentimiento de OAuth en Branding, Audience y Data Access. Si ves un mensaje que dice Google Auth platform aún no se configuró, haz clic en Comenzar:
    1. En Información de la app, en Nombre de la app, ingresa un nombre para la app.
    2. En Correo electrónico de asistencia al usuario, elige una dirección de correo electrónico de asistencia a la que los usuarios puedan comunicarse contigo si tienen preguntas sobre su consentimiento.
    3. Haz clic en Siguiente.
    4. En Público, selecciona Interno.
    5. Haz clic en Siguiente.
    6. En Información de contacto, ingresa una dirección de correo electrónico en la que puedas recibir notificaciones sobre cualquier cambio en tu proyecto.
    7. Haz clic en Siguiente.
    8. En Finalizar, revisa la Política de Datos del Usuario de los Servicios de las APIs de Google y, si la aceptas, selecciona Acepto la Política de Datos del Usuario de los Servicios de las APIs de Google.
    9. Haz clic en Continuar.
    10. Haz clic en Crear.
  3. Por el momento, puedes omitir la adición de permisos. En el futuro, cuando crees una app para usarla fuera de tu organización de Google Workspace, deberás cambiar el Tipo de usuario a Externo. Luego, agrega los permisos de autorización que requiere tu app. Para obtener más información, consulta la guía completa Configura el consentimiento de OAuth.

Crea una cuenta de servicio en la consola de Google Cloud

Sigue estos pasos para crear una cuenta de servicio nueva con el rol Vertex AI User:

Consola de Google Cloud

  1. En la consola de Google Cloud, ve a Menú > IAM y administración > Cuentas de servicio.

    Ir a Cuentas de servicio

  2. Haga clic en Crear cuenta de servicio.
  3. Completa los detalles de la cuenta de servicio y, luego, haz clic en Crear y continuar.
  4. Opcional: Asigna roles a tu cuenta de servicio para otorgar acceso a los recursos de tu proyecto de Google Cloud. Para obtener más detalles, consulta Otorga, cambia y revoca el acceso a los recursos.
  5. Haz clic en Continuar.
  6. Opcional: Ingresa los usuarios o grupos que pueden administrar esta cuenta de servicio y realizar acciones con ella. Para obtener más detalles, consulta Administra la suplantación de identidad de cuentas de servicio.
  7. Haz clic en Listo. Toma nota de la dirección de correo electrónico de la cuenta de servicio.

gcloud CLI

  1. Crea la cuenta de servicio:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Opcional: Asigna roles a tu cuenta de servicio para otorgar acceso a los recursos de tu proyecto de Google Cloud. Para obtener más detalles, consulta Otorga, cambia y revoca el acceso a los recursos.

La cuenta de servicio aparecerá en la página de cuentas de servicio.

Crea una clave privada

Para crear y descargar una clave privada para la cuenta de servicio, sigue estos pasos:

  1. En la consola de Google Cloud, ve a Menú > IAM y administración > Cuentas de servicio.

    Ir a Cuentas de servicio

  2. Selecciona tu cuenta de servicio.
  3. Haz clic en Claves > Agregar clave > Crear clave nueva.
  4. Selecciona JSON y, luego, haz clic en Crear.

    Se generará y descargará el nuevo par de claves pública/privada en tu equipo como un archivo nuevo. Guarda el archivo JSON descargado como credentials.json en tu directorio de trabajo. Este archivo es la única copia de esta clave. Para obtener información sobre cómo almacenar tu clave de forma segura, consulta Cómo administrar claves para cuentas de servicio.

  5. Haz clic en Cerrar.

Para obtener más información sobre las cuentas de servicio, consulta Cuentas de servicio en la documentación de IAM de Google Cloud.

Implementa el agente A2A

  1. Si aún no lo hiciste, autentícate con tu cuenta de Google Cloud y configura Google Cloud CLI para usar tu proyecto de Google Cloud.

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

    Reemplaza PROJECT_ID por el ID del proyecto de Cloud.

  2. Descarga el repositorio de GitHub de muestras del ADK con este botón:

    Descarga adk-samples

  3. En tu entorno de desarrollo local preferido, extrae el archivo descargado y abre el directorio adk-samples/python/agents/llm-auditor.

    unzip adk-samples-main.zip
    cd adk-samples-main/python/agents/llm-auditor
  4. Actualiza la implementación para implementar el agente del ADK como un agente remoto de A2A:

    1. pyproject.toml: Agrega dependencias del ADK y del SDK de A2A en el grupo de implementación.

      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: Reemplaza la implementación de la app del ADK por un agente y una tarjeta de A2A.

      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. Crea un nuevo bucket de Cloud Storage dedicado al agente del ADK.

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

    Reemplaza lo siguiente:

    1. CLOUD_STORAGE_BUCKET_NAME con un nombre de bucket único que desees usar.
    2. PROJECT_ID por el ID del proyecto de Cloud.
    3. PROJECT_LOCATION por la ubicación de tu proyecto de Cloud
  6. Configura las siguientes variables de entorno:

    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

    Reemplaza lo siguiente:

    1. CLOUD_STORAGE_BUCKET_NAME por el nombre del bucket que creaste.
    2. PROJECT_ID por el ID del proyecto de Cloud.
    3. PROJECT_LOCATION con la ubicación de tu proyecto de Cloud
  7. Instala y, luego, implementa el agente del ADK desde el entorno virtual.

    python3 -m venv myenv
    source myenv/bin/activate
    poetry install --with deployment
    python3 deployment/deploy.py --create
  8. Recupera el ID del agente. La necesitarás más adelante, cuando configures la app de Chat.

    python3 deployment/deploy.py --list

Crea y configura el proyecto de la app de Chat

  1. Haz clic en el siguiente botón para abrir el proyecto de Apps Script de la Guía de inicio rápido del agente de IA de A2A.

    Abre el proyecto

  2. Haz clic en Descripción general > Ícono para crear una copia Crear una copia.

  3. En tu proyecto de Apps Script, haz clic en El ícono de configuración del proyecto Configuración del proyecto > Editar propiedades de la secuencia de comandos > Agregar propiedad de la secuencia de comandos para agregar las siguientes propiedades de la secuencia de comandos:

    1. REASONING_ENGINE_RESOURCE_NAME por el nombre del recurso del agente de Vertex AI que copiaste en los pasos anteriores
    2. SERVICE_ACCOUNT_KEY con la clave JSON de la cuenta de servicio que se descargó en los pasos anteriores, como { ... }.
  4. Haz clic en Guardar las propiedades de la secuencia de comandos.

  5. En la consola de Google Cloud, ve a Menú > IAM y administración > Configuración.

    Ir a Configuración de IAM y administrador

  6. En el campo Número del proyecto, copia el valor.

  7. En tu proyecto de Apps Script, haz clic en El ícono de configuración del proyecto Configuración del proyecto.

  8. En Proyecto de Google Cloud, haz clic en Cambiar proyecto.

  9. En Número de proyecto de GCP, pega el número de proyecto de Google Cloud que copiaste en los pasos anteriores.

  10. Haz clic en Establecer el proyecto. Ahora, el proyecto de Cloud y el proyecto de Apps Script están conectados.

Crea una implementación de prueba

Necesitas un ID de implementación para este proyecto de Apps Script, de modo que puedas usarlo en el siguiente paso.

Para obtener el ID de la implementación principal, haz lo siguiente:

  1. En el proyecto de Apps Script de la app de Chat, haz clic en Implementar > Implementaciones de prueba.
  2. En ID de implementación principal, haz clic en Ícono para crear una copia Copiar.
  3. Haz clic en Listo.

Configura la app de Chat

Con tu implementación de Apps Script, sigue estos pasos para implementar la app de Google Chat para realizar pruebas:

  1. En la consola, busca Google Chat API y haz clic en API de Google Chat.
  2. Haz clic en Administrar.
  3. Haz clic en Configuración y configura la app de Chat:

    1. En el campo Nombre de la app, ingresa A2A Quickstart.
    2. En el campo URL del avatar, ingresa https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png.
    3. En el campo Descripción, ingresa A2A Quickstart.
    4. En Funcionalidad, selecciona Unirse a espacios y conversaciones grupales.
    5. En Configuración de conexión, selecciona Proyecto de Apps Script.
    6. En el campo ID de implementación, pega el ID de implementación principal que copiaste anteriormente.
    7. En Visibilidad, selecciona Personas y grupos específicos de tu dominio y escribe tu correo electrónico.
  4. Haz clic en Guardar.

La app de Chat está lista para responder mensajes.

Prueba la app de Chat

Para probar tu app de Chat, abre un espacio de mensajes directos con la app de Chat y envía un mensaje:

  1. Abre Google Chat con la cuenta de Google Workspace que proporcionaste cuando te agregaste como verificador de confianza.

    Ir a Google Chat

  2. Haz clic en Nuevo chat.
  3. En el campo Agrega 1 o más personas, escribe el nombre de tu app de Chat.
  4. Selecciona tu app de Chat en los resultados. Se abrirá un mensaje directo.

  5. En el nuevo mensaje directo con la app, escribe The Eiffel Tower was completed in 1900 y presionaenter.

    La app de Chat responde con las respuestas de los subagentes Crítico y Revisor.

Para agregar verificadores de confianza y obtener más información sobre las pruebas de funciones interactivas, consulta Cómo probar funciones interactivas para apps de Google Chat.

Solucionar problemas

Cuando una app o una tarjeta de Google Chat muestra un error, la interfaz de Chat muestra un mensaje que dice "Se produjo un error". o "No se pudo procesar tu solicitud". A veces, la IU de Chat no muestra ningún mensaje de error, pero la app o la tarjeta de Chat producen un resultado inesperado. Por ejemplo, es posible que no aparezca un mensaje de la tarjeta.

Si bien es posible que no se muestre un mensaje de error en la IU de Chat, hay mensajes de error descriptivos y datos de registro disponibles para ayudarte a corregir errores cuando se activa el registro de errores para las apps de Chat. Para obtener ayuda para ver, depurar y corregir errores, consulta Soluciona y corrige errores de Google Chat.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que usaste en este instructivo, te recomendamos que borres el proyecto de Cloud.

  1. En la consola de Google Cloud, ve a la página Administrar recursos. Haz clic en Menú > IAM y administración > Administrar recursos.

    Ir al administrador de recursos

  2. En la lista de proyectos, selecciona el proyecto que deseas borrar y haz clic en Borrar .
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.