Math Challenge
Más

Larry Profe — portando Larry a Math Challenge

mc-37 · Publicado: · de Math Challenge Research · 2544 palabras

Resumen ejecutivo

Larry ya existe en IOS como copiloto EN/ES sobre Workers AI (kimi-k2.6 → gpt-oss-120b → respuesta enlatada), con un prompt de sistema bilingüe único, un protocolo de "tool calling" hecho a mano (JSON en una línea) y auditoría durable en D1. Nada de esto usa la API de Claude — sería la primera integración de Claude en este repo.

El dueño ya decidió: Larry Profe usa la API de Claude con ruteo por dificultad (Haiku/Sonnet/Opus). El precedente más cercano en el repo no es el chat libre sino src/larry/contador/explain.ts: un hallazgo determinístico entra, un LLM lo explica en lenguaje natural sin recalcular nada, con fallback a plantilla. Larry Profe debe seguir exactamente ese patrón: el motor de calificación decide qué está bien o mal; Claude solo explica, en el idioma, edad y tono correctos, nunca avergonzando al niño.

138 palabras

Este documento fue traducido del original en inglés por Claude (Anthropic) y verificado automáticamente contra la fuente: cada número, URL, marcador de cita y marca [unverified] coincide con el original. La prosa todavía no ha sido revisada por un hablante nativo humano.

Estado de verificación

Este documento no lleva ninguna marca [unverified]. Cada afirmación está atada a una fuente numerada de abajo.

[unverified] quiere decir que la afirmación está en la investigación pero no se confirmó contra una fuente primaria en la sesión que la produjo. Se publica en vez de borrarse, porque un corpus que esconde sus huecos no es verificable.

Cómo se produjo esta investigación

Los 47 documentos se hicieron el 2026-07-31 por agentes independientes, cada uno con instrucción explícita de no inventar citas y de marcar como [unverified] lo que no pudiera confirmar contra una fuente primaria. La cuota de búsqueda web de la sesión se agotó a media investigación y los agentes posteriores trabajaron por descarga directa contra fuentes primarias. Varios sitios (ftc.gov, ico.org.uk) bloquean la descarga automatizada, y por eso ciertas afirmaciones legales están marcadas a propósito.

Lo que existe hoy — rutas de archivo y referencias de línea de este repo

Qué debe cambiar para un tutor de matemáticas infantil

  1. Tono, no “entrenador honesto”. La persona de IOS apunta a ingenieros B2B adultos que pueden aceptar una corrección directa. Un niño nunca debe sentirse avergonzado — más estricto que “el humor nunca se burla de las características de las personas”.
  2. Cinco idiomas, no dos. El tipo 'en'|'es' de locale.ts y su detector por lista de palabras no se extienden a FR/PT/DE, y el patrón de “escribir cada línea dos veces” de prompts.ts multiplicaría por 5 los tokens del prompt para contenido en su mayoría no usado por llamada — construir en su lugar un prompt de un solo idioma por locale.
  3. La corrección matemática no puede depender del LLM. Una respuesta incorrecta de una herramienta de IOS es una pista de UI mala; una explicación incorrecta de Larry Profe enseña activamente matemáticas incorrectas. Esta es exactamente la razón por la que la forma “el LLM explica, nunca calcula” de contador/explain.ts es correcta y el bucle libre de chat.ts no lo es.
  4. Vocabulario por edad, explícito en el prompt (banda de edad como parámetro), no dejado a que el modelo lo infiera del tono.
  5. El ruteo de modelos es nuevo — ADR-006 describe un ruteo híbrido Workers-AI-first; Larry Profe lo invierte (Claude-first, tres niveles de dificultad, sin Workers AI), según el brief del dueño.
  6. Retirar o suavizar el estado de avatar denying para un producto infantil — el lenguaje corporal de negación con la cabeza (larry.css:87-98) se lee como “estás equivocado”; preferir thinkingpresenting para las correcciones.

Tabla de ruteo de modelos

Los precios/IDs de modelo vienen de la skill claude-api (en caché desde 2026-06-24; el precio de introducción de Sonnet 5 corre hasta 2026-08-31), no de la memoria de entrenamiento. Las estimaciones de costo asumen un prefijo de prompt de sistema compartido (cubierto bajo el cacheo más abajo) más una carga por llamada de {problema, pasos del alumno, veredicto de calificación}; las cifras son estimaciones a validar contra prompts reales, no mediciones.

Banda de dificultadID de modelo$/MTok entrada / salidaTokens est. entrada → salidaCosto est. / 1.000 explicacionesObjetivo de latencia
Aritmética básicaclaude-haiku-4-5$1,00 / $5,00~300 → ~150~$1,05< 1,5 s, sin necesidad de streaming
Nivel medio (fracciones, álgebra, geometría)claude-sonnet-5$3,00 / $15,00 (intro $2/$10 hasta 2026-08-31)~500 → ~300~$6,00 (intro ~$4,00)2–4 s, streaming si > ~3 s
Avanzado (cálculo tensorial, integrales dobles, demostraciones)claude-opus-5$5,00 / $25,00~800 → ~600 + razonamiento adaptativopiso de ~$19, realistamente $35–60 una vez contados los tokens de razonamiento5–15 s; debe usar streaming

Notas:

La arquitectura del prompt — esqueleto propuesto, 5 idiomas, reglas duras

Apartándose del patrón de “cada línea dos veces” de prompts.ts, construir un prompt por (locale, banda de edad, nivel), mostrado en inglés (FR/PT/DE/ES son renders paralelos de un solo idioma, no concatenaciones):

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.]

Reservar output_config.format / esquemas de herramienta strict: true para el traspaso motor-de-calificación → Larry-Profe (el propio backend de Math Challenge valida ese JSON, no Claude) — la salida de este prompt es prosa fluida en streaming, no datos estructurados.

Estrategia de cacheo y control de costos

Dos capas independientes:

  1. Cacheo de prompt de Claude sobre el prefijo estable (persona + reglas + un idioma + una banda de edad). Por modelo, por prefijo — las escrituras cuestan 1,25× (TTL de 5 min) o 2× (1 hora), las lecturas ~0,1×. Un TTL de 1 hora con precalentamiento periódico (solicitudes max_tokens: 0, según shared/prompt-caching.md) conviene para el tráfico irregular de las horas de tarea. Omitir para Haiku a menos que el prefijo supere los 4.096 tokens (ver arriba).
  2. Caché de conceptos erróneos a nivel de aplicación (D1/KV) — el mecanismo que el brief del dueño en realidad pide. Cachear la explicación generada completa, indexada por (topic, misconception-classification, age-band, locale) — no la instancia exacta del problema, para que distintos problemas de fracciones con el mismo error de “olvidó el denominador común” caigan en una sola entrada de caché. Refleja el patrón de búsqueda estática existente S3_ERROR_KB/METRIC_KB (src/larry/tools.ts:59-135), salvo que se puebla con la salida de Claude al momento de la generación; recurrir a una llamada en vivo cuando falle la caché y poblarla, reflejando la forma de IA-y-luego-plantilla de contador/explain.ts. Registrar cache_hit: boolean y los usage.input_tokens/usage.output_tokens reales en una tabla de auditoría análoga a la migración 0011 — no la estimación de text.length/4 que usa audit.ts hoy.
  3. Batch API para la siembra en frío — pregenerar los N conceptos erróneos más comunes por tema antes del lanzamiento con 50 % de descuento, convirtiendo la mayor parte del tráfico temprano en lecturas de caché desde el día uno.

Implicaciones de diseño

  1. Larry Profe es una integración nueva de la API de Claude; no enrutarla a través del gateway de Workers AI de IOS — el dueño quiere Claude, y ADR-006 es una arquitectura distinta, Workers-AI-first, para un producto distinto.
  2. Modelar el motor de calificación como fuente de verdad, Claude solo para explicar — seguir la forma de contador/explain.ts, no el bucle libre de herramientas de chat.ts.
  3. Abandonar el patrón de prompt bilingüe en línea; un prompt por locale, ya que 5 idiomas hace que la deriva entre idiomas dentro de un solo prompt sea a la vez costosa y propensa a errores.
  4. Tomar el locale como un parámetro explícito del cliente (Math Challenge ya tiene una configuración de idioma) en vez de inferirlo como hace locale.ts para IOS.
  5. Construir el ruteador de nivel de dificultad en el backend de Math Challenge (junto a la calificación, que ya conoce tema/nivel) — nunca dejar que Claude elija su propio nivel de modelo.
  6. Tratar effort como un segundo eje de ruteo independiente de la elección de modelo; empezar de forma conservadora (medium en Opus 5) ya que es la palanca principal contra el descontrol de costo por tokens de razonamiento.
  7. Registrar los campos usage reales de Claude en el sumidero de auditoría desde el día uno en vez de repetir la estimación por conteo de caracteres de audit.ts.
  8. Escribir un canon de reglas duras de seguridad infantil paralelo a la lista de cinco puntos de docs/larry.md §4.2, pero desde cero — las reglas de IOS son sobre seguridad de datos, no seguridad emocional.
  9. Reutilizar LarryAvatar y su máquina de estados sin cambios, pero reconsiderar si denying debería dispararse alguna vez ante un niño.
  10. Mantener la caché de conceptos erróneos y el cacheo de prompt de Claude como sistemas distintos — resuelven problemas diferentes (evitar el reenvío del prefijo vs. evitar regenerar salida semánticamente idéntica) y confundirlos hace que se cumpla mal el objetivo de “una generación, no mil”.
  11. Usar la Batch API para sembrar de antemano la caché de conceptos erróneos antes del lanzamiento y para rellenar tipos de concepto erróneo nuevos encontrados en producción.
  12. Cada regla dura y cada línea de prompt necesita copia EN/ES/FR/PT/DE revisada por humanos — un tono que se lee como alentador en un idioma puede sonar condescendiente en otro; no dejar esto a la traducción en tiempo de ejecución.

Preguntas abiertas para el dueño del proyecto

  1. ¿El ruteador de nivel de dificultad vive en el backend de Math Challenge (el motor de calificación etiqueta tema/nivel), o Larry Profe debería reclasificar la dificultad a partir del texto del problema?
  2. ¿Cuáles son las bandas de edad reales (K-2/3-5/6-8/9-12, o por grado)? Esto determina tanto las variantes de vocabulario como el número de combinaciones de prompt cacheadas que hay que autorar (locale × banda de edad × nivel podría ser 5×4×3 = 60).
  3. ¿El effort de Opus 5 debería fijarse por nivel, o ser ajustable por tema dentro de “avanzado” (una integral doble y una demostración completa de cálculo tensorial plausiblemente necesitan un esfuerzo distinto)?
  4. ¿Existe un presupuesto de latencia a nivel de producto (p. ej., “debe empezar a hacer streaming en menos de 2 s o mostrar un estado de carga”) que debería condicionar el streaming por defecto por nivel?
  5. ¿Quién revisa la copia de reglas duras y prompts en FR/PT/DE — un revisor de contenido educativo multilingüe, o traducción automática como primer borrador a partir de la versión EN/ES?
  6. ¿La caché de conceptos erróneos necesita un TTL, o está bien servir indefinidamente una explicación cacheada para un concepto erróneo poco común?
  7. ¿“Lo que el alumno hizo bien” siempre debe encontrar algo, incluso para una respuesta en blanco o adivinada — y si es así, cuál es el piso honesto (p. ej., “lo intentaste”)?

Fuentes

Este documento cita archivos del repositorio y otras investigaciones, no una lista numerada de fuentes.

Preguntas que este documento le deja abiertas al dueño

Están sin responder a propósito. Se listan, no se resuelven — convertirlas en preguntas frecuentes obligaría a inventar respuestas que el documento no tiene.

Uno de 51 documentos de investigación, 168.346 palabras en total, contadas en el build sobre los archivos mismos. Leer este documento en el repositorio