// dotnet · .NET · Semantic-Kernel · Architecture · AI · Agents

DotNet-AI-Kernel-Semantic : un projet pédagogique pour industrialiser l’IA agentique en .NET

· 2 min de lecture

Pourquoi ce projet existe

En tant qu’architecte logiciel spécialisé en IA et en agents, je vois souvent deux extrêmes dans les projets IA en entreprise :

  1. des POC brillants mais impossibles à maintenir ;
  2. des architectures “propres” mais qui n’exploitent pas réellement la puissance des LLM.

DotNet-AI-Kernel-Semantic a été conçu pour combler ce fossé.
Son objectif est pédagogique : montrer comment intégrer Semantic Kernel proprement dans une architecture .NET, avec des composants compréhensibles, testables et évolutifs.

Ce projet illustre une ligne directrice simple :
l’agent ne “devine” pas, il agit via des fonctions métier contrôlées.


Ce que le projet démontre concrètement

Le projet met en avant 4 briques essentielles pour une IA d’entreprise :

  1. Fonctions natives métier via plugin (ProductPlugin)
  2. Fonction prompt structurée (CompareProducts)
  3. Mémoire métier légère type RAG (JSON + Markdown via ProductMemoryPlugin)
  4. Orchestration agentique avec appel automatique des fonctions (FunctionChoiceBehavior.Auto)

Cette combinaison est exactement ce qu’il faut pour passer d’un chatbot “générique” à un assistant métier gouverné.


Exemple 1 : exposer le métier au LLM avec des Kernel Functions

Le plugin métier expose des opérations explicites :

[KernelFunction, Description("Adds a new product")]
public string AddProduct(
    [Description("Product name")] string name,
    [Description("Product price")] decimal price,
    [Description("Product description")] string description,
    [Description("Initial stock")] int stock,
    [Description("Product category")] string category,
    [Description("Optional comma-separated use cases like gaming, office")] string useCases = "")
{
    Product newProduct = new()
    {
        Name = name,
        Price = price,
        Description = description,
        Stock = stock,
        Category = category,
        UseCases = useCases
            .Split(',', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)
            .ToList()
    };

    Product savedProduct = repository.Add(newProduct);
    return $"Product '{savedProduct.Name}' added successfully (ID: {savedProduct.Id})";
}

Intérêt entreprise :

  • contrat clair entre IA et domaine ;
  • traçabilité des actions ;
  • réduction des hallucinations (l’agent appelle une fonction, il n’invente pas une écriture en base).

Exemple 2 : orchestrer un agent qui privilégie les fonctions

Le cœur de l’approche est ici : l’agent est guidé pour utiliser les fonctions plutôt que répondre “au feeling”.

ChatCompletionAgent agent =
    new()
    {
        Name = "SK-Assistant",
        Instructions = """
                You are a helpful assistant.

                When a user question depends on application data, you are required to call a function.
                Do not answer from memory or assumptions.
                Only answer based on function results.
                When comparing two products, call ProductPromptPlugin.CompareProducts.
                For recommendation, budget, or usage questions, call ProductMemoryPlugin.SearchKnowledge.
                """,
        Kernel = kernel,
        Arguments = new KernelArguments(
            new PromptExecutionSettings()
            {
                FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
            })
    };

Intérêt entreprise :

  • gouvernance de la réponse ;
  • comportement plus déterministe ;
  • base solide pour conformité, audit et sécurité.

Exemple 3 : une mémoire RAG pragmatique et explicable

Le plugin de mémoire indexe des données locales (products.json + product-notes.md) et applique un scoring simple (tokens, usage, budget).

List<(KnowledgeChunk chunk, int score)> ranked = _chunks
    .Select(chunk => (chunk, score: ScoreChunk(chunk, queryTokens, maxBudget, usage)))
    .Where(item => item.score > 0)
    .OrderByDescending(item => item.score)
    .ThenBy(item => item.chunk.Price ?? decimal.MaxValue)
    .Take(4)
    .ToList();

Intérêt entreprise :

  • logique de sélection transparente ;
  • coût maîtrisé (pas d’infra vectorielle obligatoire au départ) ;
  • transition progressive possible vers un RAG plus avancé.

Pourquoi Semantic Kernel est pertinent en entreprise

Semantic Kernel apporte un cadre qui répond à des contraintes réelles :

  1. Interopérabilité provider : même architecture, backend LLM interchangeable (local ou cloud).
  2. Découplage propre : domaine, application, infrastructure et IA restent séparés.
  3. Testabilité : les plugins et la persistance se testent comme du code applicatif classique.
  4. Observabilité : logs structurés sur démarrage, appels plugins, recherche mémoire, erreurs agent.
  5. Évolutivité agentique : on peut ajouter des outils/fonctions sans casser le socle.

Ce qu’un architecte doit retenir

Ce projet n’est pas “juste un demo chatbot”.
C’est un pattern d’architecture pour industrialiser l’IA dans un SI :

  • l’agent devient une couche d’orchestration ;
  • la connaissance métier reste dans vos services et vos données ;
  • Semantic Kernel sert de pont robuste entre IA et logique d’entreprise.

En résumé : DotNet-AI-Kernel-Semantic est un excellent point de départ pédagogique pour construire des assistants IA fiables, explicables et maintenables dans un contexte professionnel.

// À lire ensuite