MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo480 — Model Routing
Lancer la branche sensible sans modèle, puis comparer routage Ollama et baseline avec leurs usages.
Objectifs
- Observer Demo480 et ses variantes ; relier le résultat aux concepts du chapitre.
Préparer une extension optionnelle
Demo480.App.csproj délègue à Maf.Observability.RoutingExperiment. Reprendre le harness et l’évaluation avant cette extension. Compiler depuis la racine ; le chemin normal exige Ollama et des modèles déjà installés. Aucun téléchargement automatique de modèle n’est effectué.
dotnet build BaseTechnique.slnx -m:1 -c ReleaseVérifier la sortie sans inférence
dotnet run --project demos/Demo480_ModelRouting/Demo480.App.csproj -c Release --no-build -- --sensitiveAttendre Host policy: human escalation. No model invoked; usage and cost unavailable. Cette branche termine avant de charger les réglages. Elle illustre une décision hôte explicite, sans détecteur de texte sensible ni file de traitement humain implémentée.
Comparer les profils disponibles
dotnet run --project demos/Demo480_ModelRouting/Demo480.App.csproj -c Release --no-buildLes variables MAF_ROUTE_TRIAGE, MAF_ROUTE_EASY et MAF_ROUTE_HARD sélectionnent des noms déjà installés. Sans elles, les trois rôles réutilisent LocalChat.Model ; cette configuration prouve la mécanique, sans comparaison de puissance. Pour varier, renseigner ces variables dans votre environnement de session avec vos noms qualifiés, puis relancer. Le fournisseur API compatible est refusé par cette expérience Ollama.
Relire chaque stade et ses compteurs
var triage = await Call("triage", triageModel, "Classify the following request. Return exactly Easy or Hard.\n" + request);
string route = triage.Trim();
if (route is not ("Easy" or "Hard")) throw new InvalidDataException("Unrecognized triage result.");
if (request.Contains("503", StringComparison.Ordinal)) route = "Hard";
string prompt = "Answer briefly in English. Separate facts from hypotheses.\n" + request;
_ = await Call("routed-execution", route == "Easy" ? easyModel : hardModel, prompt);
_ = await Call("direct-hard-baseline", hardModel, prompt);
Code source · Maf.Observability · Dossier
Relever les trois modèles annoncés puis les stades triage, routed-execution et direct-hard-baseline pour chaque requête. Le programme affiche usages et durées, mais ne publie pas les réponses complètes ni un score qualité, risque ou confiance. Les bilans Routed path including triage et Direct baseline ne sont comparables qu’en gardant la couverture des compteurs. La borne globale est cinq minutes ; une sortie de triage invalide provoque l’échec explicite.
Garder les limites de mesure
Aucun menu, fallback, modèle de secours, quota par tenant ou écriture métier n’est livré. Ordre fixe, cache, warmup et qualité non évaluée empêchent toute généralisation économique. Le profil candidat/juge par défaut reste non qualifié. Une exécution réussie ne remplace pas les évaluations métier des profils sélectionnés.
