Math Challenge
Más

Larry Profe — portando a Larry a Math Challenge

mc-37 · Publicado: · de Math Challenge Research · 2,544 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.

Qué existe hoy — rutas de archivo y referencias de línea de este repo

Qué debe cambiar para un tutor de matemáticas para niños

  1. Tono, no “entrenador honesto.” La persona de IOS apunta a ingenieros adultos B2B que pueden recibir 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 una persona.”
  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 prompts.ts de “escribir cada línea dos veces” multiplicaría por 5 los tokens del prompt para contenido que en su mayoría no se usa en cada llamada — mejor construir 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 mala pista de UI; una explicación incorrecta de Larry Profe enseña matemáticas erróneas de forma activa. Esta es exactamente la razón por la que la forma “el LLM explica, nunca calcula” de contador/explain.ts es correcta y el ciclo 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 por modelo es nuevo — ADR-006 describe un ruteo híbrido con prioridad Workers AI; Larry Profe lo invierte (prioridad Claude, 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 negar con la cabeza (larry.css:87-98) se lee como “estás mal”; preferir thinkingpresenting para las correcciones.

Tabla de ruteo por modelo

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 el 2026-08-31), no de memoria de entrenamiento. Las estimaciones de costo asumen un prefijo de prompt de sistema compartido (cubierto bajo caché abajo) más una carga útil por llamada de {problema, pasos del estudiante, veredicto de calificación}; las cifras son estimaciones a validar contra prompts reales, no mediciones.

Banda de dificultadID de modelo$/MTok entrada / salidaTokens estimados entrada → salidaCosto estimado / 1,000 explicacionesMeta 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 adaptativo~$19 de piso, 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 rígidas

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 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 simple en streaming, no datos estructurados.

Estrategia de caché y control de costo

Dos capas independientes:

  1. Caché 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 al tráfico de horas de tarea, que llega en ráfagas. 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 realmente 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” acierten en la misma entrada de caché. Refleja el patrón estático existente de búsqueda S3_ERROR_KB/METRIC_KB (src/larry/tools.ts:59-135), excepto que se puebla con salida de Claude al momento de generarse; si falla, hacer una llamada en vivo y poblar el caché, reflejando la forma AI-luego-plantilla de contador/explain.ts. Registrar cache_hit: boolean y el usage.input_tokens/usage.output_tokens real en una tabla de auditoría análoga a la migración 0011 — no la estimación text.length/4 que usa hoy audit.ts.
  3. API por lotes 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 nueva integración con 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, con prioridad Workers AI, para un producto distinto.
  2. Modelar el motor de calificación como fuente de verdad, Claude solo-explica — seguir la forma de contador/explain.ts, no el ciclo libre de herramientas de chat.ts.
  3. Descartar 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 lo 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 sabe 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 del modelo; empezar conservador (medium en Opus 5) ya que es la palanca principal contra el disparo 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 rígidas 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 siquiera dispararse frente a un niño.
  10. Mantener el caché de conceptos erróneos y el caché de prompt de Claude como sistemas distintos — resuelven problemas diferentes (evitar reenviar el prefijo vs. evitar regenerar salida semánticamente idéntica) y confundirlos entrega menos del objetivo de “una generación, no mil”.
  11. Usar la API por lotes para presembrar el caché de conceptos erróneos antes del lanzamiento y para rellenar nuevos tipos de conceptos erróneos encontrados en producción.
  12. Cada regla rígida y 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 aterrizar como 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 a redactar (locale × banda-de-edad × nivel podría ser 5×4×3 = 60).
  3. ¿El effort de Opus 5 debería ser fijo por nivel, o ajustable por tema dentro de “avanzado” (una integral doble y una demostración completa de cálculo tensorial plausiblemente necesitan distinto esfuerzo)?
  4. ¿Existe un presupuesto de latencia a nivel de producto (p. ej. “debe empezar a transmitirse en 2 s o mostrar un estado de carga”) que debería condicionar el streaming por omisión por nivel?
  5. ¿Quién revisa la copia de reglas rígidas 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. ¿El caché de conceptos erróneos necesita un TTL, o está bien servir indefinidamente una explicación cacheada para un concepto erróneo raro?
  7. ¿“Lo que el estudiante hizo bien” siempre debe encontrar algo, incluso para una respuesta en blanco/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