MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo390 — Prompt Profiles
Un profil valide change les instructions pour la demande fixe, sans changer le client modèle. Un nom inconnu échoue avant génération avec Unknown instruction profile. Les profils sont lus depuis un tableau JSON local, sans menu, hot reload, session persistée ni test automatique du style.
Objectifs
- Observer Demo390 et ses variantes ; relier le résultat aux concepts du chapitre.
Préparer la démo
Depuis la racine de la distribution complète compilée en Release ; conserver les projets partagés et les fichiers copiés près des exécutables. Chat réel requis pour le chemin valide, granite4:3b par défaut ; API optionnelle seulement par choix explicite. Aucun embedding ni conteneur. Les refus de contrat d’instructions ne nécessitent pas de réponse modèle.
dotnet build BaseTechnique.slnx -m:1 -c Release| Projet | Rôle |
|---|---|
| demos/Demo390_PromptProfiles/Demo390.App.csproj | Application |
| shared/Maf.Memory/Maf.Memory.csproj | Implémentation partagée |
Lancer depuis la racine
$env:MAF_INSTRUCTION_PROFILE = "support-cautious"dotnet run --project demos/Demo390_PromptProfiles/Demo390.App.csproj -c Release --no-build$env:MAF_INSTRUCTION_PROFILE = "support-brief"dotnet run --project demos/Demo390_PromptProfiles/Demo390.App.csproj -c Release --no-buildRemove-Item Env:MAF_INSTRUCTION_PROFILE -ErrorAction SilentlyContinueManipulations et variantes
Comparer MAF_INSTRUCTION_PROFILE=support-cautious puis support-brief avec la même connexion. Relever Id/Version et fournisseur. Tester unknown-profile puis rétablir la variable.
var profiles = JsonSerializer.Deserialize<InstructionProfile[]>(
await File.ReadAllTextAsync(Path.Combine(AppContext.BaseDirectory, "appsettings.json")),
JsonSerializerOptions.Web) ?? throw new InvalidDataException("Missing instruction profiles.");
if (profiles.Length == 0 || profiles.Any(p => string.IsNullOrWhiteSpace(p.Id)
|| string.IsNullOrWhiteSpace(p.Version) || string.IsNullOrWhiteSpace(p.Instructions))
|| profiles.Select(p => p.Id).Distinct(StringComparer.Ordinal).Count() != profiles.Length)
throw new InvalidDataException("Instruction profiles must have unique IDs, versions, and instructions.");
string selected = global::Maf.DemoConnection.DemoConfiguration.GetSetting("MAF_INSTRUCTION_PROFILE") ?? "support-cautious";
var profile = profiles.SingleOrDefault(p => p.Id == selected)
?? throw new InvalidDataException("Unknown instruction profile.");
Console.WriteLine($"Instructions: {profile.Id}/{profile.Version}. Effective connection provider: {settings.ChatProvider}.");
Console.WriteLine("The instruction profile does not select a model; AI settings select the connection.");
Résultats, refus et preuves
Un profil valide change les instructions pour la demande fixe, sans changer le client modèle. Un nom inconnu échoue avant génération avec Unknown instruction profile. Les profils sont lus depuis un tableau JSON local, sans menu, hot reload, session persistée ni test automatique du style.
Limites du contrôle
Une version d’instructions ne garantit ni style, ni qualité, ni permission. Le programme n’a pas de migration d’état et ne persiste pas la session. Les tokens d’usage dépendent de ce que fournit le transport ; aucun budget financier.
