La semaine dernière, j’ai eu l’incroyable opportunité de participer à l’événement Ignite 2024 organisé par Microsoft, et organisé cette année à Chicago. Cela fut pour moi une expérience très enrichissante et passionnante, tant par le contenu que par les rencontres. Je suis ravi de partager avec vous quelques moments forts de ce voyage et certaines de mes impressions.
Avant tout, je tiens à remercier TD SYNNEX pour m’avoir donné l’expérience unique qu’est le Microsoft Ignite. Cet événement fut l’occasion pour moi de rencontrer mes collègues venus de différents pays d’Europe, d’EMEA et Worldwide :
Mais ce fut également l’opportunité pour TD SYNNEX de montrer comment devenir le partenaire du futur avec le programme de partenariat Microsoft AI Cloud :
Mon arrivée à Chicago
Je suis donc arrivé (un poil fatigué) à Chicago lundi vers midi via un vol direct depuis Zurich, mais quand même après un premier voyage en train depuis Genève. Le trajet complet fut donc :
3h50 pour le train
10h30 pour l’avion
Une heure de taxi à Chicago
A notre arrivée sous une fine pluie, nous effectué le check-in dans un des nombreux hôtels référencés et recommandés par Microsoft.
Quel que soit l’hôtel choisi, nous y étions très nombreux. Pour cela, un grand nombre de navettes Microsoft étaient prévues toutes les 15 minutes environ afin de se rendre au Centre McCormick du lundi au vendredi sans encombre, ni surcoût, ni traffic.
Une fois les chambres d’hôtel récupérées, nous sommes dirigés en direction du centre McCormick afin de récupérer nos badges d’entrée pour assister aux différentes sessions prévues dès le lendemain, dont la fameuse Keynote prévue le matin à 08h pile.
L’excitation était visiblement palpable dès le week-end précédent, grâce aux nombreux participants venus du monde entier pour y découvrir les dernières innovations présentées par Microsoft.
La première journée : Rencontre avec la communauté MVP
Dès le lundi soir, j’ai eu la chance de participer à la soirée MVP Connect dans un bar réservé pour l’occasion. Ce fut une excellente occasion de rencontrer d’autres MVP, mais également certaines personnes du programme MVP très impliquées chez Microsoft, avec qui j’échange déjà régulièrement.
Au cours de cette soirée, j’ai donc pu discuter avec quelqu’un des responsables du programme MVP chez Microsoft, comme Chloe, mais également échanger des idées et des expériences amusantes lors de précédents Ignite avec d’autres MVP (merci Seyfallah, Deniz, Clément, Hakim, Michel et Jean-François) autour d’un verre et d’une « excellente » pizza 🤣🤣
Cette soirée a été très enrichissante et m’a donc permis de nouer de nouveaux contacts, tout en renforçant les liens avec la communauté MVP francophone.
La Keynote de mardi
Le mardi matin, j’ai souhaité comme beaucoup assister à la Keynote, certainement le moment le plus attendu de l’événement. En tant que MVP, nous avions des sièges qui nous étaient réservés, mais dont le nombre était restreint.
Pour cela, il fallait arriver très tôt pour être 100% sûr d’avoir une place. Je me suis donc levé après une très courte nuit vers 05h30, afin de pouvoir prendre la première navette de 06h00 pour s’y rendre dès l’ouverture du centre McCormick prévue à 06h30.
Encore une fois, l’accueil Microsoft fut excellent et la team MVP francophone était déjà regroupée 😎💪
La Keynote a abordé des sujets passionnants comme l’intelligence artificielle, les évolutions matérielles, la sécurité dans tous ses domaines chez Microsoft et bien d’autres encore.
Voici la version complète :
Les nouveautés
Comme à chaque Ignite, Microsoft publie en ligne un Book of News. Il s’agit d’un guide complet des annonces clefs faites lors de l’événement. Il sert de ressource centralisée pour accéder aux mises à jour les plus récentes et aux informations essentielles sur les sujets les plus intéressants pour les participants :
Et que ferait-on sans une vidéo spéciale de John Savill consacrée aux nouveautés Azure de ce Microsoft Ignite :
Les sessions et les rencontres
Durant l’événement, j’ai assisté à plusieurs sessions sur des sujets variés comme l’infrastructure Azure, Copilot, la sécurité, Microsoft (Loop / Pages), Copilot Studio… Malheureusement, certaines sessions étaient complètes malgré ma pré-inscription, ce qui m’a empêché d’y assister 😥.
Petit passage obligé sur le stand et la session Nerdio, dont les dernières évolutions combinant l’IA pour l’optimisation des coûts et l’automatisation de l’infrastructure AVD / Windows 365 sont vraiment bluffantes !
La communauté et les stands
J’ai également exploré les différents stands présents dans le hub, notamment ceux liés à la sécurité et à Azure Virtual Desktop. J’ai pu poser des questions et obtenir des informations sur les prochaines fonctionnalités prévues.
Toutes ces discussions ont été particulièrement enrichissantes, car elles m’ont permis de mieux comprendre les nouvelles fonctionnalités et les améliorations prévues par Microsoft.
Durant toutes les journées de l’Ignite, l’organisation Microsoft et les efforts déployés pour la communauté MVP a été au rendez-vous.
J’ai pu rencontrer des personnes très impliquées avec les MVP comme Megan, Christian ou Claus. J’ai pu échanger avec eux sur Azure Virtual Desktop ou encore Windows 365.
J’ai même pu retrouver mon nom sur le mur des MVP (avoir un prénom commençant par la lettre J facilite la prise de photo 🥳).
Windows 365 Link
L’annonce qui m’a particulièrement marqué est celle du Windows 365 Link, un dispositif permettant d’accéder aux services de Windows 365 sans avoir besoin d’un ordinateur physique.
Ce petit boîtier, qui sera commercialisé vers avril l’année prochaine. Il semble très prometteur et pourrait devenir une alternative au Thin Client :
Important : Selon la FAQ actuellement en vigueur, Windows 365 Link ne serait pas possible pour dans le cadre d’un environnement Azure Virtual Desktop 🫥
Aucune nouvelle de vient pour l’instant changer ou contredire cette information…
Azure Virtual Desktop
L’un des points forts de Microsoft Ignite 2024 a été la présentation des nouvelles fonctionnalités d’Azure Virtual Desktop et de Windows 365. Azure Virtual Desktop a introduit
Une gestion améliorée des pools d’hôtes, permettant aux administrateurs de déployer et d’optimiser les hôtes de session de manière plus efficace. (article du blog)
L’utilisation de disques éphémères, pour plus de performances et des coûts réduits. (article du blog)
Une gestion de mise à l’échelle encore plus aboutie avec la création et la suppression de VMs AVD. (article du blog en préparation)
Toutes ces nouvelles fonctionnalités améliorent l’optimisation et donc les coûts d’Azure Virtual Desktop.
Azure Local
Le Cloud hybride fait également partie des grandes annonces de Microsoft.
Azure Local est une nouvelle solution qui prend la place d’Azure Stack HCI et permettra aux entreprises de déployer des services cloud Azure sur des sites physiques pour diverses raisons, qu’il s’agisse d’exigences pour conserver les données localement, de besoins de sécurité renforcés ou de conformité.
Voici une excellente vidéo en français qui en parle :
Et voici une liste non exhaustive des fonctionnalités présentées dans le cadre de la nouvelle offre Azure Local de Microsoft. A ce jour, beaucoup de ces fonctionnalités sont en toujours en préversion.
Migration depuis VMware (Préversion)
Ce sujet est d’importance, surtout en ce moment, et Microsoft ne le sait que très bien : la migration depuis VMware est déjà en préversion depuis le 1er octobre 2024. Pour l’avoir testé, l’outil et le processus de migration ne sont pas encore facile (article du blog), mais cela va bientôt venir :
Le nouvel outil Azure Migrate inclut donc un processus de migration depuis VMware. Il copie et converti les VMDK en machines virtuelles Azure Local.
Cette nouvelle fonctionnalité d’Azure Migrate permet donc aux organisations de transférer leurs charges de travail sur site vers une infrastructure Azure Local tout en minimisant les interruptions.
Options matérielles à plus faibles spécifications
Azure Local ne nécessite plus de matériel astronomique. Ils prennent en charge des options matérielles comme le micro, la tour et le matériel robuste pour répondre aux besoins des environnements de périphérie avec une configuration réseau simple.
Opérations déconnectées (Préversion)
Azure Local propose des opérations déconnectées qui permettent de gérer toute la pile localement. Avec cette option, vous avez la même API pour interagir et vous n’avez pas besoin de connecter la pile à Azure.
Groupes de sécurité réseau (Préversion)
Vous avez maintenant la possibilité d’utiliser des groupes de sécurité réseau pour filtrer le trafic. Avec cette option, vous pouvez contrôler le trafic réseau de manière granulaire. Cela aidera les clients d’Azure Local à améliorer la sécurité dans leurs environnements.
Trusted Launch (Préversion)
La fonctionnalité Trusted Launch protège contre des menaces comme les rootkits, les boot kits et autres malwares. Elle utilise des technologies comme Secure Boot et vTPM (virtual Trusted Platform Module), ainsi que des technologies de chiffrement comme BitLocker.
Avec Trusted Launch, les machines virtuelles Azure Local bénéficient d’une protection renforcée contre les rootkits et les boot kits. Des fonctionnalités comme Secure Boot, vTPM et l’intégration de BitLocker assurent une sécurité robuste.
Azure Local applique certains paramètres de sécurité par défaut et utilise les technologies Secured Core Server pour ce faire.
Chalet Azure Romandie
C’est pour moi LA grande nouvelle de cet Ignite 2024 😎 dont l’inspiration trouve des origines dans le Silicon Chalet (meetup Franco-Romand pour tous les passionnés de la Tech !)
Fraîchement née d’une idée partagée entre Seyfallah, Eric et moi, l’Ignite 2024 a donc marqué le lancement du Chalet Azure Romandie. Celui-ci devient un vecteur de partage d’une communauté francophone autour du Cloud Microsoft en Suisse romande, et au-delà !
Les enregistrements des 2 premières séances réalisées en live entre Genève et Chicago seront disponibles sous peu, grâce à la chaîne YouTube @MSCloudZeroTrustTV.
Stay tuned !
Clap de fin
Comme toutes les bonnes choses, le Microsoft Ignite de 2024 a une fin. En quelques mots de conclusion, ce voyage à Microsoft Ignite 2024 a été pour moi une expérience inoubliable. Malgré la fatigue du voyage et le décalage horaire (toujours pas récupéré 🤣), les interactions avec Microsoft, les partenaires, les clients et les autres MVP ont été extrêmement enrichissantes.
Pour en apprendre un peu plus, venez donc nous rejoindre au Chalet Azure Romandie ( CAR pour les intimes !)
Je tiens à remercier encore une fois TD SYNNEX, ainsi que Microsoft pour l’organisation de cet événement extraordinaire par son contenu et par sa taille. La participation à cet événement mondial renforce mon souhait de partager encore plus de mes expériences et de mes connaissances avec vous tous.
Et pour finir, on connaît maintenant le lieu et la date de la prochaine cuvée 2025 de Microsoft Ignite !
J’ai reçu un mail il y a quelques jours de la part de Microsoft (oui oui, seulement un 🤣) m’invitant tester par moi-même un premier connecteur Copilot pour Microsoft 365, en suivant simplement un pas à pas technique. N’ayant pas d’expérience en .NET, je me suis dit … pourquoi pas ! Je vous propose de le réaliser ensemble pour que vous puissiez vous-même reproduire cet exercice sur votre tenant Copilot.
Dans cet article, nous reprendrons brièvement quelques concepts et nous testerons nous-même de créer un connecteur Microsoft Graph personnalisé afin d’enrichir les résultats Copilot dans Microsoft 365.
Voici encore un rappel des articles écrits autour des solutions Copilot de Microsoft :
Les connecteurs Microsoft Graph vous permettent d’ingérer vos données métier non structurées dans Microsoft Graph, afin que Copilot pour Microsoft 365 puissent raisonner sur l’intégralité du contenu de votre entreprise. Le contenu ingéré via les connecteurs Graph est ajouté à Microsoft Graph ; cela déverrouille la compréhension sémantique des invites de vos utilisateurs dans Copilot pour Microsoft 365.
Quel est l’impact d’un connecteur dans Copilot pour 365 ?
L’impact de connecteur dans les résultats Copilot peut changer la donne dans les résultats de recherche documentaire car il va fouiner en dehors de Microsoft 365.
Voici un exemple montrant des résultats avec des références externes à Microsoft 365, améliorant donc l’expérience de recherche de l’utilisateur Copilot :
Voici également une courte vidéo montrant un peu plus à ce sujet :
Peut-on gérer les droits d’accès aux données remontées via un connecteur ?
Oui, ce qui est stocké en dehors de Microsoft 365 reste accessible selon une configuration ACL de votre choix. Les documents pourraient alors être visibles par :
Tous les membres de votre organisation
Un ou des groupes 365
Un ou des utilisateurs 365
Important : Les autorisations d’accès au contenu externe sont directement stockées dans le système externe.
Existe-t-il des connecteurs déjà disponibles sur étagères ?
Oui, Microsoft propose déjà un site web référençant des connecteurs de plusieurs grands éditeurs :
Quelles sont les sources de données possibles via un Connecteur ?
Microsoft a déjà créé plusieurs connecteurs dont voici certains exemples de source de données :
La réponse est encore oui. Dans l’objectif de vous aider à tester Copilot avec un connecteur Microsoft Graph personnalisé, Microsoft a mis à disposition la documentation suivante.
Grâce à celle-ci, vous pouvez facilement tester intégration du contenu externe à Copilot for Microsoft 365 à l’aide de connecteurs Microsoft Graph construits avec .NET.
Dans cet exercice Microsoft, les tâches que nous allons réaliser seront donc les suivantes :
Une fois l’installeur téléchargé, exécutez celui-ci
Acceptez les conditions d’utilisation, puis cliquez sur Suivant :
Définissez le répertoire d’installation, puis cliquez sur Suivant :
Cliquez sur Suivant :
Cliquez sur Suivant :
Cliquez sur Installer :
Attendez 1 minute que l’installation de Visual Studio Code se termine :
Cliquez sur Terminer :
Une fois dans Visual Studio Code, allez dans le menu Extensions, puis installez l’extension simplement nommée C# :
Retournez sur votre navigateur internet afin de télécharger la version 8.0.1 du SDK .NET :
Une fois l’installation téléchargée, exécutez celle-ci :
Cliquez sur Installer :
Confirmez l’action de sécurité Windows en cliquant sur Oui :
Attendez 1 minute que l’installation de .NET se termine :
Cliquez sur Fermer :
Redémarrer votre poste Windows afin de prendre en compte la nouvelle version .NET :
Notre poste est maintenant prêt pour la création d’un connecteur Microsoft Graph personnalisé.
Nous allons commencer par la préparation de notre tenant à gérer les authentification de notre connecteur à Microsoft 365 à l’API de Microsoft Graph.
Etape III – Création d’une Inscription d’applicationEntra :
Rendez-vous sur la page du portail Azure disponible juste ici, puis ouvrez le service Microsoft Entra ID :
Dans le menu Inscriptions d’applications, cliquez-ici pour créer une nouvelle Inscription :
Nommez votre application, puis cliquez sur Inscrire :
Attendez quelques secondes la notification suivante :
Cliquez sur le menu Certificats et secrets, puis ajoutez un nouveau secret client comme ceci :
Nommez-le, puis cliquez sur Ajouter :
Copiez la valeur de votre secret. Ce dernier sera utilisé par votre connecteur Microsoft Graph afin qu’il s’authentifie automatiquement :
Dans le menu des Permissions API, cliquez-ici pour ajouter des permissions supplémentaires :
Choisissez l’API Microsoft Graph :
Cliquez sur Permissions d’application :
Recherchez et cochez les 2 permissions suivantes en utilisant la barre de recherche, puis cliquez sur Ajouter les permissions :
ExternalConnection
ExternalConnection.ReadWrite.OwnedBy
ExternalItem
ExternalItem.ReadWrite.OwnedBy
Enfin, cliquez sur le bouton suivant afin d’appliquer ces permissions au niveau du tenant :
Confirmez votre choix en cliquant sur Oui :
Leur statut s’en retrouve alors changé comme ceci :
La configuration du côté du tenant est en partie terminée. Nous allons maintenant nous intéresser l’écriture du code en .NET de notre connecteur Microsoft Graph.
Etape IV – Création du connecteur Microsoft Graph personnalisé :
Dans l’explorateur Windows, créez un dossier pour y stocker le codes et les données de votre futur connecteur Microsoft Graph :
Retournez dans Visual Studio Code, puis cliquez ici pour vous positionnez sur ce nouveau répertoire :
Cliquez sur Oui :
Dans la console située en bas de votre écran, vérifiez le bon positionnement de votre dossier, puis lancez la commande suivante pour créer une nouvelle console dédiée à votre application .NET :
dotnet new console
Notez l’apparition de fichiers suivants dans l’explorateur Windows :
Ajoutez la bibliothèque suivante pour s’authentifier auprès des services Microsoft 365 :
dotnet add package Azure.Identity
Ajoutez la bibliothèque cliente suivante pour communiquer à l’API Microsoft Graph :
dotnet add package Microsoft.Graph
Ajoutez la bibliothèque suivante pour gérer les secrets :
Afin de stocker les secrets de notre application, lancez la commande suivante :
dotnet user-secrets init
Conservez les 3 informations de votre Inscription d’application pour vous authentifier automatiquement auprès de Microsoft 365 :
ID de l’application
Valeur du secret
ID du tenant
Saisissez les commandes suivantes pour les stocker de manière sécurisée en remplaçant les 3 valeurs en gras par celles récupérées juste avant :
dotnet user-secrets set "EntraId:ClientId" "[application id]"
dotnet user-secrets set "EntraId:ClientSecret" "[secret value]"
dotnet user-secrets set "EntraId:TenantId" "[tenant id]"
Continuons la configuration par la connexion entre le connecteur personnalisé et l’API Microsoft API.
Etape V – Configuration de la connexion avec l’API Microsoft Graph :
Le premier fichier va être utile à gérer les informations de la connexion entre le connecteur personnalisé et l’API Microsoft Graph.
Dans Visual Studio Code, créez un premier fichier texte en cliquant juste ici :
Choisissez le type de fichier texte :
Collez le code suivant dans votre fichier, puis sauvegardez-le via la commande clavier Ctrl Shift+S avec le nom GraphService.cs :
using Azure.Identity;
using Microsoft.Graph;
using Microsoft.Extensions.Configuration;
class GraphService
{
static GraphServiceClient? _client;
public static GraphServiceClient Client
{
get
{
if (_client is null)
{
var builder = new ConfigurationBuilder(). AddUserSecrets<GraphService>();
var config = builder.Build();
var clientId = config["EntraId:ClientId"];
var clientSecret = config["EntraId:ClientSecret"];
var tenantId = config["EntraId:TenantId"];
var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
_client = new GraphServiceClient(credential);
}
return _client;
}
}
}
Le second fichier contient la connexion externe elle-même avec Microsoft 365 et les schémas de données envoyées à Microsoft 365.
Créer à nouveau un fichier texte, collez le code suivant dans votre fichier, puis sauvegardez-le via la commande clavier Ctrl Shift+S avec le nom ConnectionConfiguration.cs :
using Microsoft.Graph.Models.ExternalConnectors;
static class ConnectionConfiguration
{
public static ExternalConnection ExternalConnection
{
get
{
return new ExternalConnection
{
Id = "msgraphdocs",
Name = "Microsoft Graph documentation",
Description = "Documentation for Microsoft Graph API which explains what Microsoft Graph is and how to use it."
};
}
}
public static Schema Schema
{
get
{
return new Schema
{
BaseType = "microsoft.graph.externalItem",
Properties = new()
{
new Property
{
Name = "title",
Type = PropertyType.String,
IsQueryable = true,
IsSearchable = true,
IsRetrievable = true,
Labels = new() { Label.Title }
},
new Property
{
Name = "description",
Type = PropertyType.String,
IsQueryable = true,
IsSearchable = true,
IsRetrievable = true
},
new Property
{
Name = "iconUrl",
Type = PropertyType.String,
IsRetrievable = true,
Labels = new() { Label.IconUrl }
},
new Property
{
Name = "url",
Type = PropertyType.String,
IsRetrievable = true,
Labels = new() { Label.Url }
}
}
};
}
}
}
Créer un troisième fichier texte contant les demandes d’établissement de connexion entre le connecteur personnalisé et l’API de Microsoft Graph.
Collez le code suivant dans votre fichier, puis sauvegardez-le via la commande clavier Ctrl Shift+S avec le nom ConnectionService.cs :
Enfin, ouvrez le fichier Program.cs créé automatiquement dans votre dossier afin de signaler à notre l’application .NET de créer la connexion et son schéma.
Pour ce faire, remplacez le code de départ par celui-ci, puis sauvegardez-le via la commande clavier Ctrl Shift+S :
using System.CommandLine;
var provisionConnectionCommand = new Command("provision-connection", "Provisions external connection");
provisionConnectionCommand.SetHandler(ConnectionService. ProvisionConnection);
var rootCommand = new RootCommand();
rootCommand.AddCommand(provisionConnectionCommand);
Environment.Exit(await rootCommand.InvokeAsync(args));
Un premier test de création de connexion vers Microsoft 365 via l’API Microsoft Graph depuis notre connecteur personnalisé est déjà possible.
Etape VI – Test de connection:
Pour cela, utilisez la commande .NET suivante pour construire votre projet :
dotnet build
Démarrez l’application en exécutant la commande suivante, puis attendez :
Continuez d’attendre la construction complète de la connexion :
Retournez sur cette même page afin de constater le changement du status de la connexion :
Nous venons de créer une connexion externe afin d’indexer nos futurs documents à venir dans Microsoft 365.
La prochaine étape consiste justement à importer de la donnée afin d’alimenter les index de Microsoft 365.
Etape VII – Configuration de l’import de contenu externe :
Un connecteur Microsoft Graph se connecte à un système externe, exporte son contenu et l’importe dans Microsoft 365. Au cours de ce processus, un connecteur graphique transforme le contenu exporté en éléments externes mettant en correspondance le contenu avec le schéma configuré sur la connexion externe.
Le contenu définit l’essentiel de l’élément qui est indexé pour la recherche en texte intégral. Pour un document ou une page wiki, il s’agit du corps du document. Pour un produit, il peut s’agir de sa description. Les connecteurs graphiques vous permettent d’importer du contenu au format texte ou HTML. Si vous importez du contenu binaire, comme des vidéos ou des images, vous devez obtenir leur représentation textuelle avant de les importer dans Microsoft 365.
Afin de simuler facilement du contenu, Microsoft met à disposition sur GitHub des fichiers de contenu pour notre connecteur Microsoft Graph personnalisé.
Téléchargez ce contenu via ce lien GitHub, puis débloquez la protection sur l’archive ZIP :
Décompressez le contenu de l’archive dans l’arborescence de votre projet comme ceci :
Depuis l’explorateur Windows, vérifiez que le contenu de votre projet se présente sous cette forme :
Vérifiez la présence de cette nouvelle arborescence dans Visual Studio Code :
Dans Visual Studio Code, ouvrez le seul fichier .csproj présent dans votre projet :
Ajoutez le code suivant dans le fichier .csproj avant la balise </Project> pour copier le contenu, puis sauvegardez-le via la commande clavier Ctrl Shift+S :
Afin d’importer les fichiers de contenu au format Markdown vers Microsoft 365, nous devons extraire les métadonnées et convertir les contenus au format texte :
Pour y arriver, nous avons besoin d’autres bibliothèques :
dotnet add package Markdig
dotnet add package YamlDotNet
Créez un quatrième fichier texte consacré à la gestion du contenu à importer. Celui-ci va réaliser les actions suivantes :
Configuration du traitement du format markdown
Extraction des contenus markdown et YAML
Transformation du contenu en éléments externes
Chargement des éléments externes dans Microsoft 365
Collez le code suivant dans votre fichier, puis sauvegardez-le via la commande clavier Ctrl Shift+S avec le nom ContentService.cs :
using YamlDotNet.Serialization;
using Microsoft.Graph.Models.ExternalConnectors;
using Markdig;
public interface IMarkdown
{
string? Markdown { get; set; }
}
class DocsArticle : IMarkdown
{
[YamlMember(Alias = "title")]
public string? Title { get; set; }
[YamlMember(Alias = "description")]
public string? Description { get; set; }
public string? Markdown { get; set; }
public string? Content { get; set; }
public string? RelativePath { get; set; }
}
static class ContentService
{
static IEnumerable<DocsArticle> Extract()
{
var docs = new List<DocsArticle>();
var contentFolder = "content";
var contentFolderPath = Path.Combine(Directory.GetCurrentDirectory(), contentFolder);
var files = Directory.GetFiles(contentFolder, "*.md", SearchOption. AllDirectories);
foreach (var file in files)
{
try
{
var contents = File.ReadAllText(file);
var doc = contents.GetContents<DocsArticle>();
doc.Content = Markdown.ToHtml(doc.Markdown ?? "");
doc.RelativePath = Path.GetRelativePath(contentFolderPath, file);
docs.Add(doc);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
return docs;
}
static IEnumerable<ExternalItem> Transform(IEnumerable<DocsArticle> content)
{
var baseUrl = new Uri("https://learn.microsoft.com/graph/");
return content.Select(a =>
{
var docId = GetDocId(a.RelativePath ?? "");
return new ExternalItem
{
Id = docId,
Properties = new()
{
AdditionalData = new Dictionary<string, object> {
{ "title", a.Title ?? "" },
{ "description", a.Description ?? "" },
{ "url", new Uri(baseUrl, a.RelativePath!.Replace(".md", "")).ToString() }
}
},
Content = new()
{
Value = a.Content ?? "",
Type = ExternalItemContentType.Html
},
Acl = new()
{
new()
{
Type = AclType.Everyone,
Value = "everyone",
AccessType = AccessType.Grant
}
}
};
});
}
static async Task Load(IEnumerable<ExternalItem> items)
{
foreach (var item in items)
{
Console.Write(string.Format("Loading item {0}...", item.Id));
try
{
await GraphService.Client.External
.Connections[Uri.EscapeDataString(ConnectionConfiguration. ExternalConnection.Id!)]
.Items[item.Id]
.PutAsync(item);
Console.WriteLine("DONE");
}
catch (Exception ex)
{
Console.WriteLine("ERROR");
Console.WriteLine(ex.Message);
}
}
}
public static async Task LoadContent()
{
var content = Extract();
var transformed = Transform(content);
await Load(transformed);
}
static string GetDocId(string relativePath)
{
var id = relativePath.Replace(Path.DirectorySeparatorChar.ToString(), "__").Replace(".md", "");
return id;
}
}
Créez un cinquième fichier texte consacré à l’extraction de contenu fichiers de contenu.
Collez le code suivant dans votre fichier, puis sauvegardez-le via la commande clavier Ctrl Shift+S avec le nom MarkdownExtensions.cs :
// from: https://khalidabuhakmeh.com/parse-markdown-front-matter-with-csharp
using Markdig;
using Markdig.Extensions.Yaml;
using Markdig.Syntax;
using YamlDotNet.Serialization;
public static class MarkdownExtensions
{
private static readonly IDeserializer YamlDeserializer =
new DeserializerBuilder()
.IgnoreUnmatchedProperties()
.Build();
private static readonly MarkdownPipeline Pipeline
= new MarkdownPipelineBuilder()
.UseYamlFrontMatter()
.Build();
public static T GetContents<T>(this string markdown) where T : IMarkdown, new()
{
var document = Markdown.Parse(markdown, Pipeline);
var block = document
.Descendants<YamlFrontMatterBlock>()
.FirstOrDefault();
if (block == null)
return new T { Markdown = markdown };
var yaml =
block
// this is not a mistake
// we have to call .Lines 2x
.Lines // StringLineGroup[]
.Lines // StringLine[]
.OrderByDescending(x => x.Line)
.Select(x => $"{x}\n")
.ToList()
.Select(x => x.Replace("---", string.Empty))
.Where(x => !string.IsNullOrWhiteSpace(x))
.Aggregate((s, agg) => agg + s);
var t = YamlDeserializer.Deserialize<T>(yaml);
t.Markdown = markdown.Substring(block.Span.End + 1);
return t;
}
}
Enfin, rouvrez à nouveau le fichier Program.cs modifié précédemment pour y ajouter la commande de chargement du contenu, puis sauvegardez-le via la commande clavier Ctrl Shift+S :
var loadContentCommand = new Command("load-content", "Loads content into the external connection");
loadContentCommand.SetHandler(ContentService.LoadContent);
rootCommand.AddCommand(loadContentCommand);
Etape VIII – Test d’importation :
Pour cela, utilisez la commande .NET suivante pour reconstruire à nouveau votre projet :
dotnet build
Commencez à charger le contenu vers Microsoft 365 en exécutant la commande suivante :
Notre environnement 365 contient maintenant l’accès à ces nouveaux documents. Il nous faut maintenant activer cette source dans 365 pour que Copilot puisse les ressortir en résultat.
Etape IX – Activation de la connexion externe dans Copilot :
Toujours sur cette même page d’administration 365, rendez-vous sur l’onglet Personnalisations, puis cliquez-ici pour activer votre connecteur dans les résultats :
Cochez les cases suivantes pour activer votre connecteur dans les résultats Copilot :
Etape X – Second test Copilot avec connecteur :
Sur votre utilisateur ayant la licence Copilot pour Microsoft 365, retournez sur la page de Copilot en mode Work en ayant toujours aucun plugin d’actif :
Saisissez à nouveau le prompt suivant :
please find a doc how to install a Microsoft Graph SDK
Constatez l’apparition d’un résultat avec une ou plusieurs références de type Externe :
Refaite la même opération en promptant sur le même sujet, puis cliquez sur la source externe :
Constatez l’ouverture d’un nouvel onglet pointant vers la documentation Microsoft Learn car le document dispose d’une URL pointant vers celle-ci :
Conclusion
Par les extensions, Microsoft nous montre que l’IA n’en est qu’à ses débuts dans les différents systèmes de données. Les entreprises ont tout y gagner à connecter une IA sur un ensemble de plusieurs systèmes d’informations.
Savoir que je peux interroger mes stocks de marchandises, et les modifier au besoin dans mes autres systèmes au moyen d’une IA connectée me fait espérer beaucoup d’innovations pour les années à venir :
Copilot pour Microsoft 365 fait maintenant partie de votre quotidien depuis plusieurs semaines ? Vous êtes donc un utilisateur régulier de Copilot dans plusieurs applications 365 ? En ressentez-vous déjà les premiers impacts sur votre productivité ?
Copilot pourrait-il en faire plus ?
Il est possible que vous soyez prêts à élargir le périmètre de votre Copilot ! Pour cela, prenez le temps de savoir comment Copilot pourrait exploiter d’autres données, et surtout comment il s’y prendrait.
Voici déjà quelques articles écrits sur ce blog autour des solutions Copilot de Microsoft :
Comme le rappelle Microsoft, Copilot est en soit l’IA générative actuellement la plus adaptée aux applications et données présentes dans Microsoft 365 :
En soi, Copilot pour Microsoft 365 est un outil de productivité puissant pour maintenir les utilisateurs dans le flux de leur travail dans les applications Microsoft 365. Il fournit aux utilisateurs des compétences générales telles que la compréhension, la synthèse, la prédiction, le rappel, la traduction et la génération de contenu.
Il s’appuie sur une base de référence de vos connaissances organisationnelles en indexant du contenu dans Microsoft Graph, tel que les e-mails, les conversations et les documents auxquels les utilisateurs ont l’autorisation d’accéder.
Copilot pour Microsoft 365 a été annoncé il y a longtemps, mais les choses évoluant très rapidement, prenez-le temps de regarder cette vidéo en français pour comprendre un peu mieux Copilot pour Microsoft 365 :
Je pense que ce schéma a déjà dû passer sous vos yeux à plusieurs reprises, mais il est facile à comprendre car il montre les avantages natifs d’un Copilot déjà connecté aux données de votre tenant.
De ce fait, et sans rien faire d’autres qu’acheter des licences Copilot pour Microsoft 365, le schéma technique de votre IA Copilot ressemble déjà à ça :
Alors, pourquoi en faire plus ?
Car l’IT d’une entreprise a de nombreuses vies et ne se limite pas aux outils 365 et aux données stockées dans SharePoint, OneDrive et autres.
Bien souvent, d’autres outils proviennent d’éditeurs tiers ou sont créés en internes pour des besoins métiers. La donnée peut donc se trouver en dehors de l’environnement 365 et possiblement sous des formats spécifiques.
Techniquement, Copilot pour Microsoft 365 ne peut donc pas s’inspirer de cette donnée inconnue ou même la proposer si un utilisateur lui en fait la demande via un prompt.
Mais une fois en place, votre Copilot pour Microsoft 365 dispose de plusieurs possibilités pour étendre son périmètre pour coller toujours plus aux besoins :
Pour vous faire une meilleure idée, voici un exemple assez parlant donné par Microsoft :
Suivi des problèmes pour l’équipe d’ingénierie : Supposons que votre équipe d’ingénierie s’appuie sur un logiciel de gestion de projet. Vous pouvez créer un outil personnalisé qui permet aux utilisateurs de surveiller les tickets ouverts. Un utilisateur peut demander des informations sur tous les problèmes qui lui sont attribués, et Copilot pour Microsoft 365 peut récupérer et présenter ces données en toute transparence à partir de votre plugin.
Imaginez alors d’autres données relatives aux ressources humaines, à la comptabilité, aux outils de productions industrielles ou encore à la finance ? Tout cela à la portée d’un simple prompt à Copilot ?
Oui mais, comment s’y prend-on ?
Rien n’est automatique, mais Microsoft vous propose déjà 2 approches pour y parvenir :
Plugin : Ideal pour les données structurées. Développez des plugins qui utilisent le schéma OpenAI pour ajouter des fonctionnalités personnalisées aux expériences Microsoft Copilot, en connectant les données de votre propre application à Microsoft Copilot. Les plugins permettent à une expérience Copilot d’interagir avec vos propres API, améliorant ainsi l’expérience pour effectuer un plus grand nombre d’actions. (Source : Microsoft)
Connecteur : Ideal pour les données non structurées. Le connecteur vous permet d’ingérer vos données métier non structurées dans Microsoft Graph, afin que Copilot pour Microsoft 365 puissent raisonner sur l’intégralité du contenu de votre entreprise. Le contenu ingéré via les connecteurs Graph est ajouté à Microsoft Graph ; cela déverrouille la compréhension sémantique des invites de vos utilisateurs dans Copilot pour Microsoft 365. (Source : Microsoft)
Mais alors, lequel choisir ?
Pour vous aider au mieux à comprendre, cette vidéo de Microsoft vous montre justement les impacts en situation réelle :
Pour vous aider à faire votre choix, Microsoft a également mis à disposition cet arbre de décision :
Attention, la structure de la donnée pourrait avoir elle aussi un impact sur votre choix :
Connecteurs
Plugins
Structure
Données non structurées ou aplatis
Données structurées
Volume de données
Jusqu’à 5 millions d’éléments par connexion
Convient pour les données à volume élevé (plus de 5 M)
Pertinence basée sur les activités de l’utilisateur. Détection sémantique du contenu sans activation d’un plugin. Activités (telles que l’affichage, la modification et le partage) avec aide sur le classement et la pertinence des résultats de recherche. Les données restent dans les limites de conformité
Détectabilité dans le Windows Store. Activation de l’expérience de marque. Meilleure expérience utilisateur avec les cartes adaptatives
Fonctionnalités de l’expérience développeur
Connexion rapide, schéma d’inscription et éléments d’index
Kit de ressources Teams pour Visual Studio & VS Code. Chargement de version test pour le développement & test
Fonctionnez également avec
IQ de contexte, Viva Topics, Recherche d’entreprise dans M365.com, SharePoint et Bing @ work. Recommandations de contenu dans les applications M365
Conversation Teams, Outlook
Existe-t-il des limitations techniques ?
En effet, les 2 options présentent des limitations techniques qui peuvent influer sur votre choix :
Connecteurs
Plugins
Limites
30 connecteurs maximum dans le locataire.
Volume de données et activité relativement faibles.
Visibilité de l’application pour les utilisateurs.
Maximum d’un million de plugins activés par utilisateur. Les plugins doivent être activés manuellement. Les données peuvent quitter la limite de conformité. Orchestrator ne peut raisonner qu’avec 10 plugins par invite. Les performances dépendent des développeurs & l’hébergement.
Limitations de l’expérience des développeurs
Aucun outil pour Visual Studio & VS Code. Aucun chargement indépendant. Vous devez rester synchronisé avec la liste de contrôle d’accès (ACL) manuellement si vous êtes dans des groupes externes en dehors du groupe Id Entra (Azure AD)
Courbe d’apprentissage abrupte. Plus de temps pour développer. Vous devez gérer les invites à paramètres multiples.
Important : il n’est pour l’instant pas possible d’acheter et de provisionner des licences acheter Copilot for Microsoft 365 sur un tenant créé à partir du Microsoft 365 Developer Program.
Et Copilot Studio dans tout ça ?
Pas de secret, Microsoft Copilot Studio s’appuie déjà sur du connu et reconnu ! 😎🙏
Un grand merci à Elliott Pierret pour cette vidéo très explicative sur comment jouer avec Copilot Studio pour créer son propre Copilot ou enrichir un Copilot existant grâce aux outils suivants :
Copilot Builder
Plugin Builder
Prompt Builder
Conclusion
Quelle que soit votre stratégie Copilot, l’objectif de cette IA générative est avant tout de simplifier la vie à vos utilisateurs. Beaucoup de tâches sans grande valeur ajoutée peuvent et ont également intérêt à être traitées par l’intelligence artificielle.
Je vous invite à regarder cette interview très intéressante de Jean-François Bérenguer faite par Seyfallah Tagrerout sur le potentiel de Copilot et les services IT possibles avec une valeur ajoutée pour les entreprises dans leur transition vers l’IA :
Accompagnement au prompt
Mise en place du gouvernance de la donnée (protection)
Personnalisation de Copilot (Connecteurs, plugins)
Attendez-vous très prochainement à voir plusieurs articles sur des essais pratiques de Copilot 😎
En cette fin d’année, de petits Copilots nous entourent 🧑🎄 … tout comme la magie de Noël … ils sont partout ☃️ ! L’histoire de Microsoft Copilot avait démarré avec la préversion de GitHub Copilot annoncée en 2021. Mais l’année 2023 n’est pas en reste avec le lancement de Bing Chat en février, de DALL-E en mars, … et enfin la disponibilité de Microsoft 365 Copilot pour les entreprises à partir du 1er novembre dernier.
La question que tout le monde se pose : que pouvons avoir maintenant ?
Existe-t-il un ou plusieurs Copilot ?
Il existe pour plusieurs Copilot, mais le nombre n’est pas encore certains car l’information des projets Copilot chez Microsoft n’est pas partagée à 100%. Voici donc un tableau non exhaustif :
Et voici une autre présentation répartie cette fois par catégories d’emploi :
Le plus connu de tous est sans aucun doute Copilot pour Microsoft 365 :
Mais d’autres Copilot peuvent eux aussi apporter leurs bénéfices, comme dans certains domaines IT spécifiques :
Security Copilot est un produit de cybersécurité basé sur l’IA qui permet aux professionnels de la sécurité de réagir rapidement aux cybermenaces, de traiter les signaux à la vitesse de la machine et d’évaluer l’exposition aux risques en quelques minutes.
GitHub Copilot transforme l’expérience des développeurs. Soutenu par les leaders de l’IA, Copilot fournit une assistance contextualisée tout au long du cycle de vie du développement logiciel, de l’achèvement du code dans l’IDE aux explications de code dans GitHub et plus encore.
Microsoft Copilot for Azure, un compagnon IA qui vous aide à concevoir, exploiter, optimiser et dépanner votre infrastructure et vos services cloud. Copilot for Azure permet une compréhension et une gestion approfondies de tout ce qui se passe dans Azure, du nuage à la périphérie.
Le schéma ci-dessous circule beaucoup sur internet, et c’est normal car sa compréhension est très facile, et il explique assez fidèlement le fonctionnement de n’importe quel Copilot de Microsoft :
On retrouve ici les 3 grands piliers des Copilots de Microsoft :
Le Prompt : commande utilisateur pour à la fois pour demander, et recevoir les réponses de Copilot. L’utilisateur pose des questions à Copilot sur ce qu’il souhaite. La requête peut comporter 4 parties : l’objectif, le contexte, les attentes et la source.
l’API Microsoft Graph : Microsoft Graph comprend des informations sur les relations entre les utilisateurs, les activités et les données de votre organisation, telles que provenant des courriels, des chats, des documents et des réunions.
Le LLM pour Modèles de langage volumineux : Ces modèles de base utilisent l’IA générative (et plus précisément le Deep Learning) pour le traitement du langage naturel (NLP) et la génération de langage naturel (NLG).
Quel Copilot puis-je actuellement utiliser ?
Beaucoup de Copilot ont déjà été annoncés, mais peu sont entièrement ouverts à tous. Voici quelques exemples :
Microsoft 365 Copilot : actuellement disponible à l’achat (300 licences min)
Si vous n’êtes pas concerné par aucun des scénarios listés, il est malgré tout possible d’utiliser pour le moment Bing Chat et Bing Chat Entreprise.
Qu’est-ce que sont Bing Chat et Bing Chat Entreprise ?
Attention ! Depuis l’Ignite de 2023, Bing Chat et Bing Chat Enterprise ont été renommés et s’appelle simplement Copilot 🤣🤣.
La différence entre Bing Chat et Bing Chat Enterprise repose sur le fait de se connecter avec votre identifiant Entra ID :
Cela permet d’avoir l’assurance d’une protection commerciale des données, ce qui signifie que les données de chat ne sont pas sauvegardées, que Microsoft n’y a pas accès et que vos données ne sont pas utilisées pour former les modèles.
Accès à Copilot avec un compte Entra ID ayant une licence Microsoft 365 Copilot :
A noter également que j’ai essayé Copilot avec un compte Entra ID sur un tenant sans aucune licence Microsoft 365 :
Je me demande donc si Copilot (Anciennement Bing Chat Entreprise) n’est pas un produit présent uniquement dans certaines licences comme :
Microsoft 365 E3, E5
Business Premium et Business Standard
Microsoft 365 F3 (à partir de décembre).
Licence seule : $5 par mois
En regardant le détail d’une licence Microsoft E5, je le retrouve bien juste ici :
Enfin, Je me doute que beaucoup de personnes attendent avec impatience de pouvoir mettre la main sur une licence Copilot pour Microsoft 365. Mais 300 licences pour faire seulement du test, cela risque d’être très difficulté à justifier !
Une chose est pour l’instant certaine : le marché SMB n’est pas formellement inscrit dans la roadmap de Microsoft Copilot 365 😥.
Des ressources pour patienter ?
Pour compenser cette attente, voici différents liens utiles concernant Microsoft 365 Copilot 💪 :
Restez branché pour les prochains articles sur Copilot! La licence reçue sur mon compte va me permettre de tester Copilot sur différents outils afin de bien comprendre les impacts et les bénéfices au quotidien.
Microsoft organise assez régulièrement un évènement appelé Microsoft Build. Comme l’indique sa page Wikipédia, c’est une conférence annuelle destinée aux ingénieurs logiciels et aux développeurs Web utilisant Windows, Azure et d’autres technologies Microsoft.
Sa première organisation date de 2011, en remplacement d’autres évènements eux aussi dédiés aux développeurs, comme la Conférence des développeurs professionnels et le MIX. Cette année encore, il fut organisé en virtuel.
Qu’est-ce que le Microsoft Build Cloud Skills Challenge ?
Comme pour le Microsoft Ignite, organisé pour la dernière fois en novembre dernier, Microsoft propose de rendre ses évènements plus interactifs avec la participation de l’audience.
Pour cela, Microsoft vous propose de participer à un exercice technique, appelé challenge. La réalisation d’un seul challenge vous apporte une meilleure compréhension du message de Microsoft et vous donne la possibilité de repartir avec un gain immédiat : un bon d’examen pour une certification Microsoft.
Attention :
Ce challenge est limité dans le temps, vous devez le terminer au plus tard le 21 juin prochain
La réalisation de plusieurs challenges ne vous apportera pas plusieurs bons d’examen Microsoft
Quelques informations supplémentaires sont disponibles dans la FAQ officielle
La réalisation d’un des 3 challenges techniques, vous offre un bon d’examen pour tester et valider vos connaissances Microsoft. Cette année, 3 challenges vous sont accessibles :
Pour quelles certifications pourrons-nous utiliser notre bon d’examen ?
Vous retrouvez ci-dessous les certifications Microsoft accessibles gratuitement grâce à l’utilisation de votre bon d’examen Microsoft Build :