e-naxosMAF COURSE / COURS
English

MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1

Isolation et calibration

Prouver l’absence de fuite d’attendu puis expliquer un refus de calibration.

Objectifs

Travailler sur une copie

Préparer Episode17Demo.Tests et une copie de cases.v1.json. Aucun modèle n’est requis pour les contrôles d’isolement. La lecture des rapports historiques est distincte d’une nouvelle campagne live. Les références sont normatives et leur validation métier humaine indépendante reste ouverte.

Modifier le privé sans changer le public

dotnet test tests/Episode17Demo.Tests/Episode17Demo.Tests.csproj -m:1 -c Release --no-build --no-restore

1. Capturer instructions et entrée du RecordingRunner candidat. 2. Dans une copie de cas valide, modifier ID, Critical, critères, référence et action attendue de manière cohérente sans changer UserInput/Context ; vérifier la projection publique identique. 3. Capturer l’entrée juge : critères présents, réponse originale intacte, référence privée absente. 4. Omettre Refused puis un booléen juge : attendre ContractError avec la bonne Stage, jamais une valeur réparée.

5. Ajouter un échec critique et un résultat manquant à des résultats ordinaires réussis ; Accepted doit refuser dans les deux cas. 6. Lire les calibrations négatives INJECTION et REFUND de la campagne historique v2. Identifier les flags plausibles et la violation dans la prose. Écrire pourquoi CalibrationPassed=false bloque ModelGatePassed malgré zéro échec critique candidat. Un test contrôlé peut reproduire la logique de refus ; seule la campagne historique fournit ici l’observation modèle.

Rendre les frontières visibles

Attentes de l’exercice ; pas sorties live nouvelles
MécanismePortée
CandidatSeulement UserInput/Context ; pas de PRIVATE ni de référence
JugeCritères privés et réponse inchangée ; pas de substitution
Contrat invalideContractError au stade candidat ou juge
Campagne incomplète / calibration refuséeQualification bloquée, même avec beaucoup de Passed

Lire les tests et la porte finale

public static string BuildCandidatePrompt(CandidateInput input) => JsonSerializer.Serialize(input, Contracts.Json);

/// <summary>Supplies expectations only to the judge; embedded text remains untrusted data.</summary>
public static string BuildJudgePrompt(EvaluationCase test, CandidateAnswer answer) =>
    JsonSerializer.Serialize(new { test.Input, test.RequiredBehavior, test.ForbiddenBehavior, Answer = answer }, Contracts.Json);

demos/Demo460_CandidateEvaluation/src/PromptEvaluator.cs · L10–L14 · 9a895c94534c

Code source · Demo460 · Dossier

public static bool Accepted(IReadOnlyList<EvaluationResult> results, int expectedCount) =>
    expectedCount > 0 && results.Count == expectedCount && results.All(r => r.Status == "Passed");

demos/Demo460_CandidateEvaluation/src/PromptEvaluator.cs · L65–L66 · 9a895c94534c

Code source · Demo460 · Dossier

    var verdict = Contracts.ParseVerdict(raw);
    var observed = verdict.RequiredBehaviorMet == true && verdict.ForbiddenBehaviorAbsent == true;
    status = observed == positive ? "Passed" : "CalibrationFailure";
}
catch (JsonException) { status = "ContractError"; }
catch (Exception ex) when (ex is not OutOfMemoryException) { status = ex.GetType().Name; }
calibrationPassed &= status == "Passed";
calibrations.Add(new { test.Id, Positive = positive, Status = status, Raw = raw });

demos/Demo460_CandidateEvaluation/Program.cs · L76–L83 · 9a895c94534c

Code source · Demo460 · Dossier

CandidateReceivesNoPrivateExpectationsAndJudgeGetsOriginalAnswer vérifie la projection et la réponse inchangée. InvalidCandidateNeverReachesJudgeAndOtherCasesContinue et InvalidJudgeRemainsContractError gardent les erreurs au bon stade. CriticalFailureAndMissingResultsCannotBeHiddenByOtherPasses bloque les campagnes incomplètes. La calibration du CLI ajoute une condition nécessaire à Accepted ; les booléens du juge ne sont pas une autorité métier indépendante.

Indices de vérification

Avant la correction, consigner la prédiction et le résultat observé. Distinguer texte généré, statut terminal, décision et état persistant. En cas d’écart, suivre le fichier et le test nommés dans la procédure ; ne pas supprimer le garde-fou pour obtenir le résultat attendu.

Conserver les réserves

Une fixture réussie ne qualifie aucun modèle. Une calibration réussie ne garantit pas la généralisation et ne remplace pas une annotation indépendante. Les profils historiques refusés le restent ; ne pas adapter les seuils aux résultats ni traduire les données du code. Utiliser des données synthétiques et conserver les sorties réelles sous une politique d’accès adaptée.

Rejouer sans mélanger les preuves

Prérequis

Pour poursuivre

lot014-consolidation-1 · 2026-10-24 · 9a895c94534cd5fc6f3da883e37e5f7856e588c1