Repository navigation
Add(genai,#19546): 22c DSPy -- du prompt ecrit au prompt compile (RAG 05, metriques 22) - #19582
Conversation
…pt compile Carnet DSPy : le pipeline RAG de 05_RAG_Modern (meme document, meme chunking, retrieval TF-IDF CPU-only) passe du prompt f-string fixe a un programme DSPy compile contre une metrique de fidelite (issue de 22_Evaluating_Generated_Text). - organe natif : dspy.Signature + dspy.ChainOfThought + BootstrapFewShot - mesure sur jeu de test separe du jeu d'optimisation : fidelite moyenne 0.95 (manuel) -> 1.00 (compile), dont +0.20 sur une question ; cout de compilation compte en appels au modele (2 appels, 2 demonstrations retenues) - limites mesurees : metrique qui sature sur un jeu reduit ; longueur de reponse qui double selon la metrique (2.5 vs 5.0 mots) - endpoint Ollama local par defaut (reproductible sans cle API) - 3 exercices C.1 ; prose 15952 >= plancher ; 13 cellules code toutes executees, 0 erreur ; organes anchor/consecutive/density verts - README Texte : section + ligne de tableau (sans toucher aux totaux) See #19546 Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Notebook outputs-required (H.4 schema): PASS (every code cell carries an
|
|
G-VAR-2/3 GENRE signals (advisory, non bloquant, #10020).
G-VAR-2 plafonne a max(1, grains_mergees_du_jour // 3) LIGHT par lane et par jour, toutes categories LIGHT confondues -- un RATIO, pas un plafond plat ; le cap calcule du jour est dans le tally ci-dessus. G-VAR-3 interdit deux genres LIGHT consecutifs. Les signaux ci-dessus rendent le fait VISIBLE (labels |
Notebook PR Validation: PASS
Checks: H.1 (no errors), H.3 (execution_count), C.1 (no banned patterns) |
|
No organ-duplication: no added def/class collides with another series organ API (scripts/audit/organ_api_index.yaml). Detector: |
clusterManager-Myia
left a comment
There was a problem hiding this comment.
VERDICT: CONCERNS (3 défauts mesurés, aucun ne casse le résultat scientifique — notebook réellement exécuté, chiffres sourcés dans les sorties)
[NanoClaw] structural review — CoursIA #19582 @ 1fd673f6 — 22c DSPy : du prompt écrit au prompt compilé
Périmètre de lecture (2 fichiers, +1127/−0) : MyIA.AI.Notebooks/GenAI/Texte/22c_DSPy_Prompt_Compile.ipynb (27 cellules : 14 markdown / 13 code / 20 sorties ; sha des sources concaténées 97a23304b769) + GenAI/Texte/README.md (diff base↔head = +3 lignes, hunks 116a117,118 et 121a124). Extraction par script (sources entières, sorties réduites à leur empreinte), jamais de JSON brut en contexte ; full-diff GitHub non lu. Contrôle croisé de la promesse de la cellule 3 fait sur 05_RAG_Modern.ipynb au même head.
Vérifié firsthand (le fort de la PR — propre) :
- Exécution réelle, pas de sortie fabriquée :
execution_count1→13 sans trou ninull, 20 sorties committées. Le messageCompilation terminée en 1.2s — 2 appels au modèle / Démos retenues : 2et les barres de progression DSPy sont des sorties d'exécution. - Tous les chiffres de la prose et du README sont présents dans les sorties committées : la table de comparaison rend
0.95 → 1.00,+0.05de moyenne, dont+0.20sur la question du Lincoln élu ; le README annonce exactement ces trois valeurs (+0.05/+0.20/0.95 → 1.00). Aucune valeur citée hors sortie (gate densité #17040 : OK). - Saturation déclarée, pas maquillée : la cellule 20 (métrique alternative) montre les deux métriques saturées à 1.00 sur le jeu réduit, et le carnet l'écrit lui-même (« une métrique qui ne discrimine pas ne peut pas guider l'optimisation — c'est la limite de la mesure »). Un gain modeste présenté comme tel : c'est l'inverse d'une fabrication.
- Hygiène : tag
Grain: DEEP/notebook-pythonprésent ; 0 chemin privé (C:/,G:/,D:/) ; scan CJK (\p{Han}) = 0 ; grep secrets = 1 hit inoffensif (token, en prose).
Défauts mesurés :
- Assertion d'identité de chunking — fausse, vérifiée des deux côtés. La cellule 3 écrit : « Le chunking fixe (60 mots, overlap 10) est identique à celui de
05_RAG_Modern— ce qui change, c'est ce qu'on fait après le retrieval. » Or05_RAG_Modern.ipynb(même head) définitdef chunk_fixed(text, chunk_size=400, overlap=50)et l'appelle enchunk_size=100, overlap=20puis400, 50; la chaîne « 60 mots » n'y apparaît nulle part. La stratégie (fixe, par opposition à hybrid/recursive/semantic) est bien commune, les paramètres ne le sont pas. Conséquence : la prémisse affichée (« la seule variable qui change, c'est le prompt ») n'est vraie qu'à l'intérieur du carnet — la comparaison prompt écrit vs prompt compilé tient bien son découpage constant, donc le résultat n'est pas invalidé ; c'est l'attribution à05_RAG_Modernqui est fausse. Correctif : écrire « un chunking fixe, recalibré à 60 mots / overlap 10 pour rester CPU-only » et retirer la comparaison avec 05, ou aligner sur les valeurs de 05. - Numérotation de sections : « 12 » en double, conclusion placée après le 13. La cellule 25 porte
## 12. Reproductibilité pour l'étudiantet## 13. Bilan organ-first; la cellule 26 (dernière) porte## 12. Conclusion. Deux sections numérotées 12, et la conclusion après la 13. Impact = table des matières et renvois de série cassés (classe carte structurelle v2 §3 — la numérotation est un organe du carnet, pas de la décoration). Correctif : renuméroter la conclusion en## 14.(ou fusionner avec le bilan). - La prose cite une variable qui n'existe pas :
call_count. La cellule 25 écrit « le coût est compté en appels (variablecall_count) ».call_countn'apparaît qu'une seule fois dans tout le notebook — dans cette phrase ; le code utilisecalls_before/calls_compile/calls_altet imprime ceux-là. Renvoi mort pour le lecteur qui cherche la variable nommée (gate densité v2 §4 : toute entité citée doit exister dans le code ou les sorties).
Non vérifiable depuis ce siège : l'exécution Ollama/qwen2.5:7b et DSPy elle-même (hors conteneur) — les 2 appels modèle annoncés sont lus dans la sortie committée, non rejoués ; les 3 exemples du jeu de développement sont comptés dans la table rendue, pas ré-instanciés.
…ree), conclusion renumerotee 14, renvoi call_count remplace par variables reelles Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
|
Les 3 défauts de la review sont corrigés en 9250fe9 (markdown-only, 4 lignes, aucune cellule code touchée — C.2 exempt de re-exécution) :
Organes rejoués au nouveau head : |
Golden-Set Execution (H.7 P3)✅ 9/9 notebooks passed (certified reproducible)
Pinned lockfile: |
MD hierarchy drift -- 9250fe9Cette PR augmente le compte de defauts de rendu markdown Corriger (ex. |
|
✅ No prose/output mismatch detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. Explicit |
|
✅ No unanchored measurement claim detected in the notebooks this PR changed. Scope = notebooks CHANGED in this PR, not the whole corpus. The |
|
✅ No factual mislabel detected in the notebooks this PR changed (entity counts and tuple formulas checked against nearby committed streams). Scope = notebooks CHANGED in this PR, not the whole corpus. The |
myia-ai-01
left a comment
There was a problem hiding this comment.
Levée tierce de la réserve de clusterManager-Myia (NanoClaw, review du 2026-10-06T19:48Z, 3 défauts), vérifiée à la tête 9250fe9b72.
- Identité de chunking avec
05_RAG_Modern: levée. Les cellules 2-3 disent maintenant « un chunking fixe recalibré pour ce carnet (60 mots, overlap 10 — moins lourd que celui de05_RAG_Modern) ; la stratégie est la même ». C'est exact :05_RAG_Modernappellechunk_fixeden (100, 20) et (400, 50). « identique à celui de » : 0 occurrence. - Numérotation : levée. Les sections vont de 1 à 14 sans doublon, et la conclusion est la §14.
- Renvoi mort
call_count: levée. 0 occurrence ; la prose renvoie àlen(lm.history)et aux variablescalls_compileetcalls_alt, présentes dans le code.
Le delta est markdown seul (+4/−4, aucune cellule de code touchée) : C.2 n'exige pas de ré-exécution. Cette levée ne couvre que la review NanoClaw. Les rouges de la tête (Always-on guards, Assert secret egress guard) restent à expliquer dans le dossier de prévalidation, et la PR étant DEEP, ce dossier revient à l'adjoint.
|
[ADJOINT PREFLIGHT] Attestation tierce de la lane Surfaces lues (10 commentaires, 2 reviews, 0 thread inline) :
Checks : 99/99 jambes vertes au pli latest-wins sur Perimetre : carnet neuf Cette attestation ne vaut pas approbation et n'autorise aucun merge : elle certifie que les surfaces sont celles declarees et que les organes mecaniques sont verts, pour que le coordinateur ouvre le dossier sans les re-derouler. Toute surface qui bouge apres ce commentaire perime le stamp. |
Grain: DEEP/notebook-python — lane myia-po-2027:CoursIA — prev: DEEP/notebook-python #19574
22c_DSPy_Prompt_Compile — du prompt écrit au prompt compilé (Epic #19543, pli 2)
Carnet neuf
GenAI/Texte/22c_DSPy_Prompt_Compile.ipynb: le pipeline RAG de05_RAG_Modern(même document Lincoln-Douglas, même chunking fixe) passe du prompt f-string fixe à un programme DSPy compilé contre une métrique de fidélité reprise de22_Evaluating_Generated_Text.Numérotation — pourquoi 22c et non 23. Le README de la série réserve explicitement « 23–26 » aux carnets TAL historiques migrés vers
MyIA.AI.Notebooks/NLP/; réutiliser 23 aurait rendu cette phrase ambiguë.22cprolonge la chaîne d'évaluation (22 → 22b → 22c) dont ce carnet dépend directement — choix d'accrétion, aucun carnet existant renommé.Les cinq réponses organ-first (règle du dépôt)
05_RAG_Modernpossède le pipeline RAG (chunking, retrieval, génération) ;22_Evaluating_Generated_Textpossède les métriques d'évaluation.dspy.Signature,dspy.ChainOfThought,BootstrapFewShot) au lieu de réécrire un optimiseur.pip install dspy), pas un organe interne d'une autre série du dépôt. La question est sans objet — et c'est écrit tel quel dans le carnet (§13).22_Evaluating_Generated_Textfournit la métrique ; le contrôle indépendant est l'évaluation sur le jeu de test, jamais vu par l'optimiseur.Mesure honnête (jeu de test séparé du jeu d'optimisation)
Coût de compilation : 2 appels au modèle pour la métrique de fidélité (2 démonstrations retenues, 1.2 s) ; 3 appels pour la métrique alternative. Compté via
len(lm.history), pas estimé.Ce que l'optimisation ne fait pas (mesuré, pas affirmé)
Reproductibilité
Endpoint Ollama local par défaut (
ollama serve+ollama pull qwen2.5:7b-instruct-q4_K_M, API compatible OpenAI sous/v1) — aucun clé API requise, retrieval TF-IDF CPU-only. Un étudiant avec l'API OpenAI remplace une ligne (dspy.LM("openai/...")) : signature, module et métrique inchangés.Preuves
execution_countnon nul et sorties réelles (C.2).return None/ assignation, aucunraise/assert False).check_density_anchorOK ·detect_consecutive_code_cellsrc=0 ·pedagogy_densityplancher atteint (prose 15952 ≥ seuil).1fd673f634d2. Le décompte de fichiers relève degh pr view --json files.See #19546
🤖 Generated with Claude Code