Dot.Blog

Consulting DotNet C#, XAML, WinUI, WPF, MAUI, IA

Azure AI - Créer un chatbot contextuel avec Azure OpenAI + mémoire conversationnelle en C#

Il fallait bien aborder le sujet, les ChatBots sont incontournables et lorsqu'ils sont propulsés par de l'IA moderne et puissante ils peuvent changer le rapport entre utilisateur et site marchand ou App. C'est donc en traitant un exemple complet de ce type que se termine la série de 12+1 articles sur Azure AI !

Dans cet article, nous allons créer un chatbot contextuel qui :

  • gère l’historique de conversation localement (en mémoire)
  • envoie chaque message dans un tableau messages[] compatible avec l’API Chat de Azure OpenAI
  • affiche les réponses du modèle dans la console

Ce modèle est proche d’un agent conversationnel d’entreprise avec contexte simple.

🔄 Fonctionnement

L’API de chat GPT (comme celle de Azure OpenAI) fonctionne avec une liste de messages successifs :

[
  { "role": "system", "content": "Tu es un assistant." },
  { "role": "user", "content": "Bonjour" },
  { "role": "assistant", "content": "Bonjour ! Comment puis-je vous aider ?" },
  { "role": "user", "content": "Explique moi le machine learning." }
]

Ce modèle de conversation est stateless côté serveur, donc c’est à l’application cliente de garder l’historique.

✏️ Exemple complet de chatbot console

using System.Text.Json;
using System.Text;
using System.Net.Http.Headers;

var endpoint = "https://votre-instance.openai.azure.com/openai/deployments/chatbot-deploy/chat/completions?api-version=2024-02-15-preview";
var apiKey = "VOTRE_CLE_API";

var client = new HttpClient();

client.DefaultRequestHeaders.Add("api-key", apiKey);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);

var messages = new List<object>
{
    new { role = "system", content = "Tu es un assistant utile pour les utilisateurs d’une application métier." }
};

while (true)
{
    Console.Write("Vous : ");
    var input = Console.ReadLine();
    if (string.IsNullOrWhiteSpace(input)) break;

    messages.Add(new { role = "user", content = input });

    var requestData = new { messages = messages, temperature = 0.7 };
    var content = new StringContent(JsonSerializer.Serialize(requestData), Encoding.UTF8, "application/json");
    var response = await client.PostAsync(endpoint, content);
    var json = await response.Content.ReadAsStringAsync();

    using var doc = JsonDocument.Parse(json);
    var reply = doc.RootElement
        .GetProperty("choices")[0]
        .GetProperty("message")
        .GetProperty("content")
        .GetString();

    Console.WriteLine("Bot : " + reply);
    messages.Add(new { role = "assistant", content = reply });
}

📚 Notes pédagogiques

  • Le tableau messages contient l’intégralité de la conversation.
  • La conversation est mémorisée dans la session courante. Vous pouvez la sauvegarder en JSON si vous voulez la persister.
  • Vous pouvez enrichir le prompt system avec des consignes sur le ton ou la spécialité (assistant RH, assistant technique, etc.)

🎓 Pour aller plus loin

C'est fini pour cette série de 12+1 articles consacrés à Azure AI. DotBlog a publié ou publiera d'autres articles sur l'IA, c'est une corde à mettre à son arc pour tout développeur et il existe beaucoup de types de cordes ! Azure AI en est une, accéder directement à OpenAI en est une autre mais aussi se servir de Semantic Kernel. Pour cela j'ai une formation en vidéos qui vous intéressera certainement (d'autres infos sur ce sujet seront publiées, sinon n'hésitez pas à me contacter !).

Depuis début octobre 2025 jusqu'à ce mois de mars, en plein printemps qui débute, un bon bout de chemin a été fait, mais que cela n'occulte pas tous les autres articles publiés tous les vendredi à 12h. Je compte sur vous alors...

Stay Tuned !

 

Faites des heureux, PARTAGEZ l'article !