Semantic Kernel est un SDK open source développé par Microsoft, conçu spécifiquement pour faciliter l'intégration des modèles d'intelligence artificielle générative (LLM), tels que GPT-4 et autres modèles d'OpenAI ou d'Azure OpenAI, dans les applications .NET. Cet outil apporte une solution claire et structurée à la complexité croissante liée à l'utilisation directe des API des grands modèles de langage. En effet, par rapport à une intégration directe (comme Microsoft.AI.Extensions), Semantic Kernel se distingue par sa simplicité, sa modularité, et sa capacité à automatiser des scénarios complexes de manière efficace.
AI.R.E. : une idée en avance ?
Dans un article publié quelques mois après la sortie de GPT 3, je présentais le concept AI.R.E., fruit d'une réflexion personnelle née d'un constat simple : voir autant de puissance restreinte à quelques phrases affichées sur un écran me faisait penser à une personne souffrant d'un syndrome de locked-in. À l'époque, ChatGPT 3, bien que prometteur et puissant, restait confiné dans un cadre purement conversationnel entre lui et un utilisateur via un écran et un clavier.
Or, en tant qu'ingénieur je suis très pragmatique et je l'assume, je considère que la recherche et les réflexions abstraites n'ont vraiment de valeur que lorsqu'elles se concrétisent par des réalisations tangibles. Quand je souhaite explorer librement des idées ou me plonger dans des mondes hypothétiques, je me tourne vers la philosophie ou la SF. Mais quand il s'agit d'informatique, je veille à rester connecté à l'humain, au monde concret, bref, à la réalité.
C’est de cette nécessité d'établir un pont concret entre l'abstraction de l'intelligence artificielle et notre environnement réel qu'est né le concept d'AI.R.E.(AI for Real-world Engagement) Avec les moyens disponibles à l'époque, essentiellement du prompt engineering et les API d'OpenAI, AI.R.E. permettait déjà d'amorcer cette connexion.
Je ne pense pas que Microsoft se soit directement inspiré de mon article pour créer Semantic Kernel. Plus vraisemblablement, la frustration que j'ai ressentie devant cette intelligence artificielle enfermée dans son interface a dû être partagée par de nombreux autres acteurs du domaine, poussant ainsi Microsoft à concevoir Semantic Kernel.
Cependant, le concept développé dans AI.R.E. reste aujourd’hui pleinement pertinent, et son cheminement intellectuel initial permet de mieux comprendre l'une des motivations fondamentales de Semantic Kernel : permettre à des programmes d’interagir avec l'intelligence artificielle autrement que par une simple conversation sur un écran. Si l'article original sur AI.R.E. n'est plus accessible, l'essentiel de son contenu a été republié dans un article de mai 2023 intitulé justement "AI.R.E vs Semantic Kernel".
Bien sûr, Semantic Kernel dépasse aujourd’hui largement les ambitions initiales d’AI.R.E., mais je vous invite néanmoins, sans que ce soit indispensable, à relire mon article pour saisir pleinement la portée de cette réflexion. Ceci posé, explorons maintenant ensemble les nombreuses capacités offertes aujourd'hui par Semantic Kernel, sachant que le présent article n'est qu'une introduction rapide et que d'autres papiers viendront la compléter plus en détail. Allons-y !
1. Concrètement, que propose Semantic Kernel ?
Semantic Kernel propose plusieurs fonctionnalités essentielles qui facilitent la mise en œuvre pratique des intelligences artificielles génératives :
-
Un Accès unifié : Semantic Kernel c'est d'abord un moyen unifié d'utiliser les services d'une IA sans avoir à écrire de code spécifique à celle-ci. Cela permet de simplifier le code et de le sécurisé pour des évolutions éventuelles et même l'accès futur à d'autres IA sans remise en caise.
-
Les Plugins (Skills) : Ces modules prêts à l’emploi vous permettent d’étendre rapidement les capacités de votre application. Par exemple, vous pourriez ajouter automatiquement des fonctions de résumé intelligent pour vos documents, traduire vos communications instantanément, ou même piloter des objets connectés grâce à de simples commandes naturelles.
-
La planification automatisée (Planner) : Semantic Kernel est capable de comprendre vos demandes et d’organiser automatiquement les tâches nécessaires pour les réaliser. Imaginons que vous demandiez à l’IA de prendre un rapport détaillé, de le résumer, puis d’envoyer ce résumé à vos collaborateurs. Semantic Kernel exécutera tout cela automatiquement, sans que vous ayez à orchestrer chaque étape vous-même (à condition, bien entendu, que vous ayez ajouté des "skills", des compétences, permettant chacune de ces actions).
-
Kernel Memory (mémoire contextuelle) : c'est une fonctionnalité extrêmement puissante de Semantic Kernel. Elle permet à votre application de mémoriser et de retrouver des informations pertinentes grâce à la compréhension sémantique, c’est-à-dire le sens réel de votre requête. Kernel Memory peut intégrer divers types de documents, notamment TXT, CSV, DOCX, PDF et URL. Pour gérer la persistance (optionnelle) de cette mémoire intelligente, Semantic Kernel est compatible avec plusieurs bases de données vectorielles populaires, telles qu’Azure Cognitive Search, Qdrant, Redis, PostgreSQL et bien d’autres.
Semantic Kernel offre une grande flexibilité, compatible avec Azure OpenAI, OpenAI direct et potentiellement d'autres fournisseurs IA à venir car le but est bien d'en faire une sorte de hub simplificateur cachant les détails de l'IA à laquelle on accède.
2. Pourquoi ne pas simplement utiliser OpenAI directement ?
Vous vous demandez peut-être pourquoi choisir Semantic Kernel plutôt qu’un accès direct à l’API OpenAI. La réponse tient à plusieurs points essentiels :
-
Simplicité d’usage : Semantic Kernel vous permet de gérer les prompts, les scénarios et les interactions de manière modulaire et intuitive.
-
Réutilisabilité et extensibilité : Grâce aux plugins, vous pouvez facilement intégrer et réutiliser des fonctionnalités IA avancées.
-
Automatisation des workflows complexes : Semantic Kernel facilite la gestion et l’automatisation de scénarios complexes nécessitant plusieurs étapes logiques.
-
Mémoire intégrée (Kernel Memory) : Cette fonctionnalité permet à votre application de conserver, comprendre et exploiter intelligemment des informations accumulées, simplifiant ainsi la gestion du contexte, notamment des informations privées d'une entreprise sans les exposer à l'extérieur.
-
Flexibilité technique : Vous pouvez facilement changer de fournisseur IA (Azure OpenAI, OpenAI direct, ou autres futurs fournisseurs) sans bouleverser votre logique applicative.
On pourrait aussi se poser la même question vis à vis des Microsoft.AI.Extensions, elles aussi permettant d'utiliser OpenAI directement ou via Azure. Et l'on retrouve pour ainsi dire les mêmes avantages et inconvénients aussi... Une certaine simplpification d'accès aux API de l'AI, mais tout cela restant simple et peu intégré au reste de l'application. Pour des projets simples c'est une bonne solution, pour des projets plus exigeants ce n'est pas assez puissant comparé à Semantic Kernel.
3. Initialiser Semantic Kernel : Azure OpenAI vs OpenAI direct
Semantic Kernel permet une intégration fluide et rapide que ce soit via Azure ou directement OpenAI :
Azure OpenAI
Installez les packages :
dotnet add package Microsoft.SemanticKernel
dotnet add package Azure.AI.OpenAI
Exemple de configuration :
var kernel = Kernel.CreateBuilder()
.AddAzureOpenAIChatCompletion(
deploymentName: "NomDeploymentAzure", // Modèle déployé sur Azure
endpoint: "https://votre-instance.openai.azure.com/", // Endpoint Azure
apiKey: "VotreCléAzureOpenAI" // Clé API Azure
)
.Build();
OpenAI direct
Installation simplifiée :
dotnet add package Microsoft.SemanticKernel
Exemple de configuration directe :
var kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "gpt-4", // Modèle choisi chez OpenAI
apiKey: "VotreCléOpenAI" // Clé API OpenAI
)
.Build();
Azure convient aux projets exigeant sécurité, gestion de rôles et conformité d’entreprise, tandis que l’accès direct à OpenAI facilite un prototypage rapide. Les entreprises n'ayant pas fait le choix d'Azure peuvent, grâce à l'accès direct OpenAI, bénéficier de la totalité des services de Semantic Kernel sans aucune limitation ce qui montre la souplesse de cette solution. De toute façon, vous le voyez à l'exemple ci-dessus, passer d'une connexion directe à une connexion via Azure ne change que quelques détails lors de l'initialisation du builder (selon un modèle de code bien connu depuis ASP Core, MAUI...).
4. Exemple pratique : Semantic Kernel pour piloter des dispositifs IoT
Semantic Kernel peut interagir avec le monde réel via des dispositifs physiques tels que des objets connectés. Vous pouvez ainsi contrôler ces appareils simplement par commandes naturelles grâce à l'IA intégrée. Ce sont les "plugins" qui vont interagir avec l'IA, et leur code C# pourra piloter n'importe quelle device interne ou externe.
5. Applications autonomes et proactives avec Semantic Kernel
Semantic Kernel permet de créer des applications autonomes capables d'agir automatiquement en fonction des données recueillies régulièrement depuis des sources externes. Par exemple, une application domotique pourrait décider automatiquement d'arroser votre jardin selon les conditions météorologiques (dans une chaîne de type : lecture de sondes, interrogation régulière de l'IA, présence de plugins opérant certaines tâches sur des devices externes, plan automatique généré par l'IA, action sur le monde réel...).
Conclusion et perspectives
Semantic Kernel est une plateforme complète qui simplifie considérablement l'intégration d'une IA générative puissante dans vos projets .NET, facilitant ainsi la création d'applications intelligentes, flexibles et évolutives. Le fait de pouvoir faire collaborer l'IA et votre code C#, et ainsi de pouvoir déclencher des calculs, des actions sur des SGBD ou sur le monde extérieur est pour moi l'une des avancées la plus remarquable. Mais Semantic Kernel offre beaucoup plus comme par exemple l'accès à des informations réparties publiques ou privées sous de nombreuses formes. Bref, il est temps de vous y intéresser ! Jusqu'à maintenant nous avons tous beaucoup jouer avec ChatGPT, nous nous ne servons même pour travailler. Mais il est l'heure de passer à l'étape d'après, celle de l'intégration de l'IA dans votre code et dans le monde réel...
Explorez Semantic Kernel sur GitHub pour enrichir vos applications .NET grâce à l'intelligence artificielle générative.
Et Stay Tuned !