Создайте приложение Google Chat с агентом Agent2Agent.

На этой странице объясняется, как создать надстройку для Google Workspace, которая будет работать в Google Chat и взаимодействовать с ИИ-агентом, использующим протокол Agent2Agent (A2A) . Вы разрабатываете агента с помощью Agent Development Kit (ADK) и размещаете его в Vertex AI Agent Engine .

Агенты искусственного интеллекта автономно воспринимают окружающую среду, рассуждают и выполняют сложные многоэтапные действия для достижения заданной цели. В этом руководстве вы развернете пример многоагентной системы LLM Auditor , которая анализирует и корректирует факты, используя Gemini и Google Search в качестве основы для своих вычислений.

Пример многоагентного приложения для чата от LLM Auditor.

На следующей диаграмме показана архитектура и схема обмена сообщениями:

Архитектура чат-приложения, реализованного с использованием A2A-агента на основе искусственного интеллекта.

На диаграмме показано следующее взаимодействие пользователя с чат-приложением, использующим агент A2A:

  1. Пользователь отправляет сообщение в приложение для чата, либо в личном сообщении, либо в чате.
  2. Логика чат-приложения, реализованная либо в Apps Script, либо в виде веб-сервера с HTTP-конечными точками, получает и обрабатывает сообщение.
  3. Агент A2A, размещенный на платформе Vertex AI Agent Engine, получает и обрабатывает взаимодействие.
  4. При желании приложение для чата или ИИ-агент могут интегрироваться с сервисами Google Workspace, такими как Календарь или Таблицы, или с другими сервисами Google, такими как Google Карты или YouTube.
  5. Приложение «Чат» отправляет ответы асинхронно, используя API Google Chat для передачи информации о ходе работы ИИ-агента.
  6. Ответы доставляются пользователю.

Цели

  • Настройте свою среду.
  • Разверните агент A2A.
  • Разверните приложение «Чат».
  • Настройте приложение «Чат».
  • Протестируйте приложение «Чат».

Предварительные требования

Настройте свою среду

Включите API Google Cloud.

Перед использованием API Google необходимо включить их в проекте Google Cloud. В одном проекте Google Cloud можно включить один или несколько API.
  • В консоли Google Cloud включите API Google Chat, Vertex AI и Cloud Resource Manager.

    Включите API

Настройте экран согласия OAuth.

Для всех приложений, использующих OAuth 2.0, требуется настройка экрана согласия. Настройка экрана согласия OAuth в вашем приложении определяет, что отображается пользователям и модераторам приложения, а также регистрирует ваше приложение, чтобы вы могли опубликовать его позже.

  1. В консоли Google Cloud перейдите в >Google Auth platform > Брендинг .

    Перейти к разделу «Брендинг»

  2. Если вы уже настроили Google Auth platformВы можете настроить следующие параметры экрана согласия OAuth в разделах «Брендинг» , «Аудитория» и «Доступ к данным» . Если вы видите сообщение, в котором говорится... Google Auth platform Если конфигурация еще не выполнена , нажмите «Начать» :
    1. В разделе «Информация о приложении» , в поле «Название приложения» , введите название для приложения.
    2. В разделе «Электронная почта службы поддержки пользователей» выберите адрес электронной почты, по которому пользователи смогут связаться с вами, если у них возникнут вопросы относительно их согласия.
    3. Нажмите «Далее» .
    4. В разделе «Аудитория» выберите «Внутренняя» .
    5. Нажмите «Далее» .
    6. В поле «Контактная информация» укажите адрес электронной почты , на который вы сможете получать уведомления об изменениях в вашем проекте.
    7. Нажмите «Далее» .
    8. В разделе «Завершить» ознакомьтесь с Политикой использования пользовательских данных сервисов Google API и, если вы согласны, выберите «Я согласен с Политикой использования пользовательских данных сервисов Google API» .
    9. Нажмите «Продолжить» .
    10. Нажмите «Создать» .
  3. На данный момент добавление областей действия можно пропустить. В будущем, при создании приложения для использования за пределами вашей организации Google Workspace, необходимо изменить тип пользователя на «Внешний» . Затем добавьте необходимые для вашего приложения области авторизации. Для получения дополнительной информации см. полное руководство по настройке согласия OAuth .

Создайте учетную запись службы в консоли Google Cloud.

Создайте новую учетную запись службы с ролью Vertex AI User , выполнив следующие шаги:

Консоль Google Cloud

  1. В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .

    Перейдите в раздел «Учетные записи служб».

  2. Нажмите «Создать учетную запись службы» .
  3. Заполните данные учетной записи службы, затем нажмите «Создать и продолжить» .
  4. Необязательно: назначьте роли вашей учетной записи службы, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Для получения более подробной информации см. раздел «Предоставление, изменение и отзыв доступа к ресурсам» .
  5. Нажмите «Продолжить» .
  6. Необязательно: укажите пользователей или группы, которые могут управлять этой учетной записью службы и выполнять с ней действия. Дополнительные сведения см. в разделе «Управление имитацией учетной записи службы» .
  7. Нажмите «Готово» . Запишите адрес электронной почты учетной записи службы.

gcloud CLI

  1. Создайте учетную запись службы:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Необязательно: назначьте роли вашей учетной записи службы, чтобы предоставить доступ к ресурсам вашего проекта Google Cloud. Для получения более подробной информации см. раздел «Предоставление, изменение и отзыв доступа к ресурсам» .

Учетная запись службы отображается на странице учетной записи службы.

Создать закрытый ключ

Чтобы создать и загрузить закрытый ключ для учетной записи службы, выполните следующие действия:

  1. В консоли Google Cloud перейдите в > IAM и администрирование > Учетные записи служб .

    Перейдите в раздел «Учетные записи служб».

  2. Выберите свой сервисный аккаунт.
  3. Нажмите «Клавиши» > «Добавить клавишу» > «Создать новую клавишу» .
  4. Выберите JSON , затем нажмите «Создать» .

    Ваша новая пара открытого/закрытого ключей будет сгенерирована и загружена на ваш компьютер в виде нового файла. Сохраните загруженный JSON-файл как credentials.json в вашей рабочей директории. Этот файл является единственной копией данного ключа. Информацию о том, как безопасно хранить ключ, см. в разделе «Управление ключами учетных записей служб» .

  5. Нажмите «Закрыть» .

Для получения дополнительной информации об учетных записях служб см. раздел «Учетные записи служб» в документации Google Cloud IAM .

Разверните агент A2A

  1. Если вы этого еще не сделали, пройдите аутентификацию в своей учетной записи Google Cloud и настройте интерфейс командной строки Google Cloud для использования вашего проекта Google Cloud.

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

    Замените PROJECT_ID на идентификатор вашего облачного проекта.

  2. Загрузите репозиторий примеров ADK на GitHub, используя эту кнопку:

    Скачать adk-samples

  3. В предпочитаемой вами локальной среде разработки распакуйте загруженный архив и откройте каталог adk-samples/python/agents/llm-auditor .

    unzip adk-samples-main.zip
    cd adk-samples-main/python/agents/llm-auditor
  4. Обновите реализацию, чтобы развернуть агент ADK в качестве удаленного агента A2A:

    1. pyproject.toml : Добавить зависимости ADK и A2A SDK в группу развертывания.

      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 : Замените развертывание приложения ADK на агент 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. Создайте новый сегмент Cloud Storage, предназначенный исключительно для агента ADK.

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

    Замените следующее:

    1. Укажите в переменной CLOUD_STORAGE_BUCKET_NAME уникальное имя корзины, которое вы хотите использовать.
    2. PROJECT_ID содержит идентификатор вашего облачного проекта.
    3. Укажите в PROJECT_LOCATION местоположение вашего облачного проекта.
  6. Установите следующие переменные среды:

    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

    Замените следующее:

    1. В поле CLOUD_STORAGE_BUCKET_NAME укажите имя созданного вами хранилища (bucket).
    2. PROJECT_ID содержит идентификатор вашего облачного проекта.
    3. Укажите в поле PROJECT_LOCATION местоположение вашего облачного проекта.
  7. Установите и разверните агент ADK из виртуальной среды.

    python3 -m venv myenv
    source myenv/bin/activate
    poetry install --with deployment
    python3 deployment/deploy.py --create
  8. Получите идентификатор агента. Он понадобится вам позже при настройке приложения «Чат».

    python3 deployment/deploy.py --list

Создайте и настройте проект приложения «Чат».

  1. Нажмите следующую кнопку, чтобы открыть проект A2A AI Agent Quickstart Apps Script.

    Откройте проект

  2. Нажмите « Обзор > Значок для создания копии Сделайте копию .

  3. В проекте Apps Script нажмите Значок для настроек проекта Настройки проекта > Изменить свойства скрипта > Добавить свойство скрипта , чтобы добавить следующие свойства скрипта:

    1. REASONING_ENGINE_RESOURCE_NAME содержит имя ресурса агента Vertex AI, скопированное на предыдущих шагах.
    2. SERVICE_ACCOUNT_KEY содержит JSON-ключ из учетной записи службы, загруженной на предыдущих шагах, например, { ... } .
  4. Нажмите «Сохранить свойства скрипта» .

  5. В консоли Google Cloud перейдите в > IAM и администрирование > Настройки .

    Перейдите в раздел «Настройки IAM и администрирования».

  6. В поле «Номер проекта» скопируйте значение.

  7. В проекте Apps Script нажмите Значок для настроек проекта Настройки проекта .

  8. В разделе «Проект Google Cloud Platform (GCP)» нажмите «Изменить проект» .

  9. В поле "Номер проекта GCP" вставьте номер проекта Google Cloud, скопированный на предыдущих шагах.

  10. Нажмите «Установить проект» . Проект «Облако» и проект «Apps Script» теперь связаны.

Создайте тестовое развертывание.

Для этого проекта Apps Script вам потребуется идентификатор развертывания, чтобы вы могли использовать его на следующем шаге.

Чтобы получить идентификатор головного развертывания, выполните следующие действия:

  1. В проекте Apps Script приложения «Чат» нажмите «Развернуть» > «Проверить развертывания» .
  2. В разделе «Идентификатор развертывания головного устройства» нажмите Значок для создания копии Копировать .
  3. Нажмите «Готово» .

Настройте приложение «Чат».

Чтобы развернуть приложение Google Chat для тестирования, выполните следующие действия, используя развертывание Apps Script:

  1. В консоли найдите Google Chat API и нажмите на него .
  2. Нажмите «Управление» .
  3. Нажмите «Конфигурация» и настройте приложение «Чат»:

    1. В поле «Название приложения» введите A2A Quickstart .
    2. В поле «URL-адрес аватара» введите https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png .
    3. В поле «Описание» введите A2A Quickstart .
    4. В разделе «Функциональность» выберите «Присоединяйтесь к пространствам и групповым беседам» .
    5. В разделе «Настройки подключения» выберите проект Apps Script .
    6. В поле «Идентификатор развертывания» вставьте ранее скопированный идентификатор развертывания Head.
    7. В разделе «Видимость» выберите «Конкретные люди и группы в вашем домене» и введите свой адрес электронной почты.
  4. Нажмите « Сохранить ».

Приложение «Чат» готово отвечать на сообщения.

Протестируйте приложение для чата.

Чтобы протестировать приложение «Чат», откройте личное сообщение в приложении «Чат» и отправьте сообщение:

  1. Откройте Google Chat, используя учетную запись Google Workspace, которую вы указали при добавлении себя в качестве доверенного тестировщика.

    Перейдите в Google Чат

  2. Нажмите новый чат» .
  3. В поле «Добавить 1 или более человек» введите название вашего приложения для чата.
  4. Выберите ваше приложение для чата из результатов поиска. Откроется личное сообщение.

  5. В новом личном сообщении в приложении напишите « The Eiffel Tower was completed in 1900 и нажмите enter .

    Приложение «Чат» отправляет ответы от суб-агентов «Критик» и «Рецензент» .

Чтобы добавить доверенных тестировщиков и узнать больше о тестировании интерактивных функций, см. раздел «Тестирование интерактивных функций для приложений Google Chat» .

Устранение неполадок

Когда приложение или карточка Google Chat выдает ошибку, интерфейс чата отображает сообщение «Что-то пошло не так» или «Не удалось обработать ваш запрос». Иногда интерфейс чата не отображает никаких сообщений об ошибке, но приложение или карточка чата выдает неожиданный результат; например, сообщение на карточке может не появиться.

Хотя сообщение об ошибке может не отображаться в пользовательском интерфейсе чата, подробные сообщения об ошибках и данные журнала доступны для исправления ошибок, если включено ведение журнала ошибок для приложений чата. Для получения помощи по просмотру, отладке и исправлению ошибок см. раздел «Устранение неполадок и исправление ошибок Google Chat» .

Уборка

Чтобы избежать списания средств с вашего аккаунта Google Cloud за ресурсы, использованные в этом руководстве, мы рекомендуем удалить проект Cloud.

  1. В консоли Google Cloud перейдите на страницу «Управление ресурсами» > IAM и администрирование > Управление ресурсами .

    Перейдите в Диспетчер ресурсов

  2. В списке проектов выберите проект, который хотите удалить, и нажмите кнопку «Удалить .
  3. В диалоговом окне введите идентификатор проекта, а затем нажмите «Завершить» , чтобы удалить проект.