e-naxosMAF COURSE / COURS
English

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

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
Projets nécessaires
ProjetRôle
demos/Demo390_PromptProfiles/Demo390.App.csprojApplication
shared/Maf.Memory/Maf.Memory.csprojImplé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-build
Remove-Item Env:MAF_INSTRUCTION_PROFILE -ErrorAction SilentlyContinue

Manipulations 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.");

demos/Demo390_PromptProfiles/Program.cs · L8–L19 · 9a895c94534c

Code source · Demo390 · Dossier

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.

Relier aux contrats et prérequis

Prérequis

Pour poursuivre

Dossier complet de la démo · README

lot010-controls-1 · 2026-10-24 · 9a895c94534cd5fc6f3da883e37e5f7856e588c1