MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Régression déterministe
Tester le contrôle applicatif avec un vrai agent et des sorties maîtrisées avant de mesurer le modèle.
Objectifs
- Pyramide de tests et CI sans modèle
- Fixtures et contrats
- Limites face à l’évaluation réelle
Définir la propriété testée
L’intégration continue compile et teste les changements ; la livraison continue prépare leur distribution, le déploiement continu ajoute la mise en service. Pour un composant agentique, la base rapide vérifie parsing, contrats et décisions hôte. Une indisponibilité du fournisseur ne doit pas rendre aléatoire un test de règle métier. Les appels réels gardent leur place dans des campagnes identifiées, avec leurs prérequis et leurs résultats propres.
Placer le double à la frontière du modèle
- Base : parsing, domaines, champs requis, permissions
- Intégration : agent MAF réel + IChatClient déterministe
- Transports : vrais SQLite, MCP et HTTP avec modèles contrôlés
- Campagnes : candidat et juge réels, puis revue humaine métier
AgentCiCd.Tests conserve un agent MAF et remplace IChatClient par DeterministicChatClient. Les sorties JSON sont choisies par le test afin d’exercer un branchement précis. Cela vérifie l’orchestration et la policy ; le double ne découvre pas une bonne réponse à la demande utilisateur. Une assertion qui ne vérifie que la présence d’un mot dans le prompt a une portée limitée.
Lire les contrats et les effets
Console.Write("Support request > ");
var input = Console.ReadLine();
if (string.IsNullOrWhiteSpace(input)) return;
var result = await SupportTicketAgentFactory.Create(client).HandleAsync(input, stop.Token);
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(result));
Console.WriteLine("Classification only; no ticket was created. Tests exercise rules, not model quality.");
Code source · Demo450 · Dossier
Demo450 est une console réelle de classification : elle demande une saisie et appelle le fournisseur configuré. La régression déterministe se lance dans AgentCiCd.Tests, pas en prétendant que la console est sans modèle. La policy route riskScore >=70 vers human_review, rejette action interdite, score hors domaine et justification vide. Le nom historique du test de création ne signifie pas qu’un ticket SQLite a été écrit : la console annonce Classification only.
Un contrat désérialisable peut rester invalide métier. Tester aussi les champs manquants, refus et erreurs. Pour les écritures, vérifier permission, approbation exacte et relecture du stockage dans Maf.Backlog.Tests ; pour la reprise, utiliser Maf.Durable.Tests. Un juge ne peut pas remplacer ces frontières exécutables par une opinion favorable sur le texte.
Construire un résultat CI interprétable
dotnet build BaseTechnique.slnx -m:1 -c Releasedotnet test tests/AgentCiCd.Tests/AgentCiCd.Tests.csproj -m:1 -c Release --no-build --no-restoredotnet test tests/Episode17Demo.Tests/Episode17Demo.Tests.csproj -m:1 -c Release --no-build --no-restoreExécuter depuis la racine du dépôt complet avec le SDK épinglé et les dépendances verrouillées restaurées. Chaque build/test garde -m:1. Conserver les TRX, le code de sortie et la révision ; une suite ignorée ou interrompue n’est pas réussie. Les tests de contrat et les fixtures restent séparés des campagnes live et de leur qualification. Les anciennes recettes Verify-Lot014.ps1 restent archivées ; les commandes ci-dessus visent les projets distribués.
Ce qu’un succès applicatif permet de dire
Les tests prouvent des comportements du programme sous entrées contrôlées. Ils ne certifient pas que granite4:3b comprend les demandes, respecte toujours la politique ou produit des réponses fidèles. Les tests de transport ne valent pas recette graphique WPF. La campagne réelle, les références métier et la validation humaine indépendante restent des preuves distinctes ; cette dernière n’est pas établie.
Passer de la règle au modèle
Prérequis
Pour poursuivre
Précédent
Suivant
