Integrowanie agentów Vertex AI z Google Workspace

1. Zanim zaczniesz

99afae2505f696fb.png

Czym jest Vertex AI?

Vertex AI to ujednolicona platforma programistyczna Google Cloud do tworzenia, wdrażania i skalowania agentów i aplikacji AI klasy korporacyjnej. Udostępnia programistom i badaczom danych zaawansowane narzędzia potrzebne do projektowania niestandardowych przepływów pracy opartych na agentach, które są ściśle zintegrowane z infrastrukturą o globalnym zasięgu.

  • Dostęp do bazy modeli: wybieraj spośród ponad 150 modeli podstawowych, w tym pełnej rodziny Gemini, modeli innych firm i specjalistycznych modeli open source, aby znaleźć odpowiedni model do konkretnych zadań agenta.
  • Architektura złożonej orkiestracji: Vertex AI zapewnia platformę do projektowania autonomicznych agentów, którzy wykorzystują rozumowanie do planowania i wykonywania wieloetapowych zadań oraz wywoływania zewnętrznych interfejsów API.
  • Ugruntowanie na poziomie przedsiębiorstwa: połącz agentów z aktualnymi danymi biznesowymi, w tym z technologią RAG (Retrieval-Augmented Generation) o wysokiej wydajności, aby wyeliminować halucynacje i zapewnić dokładność faktów.
  • DevOps: bezproblemowo integruj tworzenie agentów z istniejącymi potokami CI/CD za pomocą zaawansowanych pakietów SDK, interfejsów API i narzędzi do oceny, aby mierzyć wydajność i bezpieczeństwo agentów na dużą skalę.
  • Zabezpieczenia klasy przemysłowej: Vertex AI zapewnia, że dane klientów używane do trenowania lub ugruntowania pozostają prywatne, zaszyfrowane i zgodne z globalnymi wymaganiami dotyczącymi przechowywania danych.
  • Zoptymalizowana infrastruktura: bezproblemowe skalowanie zadań agentów w klasach TPU i GPU Google o światowej klasy wydajności, co zapewnia niskie opóźnienia nawet w przypadku najbardziej wymagających aplikacji globalnych.

127f2ed7d484722c.png

Czym jest Google Workspace?

Google Workspace to zbiór rozwiązań w chmurze zwiększających produktywność i ułatwiających współpracę, które są przeznaczone dla osób indywidualnych, szkół i firm:

  • Komunikacja: profesjonalne usługi poczty e-mail (Gmail), wideokonferencje (Meet) i komunikatory zespołowe (Chat).
  • Tworzenie treści: narzędzia do pisania dokumentów (Dokumenty), tworzenia arkuszy kalkulacyjnych (Arkusze) i projektowania prezentacji (Prezentacje).
  • Organizacja: udostępnione kalendarze (Kalendarz) i cyfrowe notatki (Keep).
  • Miejsce na dane: centralne miejsce w chmurze do bezpiecznego zapisywania i udostępniania plików (Dysk).
  • Zarządzanie: narzędzia administracyjne do zarządzania użytkownikami i ustawieniami zabezpieczeń (konsola administracyjna Workspace).

Jakie rodzaje integracji niestandardowych?

Google Workspace i Vertex AI tworzą wydajną pętlę informacji zwrotnej, w której Workspace dostarcza dane w czasie rzeczywistym i kontekst współpracy, a Vertex AI oferuje modele, rozumowanie agentowe i orkiestrację niezbędne do automatyzacji inteligentnych przepływów pracy.

  • Inteligentna łączność: magazyny danych, interfejsy API i serwery MCP zarządzane przez Google (zarówno te zarządzane przez Google, jak i niestandardowe) umożliwiają agentom bezpieczny i bezproblemowy dostęp do danych Workspace oraz podejmowanie działań w imieniu użytkowników.
  • Agenci niestandardowi: zespoły mogą tworzyć specjalistycznych agentów na podstawie danych i działań w Workspace zarządzanych przez administratora, korzystając z bezkodowych projektantów lub platform z kodem.
  • Natywna integracja: dodatki do Workspace łączą systemy AI z aplikacjami takimi jak Chat czy Gmail, zarówno za pomocą specjalnych komponentów interfejsu, jak i procesów działających w tle. Dzięki temu pracownicy obsługi klienta mogą spotykać się z użytkownikami w miejscu, w którym się znajdują, i udzielać im natychmiastowej pomocy dostosowanej do kontekstu.

Łącząc solidny ekosystem produktywności Google Workspace z zaawansowanymi możliwościami agentów Vertex AI, organizacje mogą przekształcać swoje działania za pomocą niestandardowych agentów AI opartych na danych, którzy automatyzują złożone przepływy pracy bezpośrednio w narzędziach, z których zespoły korzystają na co dzień.

Wymagania wstępne

Jeśli chcesz wykonać wszystkie czynności we własnym środowisku, potrzebujesz:

Co utworzysz

W ramach tego ćwiczenia w Codelabs utworzymy 3 rozwiązania z agentami Vertex AI ściśle zintegrowanymi z Google Workspace. Zaprezentują wzorce architektoniczne, których można używać do interakcji z danymi, działaniami i interfejsami.

Aplikacja Vertex AI Search

Umożliwia on użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Vertex AI w Google Workspace (Kalendarz, Gmail, Dysk).
  • Host agenta: Vertex AI Search.
  • Interfejs: widżet internetowy Vertex AI Search.

d276ff8e2b9d0ddf.png

Niestandardowy agent

Ten agent umożliwia użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym za pomocą niestandardowych narzędzi i reguł. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Vertex AI dla Google Workspace (Kalendarz, Gmail, Dysk), zarządzany przez Google serwer protokołu kontekstowego modelu wyszukiwania Vertex AI (MCP), niestandardowa funkcja narzędzia do wysyłania wiadomości w Google Chat (za pomocą interfejsu Google Chat API).
  • Narzędzia do tworzenia agentów: pakiet Agent Development Kit (ADK).
  • Host agenta: Vertex AI Agent Engine.
  • UI: ADK Web.

145f47f45332e6be.png

293ec4d3e2bb6a0.png

Agent jako dodatek do Google Workspace

Ten agent umożliwia użytkownikom wyszukiwanie danych Workspace w języku naturalnym w interfejsach aplikacji Workspace. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Vertex AI dla Google Workspace (Kalendarz, Gmail, Dysk), zarządzany przez Google serwer protokołu kontekstowego modelu wyszukiwania Vertex AI (MCP), niestandardowa funkcja narzędzia do wysyłania wiadomości w Google Chat (za pomocą interfejsu Google Chat API).
  • Narzędzia do tworzenia agentów: pakiet Agent Development Kit (ADK).
  • Host agenta: Vertex AI Agent Engine.
  • Interfejs: dodatek Google Workspace do Google Chat i Gmaila (można go łatwo rozszerzyć na Kalendarz, Dysk, Dokumenty, Arkusze i Prezentacje).
  • Dodatek do Google Workspace: Apps Script, interfejsy API Vertex AI Agent Engine, kontekstowe (wybrana wiadomość w Gmailu).

172da43f310a0579.png

840b494aa5eaa1ef.png

Czego się nauczysz

  • Punkty integracji między Vertex AI Search i Google Workspace, które umożliwiają korzystanie z danych i wykonywanie działań.
  • Opcje tworzenia niestandardowych agentów hostowanych w Vertex AI.
  • Sposoby, w jakie użytkownicy mogą uzyskiwać dostęp do agentów, np. widżetu internetowego Vertex AI Search i aplikacji Google Workspace.

2. Skonfiguruj

Zanim zaczniemy tworzyć rozwiązania, musimy zainicjować ustawienia aplikacji Vertex AI w projekcie, włączyć wymagane interfejsy API i utworzyć magazyny danych obszaru roboczego Vertex AI.

Sprawdź pojęcia

Aplikacja Vertex AI

Aplikacja Vertex AI to zarządzane, kompleksowe rozwiązanie w Google Cloud, które integruje modele uczenia maszynowego (takie jak agenty generatywnej AI lub wyszukiwarki) z danymi przedsiębiorstwa i specjalistycznymi narzędziami do wykonywania złożonych zadań, takich jak wyszukiwanie semantyczne, generowanie treści czy zautomatyzowana interakcja z klientami.

Magazyn danych Vertex AI

Magazyn danych Vertex AI to jednostka zawierająca dane pozyskane ze źródła danych własnych, takiego jak Google Workspace, lub z aplikacji innych firm, takich jak Jira czy Shopify. Magazyny danych zawierające dane z aplikacji innych firm są też nazywane łącznikami danych.

Inicjowanie ustawień aplikacji Vertex AI

Zainicjuj ustawienia aplikacji Vertex AI, aby umożliwić tworzenie agentów.

Otwórz konsolę Google Cloud na nowej karcie i wykonaj te czynności:

  1. Wybierz projekt.
  2. W polu wyszukiwania Google Cloud otwórz AI Applications.

  1. Po przeczytaniu i zaakceptowaniu warunków kliknij Continue and activate the API (Przejdź dalej i aktywuj API).
  2. Kliknij Settings (Ustawienia).
  3. Na karcie Authentication (Uwierzytelnianie) edytuj global.

93b0cc6ed63fba0c.png

  1. Wybierz Google Identity, a następnie kliknij Zapisz.

5c01b4cbeebaa93b.png

Włącz interfejsy API

Magazyny danych Vertex AI Workspace wymagają włączenia tych interfejsów API:

  1. W konsoli Google Cloud włącz interfejsy API Kalendarza, Gmaila i Kontakty:

3877dcaa56624d0b.png

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy na liście znajdują się Google Calendar API, Gmail APIPeople API.

Tworzenie magazynów danych

Utwórz magazyn danych Dysku Google:

  1. W konsoli Google Cloud otwórz AI Applications, a następnie Data Stores.

  1. Kliknij + Utwórz magazyn danych.
  2. W sekcji Źródło w obszarze Dysk Google kliknij Wybierz.

6939363368bde36d.png

  1. W sekcji Dane wybierz Wszystkie i kliknij Dalej.

5044243322acec9e.png

  1. W sekcji Konfiguracja ustaw Nazwę łącznika danych na drive. Po sprawdzeniu i zaakceptowaniu opłat, które mogą być naliczane, kliknij Dalej.

1f5deb1aeecee983.png

  1. W sekcji Ceny wybierz preferowany model cenowy i kliknij Utwórz. W tym samouczku zalecamy ogólne ceny.
  2. Nastąpi automatyczne przekierowanie do sekcji Magazyny danych, w której zobaczysz nowo dodany magazyn danych.

Utwórz magazyn danych Kalendarza Google:

  1. Kliknij + Utwórz magazyn danych.
  2. W sekcji Źródło wyszukaj Kalendarz Google i kliknij Wybierz.
  3. W sekcji Działania kliknij Pomiń.
  4. W sekcji Konfiguracja ustaw w polu Nazwa łącznika danych wartość calendar.
  5. Kliknij Utwórz.
  6. Nastąpi automatyczne przekierowanie do sekcji Magazyny danych, w której zobaczysz nowo dodany magazyn danych.

Utwórz magazyn danych Gmaila:

  1. Kliknij + Nowy magazyn danych.
  2. W sekcji Źródło wyszukaj Google Gmail i kliknij Wybierz.
  3. W sekcji Działania kliknij Pomiń.
  4. W sekcji Konfiguracja ustaw w polu Nazwa łącznika danych wartość gmail.
  5. Kliknij Utwórz.
  6. Nastąpi automatyczne przekierowanie do sekcji Magazyny danych, w której zobaczysz nowo dodany magazyn danych.

3. Aplikacja Vertex AI Search

Umożliwia on użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Vertex AI w Google Workspace (Kalendarz, Gmail, Dysk).
  • Host agenta: Vertex AI Search.
  • Interfejs: widżet internetowy Vertex AI Search.

Przeglądanie pojęć

Aplikacja Vertex AI Search

Aplikacja Vertex AI Search udostępnia użytkownikom wyniki wyszukiwania, działania i agentów. W kontekście interfejsów API termin „aplikacja” może być używany zamiennie z terminem „wyszukiwarka”. Aby aplikacja mogła używać danych z magazynu danych do wyświetlania wyników wyszukiwania, odpowiedzi lub działań, musi być z nim połączona.

Widżet internetowy Vertex AI Search

Widżet internetowy Vertex AI Search to gotowy, konfigurowalny komponent interfejsu, który umożliwia programistom osadzanie paska wyszukiwania opartego na AI i interfejsu wyników bezpośrednio w witrynie przy minimalnym kodowaniu.

Wersja testowa Vertex AI Search

Vertex AI Search Preview to wbudowane środowisko testowe w konsoli Google Cloud, które umożliwia programistom sprawdzanie konfiguracji wyszukiwania i odpowiedzi generatywnych przed bezproblemowym wdrożeniem tych samych ustawień w gotowym do produkcji widżecie internetowym Vertex AI Search.

Sprawdzanie architektury rozwiązania

1f337dc91da74391.png

Utwórz aplikację

Utwórz nową aplikację do wyszukiwania, aby zakotwiczyć magazyny danych.

W konsoli Google Cloud otwórz AI Applications > Aplikacje, a następnie wykonaj te czynności:

  1. Kliknij + Utwórz aplikację.
  2. W sekcji Typ w obszarze Wyszukiwanie niestandardowe (ogólne) kliknij Utwórz.

9714a5fff49b5e1b.png

  1. W sekcji Konfiguracja zaznacz Funkcje wersji Enterprise i Odpowiedzi generatywne po zapoznaniu się z cenami i wyrażeniu zgody na nie.
  2. W polu Nazwa aplikacji wpisz codelab.
  3. Identyfikator zostanie wygenerowany na podstawie nazwy i wyświetlony pod polem. Skopiuj go.
  4. W polu Nazwa firmy ustaw Codelab.
  5. Ustaw Wiele regionów na global (Global).
  6. Kliknij Dalej.

327702cd837cbb18.png

  1. W sekcji Dane wybierz magazyny danych Dysk, Gmail i Kalendarz, a następnie kliknij Dalej.

5745607f3c43d5c0.png

  1. W sekcji Ceny wybierz preferowany model cenowy i kliknij Utwórz. W tym samouczku zalecamy ogólne ceny.
  2. Aplikacja zostanie utworzona i automatycznie przekierujemy Cię do sekcji Aplikacje AI > Aplikacje > codelab > Przegląd aplikacji.
  3. Otwórz sekcję Połączone magazyny danych.
  4. Po kilku minutach wszystkie stany połączonych magazynów danych powinny mieć wartość Aktywny.

d53ed9d9d1ced955.png

Konfigurowanie widżetu internetowego

Skonfiguruj wygląd i działanie widżetu wyszukiwania.

  1. Kliknij Konfiguracje.
  2. Na karcie UI ustaw Typ wyszukiwania na Wyszukiwanie z dalszymi pytaniami, a następnie kliknij Zapisz i opublikuj.

af1ca3bd78e1cb4f.png

Wypróbuj aplikację

Testowanie aplikacji do wyszukiwania bezpośrednio w konsoli Google Cloud.

  1. Otwórz Podgląd. Wyświetli się widżet internetowy.
  2. Na czacie wpisz Do I have any meetings today? i naciśnij enter.
  3. Na czacie wpisz Did I receive an email on March 1st 2026? i naciśnij enter.
  4. Na czacie wpisz Give me the title of the latest Drive file I created i naciśnij enter.

d276ff8e2b9d0ddf.png

4. Agent niestandardowy

Ten agent umożliwia użytkownikom wyszukiwanie danych i podejmowanie działań w Workspace w języku naturalnym za pomocą niestandardowych narzędzi i reguł. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Vertex AI dla Google Workspace (Kalendarz, Gmail, Dysk), zarządzany przez Google serwer protokołu kontekstowego modelu wyszukiwania Vertex AI (MCP), niestandardowa funkcja narzędzia do wysyłania wiadomości w Google Chat (za pomocą interfejsu Google Chat API).
  • Narzędzia do tworzenia agentów: pakiet Agent Development Kit (ADK).
  • Host agenta: Vertex AI Agent Engine.
  • UI: ADK Web.

Sprawdź pojęcia

Agent Development Kit (ADK)

Pakiet Agent Development Kit (ADK) to specjalistyczny zestaw narzędzi i platform, który upraszcza tworzenie autonomicznych agentów AI dzięki gotowym modułom do wnioskowania, zarządzania pamięcią i integracji narzędzi.

Model Context Protocol (MCP)

Protokół kontekstu modelu (MCP) to otwarty standard zaprojektowany z myślą o umożliwieniu bezproblemowej i bezpiecznej integracji aplikacji AI z różnymi źródłami danych lub narzędziami za pomocą uniwersalnego interfejsu „plug and play”.

Narzędzie do funkcji

Narzędzie funkcji to predefiniowana procedura wykonywalna, którą model AI może wywołać w celu wykonania określonych działań lub pobrania danych w czasie rzeczywistym z systemów zewnętrznych, co rozszerza jego możliwości poza proste generowanie tekstu.

ADK Web

ADK web to wbudowany interfejs deweloperski, który jest dostarczany z pakietem ADK SDK, aby ułatwić tworzenie i debugowanie.

Sprawdzanie architektury rozwiązania

f14251cca6a19b1f.png

Sprawdzanie kodu źródłowego

agent.py

Poniższy kod uwierzytelnia się w Vertex AI, inicjuje narzędzia interfejsu API MCP i Chat w Vertex AI Search oraz definiuje zachowanie agenta.

  1. Uwierzytelnianie: pobiera ACCESS_TOKEN ze zmiennych środowiskowych, aby uwierzytelniać wywołania MCP i interfejsu API.
  2. Konfiguracja narzędzi: inicjuje vertexai_mcp, czyli zestaw narzędzi, który łączy się z serwerem protokołu Model Context Protocol (MCP) Vertex AI Search, oraz narzędzie send_direct_message. Dzięki temu agent może przeszukiwać połączone magazyny danych i wysyłać wiadomości w Google Chat.
  3. Definicja agenta: określa root_agent za pomocą modelu gemini-2.5-flash. Instrukcje nakazują agentowi priorytetowe używanie narzędzia do wyszukiwania w celu uzyskiwania informacji oraz narzędzia send_direct_message do wykonywania działań, co skutecznie opiera działanie agenta na danych przedsiębiorstwa.
...
MODEL = "gemini-2.5-flash"

# Access token for authentication
ACCESS_TOKEN = os.environ.get("ACCESS_TOKEN")
if not ACCESS_TOKEN:
    raise ValueError("ACCESS_TOKEN environment variable must be set")

VERTEXAI_SEARCH_TIMEOUT = 15.0

def get_project_id():
    """Fetches the consumer project ID from the environment natively."""
    _, project = google.auth.default()
    if project:
        return project
    raise Exception(f"Failed to resolve GCP Project ID from environment.")

def find_serving_config_path():
    """Dynamically finds the default serving config in the engine."""
    project_id = get_project_id()
    engines = discoveryengine_v1.EngineServiceClient().list_engines(
        parent=f"projects/{project_id}/locations/global/collections/default_collection"
    )
    for engine in engines:
        # engine.name natively contains the numeric Project Number
        return f"{engine.name}/servingConfigs/default_serving_config"
    raise Exception(f"No Discovery Engines found in project {project_id}")

def send_direct_message(email: str, message: str) -> dict:
    """Sends a Google Chat Direct Message (DM) to a specific user by email address."""
    chat_client = chat_v1.ChatServiceClient(
        credentials=Credentials(token=ACCESS_TOKEN)
    )

    # 1. Setup the DM space or find existing one
    person = chat_v1.User(
        name=f"users/{email}",
        type_=chat_v1.User.Type.HUMAN
    )
    membership = chat_v1.Membership(member=person)
    space_req = chat_v1.Space(space_type=chat_v1.Space.SpaceType.DIRECT_MESSAGE)
    setup_request = chat_v1.SetUpSpaceRequest(
        space=space_req,
        memberships=[membership]
    )
    space_response = chat_client.set_up_space(request=setup_request)
    space_name = space_response.name
    
    # 2. Send the message
    msg = chat_v1.Message(text=message)
    message_request = chat_v1.CreateMessageRequest(
        parent=space_name,
        message=msg
    )
    message_response = chat_client.create_message(request=message_request)
    
    return {"status": "success", "message_id": message_response.name, "space": space_name}

vertexai_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://discoveryengine.googleapis.com/mcp",
        timeout=VERTEXAI_SEARCH_TIMEOUT,
        sse_read_timeout=VERTEXAI_SEARCH_TIMEOUT,
        headers={"Authorization": f"Bearer {ACCESS_TOKEN}"}
    ),
    tool_filter=['search']
)

# Answer nicely the following user queries:
#  - Please find my meetings for today, I need their titles and links
#  - What is the latest Drive file I created?
#  - What is the latest Gmail message I received?
#  - Please send the following message to someone@example.com: Hello, this is a test message.

root_agent = LlmAgent(
    model=MODEL,
    name='enterprise_ai',
    instruction=f"""
        You are a helpful assistant that always uses the Vertex AI MCP search tool to answer the user's message, unless the user asks you to send a message to someone.
        If the user asks you to send a message to someone, use the send_direct_message tool to send the message.
        You MUST unconditionally use the Vertex AI MCP search tool to find answer, even if you believe you already know the answer or believe the Vertex AI MCP search tool does not contain the data.
        The Vertex AI MCP search tool accesses the user's data through datastores including Google Drive, Google Calendar, and Gmail.
        Only use the Vertex AI MCP search tool with servingConfig and query parameters, do not use any other parameters.
        Always use the servingConfig {find_serving_config_path()} while using the Vertex AI MCP search tool.
    """,
    tools=[vertexai_mcp, FunctionTool(send_direct_message)]
)

Pobieranie kodu źródłowego

Aby rozpocząć, pobierz przykładowy kod do środowiska lokalnego.

  1. Pobierz to repozytorium GitHub.

  1. W terminalu otwórz katalog solutions/enterprise-ai-agent-local.

włączyć interfejsy API,

Rozwiązanie wymaga włączenia dodatkowych interfejsów API:

  1. W konsoli Google Cloud włącz interfejsy API Vertex AI, Cloud Resource Manager i Google Chat:

60bae4065338c5bf.png

  1. Kliknij Menu ☰ > Interfejsy API i usługi > Włączone interfejsy API i usługi, a potem sprawdź, czy na liście znajdują się Vertex AI API, Cloud Resource Manager APIGoogle Chat API.

Rozwiązanie wymaga konfiguracji ekranu zgody:

  1. W konsoli Google Cloud kliknij Menu ☰ > Platforma Google Auth > Branding.

  1. Kliknij Rozpocznij.
  2. W sekcji Informacje o aplikacji ustaw Nazwę aplikacji na Codelab .
  3. W polu Adres e-mail dla użytkowników potrzebujących pomocy wybierz adres e-mail, na który użytkownicy mogą pisać, aby się z Tobą skontaktować, jeśli mają pytania dotyczące ich zgody.
  4. Kliknij Dalej.
  5. W sekcji Odbiorcy wybierz Wewnętrzny.
  6. Kliknij Dalej.
  7. W sekcji Dane kontaktowe wpisz adres e-mail, na który będziesz otrzymywać powiadomienia o zmianach w projekcie.
  8. Kliknij Dalej.
  9. W sekcji Zakończ zapoznaj się z zasadami dotyczącymi danych użytkownika w usługach interfejsu API Google, a jeśli je akceptujesz, kliknij Akceptuję zasady dotyczące danych użytkownika w usługach interfejsu API Google.
  10. Kliknij Dalej, a potem Utwórz.

bb53eeb45c51d301.png

  1. Konfiguracja zostanie zapisana i automatycznie przejdziesz do sekcji Platforma uwierzytelniania Google > Przegląd.

Więcej informacji znajdziesz w pełnym przewodniku Konfigurowanie zgody OAuth.

Tworzenie danych uwierzytelniających klienta OAuth

Utwórz nowego klienta OAuth aplikacji na komputery, aby uwierzytelnić użytkownika w środowisku lokalnym:

  1. W konsoli Google Cloud kliknij Menu ☰ > Platforma uwierzytelniania Google > Klienci.

  1. Kliknij + Utwórz klienta.
  2. Jako Typ aplikacji wybierz Aplikacja na komputery.
  3. W polu Nazwa wpisz codelab.
  4. Kliknij Utwórz. Wyświetlą się nowo utworzone dane logowania.
  5. Kliknij Pobierz JSON i zapisz plik jako client_secret.json w katalogu solutions/enterprise-ai-agent-local.

c1c9bc2f8c14dd6c.png

Włączanie Vertex AI Search MCP

  1. W terminalu wykonaj to polecenie:
gcloud beta services mcp enable discoveryengine.googleapis.com \
     --project=$(gcloud config get-value project)

Konfigurowanie aplikacji Google Chat

Skonfiguruj aplikację Google Chat, podając podstawowe informacje.

  1. W konsoli Google Cloud w polu wyszukiwania Google Cloud wpisz Google Chat API, kliknij Google Chat API, Zarządzaj i Konfiguracja.

  1. Ustaw Nazwę aplikacjiOpis na Vertex AI.
  2. Ustaw adres URL awatara na https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png.
  3. Odznacz opcję Włącz funkcje interaktywne, a potem w wyświetlonym oknie kliknij Wyłącz.
  4. Wybierz Loguj błędy w usłudze Logging.
  5. Kliknij Zapisz.

952e7ebcb945f1b2.png

Uruchamianie agenta w ADK Web

Uruchom agenta lokalnie za pomocą interfejsu internetowego ADK.

  1. W terminalu otwórz katalog solutions/enterprise-ai-agent-local, a następnie wykonaj to polecenie:
# 1. Authenticate with all the required scopes
gcloud auth application-default login \
  --client-id-file=client_secret.json \
   --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/chat.spaces,https://www.googleapis.com/auth/chat.messages

# 2. Configure environment
export ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
export GOOGLE_GENAI_USE_VERTEXAI=1
export GOOGLE_CLOUD_PROJECT=$(gcloud config get-value project)
export GOOGLE_CLOUD_LOCATION=us-central1

# 3. Create and activate a new virtual environment
python3 -m venv .venv
source .venv/bin/activate

# 4. Install poetry and project dependencies
pip install poetry
poetry install

# 5. Start ADK Web
adk web

95fc30883ce3d56f.png

Wypróbuj agenta

Sprawdź przepływ, rozmawiając z niestandardowym agentem.

  1. W przeglądarce otwórz witrynę ADK.
  2. Na czacie wpisz Please find my meetings for today, I need their titles and links i naciśnij enter.
  3. Agent odpowiada listą wydarzeń w Kalendarzu (w zależności od konta użytkownika).
  4. Na czacie wpisz Please send a Chat message to someone@example.com with the following text: Hello! i naciśnij enter.
  5. Agent odpowiada wiadomością z potwierdzeniem.

145f47f45332e6be.png

293ec4d3e2bb6a0.png

5. Agent jako dodatek do Google Workspace

Ten agent umożliwia użytkownikom wyszukiwanie danych Workspace w języku naturalnym w interfejsach aplikacji Workspace. Opiera się na tych elementach:

  • Model: Gemini.
  • Dane i działania: magazyny danych Vertex AI dla Google Workspace (Kalendarz, Gmail, Dysk), zarządzany przez Google serwer protokołu kontekstowego modelu wyszukiwania Vertex AI (MCP), niestandardowa funkcja narzędzia do wysyłania wiadomości w Google Chat (za pomocą interfejsu Google Chat API).
  • Narzędzia do tworzenia agentów: pakiet Agent Development Kit (ADK).
  • Host agenta: Vertex AI Agent Engine.
  • Interfejs: dodatek Google Workspace do Google Chat i Gmaila (można go łatwo rozszerzyć na Kalendarz, Dysk, Dokumenty, Arkusze i Prezentacje).
  • Dodatek do Google Workspace: Apps Script, interfejsy API Vertex AI Agent Engine, kontekstowe (wybrana wiadomość w Gmailu).

Przeglądanie pojęć

Dodatek do Google Workspace

Dodatek do Google Workspace to dostosowana aplikacja, która rozszerza jedną lub kilka aplikacji Google Workspace (Gmail, Google Chat, Kalendarz, Dokumenty, Dysk, Meet, Arkusze i Prezentacje).

Apps Script

Apps Script to oparta na chmurze platforma JavaScript obsługiwana przez Dysk Google, która umożliwia integrację z usługami Google i automatyzację zadań w tych usługach.

Platforma kart Google Workspace

Platforma kart w Google Workspace umożliwia deweloperom tworzenie rozbudowanych, interaktywnych interfejsów użytkownika. Umożliwia tworzenie uporządkowanych i atrakcyjnych wizualnie kart, które mogą zawierać tekst, obrazy, przyciski i inne widżety. Karty te zwiększają komfort użytkowania, ponieważ zawierają uporządkowane informacje i umożliwiają szybkie wykonywanie działań bezpośrednio w aplikacjach Workspace.

Sprawdzanie architektury rozwiązania

f2fd048ba298f431.png

Sprawdzanie kodu źródłowego

Agent

agent.py

Poniższy kod uwierzytelnia się w Vertex AI, inicjuje narzędzia interfejsu API MCP i Chat w Vertex AI Search oraz definiuje zachowanie agenta.

  1. Uwierzytelnianie: używa funkcji pomocniczej _get_access_token_from_context do pobierania tokena uwierzytelniania (CLIENT_AUTH_NAME), który wstawia klient. Ten token jest niezbędny do bezpiecznego wywoływania usług podrzędnych, takich jak Vertex AI Search MCP i narzędzia Google Chat.
  2. Konfiguracja narzędzi: inicjuje vertexai_mcp, czyli zestaw narzędzi, który łączy się z serwerem protokołu Model Context Protocol (MCP) Vertex AI Search, oraz narzędzie send_direct_message. Dzięki temu agent może przeszukiwać połączone magazyny danych i wysyłać wiadomości w Google Chat.
  3. Definicja agenta: określa root_agent za pomocą modelu gemini-2.5-flash. Instrukcje nakazują agentowi priorytetowe używanie narzędzia do wyszukiwania w celu uzyskiwania informacji oraz narzędzia send_direct_message do wykonywania działań, co skutecznie opiera działanie agenta na danych przedsiębiorstwa.
...
MODEL = "gemini-2.5-flash"

# Client injects a bearer token into the ToolContext state.
# The key pattern is "CLIENT_AUTH_NAME_<random_digits>".
# We dynamically parse this token to authenticate our MCP and API calls.
CLIENT_AUTH_NAME = "enterprise-ai"

VERTEXAI_SEARCH_TIMEOUT = 15.0

def get_project_id():
    """Fetches the consumer project ID from the environment natively."""
    _, project = google.auth.default()
    if project:
        return project
    raise Exception(f"Failed to resolve GCP Project ID from environment.")

def find_serving_config_path():
    """Dynamically finds the default serving config in the engine."""
    project_id = get_project_id()
    engines = discoveryengine_v1.EngineServiceClient().list_engines(
        parent=f"projects/{project_id}/locations/global/collections/default_collection"
    )
    for engine in engines:
        # engine.name natively contains the numeric Project Number
        return f"{engine.name}/servingConfigs/default_serving_config"
    raise Exception(f"No Discovery Engines found in project {project_id}")

def _get_access_token_from_context(tool_context: ToolContext) -> str:
    """Helper method to dynamically parse the intercepted bearer token from the context state."""
    escaped_name = re.escape(CLIENT_AUTH_NAME)
    pattern = re.compile(fr"^{escaped_name}_\d+$")
    # Handle ADK varying state object types (Raw Dict vs ADK State)
    state_dict = tool_context.state.to_dict() if hasattr(tool_context.state, 'to_dict') else tool_context.state
    matching_keys = [k for k in state_dict.keys() if pattern.match(k)]
    if matching_keys:
        return state_dict.get(matching_keys[0])
    raise Exception(f"No bearer token found in ToolContext state matching pattern {pattern.pattern}")

def auth_header_provider(tool_context: ToolContext) -> dict[str, str]:
    token = _get_access_token_from_context(tool_context)
    return {"Authorization": f"Bearer {token}"}

def send_direct_message(email: str, message: str, tool_context: ToolContext) -> dict:
    """Sends a Google Chat Direct Message (DM) to a specific user by email address."""
    chat_client = chat_v1.ChatServiceClient(
        credentials=Credentials(token=_get_access_token_from_context(tool_context))
    )

    # 1. Setup the DM space or find existing one
    person = chat_v1.User(
        name=f"users/{email}",
        type_=chat_v1.User.Type.HUMAN
    )
    membership = chat_v1.Membership(member=person)
    space_req = chat_v1.Space(space_type=chat_v1.Space.SpaceType.DIRECT_MESSAGE)
    setup_request = chat_v1.SetUpSpaceRequest(
        space=space_req,
        memberships=[membership]
    )
    space_response = chat_client.set_up_space(request=setup_request)
    space_name = space_response.name
    
    # 2. Send the message
    msg = chat_v1.Message(text=message)
    message_request = chat_v1.CreateMessageRequest(
        parent=space_name,
        message=msg
    )
    message_response = chat_client.create_message(request=message_request)
    
    return {"status": "success", "message_id": message_response.name, "space": space_name}

vertexai_mcp = McpToolset(
    connection_params=StreamableHTTPConnectionParams(
        url="https://discoveryengine.googleapis.com/mcp",
        timeout=VERTEXAI_SEARCH_TIMEOUT,
        sse_read_timeout=VERTEXAI_SEARCH_TIMEOUT
    ),
    tool_filter=['search'],
    # The auth_header_provider dynamically injects the bearer token from the ToolContext
    # into the MCP call for authentication.
    header_provider=auth_header_provider
)

# Answer nicely the following user queries:
#  - Please find my meetings for today, I need their titles and links
#  - What is the latest Drive file I created?
#  - What is the latest Gmail message I received?
#  - Please send the following message to someone@example.com: Hello, this is a test message.

root_agent = LlmAgent(
    model=MODEL,
    name='enterprise_ai',
    instruction=f"""
        You are a helpful assistant that always uses the Vertex AI MCP search tool to answer the user's message, unless the user asks you to send a message to someone.
        If the user asks you to send a message to someone, use the send_direct_message tool to send the message.
        You MUST unconditionally use the Vertex AI MCP search tool to find answer, even if you believe you already know the answer or believe the Vertex AI MCP search tool does not contain the data.
        The Vertex AI MCP search tool accesses the user's data through datastores including Google Drive, Google Calendar, and Gmail.
        Only use the Vertex AI MCP search tool with servingConfig and query parameters, do not use any other parameters.
        Always use the servingConfig {find_serving_config_path()} while using the Vertex AI MCP search tool.
    """,
    tools=[vertexai_mcp, FunctionTool(send_direct_message)]
)

Klient

appsscript.json

Poniższa konfiguracja określa wyzwalacze i uprawnienia dodatku.

  1. Definiuje dodatek: informuje Workspace, że ten projekt jest dodatkiem do Google Chat i Gmaila.
  2. Wywoływanie kontekstowe: w przypadku Gmaila konfiguruje contextualTrigger, które uruchamia onAddonEvent za każdym razem, gdy użytkownik otworzy e-maila. Dzięki temu dodatek może „widzieć” treść e-maila.
  3. Uprawnienia: zawiera listę oauthScopes wymaganych do działania dodatku, np. uprawnień do odczytywania bieżącego e-maila, wykonywania skryptu i łączenia się z usługami zewnętrznymi (takimi jak interfejsy API Vertex AI).
...
"addOns": {
    "common": {
      "name": "Vertex AI",
      "logoUrl": "https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png"
    },
    "chat": {},
    "gmail": {
      "contextualTriggers": [
        {
          "unconditional": {},
          "onTriggerFunction": "onAddonEvent"
        }
      ]
    }
  },
  "oauthScopes": [
   "https://www.googleapis.com/auth/script.external_request",
   "https://www.googleapis.com/auth/cloud-platform",
   "https://www.googleapis.com/auth/gmail.addons.execute",
   "https://www.googleapis.com/auth/gmail.addons.current.message.readonly"
 ]
...

Chat.gs

Poniższy kod obsługuje przychodzące wiadomości Google Chat.

  1. Otrzymuje wiadomości: funkcja onMessage jest punktem wejścia dla interakcji z wiadomościami.
  2. Zarządza kontekstem: zapisuje space.name (identyfikator pokoju w Google Chat) we właściwościach użytkownika. Dzięki temu, gdy agent będzie gotowy do odpowiedzi, będzie dokładnie wiedział, w której rozmowie opublikować wiadomość.
  3. Delegates to Agent: wywołuje funkcję requestAgent, przekazując wiadomość użytkownika do logiki podstawowej, która obsługuje komunikację z interfejsem API.
...
// Service that handles Google Chat operations.

// Handle incoming Google Chat message events, actions will be taken via Google Chat API calls
function onMessage(event) {
  if (isInDebugMode()) {
    console.log(`MESSAGE event received (Chat): ${JSON.stringify(event)}`);
  }
  // Extract data from the event.
  const chatEvent = event.chat;
  setChatConfig(chatEvent.messagePayload.space.name);

  // Request AI agent to answer the message
  requestAgent(chatEvent.messagePayload.message);
  // Respond with an empty response to the Google Chat platform to acknowledge execution
  return null; 
}

// --- Utility functions ---

// The Chat direct message (DM) space associated with the user
const SPACE_NAME_PROPERTY = "DM_SPACE_NAME"

// Sets the Chat DM space name for subsequent operations.
function setChatConfig(spaceName) {
  const userProperties = PropertiesService.getUserProperties();
  userProperties.setProperty(SPACE_NAME_PROPERTY, spaceName);
  console.log(`Space is set to ${spaceName}`);
}

// Retrieved the Chat DM space name to sent messages to.
function getConfiguredChat() {
  const userProperties = PropertiesService.getUserProperties();
  return userProperties.getProperty(SPACE_NAME_PROPERTY);
}

// Finds the Chat DM space name between the Chat app and the given user.
function findChatAppDm(userName) {
  return Chat.Spaces.findDirectMessage(
    { 'name': userName },
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

// Creates a Chat message in the configured space.
function createMessage(message) {
  const spaceName = getConfiguredChat();
  console.log(`Creating message in space ${spaceName}...`);
  return Chat.Spaces.Messages.create(
    message,
    spaceName,
    {},
    {'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}`}
  ).name;
}

Sidebar.gs

Poniższy kod tworzy pasek boczny Gmaila i przechwytuje kontekst e-maila.

  1. Tworzy interfejs: createSidebarCard tworzy interfejs wizualny za pomocą usługi kart Workspace. Tworzy prosty układ z obszarem do wpisywania tekstu i przyciskiem „Wyślij wiadomość”.
  2. Przechwytywanie kontekstu e-maila:handleSendMessage kod sprawdza, czy użytkownik aktualnie przegląda e-maila (event.gmail.messageId). Jeśli tak, bezpiecznie pobiera temat i treść e-maila i dołącza je do promptu użytkownika.
  3. Wyświetlanie wyniku: gdy agent odpowie, kod zaktualizuje kartę na pasku bocznym, aby wyświetlić odpowiedź.
...
// Service that handles Gmail operations.

// Triggered when the user opens the Gmail Add-on or selects an email.
function onAddonEvent(event) {
  // If this was triggered by a button click, handle it
  if (event.parameters && event.parameters.action === 'send') {
    return handleSendMessage(event);
  }

  // Otherwise, just render the default initial sidebar
  return createSidebarCard();
}

// Creates the standard Gmail sidebar card consisting of a text input and send button.
// Optionally includes an answer section if a response was generated.
function createSidebarCard(optionalAnswerSection) {
  const card = CardService.newCardBuilder();
  const actionSection = CardService.newCardSection();

  // Create text input for the user's message
  const messageInput = CardService.newTextInput()
    .setFieldName("message")
    .setTitle("Message")
    .setMultiline(true);

  // Create action for sending the message
  const sendAction = CardService.newAction()
    .setFunctionName('onAddonEvent')
    .setParameters({ 'action': 'send' });

  const sendButton = CardService.newTextButton()
    .setText("Send message")
    .setTextButtonStyle(CardService.TextButtonStyle.FILLED)
    .setOnClickAction(sendAction);

  actionSection.addWidget(messageInput);
  actionSection.addWidget(CardService.newButtonSet().addButton(sendButton));

  card.addSection(actionSection);

  // Attach the response at the bottom if we have one
  if (optionalAnswerSection) {
    card.addSection(optionalAnswerSection);
  }

  return card.build();
}

// Handles clicks from the Send message button.
function handleSendMessage(event) {
  const commonEventObject = event.commonEventObject || {};
  const formInputs = commonEventObject.formInputs || {};
  const messageInput = formInputs.message;

  let userMessage = "";
  if (messageInput && messageInput.stringInputs && messageInput.stringInputs.value.length > 0) {
    userMessage = messageInput.stringInputs.value[0];
  }

  if (!userMessage || userMessage.trim().length === 0) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Please enter a message."))
      .build();
  }

  let finalQueryText = `USER MESSAGE TO ANSWER: ${userMessage}`;

  // If we have an email selected in Gmail, append its content as context
  if (event.gmail && event.gmail.messageId) {
    try {
      GmailApp.setCurrentMessageAccessToken(event.gmail.accessToken);
      const message = GmailApp.getMessageById(event.gmail.messageId);

      const subject = message.getSubject();
      const bodyText = message.getPlainBody() || message.getBody();

      finalQueryText += `\n\nEMAIL THE USER HAS OPENED ON SCREEN:\nSubject: ${subject}\nBody:\n---\n${bodyText}\n---`;
    } catch (e) {
      console.error("Could not fetch Gmail context: " + e);
      // Invalidate the token explicitly so the next prompt requests the missing scopes
      ScriptApp.invalidateAuth();

      CardService.newAuthorizationException()
        .setResourceDisplayName("Enterprise AI")
        .setAuthorizationUrl(ScriptApp.getAuthorizationUrl())
        .throwException();
    }
  }

  try {
    const response = queryAgent({ text: finalQueryText });

    // We leverage the 'showdown' library to parse the LLM's Markdown output into HTML
    // We also substitute markdown listings with arrows and adjust newlines for clearer rendering in the sidebar
    let displayedText = substituteListingsFromMarkdown(response.text);
    displayedText = new showdown.Converter().makeHtml(displayedText).replace(/\n/g, '\n\n');

    const textParagraph = CardService.newTextParagraph();
    textParagraph.setText(displayedText);

    const answerSection = CardService.newCardSection()
      .addWidget(textParagraph);

    const updatedCard = createSidebarCard(answerSection);

    return CardService.newActionResponseBuilder()
      .setNavigation(CardService.newNavigation().updateCard(updatedCard))
      .build();

  } catch (err) {
    return CardService.newActionResponseBuilder()
      .setNotification(CardService.newNotification().setText("Error fetching response: " + err.message))
      .build();
  }
}
...

AgentHandler.gs

Poniższy kod koordynuje wywołanie interfejsu API do Vertex AI.

  1. Orchestrates the API Call: queryAgent to pomost między dodatkiem a Vertex AI Agent Engine. Tworzy żądanie, które zawiera zapytanie użytkownika i token uwierzytelniania w stanie.
  2. Strumieniowanie odpowiedzi: ponieważ odpowiedzi agenta mogą chwilę potrwać, korzysta z interfejsu streamQuery API ze zdarzeniami wysyłanymi przez serwer (SSE). Kod zbiera odpowiedź w częściach i odzyskuje pełną odpowiedź.
...
// Service that handles Vertex AI Agent operations.

// Submits a query to the AI agent and returns the response string synchronously
function queryAgent(input) {
 let systemPrompt = "SYSTEM PROMPT START Do not respond with tables but use bullet points instead." +
   " Do not ask the user follow-up questions or converse with them as history is not kept in this interface." +
   " SYSTEM PROMPT END\n\n";

 const requestPayload = {
   "class_method": "async_stream_query",
   "input": {
     "user_id": "vertex_ai_add_on",
     "message": { "role": "user", "parts": [{ "text": systemPrompt + input.text }] },
     "state_delta": {
       "enterprise-ai_999": `${ScriptApp.getOAuthToken()}`
     }
   }
 };

 const responseContentText = UrlFetchApp.fetch(
   `https://${getLocation()}-aiplatform.googleapis.com/v1/${getReasoningEngine()}:streamQuery?alt=sse`,
   {
     method: 'post',
     headers: { 'Authorization': `Bearer ${ScriptApp.getOAuthToken()}` },
     contentType: 'application/json',
     payload: JSON.stringify(requestPayload),
     muteHttpExceptions: true
   }
 ).getContentText();
  if (isInDebugMode()) {
   console.log(`Response: ${responseContentText}`);
 }

 const events = responseContentText.split('\n').map(s => s.replace(/^data:\s*/, '')).filter(s => s.trim().length > 0);
 console.log(`Received ${events.length} agent events.`);

 let author = "default";
 let answerText = "";
 for (const eventJson of events) {
   if (isInDebugMode()) {
     console.log("Event: " + eventJson);
   }
   const event = JSON.parse(eventJson);

   // Retrieve the agent responsible for generating the content
   author = event.author;
  
   // Ignore events that are not useful for the end-user
   if (!event.content) {
     console.log(`${author}: internal event`);
     continue;
   }

   // Handle text answers
   const parts = event.content.parts || [];
   const textPart = parts.find(p => p.text);
   if (textPart) {
     answerText += textPart.text;
   }
 }
 return { author: author, text: answerText };
}
...

Wdrażanie agenta w Vertex AI Agent Engine

  1. W terminalu otwórz katalog solutions/enterprise-ai-agent z plikami źródłowymi pobranymi w poprzednich krokach, a następnie wykonaj to polecenie:
# 1. Create and activate a new virtual environment
deactivate
python3 -m venv .venv
source .venv/bin/activate

# 2. Install poetry and project dependencies
pip install poetry
poetry install

# 3. Deploy the agent
adk deploy agent_engine \
  --project=$(gcloud config get-value project) \
  --region=us-central1 \
  --display_name="Enterprise AI" \
  enterprise_ai

eafd2f9c4fbf305.png

  1. Gdy w logach zobaczysz wiersz Deploying to agent engine... (Wdrażanie w silniku agenta…), otwórz nowy terminal i wykonaj to polecenie, aby dodać wymagane uprawnienia do agenta usługi Vertex AI Reasoning Engine:
# 1. Get the current Project ID
PROJECT_ID=$(gcloud config get-value project)

# 2. Extract the Project Number for that ID
PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')

# 3. Construct the Service Account name
SERVICE_ACCOUNT="service-${PROJECT_NUMBER}@gcp-sa-aiplatform-re.iam.gserviceaccount.com"

# 4. Apply the IAM policy binding
gcloud projects add-iam-policy-binding $PROJECT_ID \
     --member="serviceAccount:$SERVICE_ACCOUNT" \
     --role="roles/discoveryengine.viewer"
  1. Poczekaj na zakończenie działania polecenia adk deploy, a następnie skopiuj nazwę zasobu nowo wdrożonego agenta z danych wyjściowych polecenia (na zielono).

d098fe1347d6581b.png

Inicjowanie konta usługi

Utwórz dedykowane konto usługi, aby autoryzować operacje po stronie serwera dodatku.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu ☰ > Administracja > Konta usługi > + Utwórz konto usługi.

  1. Ustaw Nazwę konta usługi na vertexai-add-on.

46be0eb53f416c59.png

  1. Kliknij Gotowe. Nastąpi przekierowanie na stronę Konta usługi, na której zobaczysz utworzone konto usługi.

f002fef61c71ed8.png

  1. Wybierz nowo utworzone konto usługi, a następnie kliknij kartę Klucze.
  2. Kliknij Dodaj klucz, a następnie Utwórz nowy klucz.
  3. Wybierz JSON, a potem kliknij Utwórz.

7b140535d9e1af44.png

  1. Okno dialogowe zostanie zamknięte, a nowo utworzona para kluczy publicznych/prywatnych zostanie automatycznie pobrana do środowiska lokalnego w postaci pliku JSON.

Tworzenie i konfigurowanie projektu Apps Script

Utwórz nowy projekt Apps Script, aby hostować kod dodatku, i skonfiguruj właściwości połączenia.

  1. Aby otworzyć projekt Apps Script dodatku Enterprise AI, kliknij ten przycisk:

  1. Kliknij Przegląd > Utwórz kopię.
  2. W projekcie Apps Script kliknij Ustawienia projektu > Edytuj właściwości skryptu > Dodaj właściwość skryptu, aby dodać właściwości skryptu.
  3. Ustaw REASONING_ENGINE_RESOURCE_NAME na nazwę zasobu agenta Vertex AI skopiowaną w poprzednich krokach. Ma on taki format:
projects/<PROJECT_NUMBER>/locations/us-central1/reasoningEngines/<AGENT_ID>
  1. Ustaw wartość APP_SERVICE_ACCOUNT_KEY na klucz JSON z pliku konta usługi pobranego w poprzednich krokach.
  2. Kliknij Zapisz właściwości skryptu.

Wdrażanie w Gmailu i Google Chat

Wdróż dodatek, aby przetestować go bezpośrednio w Gmailu i Google Chat.

W projekcie Apps Script wykonaj te czynności:

  1. Kliknij Wdróż > Testuj wdrożenia, a potem Zainstaluj. Jest już dostępna w Gmailu.
  2. W sekcji Identyfikator wdrożenia z nagłówka kliknij Kopiuj.

b0cba69eef271850.png

W konsoli Google Cloud wykonaj te czynności:

  1. W polu wyszukiwania Google Cloud wpisz Google Chat API, kliknij Google Chat API, a następnie Zarządzaj i Konfiguracja.

  1. Kliknij Włącz funkcje interaktywne.
  2. Odznacz opcję Dołączanie do pokoi i rozmów grupowych.
  3. W sekcji Ustawienia połączenia wybierz Apps Script.
  4. Ustaw Identyfikator wdrożenia na Identyfikator wdrożenia głównego skopiowany w poprzednich krokach.
  5. W sekcji Widoczność wybierz Udostępnij tę aplikację do obsługi czatu konkretnym osobom i grupom w domenie Workspace i wpisz swój adres e-mail.
  6. Kliknij Zapisz.

6ea187ccb90a0e49.png

Wypróbuj dodatek

Sprawdź, czy dodatek na żywo może pobierać dane i odpowiadać na pytania w kontekście.

Otwórz Google Chat w nowej karcie, a następnie wykonaj te czynności:

  1. Otwórz czat z aplikacją Google Chat Vertex AI.

495632314dec5a5d.png

  1. Kliknij Skonfiguruj i przejdź proces uwierzytelniania.
  2. Wpisz What are my meetings for today? i naciśnij enter. Aplikacja do obsługi czatu Vertex AI powinna odpowiedzieć wynikami.

172da43f310a0579.png

Otwórz Gmail w nowej karcie i wykonaj te czynności:

  1. Wyślij do siebie e-maila z polem Subject (Temat) ustawionym na We need to talk i polem Body (Treść) ustawionym na Are you available today between 8 and 9 AM?.
  2. Otwórz nowo otrzymanego e-maila.
  3. Otwórz pasek boczny dodatku Vertex AI.
  4. W polu Wiadomość ustaw Do I have any meeting conflicts?.
  5. Kliknij Wyślij wiadomość.
  6. Odpowiedź jest wyświetlana po przycisku.

840b494aa5eaa1ef.png

6. Czyszczenie danych

Usuwanie projektu Google Cloud

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby użyte w tym ćwiczeniu, zalecamy usunięcie projektu Google Cloud.

W konsoli Google Cloud wykonaj te czynności:

  1. Kliknij Menu ☰ > Administracja > Ustawienia.

.

  1. Kliknij Wyłącz.
  2. Wpisz identyfikator projektu.
  3. Kliknij Wyłącz mimo to.

3b9492d97f771b2c.png

7. Gratulacje

Gratulacje! Stworzyliście rozwiązania, które wykorzystują potencjał połączenia Vertex AI i Google Workspace, aby ułatwić pracę.

Co dalej?

W tym samouczku przedstawiamy tylko najbardziej typowe przypadki użycia, ale istnieje wiele obszarów, które możesz uwzględnić w swoich rozwiązaniach, np.:

  • Korzystaj z narzędzi dla programistów opartych na AI, takich jak interfejs wiersza poleceń Gemini i Antigravity.
  • integrować się z innymi platformami i narzędziami agentów, takimi jak niestandardowe serwery MCP, niestandardowe wywołania funkcji i generatywne interfejsy użytkownika;
  • Integracja z innymi modelami AI, w tym modelami niestandardowymi, hostowanymi na dedykowanych platformach, takich jak Vertex AI.
  • Integracja z innymi agentami hostowanymi na dedykowanych platformach, takich jak Dialogflow, lub przez inne firmy za pośrednictwem Cloud Marketplace.
  • Publikuj agentów w Cloud Marketplace, aby umożliwić korzystanie z nich zespołom, organizacjom i użytkownikom publicznym.

Więcej informacji

Deweloperzy mają do dyspozycji wiele materiałów, takich jak filmy w YouTube, strony z dokumentacją, przykłady kodu i samouczki: