DotNet-AI-Kernel-Semantic : un projet pédagogique pour industrialiser l’IA agentique en .NET
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 :
- des POC brillants mais impossibles à maintenir ;
- 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 :
- Fonctions natives métier via plugin (
ProductPlugin) - Fonction prompt structurée (
CompareProducts) - Mémoire métier légère type RAG (JSON + Markdown via
ProductMemoryPlugin) - 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 :
- Interopérabilité provider : même architecture, backend LLM interchangeable (local ou cloud).
- Découplage propre : domaine, application, infrastructure et IA restent séparés.
- Testabilité : les plugins et la persistance se testent comme du code applicatif classique.
- Observabilité : logs structurés sur démarrage, appels plugins, recherche mémoire, erreurs agent.
- É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.