Math Challenge
Plus

Larry Profe — porter Larry vers Math Challenge

mc-37 · Publié: · par Math Challenge Research · 2 544 mots

Résumé exécutif

Larry existe déjà dans IOS en tant que copilote EN/ES au-dessus de Workers AI (kimi-k2.6 → gpt-oss-120b → réponse en conserve), avec un unique prompt système bilingue, un protocole de « tool calling » fait main (JSON sur une ligne) et un journal d'audit durable dans D1. Rien de tout cela n'utilise l'API de Claude — ce serait la première intégration de Claude dans ce dépôt.

Le porteur du projet a déjà décidé : Larry Profe utilise l'API de Claude avec un routage par difficulté (Haiku/Sonnet/Opus). Le précédent le plus proche dans le dépôt n'est pas le chat libre, mais src/larry/contador/explain.ts : un constat déterministe entre, un LLM l'explique en langage naturel sans rien recalculer, avec repli sur un gabarit. Larry Profe doit suivre exactement ce schéma : le moteur de notation décide de ce qui est juste ou faux ; Claude se contente d'expliquer, dans la langue, l'âge et le ton corrects, sans jamais faire honte à l'enfant.

159 mots

Ce document a été traduit de l’original anglais par Claude (Anthropic) et vérifié automatiquement par rapport à la source : chaque nombre, URL, marqueur de citation et mention [unverified] correspond à l’original. Le texte lui-même n’a pas encore été relu par un locuteur natif humain.

État de vérification

Ce document ne porte aucune mention [unverified]. Chaque affirmation renvoie à une source numérotée ci-dessous.

[unverified] signifie que l’affirmation figure dans la recherche mais n’a pas été confirmée auprès d’une source primaire lors de la session qui l’a produite. Elle est publiée plutôt que supprimée : un corpus qui cache ses lacunes n’est pas vérifiable.

Comment cette recherche a été produite

Les 47 documents ont été produits le 2026-07-31 par des agents indépendants, chacun avec la consigne de ne pas inventer de citations et de signaler par [unverified] tout ce qu’il ne pouvait pas confirmer auprès d’une source primaire. Le quota de recherche web de la session s’est épuisé en cours de route et les agents suivants ont travaillé par récupération directe des sources primaires. Plusieurs sites (ftc.gov, ico.org.uk) bloquent la récupération automatisée, d’où certaines affirmations juridiques signalées à dessein.

Ce qui existe aujourd’hui — chemins de fichiers et références de lignes de ce dépôt

Ce qui doit changer pour un tuteur de mathématiques destiné aux enfants

  1. Le ton, pas le « coach honnête ». La persona d’IOS vise des ingénieurs B2B adultes capables d’encaisser une correction directe. Un enfant ne doit jamais se sentir humilié — plus strict que « l’humour ne se moque jamais des caractéristiques des personnes ».
  2. Cinq langues, pas deux. Le type 'en'|'es' et le détecteur par liste de mots de locale.ts ne s’étendent pas à FR/PT/DE, et le motif « écrire chaque ligne deux fois » de prompts.ts multiplierait par 5 les tokens de prompt pour un contenu majoritairement inutilisé par appel — construire à la place un prompt monolingue par locale.
  3. L’exactitude mathématique ne peut pas dépendre du LLM. Une mauvaise réponse d’outil IOS est une mauvaise indication d’interface ; une mauvaise explication de Larry Profe enseigne activement des mathématiques incorrectes. C’est précisément pourquoi le schéma « le LLM explique, ne calcule jamais » de contador/explain.ts est le bon, et pas la boucle libre de chat.ts.
  4. Vocabulaire par âge, explicite dans le prompt (tranche d’âge en tant que paramètre), et non laissé à l’inférence du modèle à partir du ton.
  5. Le routage de modèle est nouveau — l’ADR-006 décrit un routage hybride d’abord Workers AI ; Larry Profe inverse cela (d’abord Claude, trois paliers de difficulté, sans Workers AI), selon le brief du porteur du projet.
  6. Retirer ou adoucir l’état d’avatar denying pour un produit destiné aux enfants — le langage corporel de hochement de tête négatif (larry.css:87-98) se lit comme « tu as tort » ; préférer thinkingpresenting pour les corrections.

Tableau de routage des modèles

Les identifiants de tarification/modèle proviennent de la compétence claude-api (mise en cache le 2026-06-24 ; la tarification de lancement de Sonnet 5 court jusqu’au 2026-08-31), et non de la mémoire d’entraînement. Les estimations de coût supposent un préfixe de prompt système partagé (couvert sous la mise en cache ci-dessous) plus une charge utile par appel de {problème, étapes de l’élève, verdict de notation} ; les chiffres sont des estimations à valider face à de vrais prompts, pas des mesures.

Palier de difficultéID du modèle$/MTok entrée / sortieTokens est. entrée → sortieCoût est. / 1 000 explicationsCible de latence
Arithmétique de baseclaude-haiku-4-51,00 $ / 5,00 $~300 → ~150~1,05 $< 1,5 s, streaming non nécessaire
Palier intermédiaire (fractions, algèbre, géométrie)claude-sonnet-53,00 $ / 15,00 $ (lancement 2 $/10 $ jusqu’au 2026-08-31)~500 → ~300~6,00 $ (lancement ~4,00 $)2-4 s, streaming si > ~3 s
Avancé (calcul tensoriel, intégrales doubles, preuves)claude-opus-55,00 $ / 25,00 $~800 → ~600 + réflexion adaptativeplancher de ~19 $, réalistement 35-60 $ une fois les tokens de réflexion comptés5-15 s ; streaming obligatoire

Notes :

L’architecture du prompt — squelette proposé, 5 langues, règles strictes

En s’écartant du motif « chaque ligne deux fois » de prompts.ts, construire un prompt par (locale, tranche d’âge, palier) ; l’anglais est présenté ici (FR/PT/DE/ES sont des rendus monolingues parallèles, pas des concaténations) :

You are Larry Profe, Larry the orange rhinoceros, teaching math to
[AGE_BAND] students. Same character as always — just teaching math now.

WHAT YOU RECEIVE: a JSON verdict from the grading engine (problem, student
steps, which were correct, where the error started, its classification).
You do NOT grade or recompute. Every number/step you reference MUST come
verbatim from that JSON.

WHAT YOU DO:
1. Say specifically what the student did right (not just "good job").
2. Explain what went wrong and why — the real misconception, not "wrong answer."
3. Walk through the correct process, like a patient professor, at a level a
   [AGE_BAND] student can follow.
4. End on encouragement, never on the mistake.

HARD RULES:
- Never call a student "bad at math," "slow," or any variant — mistakes are
  how math is learned.
- Never use sarcasm, exasperation, or a disappointed tone, even softened.
- Never invent or alter a number/step/verdict not in the provided JSON.
- Never compare the student to other students or a class average.
- Never skip "what you did right," even if everything was wrong — find
  something true and specific (effort, a correct partial step, right
  approach/wrong arithmetic).
- If asked something outside math tutoring, redirect kindly to a
  parent/teacher.

LANGUAGE: Reply only in [LOCALE_NAME]. Never mix languages or offer translation.
VOCABULARY: [age-band guidance — e.g. ages 6-8: concrete objects, no jargon;
ages 13+: precise terminology expected.]

Réserver les schémas d’outils output_config.format / strict: true pour le passage moteur-de-notation → Larry Profe (c’est le backend propre à Math Challenge qui valide ce JSON, pas Claude) — la sortie de ce prompt est de la prose diffusée en continu, pas des données structurées.

Stratégie de mise en cache et de maîtrise des coûts

Deux couches indépendantes :

  1. La mise en cache de prompt de Claude sur le préfixe stable (persona + règles + une langue + une tranche d’âge). Par modèle, par préfixe — les écritures coûtent 1,25× (TTL de 5 min) ou 2× (1 heure), les lectures ~0,1×. Un TTL d’1 heure avec préchauffage périodique (requêtes max_tokens: 0, selon shared/prompt-caching.md) convient au trafic en rafales des heures de devoirs. À ignorer pour Haiku, sauf si le préfixe dépasse 4 096 tokens (voir ci-dessus).
  2. Cache d’idées fausses au niveau applicatif (D1/KV) — le mécanisme que le brief du porteur du projet demande réellement. Mettre en cache l’explication générée entière, indexée par (topic, misconception-classification, age-band, locale) — et non l’instance exacte du problème, de sorte que différents problèmes de fractions présentant la même erreur « dénominateur commun oublié » tombent sur une seule entrée de cache. Reflète le motif de recherche statique existant S3_ERROR_KB/METRIC_KB (src/larry/tools.ts:59-135), sauf qu’il est peuplé par la sortie de Claude au moment de la génération ; en cas d’échec du cache, retomber sur un appel en direct et peupler le cache, en reflétant le schéma IA-puis-gabarit de contador/explain.ts. Enregistrer cache_hit: boolean et les véritables usage.input_tokens/usage.output_tokens dans une table d’audit analogue à la migration 0011 — et non l’estimation text.length/4 qu’utilise audit.ts aujourd’hui.
  3. L’API Batch pour l’amorçage à froid — pré-générer les N principales idées fausses par thème avant le lancement à 50 % de réduction, convertissant la majeure partie du trafic initial en lectures de cache dès le premier jour.

Implications pour la conception

  1. Larry Profe est une nouvelle intégration de l’API Claude ; ne pas la faire transiter par la passerelle Workers AI d’IOS — le porteur du projet veut Claude, et l’ADR-006 décrit une architecture différente, d’abord Workers AI, pour un produit différent.
  2. Modéliser le moteur de notation comme source de vérité, Claude n’étant que l’explicateur — suivre le schéma de contador/explain.ts, pas la boucle d’outils libre de chat.ts.
  3. Abandonner le motif de prompt bilingue en ligne ; un prompt par locale, car 5 langues rendent la dérive inter-langues au sein d’un seul prompt à la fois coûteuse et sujette aux erreurs.
  4. Prendre la locale comme un paramètre explicite venant du client (Math Challenge a déjà un paramètre de langue), plutôt que de l’inférer comme le fait locale.ts pour IOS.
  5. Construire le routeur de palier de difficulté dans le backend de Math Challenge (à côté de la notation, qui connaît déjà le thème/le palier) — ne jamais laisser Claude choisir son propre palier de modèle.
  6. Traiter effort comme un second axe de routage indépendant du choix du modèle ; commencer prudemment (medium sur Opus 5), car c’est le levier principal contre l’explosion du coût des tokens de réflexion.
  7. Enregistrer les véritables champs usage de Claude dans le puits d’audit dès le premier jour, plutôt que de reproduire l’estimation par comptage de caractères de audit.ts.
  8. Rédiger un canon de règles strictes de sécurité pour enfants, parallèle à la liste de cinq points de docs/larry.md §4.2, mais en partant de zéro — les règles d’IOS portent sur la sécurité des données, pas sur la sécurité émotionnelle.
  9. Réutiliser LarryAvatar et sa machine à états sans les modifier, mais reconsidérer si denying devrait jamais se déclencher face à un enfant.
  10. Garder le cache d’idées fausses et la mise en cache de prompt de Claude comme des systèmes distincts — ils résolvent des problèmes différents (éviter le renvoi du préfixe contre éviter de régénérer une sortie sémantiquement identique), et les confondre nuit à l’objectif « une seule génération, pas mille ».
  11. Utiliser l’API Batch pour préamorcer le cache d’idées fausses avant le lancement, et pour combler rétroactivement les nouveaux types d’idées fausses découverts en production.
  12. Chaque règle stricte et chaque ligne de prompt a besoin d’un texte EN/ES/FR/PT/DE revu par un humain — un ton qui se lit comme encourageant dans une langue peut atterrir comme condescendant dans une autre ; ne pas laisser cela à la traduction en temps d’exécution.

Questions ouvertes pour le porteur du projet

  1. Le routeur de palier de difficulté réside-t-il dans le backend de Math Challenge (le moteur de notation étiquette le thème/le palier), ou Larry Profe devrait-il reclassifier la difficulté à partir du texte du problème ?
  2. Quelles sont les tranches d’âge réelles (K-2/3-5/6-8/9-12, ou par niveau scolaire) ? Cela détermine à la fois les variantes de vocabulaire et le nombre de combinaisons de prompts mises en cache à rédiger (locale × tranche d’âge × palier pourrait donner 5×4×3 = 60).
  3. L’effort d’Opus 5 devrait-il être fixé par palier, ou réglable par thème au sein du palier « avancé » (une intégrale double et une preuve complète de calcul tensoriel ont plausiblement besoin d’efforts différents) ?
  4. Existe-t-il un budget de latence au niveau du produit (par ex. « doit commencer le streaming en moins de 2 s ou afficher un état de chargement ») qui devrait conditionner le streaming par défaut selon le palier ?
  5. Qui relit les règles strictes et le texte de prompt FR/PT/DE — un relecteur de contenu pédagogique multilingue, ou une traduction automatique comme premier brouillon à partir de la version EN/ES ?
  6. Le cache d’idées fausses a-t-il besoin d’un TTL, ou est-il acceptable de servir indéfiniment une explication mise en cache pour une idée fausse rare ?
  7. Le « ce que l’élève a fait de juste » doit-il toujours trouver quelque chose, même pour une réponse vide/devinée — et si oui, quel est le plancher honnête (par ex. « tu as essayé ») ?

Sources

Ce document cite des fichiers du dépôt et d’autres recherches, pas une liste numérotée de sources.

Questions que ce document laisse ouvertes

Elles restent sans réponse à dessein. Elles sont listées, pas résolues — en faire une FAQ obligerait à inventer des réponses que le document ne contient pas.

L’un des 51 documents de recherche, 168 346 mots au total, comptés à la compilation à partir des fichiers eux-mêmes. Lire ce document dans le dépôt