Intégrer les agents Gemini Enterprise à Google Workspace

1. Avant de commencer

83e1c1629d14fb31.png

Qu'est-ce que Gemini Enterprise ?

Gemini Enterprise est une plate-forme agentive avancée qui met le meilleur de l'IA de Google à la disposition de chaque employé, pour chaque flux de travail. Il permet aux équipes de découvrir, créer, partager et exécuter des agents IA dans un environnement sécurisé.

  • Accès à des modèles avancés : les utilisateurs bénéficient d'un accès immédiat à l'IA multimodale la plus performante de Google, y compris Gemini, pour relever des défis commerciaux complexes.
  • Utilisez des agents spécialisés : la suite inclut des agents Google prêts à l'emploi pour la recherche, le codage et la prise de notes, afin de générer de la valeur immédiatement.
  • Donnez les moyens à chaque employé : les options sans code et avec code permettent au personnel de tous les services de créer et de gérer ses propres agents personnalisés pour l'automatisation des workflows.
  • Ancrez les agents dans les données : les agents peuvent être connectés de manière sécurisée aux données internes de l'entreprise et aux applications tierces pour s'assurer que leurs réponses sont contextuellement précises.
  • Gouvernance centralisée : les administrateurs peuvent visualiser et auditer toutes les activités des agents pour s'assurer que l'organisation respecte des normes strictes en matière de sécurité et de conformité.
  • Développez votre activité grâce aux écosystèmes : la plate-forme s'intègre à un vaste réseau d'applications partenaires et de fournisseurs de services pour étendre l'automatisation à différents systèmes.

127f2ed7d484722c.png

Qu'est-ce que Google Workspace ?

Google Workspace est une suite de solutions de productivité et de collaboration dans le cloud conçue pour les particuliers, les établissements scolaires et les entreprises :

  • Communication : services de messagerie professionnelle (Gmail), de visioconférence (Meet) et de messagerie d'équipe (Chat).
  • Création de contenu : outils permettant de rédiger des documents (Docs), de créer des feuilles de calcul (Sheets) et de concevoir des présentations (Slides).
  • Organisation : agendas partagés (Agenda) et prise de notes numériques (Keep).
  • Stockage : espace cloud centralisé pour enregistrer et partager des fichiers de manière sécurisée (Drive).
  • Gestion : commandes d'administration permettant de gérer les utilisateurs et les paramètres de sécurité (console d'administration Workspace).

Quels types d'intégrations personnalisées ?

Google Workspace et Gemini Enterprise créent une puissante boucle de rétroaction dans laquelle Workspace fournit des données en temps réel et un contexte de collaboration, tandis que Gemini Enterprise offre les modèles, le raisonnement agentif et l'orchestration nécessaires pour automatiser les workflows intelligents.

  • Connectivité intelligente : les dépôts de données, les API et les serveurs MCP (gérés par Google et personnalisés) gérés par Google permettent aux agents d'accéder de manière sécurisée et fluide aux données Workspace, et d'effectuer des actions au nom des utilisateurs.
  • Agents personnalisés : à l'aide de concepteurs no-code ou de frameworks pro-code, les équipes peuvent créer des agents spécialisés basés sur des données et des actions Workspace régies par les administrateurs.
  • Intégration native : les modules complémentaires Workspace comblent le fossé entre les systèmes d'IA et les applications comme Chat et Gmail, que ce soit par le biais de composants d'interface utilisateur dédiés ou de processus en arrière-plan. Les agents peuvent ainsi aider les utilisateurs instantanément et de manière contextuelle, où qu'ils soient.

En combinant l'écosystème de productivité robuste de Google Workspace avec la puissance agentive avancée de Gemini Enterprise, les entreprises peuvent transformer leurs opérations grâce à des agents d'IA personnalisés et ancrés dans les données. Ces agents automatisent les workflows complexes directement dans les outils que leurs équipes utilisent déjà au quotidien.

Prérequis

Si vous souhaitez suivre toutes les étapes dans votre propre environnement, vous aurez besoin des éléments suivants :

Objectifs de l'atelier

Dans cet atelier de programmation, nous allons créer trois solutions avec des agents d'IA Gemini Enterprise étroitement intégrés à Google Workspace. Ils vous présenteront des modèles d'architecture pouvant être utilisés pour interagir avec les données, les actions et les UI.

Agent personnalisé sans code

Cet agent permet aux utilisateurs de rechercher des données et d'effectuer des actions pour Workspace dans leur langue naturelle. Il repose sur les éléments suivants :

  • Modèle : Gemini
  • Données et actions : datastores Gemini Enterprise pour Google Workspace (Agenda, Gmail, Drive, NotebookLM), Recherche Google.
  • Outils de création d'agents : Agent Designer Gemini Enterprise.
  • Hôte de l'agent : Gemini Enterprise.
  • Interface utilisateur : application Web Gemini Enterprise.

90e42539e5959634.png

60e62437ce29a818.png

Agent personnalisé avec code

Cet agent permet aux utilisateurs de rechercher des données et d'effectuer des actions dans Workspace en langage naturel à l'aide d'outils et de règles personnalisés. Il repose sur les éléments suivants :

  • Modèle : Gemini
  • Données et actions : dépôts de données Gemini Enterprise pour Google Workspace (Agenda, Gmail, Drive, NotebookLM), Recherche Google, serveur MCP (Model Context Protocol) Vertex AI Search géré par Google, fonction d'outil personnalisé pour envoyer des messages Google Chat (via l'API Google Chat).
  • Outils de création d'agents : Agent Development Kit (ADK).
  • Hôte de l'agent : Vertex AI Agent Engine.
  • Interface utilisateur : application Web Gemini Enterprise.

1647ebff031c42e7.png

a8087d2351e77fb4.png

Agent par défaut en tant que module complémentaire Google Workspace

Cet agent permet aux utilisateurs de rechercher des données Workspace dans leur langue naturelle dans le contexte des UI des applications Workspace. Il repose sur les éléments suivants :

  • Modèle : Gemini
  • Données : dépôts de données Gemini Enterprise pour Google Workspace (Agenda, Gmail, Drive, NotebookLM), Recherche Google.
  • Hôte de l'agent : Gemini Enterprise.
  • Interface utilisateur : module complémentaire Google Workspace pour Chat et Gmail (facilement extensible à Agenda, Drive, Docs, Sheets et Slides).
  • Module complémentaire Google Workspace : Apps Script, API Gemini Enterprise et Vertex AI, contexte (métadonnées utilisateur, message Gmail sélectionné)

c8c63fb3f324fecf.png

d33b8cb50ee251b7.png

Objectifs de l'atelier

  • Points d'intégration entre Gemini Enterprise et Google Workspace qui permettent d'accéder aux données et aux actions.
  • Les options no-code et pro-code pour créer des agents personnalisés hébergés dans Gemini Enterprise.
  • Les différentes façons dont les utilisateurs peuvent accéder aux agents depuis l'application Web Gemini Enterprise et les applications Google Workspace.

2. Configuration

Passer en revue les concepts

Application Gemini Enterprise

Une application Gemini Enterprise fournit des résultats de recherche, des actions et des agents à vos utilisateurs finaux. Le terme "application" peut être utilisé de manière interchangeable avec le terme "moteur" dans le contexte des API. Une application doit être connectée à un datastore pour pouvoir utiliser les données qu'il contient afin de fournir des résultats de recherche, des réponses ou des actions.

Application Web Gemini Enterprise

Une application Web Gemini Enterprise est associée à une application Gemini Enterprise. Elle sert de plate-forme d'IA centralisée où les employés utilisent une interface de chat unique pour effectuer des recherches dans les données cloisonnées de l'entreprise, exécuter des agents IA spécialisés pour les workflows complexes et générer du contenu de qualité professionnelle avec un niveau de confidentialité adapté aux entreprises.

Initialiser les ressources et y accéder

Dans cette section, vous allez accéder aux ressources suivantes et les configurer à partir de votre navigateur Web de votre choix.

Appli Gemini Enterprise

Ouvrez la console Google Cloud dans un nouvel onglet, puis procédez comme suit :

  1. Sélectionnez votre projet.
  2. Dans le champ de recherche Google Cloud, recherchez et sélectionnez Gemini Enterprise, puis cliquez sur + Créer une application. Si vous ne disposez pas d'une licence Gemini Enterprise, vous serez invité à activer une licence d'essai sans frais de 30 jours.

  1. Définissez le nom de l'application sur codelab.
  2. Un ID est généré en fonction du nom et s'affiche sous le champ. Copiez-le.
  3. Définissez Multirégion sur global (Global).
  4. Cliquez sur Créer.

8712ada39377205e.png

  1. L'application est créée et vous êtes automatiquement redirigé vers Gemini Enterprise > Présentation.
  2. Sous Obtenir un accès complet, cliquez sur Configurer l'identité.
  3. Sur le nouvel écran, sélectionnez Utiliser Google Identity, puis cliquez sur Confirmer l'identité des employés.

3209c156eff4ba43.png

  1. La configuration est enregistrée et vous êtes automatiquement redirigé vers Gemini Enterprise > Vue d'ensemble.
  2. Accédez à Configurations.
  3. Dans l'onglet Gestion des fonctionnalités, activez l'option Activer le concepteur d'agents, puis cliquez sur Enregistrer.

f0cd9da419b41cb6.png

Application Web Gemini Enterprise

Ouvrez Gemini Enterprise depuis la console Cloud dans un nouvel onglet, puis procédez comme suit :

  1. Cliquez sur l'application nommée codelab.
  2. Copiez l'URL qui s'affiche, car nous l'utiliserons pour accéder à l'application Web Gemini Enterprise lors des prochaines étapes.

b46ee6176744565d.png

3. Agent personnalisé sans code

Cet agent permet aux utilisateurs de rechercher des données et d'effectuer des actions pour Workspace dans leur langue naturelle. Il repose sur les éléments suivants :

  • Modèle : Gemini
  • Données et actions : datastores Gemini Enterprise pour Google Workspace (Agenda, Gmail, Drive, NotebookLM), Recherche Google.
  • Outils de création d'agents : Agent Designer Gemini Enterprise.
  • Hôte de l'agent : Gemini Enterprise.
  • Interface utilisateur : application Web Gemini Enterprise.

Passer en revue les concepts

Gemini

Gemini est un LLM multimodal de Google. Il aide les utilisateurs à libérer leur potentiel en tant qu'humains pour leur permettre de développer leur imagination, d'accroître leur curiosité et d'améliorer leur productivité.

Datastore Gemini Enterprise

Un magasin de données Gemini Enterprise est une entité qui contient les données ingérées à partir d'une source de données first party (comme Google Workspace) ou d'applications tierces (comme Jira ou Salesforce). Les data stores contenant des données provenant d'applications tierces sont également appelés "connecteurs de données".

Agent Designer Gemini Enterprise

Gemini Enterprise Agent Designer est une plate-forme interactive no-code et low-code permettant de créer, gérer et lancer des agents à une ou plusieurs étapes dans Gemini Enterprise.

Examiner l'architecture de la solution

e77aafb772502aaf.png

Activer les API

Les datastores Gemini Enterprise Workspace nécessitent l'activation des API suivantes :

  1. Dans la console Google Cloud, activez les API Calendar, Gmail et People :

573322606b715a69.png

  1. Cliquez sur Menu ☰ > API et services > API et services activés, puis vérifiez que les API Google Agenda, Gmail et People figurent dans la liste.

Les actions Gemini Enterprise Workspace Agenda et Gmail nécessitent la configuration d'un écran de consentement :

  1. Dans la console Google Cloud, cliquez sur Menu ☰ > Plate-forme Google Auth > Branding.

  1. Cliquez sur Commencer.
  2. Sous Informations sur l'application, définissez le nom de l'application sur Codelab .
  3. Dans Adresse e-mail d'assistance utilisateur, sélectionnez une adresse e-mail d'assistance que les utilisateurs pourront contacter s'ils ont des questions sur leur consentement.
  4. Cliquez sur Suivant.
  5. Sous Audience, sélectionnez Interne.
  6. Cliquez sur Suivant.
  7. Sous Coordonnées, saisissez une adresse e-mail à laquelle vous recevrez des notifications en cas de modification de votre projet.
  8. Cliquez sur Suivant.
  9. Sous Terminer, consultez le Règlement sur les données utilisateur dans les services d'API Google et, si vous l'acceptez, sélectionnez J'accepte le Règlement sur les données utilisateur dans les services d'API Google.
  10. Cliquez sur Continuer, puis sur Créer.

578c2b38219b2f7b.png

  1. La configuration est enregistrée et vous êtes automatiquement redirigé vers Google Auth Platform > Vue d'ensemble.
  2. Accédez à Accès aux données.
  3. Cliquez sur Ajouter ou supprimer des niveaux d'accès.
  4. Copiez les champs d'application suivants et collez-les dans le champ Ajouter manuellement des champs d'application.
https://www.googleapis.com/auth/calendar.readonly
https://www.googleapis.com/auth/calendar.events
https://www.googleapis.com/auth/calendar.calendars
https://www.googleapis.com/auth/gmail.send
https://www.googleapis.com/auth/gmail.readonly
  1. Cliquez sur Ajouter au tableau, puis sur Mettre à jour, puis sur Enregistrer.

874b1dda14e8f379.png

Pour en savoir plus, consultez le guide complet Configurer l'écran de consentement OAuth.

Créer des identifiants client OAuth

Créez un client OAuth pour Gemini Enterprise afin d'authentifier les utilisateurs :

  1. Dans la console Google Cloud, cliquez sur Menu ☰ > Plate-forme Google Auth > Clients.

  1. Cliquez sur + Créer un client.
  2. Dans le champ Type d'application, sélectionnez Application Web.
  3. Définissez le paramètre Nom sur codelab.
  4. Ignorez Origines JavaScript autorisées.
  5. Dans la section URI de redirection autorisés, cliquez sur Ajouter un URI et saisissez https://vertexaisearch.cloud.google.com/oauth-redirect.
  6. Cliquez sur Créer.
  7. Une boîte de dialogue s'affiche avec l'ID client et le code secret du client OAuth que vous venez de créer. Conservez ces informations en lieu sûr.

a46e5ebfb851aea5.png

Créer des data stores

Ouvrez Gemini Enterprise depuis la console Cloud dans un nouvel onglet, puis procédez comme suit :

  1. Cliquez sur l'application nommée codelab.
  2. Dans le menu de navigation, cliquez sur Magasins de données connectés.
  3. Cliquez sur + Nouveau datastore.
  4. Dans la section Source, recherchez Google Agenda, puis cliquez sur Sélectionner.
  5. Dans la section Actions, saisissez l'ID client et le code secret du client enregistrés lors des étapes précédentes, puis cliquez sur Vérifier l'authentification et suivez la procédure pour authentifier et autoriser le client OAuth.
  6. Activez les actions Créer un événement d'agenda et Modifier un événement d'agenda.
  7. Cliquez sur Continuer.

a1d76e70edec0cf.png

  1. Dans la section Configuration, définissez le Nom du connecteur de données sur calendar.
  2. Cliquez sur Créer.
  3. Vous êtes automatiquement redirigé vers Datastores associés, où vous pouvez voir le datastore que vous venez d'ajouter.

Créez le datastore Google Gmail :

  1. Cliquez sur + Nouveau datastore.
  2. Dans la section Source, recherchez Google Gmail, puis cliquez sur Sélectionner.
  3. Dans la section Actions, saisissez l'ID client et le code secret du client enregistrés lors des étapes précédentes, puis cliquez sur Vérifier l'authentification.
  4. Activez l'action Envoyer un e-mail.
  5. Cliquez sur Continuer.
  6. Dans la section Configuration, définissez le Nom du connecteur de données sur gmail.
  7. Cliquez sur Créer.
  8. Vous êtes automatiquement redirigé vers Datastores associés, où vous pouvez voir le datastore que vous venez d'ajouter.

Créez le datastore Google Drive :

  1. Cliquez sur + Nouveau datastore.
  2. Dans la section Source, recherchez Google Drive, puis cliquez sur Sélectionner.
  3. Dans la section Données, sélectionnez Toutes, puis cliquez sur Continuer.
  4. Dans la section Configuration, définissez le Nom du connecteur de données sur drive.
  5. Cliquez sur Créer.
  6. Vous êtes automatiquement redirigé vers Datastores associés, où vous pouvez voir le datastore que vous venez d'ajouter.

Créez le datastore NotebookLM :

  1. Cliquez sur + Nouveau datastore.
  2. Dans la section Source, recherchez NotebookLM, puis cliquez sur Sélectionner.
  3. Dans la section Configuration, définissez le Nom du connecteur de données sur notebooklm.
  4. Cliquez sur Créer.
  5. Vous êtes automatiquement redirigé vers Datastores associés, où vous pouvez voir le datastore que vous venez d'ajouter.

Après quelques minutes, l'état de tous les datastores connectés (sauf NotebookLM) sera Actif. Si des erreurs s'affichent, vous pouvez cliquer sur la source de données pour afficher les détails de l'erreur.

ceba9eb2480a2696.png

Tester les magasins de données

Ouvrez l'URL de l'application Web Gemini Enterprise que nous avons copiée précédemment :

  1. Cliquez sur Menu ☰ > Nouvelle discussion.
  2. Dans le pied de page du nouveau champ de message, cliquez sur l'icône Connecteurs et activez tous les connecteurs.
  3. Vous pouvez désormais tester des requêtes liées aux connecteurs. Par exemple, dans le chat, saisissez Do I have any meetings today? et appuyez sur enter.
  4. Ensuite, saisissez How many emails did I receive today? et appuyez sur enter.
  5. Enfin, saisissez Give me the title of the last Drive file I created et appuyez sur enter.

90e42539e5959634.png

Créer un agent personnalisé

Dans l'application Web Gemini Enterprise, créez un agent à l'aide de l'outil Agent Designer :

  1. Cliquez sur Menu ☰ > + Nouvel agent.
  2. Dans le chat, saisissez An agent that always sends pirate-themed emails but use normal English otherwise, puis appuyez sur enter.

2803c1dedd20433e.png

  1. Agent Designer rédige l'agent en fonction de la requête et l'ouvre dans l'éditeur.
  2. Cliquez sur Créer.

Essayer l'agent personnalisé

  1. Dans l'application Web Gemini Enterprise, discutez avec l'agent que vous venez de créer :
  2. Cliquez sur Menu ☰ > Agents.
  3. Sélectionnez l'agent sous Vos agents.
  4. Dans le pied de page du nouveau champ de message, cliquez sur l'icône Connecteurs, puis sur Activer les actions pour Mail et suivez les instructions pour autoriser l'agent.
  5. Dans le chat, saisissez Send an email to someone@example.com saying I'll see them at Cloud Next, generate some subject and body yourself, puis appuyez sur enter. Vous pouvez remplacer l'exemple d'adresse e-mail par la vôtre.
  6. Cliquez sur ✔️ pour envoyer l'e-mail.

60e62437ce29a818.png

d4fb65d14fdf27da.png

4. Agent personnalisé avec beaucoup de code

Cet agent permet aux utilisateurs de rechercher des données et d'effectuer des actions dans Workspace en langage naturel à l'aide d'outils et de règles personnalisés. Il repose sur les éléments suivants :

  • Modèle : Gemini
  • Données et actions : dépôts de données Gemini Enterprise pour Google Workspace (Agenda, Gmail, Drive, NotebookLM), Recherche Google, serveur MCP (Model Context Protocol) Vertex AI Search géré par Google, fonction d'outil personnalisé pour envoyer des messages Google Chat (via l'API Google Chat).
  • Outils de création d'agents : Agent Development Kit (ADK).
  • Hôte de l'agent : Vertex AI Agent Engine.
  • Interface utilisateur : application Web Gemini Enterprise.

Il sera intégré à Gemini Enterprise à l'aide de la fonctionnalité "Bring Your Own". Nous devons donc suivre les étapes de déploiement, d'enregistrement et de configuration.

Passer en revue les concepts

Vertex AI

Vertex AI offre tout ce dont vous avez besoin pour créer et utiliser l'IA générative, y compris des solutions d'IA, la recherche et la conversation, plus de 130 modèles de fondation et une plate-forme d'IA unifiée.

4670fcf7a826af4d.png

Agent Development Kit (ADK)

L'Agent Development Kit (ADK) est une suite spécialisée d'outils et de frameworks conçus pour simplifier la création d'agents d'IA autonomes en fournissant des modules prédéfinis pour le raisonnement, la gestion de la mémoire et l'intégration d'outils.

Protocole de contexte de modèle (MCP)

Le Model Context Protocol (MCP) est une norme ouverte conçue pour permettre une intégration fluide et sécurisée entre les applications d'IA et diverses sources de données ou outils grâce à une interface universelle "plug-and-play".

Outil de fonction

Un outil de fonction est une routine exécutable prédéfinie qu'un modèle d'IA peut déclencher pour effectuer des actions spécifiques ou récupérer des données en temps réel à partir de systèmes externes, ce qui étend ses capacités au-delà de la simple génération de texte.

Examiner l'architecture de la solution

43df337e0f3d64e8.png

Passer en revue le code source

agent.py

...
MODEL = "gemini-2.5-flash"

# Gemini Enterprise authentication injects a bearer token into the ToolContext state.
# The key pattern is "GE_AUTH_NAME_<random_digits>".
# We dynamically parse this token to authenticate our MCP and API calls.
GE_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(GE_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)]
)

Activer les API

La solution nécessite l'activation d'API supplémentaires :

  1. Dans la console Google Cloud, activez les API Vertex AI, Cloud Resource Manager et Google Chat :

4f02a36b050bab00.png

  1. Cliquez sur Menu ☰ > API et services > API et services activés, puis vérifiez que les API Vertex AI, Cloud Resource Manager et Google Chat figurent dans la liste.

La solution nécessite un accès supplémentaire aux données :

  1. Dans la console Google Cloud, cliquez sur Menu ☰ > Plate-forme Google Auth > Accès aux données.

  1. Cliquez sur Ajouter ou supprimer des niveaux d'accès.
  2. Copiez les champs d'application suivants et collez-les dans le champ Ajouter manuellement des champs d'application.
  3. Cliquez sur Ajouter au tableau, puis sur Mettre à jour, puis sur Enregistrer.
https://www.googleapis.com/auth/cloud-platform
https://www.googleapis.com/auth/chat.messages.create
https://www.googleapis.com/auth/chat.spaces.create
  1. Cliquez sur Ajouter au tableau, puis sur Mettre à jour, puis sur Enregistrer.

56fbba733139acfe.png

Mettre à jour les identifiants client OAuth

La solution nécessite un URI de redirection autorisé supplémentaire :

  1. Dans la console Google Cloud, cliquez sur Menu ☰ > Plate-forme Google Auth > Clients.

  1. Cliquez sur le nom du client codelab.
  2. Dans la section URI de redirection autorisés, cliquez sur Ajouter un URI et saisissez https://vertexaisearch.cloud.google.com/static/oauth/oauth.html.
  3. Cliquez sur Enregistrer.

deed597aa54fec91.png

Activer le MCP Vertex AI Search

  1. Dans un terminal, exécutez :
gcloud beta services mcp enable discoveryengine.googleapis.com \
     --project=$(gcloud config get-value project)

Configurer l'application Chat

  1. Dans la console Google Cloud, recherchez Google Chat API dans le champ de recherche Google Cloud, cliquez sur API Google Chat, sur Gérer, puis sur Configuration.

  1. Définissez Nom de l'application et Description sur Gemini Enterprise.
  2. Définissez l'URL de l'avatar sur https://developers.google.com/workspace/add-ons/images/quickstart-app-avatar.png.
  3. Désélectionnez Activer les fonctionnalités interactives, puis cliquez sur Désactiver dans la boîte de dialogue modale qui s'affiche.
  4. Sélectionnez Consigner les erreurs dans Logging.
  5. Cliquez sur Enregistrer.

90cb612e51bce4e6.png

Déployer un agent dans Vertex AI Agent Engine

  1. Téléchargez ce dépôt GitHub.

  1. Dans un terminal, ouvrez le répertoire solutions/enterprise-ai-agent, puis exécutez la commande suivante :
# 1. Create and activate a new virtual environment
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. Lorsque la ligne Deploying to agent engine... (Déploiement vers le moteur de l'agent…) s'affiche dans les journaux, ouvrez un nouveau terminal et exécutez la commande suivante pour ajouter les autorisations requises à l'agent de service 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. Attendez que la commande adk deploy se termine, puis copiez le nom de ressource de l'agent nouvellement déployé à partir de la sortie de la commande en vert.

d098fe1347d6581b.png

Enregistrer l'agent dans Gemini Enterprise

Ouvrez Gemini Enterprise depuis la console Cloud dans un nouvel onglet, puis procédez comme suit :

  1. Cliquez sur l'application nommée codelab.
  2. Dans le menu de navigation, cliquez sur Agents.
  3. Cliquez sur + Ajouter un agent.
  4. Cliquez sur Ajouter pour Agent personnalisé via Agent Engine. La section Autorisations s'affiche.
  5. Cliquez sur Ajouter une autorisation.
  6. Définissez le Nom de l'autorisation sur enterprise-ai. Un ID est généré en fonction du nom et s'affiche sous le champ. Copiez-le.
  7. Définissez l'ID client sur la même valeur que le client OAuth créé et mis à jour lors des étapes précédentes.
  8. Définissez le code secret du client sur la même valeur que le client OAuth créé et mis à jour lors des étapes précédentes.
  9. Définissez l'URI du jeton sur https://oauth2.googleapis.com/token.
  10. Définissez l'URI d'autorisation sur la valeur suivante après avoir remplacé <CLIENT_ID> par l'ID client OAuth créé et mis à jour lors des étapes précédentes.
https://accounts.google.com/o/oauth2/v2/auth?client_id=<CLIENT_ID>&redirect_uri=https%3A%2F%2Fvertexaisearch.cloud.google.com%2Fstatic%2Foauth%2Foauth.html&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.calendars%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar.events%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.readonly%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.messages.create%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fchat.spaces.create&include_granted_scopes=true&response_type=code&access_type=offline&prompt=consent
  1. Cliquez sur OK, puis sur Suivant. La section Configuration s'affiche.
  2. Définissez le nom de l'agent et la description de l'agent sur Enterprise AI.
  3. Définissez le moteur de raisonnement Agent Engine sur le nom de ressource du moteur de raisonnement copié lors des étapes précédentes. Son format est le suivant :
projects/<PROJECT_ID>/locations/<LOCATION>/reasoningEngines/<REASONING_ENGINE_ID>
  1. Cliquez sur Créer. L'agent nouvellement ajouté est désormais listé sous Agents.

Essayer l'agent

  1. Dans l'application Web Gemini Enterprise, discutez avec l'agent nouvellement enregistré :
  2. Cliquez sur Menu ☰ > Agents.
  3. Sélectionnez l'agent sous De votre organisation.
  4. Dans le chat, saisissez Please find my meetings for today, I need their titles and links, puis appuyez sur enter.
  5. Cliquez sur Autoriser, puis suivez la procédure d'autorisation.

ed61cf654cbcd76c.png

  1. L'agent répond en affichant une liste d'événements d'agenda (en fonction du compte de l'utilisateur).
  2. Dans le chat, saisissez Please send a Chat message to someone@example.com with the following text: Hello!, puis appuyez sur enter.
  3. L'agent répond par un message de confirmation.

1647ebff031c42e7.png

a8087d2351e77fb4.png

5. Agent par défaut en tant que module complémentaire Google Workspace

Cet agent permet aux utilisateurs de rechercher des données Workspace dans leur langue naturelle dans le contexte des UI des applications Workspace. Il repose sur les éléments suivants :

  • Modèle : Gemini
  • Données : dépôts de données Gemini Enterprise pour Google Workspace (Agenda, Gmail, Drive, NotebookLM), Recherche Google.
  • Hôte de l'agent : Gemini Enterprise.
  • Interface utilisateur : module complémentaire Google Workspace pour Chat et Gmail (facilement extensible à Agenda, Drive, Docs, Sheets et Slides).
  • Module complémentaire Google Workspace : Apps Script, API Gemini Enterprise et Vertex AI, contexte (métadonnées utilisateur, message Gmail sélectionné)

Le module complémentaire Google Workspace sera associé à Gemini Enterprise à l'aide de l'API StreamAssist.

Passer en revue les concepts

Module complémentaire Google Workspace

Un module complémentaire Google Workspace est une application personnalisée qui étend une ou plusieurs applications Google Workspace (Gmail, Chat, Agenda, Docs, Drive, Meet, Sheets et Slides).

Apps Script

Apps Script est une plate-forme JavaScript basée sur le cloud et optimisée par Google Drive. Elle vous permet d'intégrer et d'automatiser des tâches dans les produits Google.

Framework de fiches Google Workspace

Le framework de cartes de Google Workspace permet aux développeurs de créer des interfaces utilisateur riches et interactives. Il permet de créer des fiches organisées et visuellement attrayantes pouvant inclure du texte, des images, des boutons et d'autres widgets. Ces cartes améliorent l'expérience utilisateur en fournissant des informations structurées et en permettant d'effectuer des actions rapides directement dans les applications Workspace.

Examiner l'architecture de la solution

1798c39f7aaed8fc.png

Passer en revue le code source

appsscript.json

...
"addOns": {
    "common": {
      "name": "Enterprise 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/discoveryengine.assist.readwrite",
    "https://www.googleapis.com/auth/gmail.addons.execute",
    "https://www.googleapis.com/auth/gmail.addons.current.message.readonly"
  ]
...

Chat.gs

...
// 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

...
// 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 responseText = queryAgent({ text: finalQueryText, forceNewSession: true });

    // 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(responseText);
    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

...
// Service that handles Gemini Enterprise AI Agent operations.

// Submits a query to the AI agent and returns the response string synchronously
function queryAgent(input) {
  const isNewSession = input.forceNewSession || !PropertiesService.getUserProperties().getProperty(AGENT_SESSION_NAME);
  const sessionName = input.forceNewSession ? createAgentSession() : getOrCreateAgentSession();

  let systemPrompt = "SYSTEM PROMPT START Do not respond with tables but use bullet points instead.";
  if (input.forceNewSession) {
    systemPrompt += " Do not ask the user follow-up questions or converse with them as history is not kept in this interface.";
  }
  systemPrompt += " SYSTEM PROMPT END\n\n";

  const queryText = isNewSession ? systemPrompt + input.text : input.text;

  const requestPayload = {
    "session": sessionName,
    "userMetadata": { "timeZone": Session.getScriptTimeZone() },
    "query": { "text": queryText },
    "toolsSpec": { "vertexAiSearchSpec": { "dataStoreSpecs": getAgentDataStores().map(ds => { dataStore: ds }) } },
    "agentsSpec": { "agentSpecs": [{ "agentId": getAgentId() }] }
  };

  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1alpha/${getReasoningEngine()}/assistants/default_assistant:streamAssist?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 answerText = "";
  for (const eventJson of events) {
    if (isInDebugMode()) {
      console.log("Event: " + eventJson);
    }
    const event = JSON.parse(eventJson);

    // Ignore internal events
    if (!event.answer) {
      console.log(`Ignored: internal event`);
      continue;
    }

    // Handle text replies
    const replies = event.answer.replies || [];
    for (const reply of replies) {
      const content = reply.groundedContent.content;
      if (content) {
        if (isInDebugMode()) {
          console.log(`Processing content: ${JSON.stringify(content)}`);
        }
        if (content.thought) {
          console.log(`Ignored: thought event`);
          continue;
        }
        answerText += content.text;
      }
    }

    if (event.answer.state === "SUCCEEDED") {
      console.log(`Answer text: ${answerText}`);
      return answerText;
    } else if (event.answer.state !== "IN_PROGRESS") {
      throw new Error("Something went wrong, check the Apps Script logs for more info.");
    }
  }
  return answerText;
}

// Gets the list of data stores configured for the agent to include in the request.
function getAgentDataStores() {
  const responseContentText = UrlFetchApp.fetch(
    `https://${getLocation()}-discoveryengine.googleapis.com/v1/${getReasoningEngine().split('/').slice(0, 6).join('/')}/dataStores`,
    {
      method: 'get',
      // Use the add on service account credentials for data store listing access
      headers: { 'Authorization': `Bearer ${getAddonCredentials().getAccessToken()}` },
      contentType: 'application/json',
      muteHttpExceptions: true
    }
  ).getContentText();
  if (isInDebugMode()) {
    console.log(`Response: ${responseContentText}`);
  }
  const dataStores = JSON.parse(responseContentText).dataStores.map(ds => ds.name);
  if (isInDebugMode()) {
    console.log(`Data stores: ${dataStores}`);
  }
  return dataStores;
}
...

Créer un compte de service

Dans la console Google Cloud, procédez comme suit :

  1. Cliquez sur Menu ☰ > IAM et administration > Comptes de service > + Créer un compte de service.

  1. Définissez Nom du compte de service sur ge-add-on.

d44d6aae29e2464c.png

  1. Cliquez sur Créer et continuer.
  2. Ajoutez le rôle Lecteur Discovery Engine dans les autorisations.

f1374efa4f326ef5.png

  1. Cliquez sur Continuer, puis sur OK. Vous êtes redirigé vers la page Comptes de service et pouvez voir le compte de service que vous avez créé.

b9496085f1404c5c.png

  1. Sélectionnez le compte de service que vous venez de créer, puis l'onglet Clés.
  2. Cliquez sur Ajouter une clé, puis sur Créer une clé.
  3. Sélectionnez JSON, puis cliquez sur Créer.

f4280f5533a08821.png

  1. La boîte de dialogue se ferme et la paire de clés publique/privée que vous venez de créer est automatiquement téléchargée dans votre environnement local sous la forme d'un fichier JSON.

Créer et configurer un projet Apps Script

  1. Cliquez sur le bouton suivant pour ouvrir le projet Apps Script du module complémentaire Enterprise AI :

  1. Cliquez sur Présentation > Créer une copie.
  2. Dans votre projet Apps Script, cliquez sur Paramètres du projet > Modifier les propriétés du script > Ajouter une propriété de script pour ajouter des propriétés de script.
  3. Définissez REASONING_ENGINE_RESOURCE_NAME sur le nom de ressource de l'application Gemini Enterprise. Son format est le suivant :
# 1. Replace PROJECT_ID with the Google Cloud project ID.
# 2. Replace GE_APP_ID with the codelab app ID found in Google Cloud console > Gemini Enterprise > Apps.

projects/<PROJECT_ID>/locations/global/collections/default_collection/engines/<GE_APP_ID>
  1. Définissez APP_SERVICE_ACCOUNT_KEY sur la clé JSON du fichier de compte de service téléchargé lors des étapes précédentes.
  2. Cliquez sur Enregistrer les propriétés de script.

Déployer dans Gmail et Chat

Dans votre projet Apps Script, procédez comme suit :

  1. Cliquez sur Déployer > Tester les déploiements, puis sur Installer. Elle est désormais disponible dans Gmail.
  2. Cliquez sur Copier sous ID de déploiement "Head".

2ed2df972ad92715.png

Dans la console Google Cloud, procédez comme suit :

  1. Recherchez Google Chat API dans le champ de recherche Google Cloud, cliquez sur API Google Chat, sur Gérer, puis sur Configuration.

  1. Sélectionnez Activer les fonctionnalités interactives.
  2. Désélectionnez Rejoindre des espaces et des conversations de groupe.
  3. Sous Paramètres de connexion, sélectionnez Apps Script.
  4. Définissez Deployment ID (ID de déploiement) sur l'ID de déploiement Head copié lors des étapes précédentes.
  5. Sous Visibilité, sélectionnez Rendre cette application de chat accessible à certains utilisateurs et groupes de votre domaine Workspace, puis saisissez votre adresse e-mail.
  6. Cliquez sur Enregistrer.

3b7d461c423f7c51.png

Essayer le module complémentaire

Ouvrez Google Chat dans un nouvel onglet, puis procédez comme suit :

  1. Ouvrez un espace de message privé avec l'application Chat Gemini Enterprise.

3da8690d19baf2d0.png

  1. Cliquez sur Configurer et suivez la procédure d'authentification.
  2. Saisissez What are my meetings for today?, puis appuyez sur enter. L'application de chat Gemini Enterprise devrait répondre avec les résultats.

c8c63fb3f324fecf.png

Ouvrez Gmail dans un nouvel onglet, puis procédez comme suit :

  1. Envoyez-vous un e-mail avec le sujet défini sur We need to talk et le corps défini sur Are you available today between 8 and 9 AM?.
  2. Ouvrez l'e-mail que vous venez de recevoir.
  3. Ouvrez la barre latérale du module complémentaire Enterprise AI.
  4. Définissez le paramètre Message sur Am I?.
  5. Cliquez sur Envoyer un message.
  6. La réponse s'affiche après le bouton.

d33b8cb50ee251b7.png

6. Effectuer un nettoyage

Supprimer un projet Google Cloud

Pour éviter que les ressources utilisées dans cet atelier de programmation ne soient facturées sur votre compte Google Cloud, nous vous recommandons de supprimer le projet Google Cloud.

Dans la console Google Cloud, procédez comme suit :

  1. Cliquez sur Menu ☰ > IAM et administration > Paramètres.

  1. Cliquez sur Arrêter.
  2. Saisissez l'ID du projet.
  3. Cliquez sur Arrêter quand même.

3b9492d97f771b2c.png

7. Félicitations

Félicitations ! Vous avez créé des solutions qui exploitent tout le potentiel de Gemini Enterprise et de Google Workspace pour les employés.

Étape suivante

Nous ne présentons que les cas d'utilisation les plus typiques dans cet atelier de programmation, mais vous pouvez envisager de nombreux domaines d'extension dans vos solutions, par exemple :

  • Utilisez des outils pour les développeurs optimisés par l'IA, tels que Gemini CLI et Antigravity.
  • Intégrez-vous à d'autres frameworks et outils d'agents tels que les MCP personnalisés, les appels de fonction personnalisés et les UI génératives.
  • Effectuez une intégration à d'autres modèles d'IA, y compris aux modèles personnalisés, hébergés sur des plates-formes dédiées telles que Vertex AI.
  • Intégrez-le à d'autres agents hébergés sur des plates-formes dédiées telles que Dialogflow ou par des tiers via Cloud Marketplace.
  • Publiez des agents sur Cloud Marketplace pour donner plus de moyens aux équipes, aux organisations ou aux utilisateurs publics.

En savoir plus

De nombreuses ressources sont à la disposition des développeurs, comme des vidéos YouTube, des sites Web de documentation, des exemples de code et des tutoriels :