Exercice - Retourner des réponses enrichies avec des cartes adaptatives

Effectué

Commençons par créer des modèles de carte adaptative pour que l’agent affiche les données dans ses réponses. Pour générer le modèle carte adaptative, vous utilisez les extensions d’aperçu de carte adaptative Visual Studio Code pour afficher facilement un aperçu de votre travail directement dans Visual Studio Code. L’utilisation de l’extension nous permet de créer un modèle de carte adaptative, avec des références à des données. Au moment de l’exécution, l’agent remplit l’espace réservé avec les données qu’il récupère à partir de l’API.

Télécharger le projet de démarrage

Commencez par télécharger l’exemple de projet. Dans un navigateur web :

  1. Accédez à la page https://github.com/microsoft/learn-declarative-agent-api-plugin-adaptive-cards-typescript.

  2. Si vous avez un compte GitHub :

    1. Sélectionnez la liste déroulante Utiliser ce modèle et, dans le menu, choisissez Créer un référentiel.

      Capture d’écran de l’option sur GitHub pour créer un dépôt.

    2. Dans la liste des propriétaires disponibles, choisissez votre compte.

    3. Nommez le dépôt da-ristorante-api.

    4. Confirmez la création du dépôt à l’aide du bouton Créer un référentiel .

    5. Attendez que GitHub crée le dépôt. Ensuite, copiez l’URL du dépôt.

      Capture d’écran de l’option sur GitHub pour copier l’URL du dépôt.

    6. Ouvrez une ligne de commande.

    7. Dans une ligne de commande, remplacez le répertoire de travail par l’emplacement où vous souhaitez stocker le projet sur votre disque.

    8. Clonez le référentiel à l’aide de la commande suivante : git clone https://github.com/your-user/your-repo.

    9. Ouvrez le dossier cloné dans Visual Studio Code.

  3. Si vous n’avez pas de compte GitHub :

    1. Téléchargez le contenu du dépôt sous la forme d’un fichier ZIP.

      Capture d’écran de l’option sur GitHub pour télécharger le dépôt sous forme de fichier ZIP.

    2. Extrayez le contenu du fichier ZIP sur votre disque.

    3. Ouvrez le dossier dans Visual Studio Code.

L’exemple de projet est un projet Microsoft 365 Agents Toolkit qui inclut un agent déclaratif avec une action générée avec un plug-in d’API. Le plug-in d’API se connecte à une API anonyme s’exécutant sur Azure Functions également incluse dans le projet. L’API appartient à un restaurant italien fictif et vous permet de parcourir le menu du jour et de passer des commandes.

Créer une carte adaptative pour un plat

Tout d’abord, créez une carte adaptative qui affiche des informations sur un seul plat.

Dans Visual Studio Code :

  1. Dans la vue Explorer, créez un dossier nommé cartes.

  2. Dans le dossier cartes , créez un fichier nommé dish.json. Collez le contenu suivant qui représente une carte adaptative vide :

    {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.5",
      "body": []
    }
    
  3. Avant de continuer, créez un fichier de données pour la carte adaptative :

    1. Ouvrez la palette de commandes en appuyant sur Ctrl+P (CMD+P sur macOS) sur le clavier. Tapez >Adaptive pour rechercher les commandes liées à l’utilisation des cartes adaptatives.

      Capture d’écran de Visual Studio Code montrant les commandes liées à l’utilisation des cartes adaptatives.

    2. Dans la liste, choisissez Carte adaptative : nouveau fichier de données. Visual Studio Code crée un fichier nommé dish.data.json.

    3. Remplacez son contenu par une donnée qui représente un plat :

      {
        "id": 4,
        "name": "Caprese Salad",
        "description": "Juicy vine-ripened tomatoes, fresh mozzarella, and fragrant basil leaves, drizzled with extra virgin olive oil and a touch of balsamic.",
        "image_url": "https://raw.githubusercontent.com/pnp/copilot-pro-dev-samples/main/samples/da-ristorante-api/assets/caprese_salad.jpeg",
        "price": 10.5,
        "allergens": [
          "dairy"
        ],
        "course": "lunch",
        "type": "dish"
      }
      
    4. Save your changes

  4. Retour au fichier dish.json.

  5. Dans l’objectif, sélectionnez Aperçu de la carte adaptative.

    Capture d’écran de Visual Studio Code montrant l’aperçu de la carte adaptative.

    Visual Studio Code ouvre un aperçu du carte sur le côté. Lorsque vous modifiez le carte, vos modifications sont immédiatement visibles sur le côté.

  6. Au tableau de corps , ajoutez un élément Container avec une référence à l’URL d’image stockée dans la propriété image_url .

    {
      "type": "Container",
      "items": [
        {
          "type": "Image",
          "url": "${image_url}",
          "size": "large"
        }
      ]
    }
    

    Notez que la préversion carte se met automatiquement à jour pour afficher votre carte :

    Capture d’écran de Visual Studio Code montrant l’aperçu de la carte adaptative avec une image.

  7. Ajouter des références à d’autres propriétés de plat. Le carte complet se présente comme suit :

    {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.5",
      "body": [
        {
          "type": "Container",
          "items": [
            {
              "type": "Image",
              "url": "${image_url}",
              "size": "large"
            },
            {
              "type": "TextBlock",
              "text": "${name}",
              "weight": "Bolder"
            },
            {
              "type": "TextBlock",
              "text": "${description}",
              "wrap": true
            },
            {
              "type": "TextBlock",
              "text": "Allergens: ${if(count(allergens) > 0, join(allergens, ', '), 'none')}",
              "weight": "Lighter"
            },
            {
              "type": "TextBlock",
              "text": "**Price:** €${formatNumber(price, 2)}",
              "weight": "Lighter",
              "spacing": "None"
            }
          ]
        }
      ]
    }
    

    Capture d’écran de Visual Studio Code montrant l’aperçu d’une carte adaptative d’un plat.

    Notez que pour afficher les allergènes, vous utilisez une fonction pour joindre les allergènes dans une chaîne. Si un plat n’a pas d’allergènes, vous n’en affichez aucun. Pour vous assurer que les prix sont correctement mis en forme, vous utilisez la fonction formatNumber qui nous permet de spécifier le nombre de décimales à afficher sur le carte.

Créer une carte adaptative pour le résumé de la commande

L’exemple d’API permet aux utilisateurs de parcourir le menu et de passer une commande. Créons une carte adaptative qui affiche le résumé de la commande.

Dans Visual Studio Code :

  1. Dans le dossier cartes , créez un fichier nommé order.json. Collez le contenu suivant qui représente une carte adaptative vide :

    {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.5",
      "body": []
    }
    
  2. Créez un fichier de données pour la carte adaptative :

    1. Ouvrez la palette de commandes en appuyant sur Ctrl+P (CMD+P sur macOS) sur le clavier. Tapez >Adaptive pour rechercher les commandes liées à l’utilisation des cartes adaptatives.

      Capture d’écran de Visual Studio Code montrant les commandes liées à l’utilisation des cartes adaptatives.

    2. Dans la liste, choisissez Carte adaptative : nouveau fichier de données. Visual Studio Code crée un fichier nommé order.data.json.

    3. Remplacez son contenu par une donnée qui représente le résumé de la commande :

      {
        "order_id": 6210,
        "status": "confirmed",
        "total_price": 25.48
      }
      
    4. Save your changes

  3. Retour au fichier order.json.

  4. Dans l’objectif, sélectionnez Aperçu de la carte adaptative.

  5. Ensuite, remplacez le contenu du fichier order.json par le code suivant :

    {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.5",
      "body": [
        {
          "type": "TextBlock",
          "text": "Order Confirmation 🤌",
          "size": "Large",
          "weight": "Bolder",
          "horizontalAlignment": "Center"
        },
        {
          "type": "Container",
          "items": [
            {
              "type": "TextBlock",
              "text": "Your order has been successfully placed!",
              "weight": "Bolder",
              "spacing": "Small"
            },
            {
              "type": "FactSet",
              "facts": [
                {
                  "title": "Order ID:",
                  "value": "${order_id} "
                },
                {
                  "title": "Status:",
                  "value": "${status}"
                },
                {
                  "title": "Total Price:",
                  "value": "€${formatNumber(total_price, 2)}"
                }
              ]
            }
          ]
        }
      ]
    }
    

    Comme dans la section précédente, vous mappez chaque élément du carte à une propriété de données.

    Capture d’écran de Visual Studio Code montrant l’aperçu de la carte adaptative d’une commande.

    Importante

    Notez l’espace de fin après ${order_id}. Cela est intentionnel, en raison d’un problème connu avec le rendu des numéros de cartes adaptatives. Pour le tester, supprimez l’espace et vérifiez que le nombre disparaît de l’aperçu.

    Capture d’écran de Visual Studio Code montrant un aperçu d’une carte adaptative sans le numéro de commande.

    Restaurez l’espace de fin afin que votre carte s’affiche correctement et enregistrez vos modifications.

Mettre à jour la définition du plug-in d’API

La dernière étape consiste à mettre à jour la définition du plug-in d’API avec des cartes adaptatives que Copilot doit utiliser pour afficher les données de l’API aux utilisateurs.

Ajouter une carte adaptative pour afficher un plat

Dans Visual Studio Code :

  1. Ouvrez le fichier cartes/dish.json et copiez son contenu.

  2. Ouvrez le fichier appPackage/ai-plugin.json .

  3. À la propriété functions.getDishes.capabilities.response_semantics , ajoutez une nouvelle propriété nommée static_template et définissez son contenu sur la carte adaptative.

  4. L’extrait de code complet ressemble à ceci :

    {
      "$schema": "https://aka.ms/json-schemas/copilot/plugin/v2.1/schema.json",
      "schema_version": "v2.1",
      "namespace": "ilristorante",
      "name_for_human": "Il Ristorante",
      "description_for_human": "See the today's menu and place orders",
      "description_for_model": "Plugin for getting the today's menu, optionally filtered by course and allergens, and placing orders",
      "functions": [
        {
          "name": "getDishes",
          "description": "Returns information about the dishes on the menu. Can filter by course (breakfast, lunch or dinner), name, allergens, or type (dish, drink).",
          "capabilities": {
            "response_semantics": {
              "data_path": "$.dishes",
              "properties": {
                "title": "$.name",
                "subtitle": "$.description"
              },
              "static_template": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.5",
                "body": [
                    ...trimmed for brevity
                ]
              }
            }
          }
        },
        {
          "name": "placeOrder",
          "description": "Places an order and returns the order details",
          "capabilities": {
            "response_semantics": {
              "data_path": "$",
              "properties": {
                "title": "$.order_id",
                "subtitle": "$.total_price"
              }
            }
          }
        }
      ],
      "runtimes": [
        {
          "type": "OpenApi",
          "auth": {
            "type": "None"
          },
          "spec": {
            "url": "apiSpecificationFile/ristorante.yml"
          },
          "run_for_functions": [
            "getDishes",
            "placeOrder"
          ]
        }
      ],
      "capabilities": {
        "localization": {},
        "conversation_starters": []
      }
    }
    
  5. Enregistrez vos modifications.

Ajouter un modèle de carte adaptative pour afficher le résumé de la commande

Dans Visual Studio Code :

  1. Ouvrez le fichier cartes/order.json et copiez son contenu.

  2. Ouvrez le fichier appPackage/ai-plugin.json .

  3. À la propriété functions.placeOrder.capabilities.response_semantics , ajoutez une nouvelle propriété nommée static_template et définissez son contenu sur la carte adaptative.

  4. Le fichier complet ressemble à ceci :

    {
      "$schema": "https://aka.ms/json-schemas/copilot/plugin/v2.1/schema.json",
      "schema_version": "v2.1",
      "namespace": "ilristorante",
      "name_for_human": "Il Ristorante",
      "description_for_human": "See the today's menu and place orders",
      "description_for_model": "Plugin for getting the today's menu, optionally filtered by course and allergens, and placing orders",
      "functions": [
        {
          "name": "getDishes",
          "description": "Returns information about the dishes on the menu. Can filter by course (breakfast, lunch or dinner), name, allergens, or type (dish, drink).",
          "capabilities": {
            "response_semantics": {
              "data_path": "$.dishes",
              "properties": {
                "title": "$.name",
                "subtitle": "$.description"
              },
              "static_template": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.5",
                "body": [
                    ...trimmed for brevity
                ]
              }
            }
          }
        },
        {
          "name": "placeOrder",
          "description": "Places an order and returns the order details",
          "capabilities": {
            "response_semantics": {
              "data_path": "$",
              "properties": {
                "title": "$.order_id",
                "subtitle": "$.total_price"
              },
              "static_template": {
                "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
                "type": "AdaptiveCard",
                "version": "1.5",
                "body": [
                    ...trimmed for brevity
                ]
              }
            }
          }
        }
      ],
      "runtimes": [
        {
          "type": "OpenApi",
          "auth": {
            "type": "None"
          },
          "spec": {
            "url": "apiSpecificationFile/ristorante.yml"
          },
          "run_for_functions": [
            "getDishes",
            "placeOrder"
          ]
        }
      ],
      "capabilities": {
        "localization": {},
        "conversation_starters": []
      }
    }
    
  5. Enregistrez vos modifications.

Tester l’agent déclaratif avec le plug-in API dans Microsoft 365 Copilot

La dernière étape consiste à tester l’agent déclaratif avec le plug-in d’API dans Microsoft 365 Copilot.

Dans Visual Studio Code :

  1. Dans la barre d’activités, choisissez Microsoft 365 Agents Toolkit.

  2. Dans la section Comptes, vérifiez que vous êtes connecté à votre locataire Microsoft 365 avec Microsoft 365 Copilot.

    Capture d’écran de la section Comptes microsoft 365 Agents Toolkit dans Visual Studio Code.

  3. Dans la barre d’activité, choisissez Exécuter et déboguer.

  4. Sélectionnez la configuration Déboguer dans Copilot et démarrez le débogage à l’aide du bouton Démarrer le débogage .

    Capture d’écran de la configuration Déboguer dans Copilot dans Visual Studio Code.

  5. Visual Studio Code génère et déploie votre projet sur votre locataire Microsoft 365 et ouvre une nouvelle fenêtre de navigateur web.

Dans le navigateur web :

  1. Lorsque vous y êtes invité, connectez-vous avec le compte qui appartient à votre locataire Microsoft 365 avec Microsoft 365 Copilot.

  2. Dans la barre latérale, sélectionnez Il Ristorante.

    Capture d’écran de l’interface Microsoft 365 Copilot avec l’agent Il Ristorante sélectionné.

  3. Choisissez l’entrée de conversation Qu’est-ce que c’est pour le déjeuner aujourd’hui ? et envoyez l’invite.

    Capture d’écran de l’interface Microsoft 365 Copilot avec l’invite de déjeuner.

  4. Lorsque vous y êtes invité, examinez les données que l’agent envoie à l’API et confirmez à l’aide du bouton Autoriser une seule fois .

    Capture d’écran de l’interface Microsoft 365 Copilot avec la confirmation du déjeuner.

  5. Attendez que l’agent réponde. Notez que la fenêtre contextuelle d’une citation inclut désormais votre carte adaptative personnalisée avec des informations supplémentaires de l’API.

    Capture d’écran de l’interface Microsoft 365 Copilot avec la réponse au déjeuner.

  6. Passez une commande en tapant dans la zone de texte de l’invite : 1x spaghetti, 1x iced tea et envoyez l’invite.

  7. Examinez les données que l’agent envoie à l’API et continuez à utiliser le bouton Confirmer .

    Capture d’écran de l’interface Microsoft 365 Copilot avec la confirmation de commande.

  8. Attendez que l’agent passe la commande et retourne le résumé de la commande. Notez que, comme l’API retourne un seul élément, l’agent le restitue à l’aide d’une carte adaptative et inclut le carte directement dans sa réponse.

    Capture d’écran de l’interface Microsoft 365 Copilot avec la réponse de commande.

  9. Retour de Visual Studio Code et d’arrêter le débogage.

  10. Basculez vers l’onglet Terminal et fermez tous les terminaux actifs.

    Capture d’écran de l’onglet Visual Studio Code terminal avec l’option permettant de fermer tous les terminaux.