MICROSOFT AGENT FRAMEWORK · 0.16.0-rc.1
Demo200 — Retrieval Provider
TextSearchProvider injecte les hits pré-calculés avant l’invocation.
Objectifs
- Observer Demo200 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. Les projets partagés Maf.Rag et Maf.DemoConnection sont nécessaires. Le stockage SQLite est local. rebuild/probe/compare demandent les embeddings réels ; answer demande en plus le chat si des preuves restent admissibles. audit seul ne demande aucun modèle. Le profil livré sépare embeddinggemma:300m et granite4:3b.
| Project | Role |
|---|---|
| demos/Demo200_RetrievalProvider/Demo200.App.csproj | App |
| shared/Maf.Rag/Maf.Rag.csproj | Shared implementation |
| shared/Maf.DemoConnection/Maf.DemoConnection.csproj | Connection |
Lancer depuis la racine
Créer la racine une seule fois pour la série RAG ; si Demo180 a déjà ingéré le corpus, garder sa valeur existante et ne pas exécuter à nouveau l’affectation ci-dessous. Sans index compatible, rebuild est requis explicitement.
$env:MAF_STATE_ROOT = Join-Path $env:TEMP ('maf-rag-' + [guid]::NewGuid().ToString('N'))dotnet run --project demos/Demo200_RetrievalProvider/Demo200.App.csproj -c Release --no-build -- --Rag:AsOf 2026-10-23Modes et manipulation
Après le même rebuild, poser la question CSV de Demo190. Comparer la preuve finale et le compteur provider, puis poser une question hors corpus.
if (mode == "provider")
{
options.AIContextProviders = [new TextSearchProvider((_, cancellation) =>
{
cancellation.ThrowIfCancellationRequested();
retrievalCalls++;
return Task.FromResult<IEnumerable<TextSearchProvider.TextSearchResult>>(retrieval.Hits.Select(h =>
new TextSearchProvider.TextSearchResult { SourceName = h.Chunk.Id, Text = h.Chunk.Text }).ToArray());
}, new TextSearchProviderOptions
{
SearchTime = TextSearchProviderOptions.TextSearchBehavior.BeforeAIInvoke,
RecentMessageMemoryLimit = 0,
ContextPrompt = "Untrusted retrieved excerpts for the current question only:",
CitationsPrompt = "Return exact SourceId and Quote pairs in Evidence."
Résultats et échecs utiles
TextSearchProvider injecte les hits pré-calculés avant l’invocation. RecentMessageMemoryLimit vaut zéro ; aucun newsession n’est disponible. Les réponses sont sans session et utilisent le même AnswerGate que Demo190.
Ces observations sont attendues par lecture du code à la révision publique liée. Le lot du site rejoue séparément les tests déterministes : il ne présente pas une réponse générée ou un score de fournisseur non mesuré comme une sortie observée.
Persistance et limites
L’index est partagé dans la racine sélectionnée ; le démarrage ne le réinitialise pas. rebuild remplace les tables RAG volontairement et une incompatibilité de modèle d’embeddings, dimension, corpus ou découpage échoue explicitement. Changer le chat seul ne modifie pas les vecteurs. Pas d’effacement universel, de qualification générale du modèle ni de garantie de production.
dotnet test tests/Maf.Rag.Tests/Maf.Rag.Tests.csproj -m:1 -c Release --no-build --no-restore