MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo280 — Validated Planning
Extraction JSON, schéma hôte et un retry au maximum précèdent la désérialisation. Après deux échecs, la boucle continue sans exécution simulée de ce plan. Aucun effet de création, même pour un plan valide.
Objectifs
- Observer Demo280 et ses variantes ; relier le résultat aux concepts du chapitre.
Préparer le programme
Chat réel via la configuration commune, granite4:3b par défaut ; aucun embedding requis. Une API optionnelle est sélectionnée explicitement, sans fallback automatique. Depuis la racine de la distribution complète. Préserver les projets partagés et les fichiers de configuration. Certains prompts et libellés historiques de Demo260–290 sont encore en français dans le code public ; les commandes et identifiants restent ceux de cette révision.
dotnet build BaseTechnique.slnx -m:1 -c Release| Projet | Rôle |
|---|---|
| demos/Demo280_ValidatedPlanning/Demo280.App.csproj | Application |
| shared/Maf.DemoConnection/Maf.DemoConnection.csproj | Implémentation partagée |
Commandes depuis la racine
dotnet run --project demos/Demo280_ValidatedPlanning/Demo280.App.csproj -c Release --no-buildManipulations et variantes
Comparer les deux demandes de Demo270, puis suivre l’injection de plan invalide du chapitre dans une copie séparée.
// 3) Validation JSON Schema (+ retry unique si invalide)
if (!ValidatePlanJson(jsonText, out var err))
{
Console.WriteLine("⚠️ Plan JSON invalide. Retry unique...");
Console.WriteLine(err);
var repairPrompt = $"""
Tu as renvoyé un JSON invalide ou non conforme.
Corrige-le et renvoie UNIQUEMENT un JSON valide, sans texte autour, conforme à ce schéma :
{PlanJsonSchema}
Demande utilisateur :
{input}
""";
var rawResp2 = await planner.RunAsync(message: repairPrompt, session: session);
var rawText2 = GetResponseText(rawResp2);
jsonText = ExtractJsonObject(rawText2);
if (!ValidatePlanJson(jsonText, out err))
{
Console.WriteLine("⛔ JSON toujours invalide après retry. Arrêt.");
Console.WriteLine(err);
Console.WriteLine();
continue;
}
}
// 4) Désérialisation une fois validé
Ce qui doit être observable
Extraction JSON, schéma hôte et un retry au maximum précèdent la désérialisation. Après deux échecs, la boucle continue sans exécution simulée de ce plan. Aucun effet de création, même pour un plan valide.
Ces résultats sont attendus à partir du code lié. Les observations effectivement rejouées pour ce lot sont distinguées dans les exercices et la réception ; aucune sortie live non mesurée n’est donnée comme observée.
Limites et état conservé
Pour Demo230–250, graphe neuf à chaque entrée ; aucun effet métier écrit. Demo260 conserve ses deux sessions seulement en processus. Demo270–290 interprètent un plan par affichage simulé, sans moteur de workflow. Les appels réels dépendent du profil et les tests scriptés ne qualifient pas le modèle.
