La altitud del system prompt
rediseñarás el system prompt de Magallanes a la zona Goldilocks: ni lógica frágil hardcodeada ni vaguedad, secciones organizadas, mínimos tokens de alta señal. Validarás la poda con el harness, no con impresiones. Importa porque el prompt es coste fijo que se paga en CADA turno, y dos reglas que se contradicen no son ruido neutro: son clash plantado.
4.1El problema
Abre el system prompt de Magallanes. Mide una página. Y es geología.
Cada fallo histórico dejó su parche encima del anterior. "Si la búsqueda devuelve 0 resultados, prueba sinónimos. Si el documento es muy largo, lee solo el primer tercio. Si un subtema no aparece, busca otra vez con otro término…" — doce casos así, uno por incidente que alguien quiso tapar a mano. Dos reglas se contradicen entre sí. Tres describen tools que ya no se comportan como dice el texto.
No es un problema estético. Lo midió N0·L3: ese prompt es coste fijo. Entra entero en CADA turno, antes de que Magallanes lea una sola palabra del encargo. Cada token de regla muerta lo pagas tantas veces como turnos tenga el run.
Y hay algo peor que el coste. En N0·L2 clasificaste los modos de fallo: las dos reglas que se contradicen no son texto inerte que el modelo ignora. Son clash — instrucciones que chocan dentro del contexto. El agente recibe señales opuestas y produce salidas inconsistentes entre secciones del informe.
La tentación es obvia: borrar la mitad y ya. Pero un prompt vago degrada igual que uno sobrecargado. Esta lección te da el criterio para podar sin pasarte. Y la forma de comprobar que no te pasaste: la misma curva del harness que llevas usando todo el nivel.
4.2Qué vas a poder hacer
Al terminar serás capaz de:
- Clasificar cada regla de un system prompt en cuatro categorías: señal, regla muerta, lógica frágil y contradicción.
- Rediseñar el prompt de Magallanes a la altitud correcta, reorganizando lo superviviente en secciones.
- Medir los tokens antes y después con
count_tokens, y validar la poda re-ejecutando el sweep contra las curvas del nivel. - Criticar un system prompt ajeno regla a regla, distinguiendo la verborrea de la señal legítima disfrazada de verborrea.
Necesitas saber antes:
- De N1·L3 (Compress II): qué preserva tu prompt de compaction y por qué cada ítem entra en la lista. Lo recuperamos en 4.3.
- De N0·L3 (el-presupuesto-de-tu-agente): qué partida del presupuesto era coste fijo por turno.
- De N0·L2 (los-cuatro-modos-de-morir): qué es el clash y por qué reglas contradictorias lo provocan.
- El esqueleto congelado de Magallanes: el grafo de LangGraph y sus tres tools (
buscar,leer,escribir_seccion).
4.3Recupera
Antes de seguir, responde de memoria. Esto reactiva lo anterior y engancha lo nuevo.
- De L3: tu nodo de compaction preservaba explícitamente tres tipos de cosas. ¿Cuáles eran y por qué cada una?
- De N0·L3: de las partidas del presupuesto de Magallanes, ¿cuál era coste fijo que se pagaba igual cada turno, sin crecer?
- De N0·L2: dos reglas del prompt se contradicen. ¿Qué modo de fallo provoca eso y en qué se nota en el informe?
Comprueba tu respuesta
- Decisiones tomadas, estado del informe y subtemas pendientes (más los
doc_idsya leídos). Cada ítem es algo que ningún resumen recupera si lo tira: lo que muere, muere callado. · fuente: N1·L3 (worked example del nodo de compaction). - El system prompt y las tool definitions: entran enteros en cada turno antes del historial. No crecen con el run, pero se pagan en todos los turnos — por eso son coste fijo. · fuente: corpus A.4 (attention budget: "Every new token introduced depletes this budget").
- Clash: el modelo recibe instrucciones opuestas y produce salidas que se contradicen entre secciones. En el informe se ve cuando la sección 2 afirma lo contrario de la sección 1. · fuente: N0·L2 (taxonomía de modos de fallo).
4.4El concepto
Qué es la altitud de un system prompt
Aquí está el criterio. La altitud de un system prompt es su nivel de especificidad: cuánto detalla qué hacer, frente a cuánto deja al modelo. Demasiado alta —vaga— no da señal; demasiado baja —cada caso hardcodeado— se pudre.
Anthropic lo nombra así (verbatim parcial): "The right altitude is the Goldilocks zone between two common failure modes." · fuente: corpus B.3. Goldilocks es el cuento de los tres osos: la sopa ni muy caliente ni muy fría, la justa. La analogía falla en un punto: la sopa tiene una temperatura ideal fija. La altitud correcta depende de tu tarea y se decide midiendo, no con un valor universal.
Los dos extremos que define Anthropic (verbatim):
- En uno: "hardcoding complex, brittle logic" — lógica compleja y frágil escrita a mano. Son los if-else en prosa de Magallanes: "si pasa X, haz Y". Frágiles porque cada caso nuevo exige otra línea, y se pudren cuando el mundo cambia (una tool deja de comportarse así).
- En el otro: "vague, high-level guidance" — orientación vaga y de alto nivel. "Investiga bien y escribe un buen informe." No da señal: el modelo no sabe qué significa "bien" aquí.
Minimal no significa corto
Aquí está el error de intuición que esta lección corrige. Podar no es acortar. Es subir la densidad de señal.
Anthropic lo dice dos veces (verbatim parcial). Una: "the minimal set of information that fully outlines your expected behavior." Dos: "the smallest possible set of high-signal tokens that maximize the likelihood of desired outcome." · fuente: corpus B.3.
Lee bien las dos frases. Minimal y fully outlines van juntas: el conjunto más pequeño que aún describe del todo el comportamiento esperado. No el más corto a secas. Si recortas una regla que sí daba señal, has acortado y has empeorado. El objetivo es densidad: cada token que sobrevive trabaja.
Normaliza esto: "menos es más" es un eslogan engañoso aquí. No es menos; es denso. Un prompt de 200 tokens de pura señal bate a uno de 80 tokens vagos y a uno de 600 con reglas muertas.
Organización en secciones
Lo que sobrevive a la poda no se deja en un párrafo corrido. Se organiza. Anthropic recomienda secciones con XML tags o Markdown headers. · fuente: corpus B.3. Por ejemplo: un bloque de rol, uno de cómo usar cada tool, uno de formato del informe. La estructura sube la legibilidad para el modelo y para ti, que vas a mantener este prompt.
El criterio de poda: cuatro categorías
Aquí está el instrumento operativo. Toma cada regla del prompt y métela en una de cuatro cajas. La acción sale de la caja.
| Categoría | Qué es | Qué haces con ella |
|---|---|---|
| Señal | Información de alta densidad que perfila el comportamiento esperado | Se queda (quizá reescrita más densa) |
| Regla muerta | Describe una tool o un caso que ya no existe o no aplica | Fuera |
| Lógica frágil | Un if-else en prosa para un caso concreto | Se convierte en tool, en validación, o se generaliza |
| Contradicción | Choca con otra regla del propio prompt | Se resuelve — es el clash plantado |
La tercera caja es la sutil. Lógica frágil no se borra a ciegas: muchas veces el caso real existe, pero el sitio donde resolverlo no es el prompt. "Si la búsqueda devuelve 0 resultados, prueba sinónimos" describe un comportamiento de la tool buscar. Su sitio es la tool —su lógica de retry— o una regla general ("reformula si una búsqueda no rinde"), no doce casos enumerados.
El contraejemplo obligatorio: la sobre-poda
Aquí está el límite que hace de esto un Goldilocks y no un "menos es más". Si te pasas podando, llegas al otro extremo: un prompt vago que tampoco da señal.
El harness castiga los dos extremos. La curva del sweep baja con el prompt sobre-especificado: coste fijo y clash. Y baja también con el prompt vago: el modelo no sabe qué hacer. Por eso la zona buena es un punto medio, no un mínimo.
Normaliza este error, porque es el reflejo natural tras leer "minimal": vaciar el prompt hasta dejarlo en una frase. La trampa del mastery check de 4.7 es exactamente esa — una regla que parece verborrea pero es señal legítima, y podarla empeora la curva.
4.5Míralo funcionar
Vamos a podar el system prompt de Magallanes de principio a fin. El proceso tiene cuatro pasos encadenados: clasificar, reorganizar, medir tokens, re-ejecutar el sweep.
Antes de seguir, una advertencia de método. Lo difícil aquí no es ninguna línea de código; es el juicio de meter cada regla en su caja sin autoengañarte. Lee primero la tabla de clasificación entera, luego razona regla a regla.
Paso 1 — clasificar cada regla
Este es el prompt de partida (extracto representativo de la página geológica):
1Eres un agente de investigación. Investiga el encargo y redacta un informe.
2Usa las tools buscar, leer y escribir_seccion.
3Si la búsqueda devuelve 0 resultados, prueba con sinónimos.
4Si el documento es muy largo, lee solo el primer tercio.
5Si un subtema no aparece tras buscar, busca otra vez con otro término.
6... (×12 reglas de "si pasa X, haz Y", una por incidente histórico)
7Cita siempre los doc_id de los documentos que uses en el informe.
8Sé exhaustivo y cubre todos los subtemas del encargo.
9No inventes datos: solo afirma lo que esté en los documentos leídos.
10Responde rápido para no gastar demasiados tokens.
11Tómate el tiempo que necesites para investigar a fondo.
12La tool resumir condensa documentos largos.Las dos últimas reglas de prosa se contradicen: "responde rápido" frente a "tómate el tiempo que necesites". Eso es clash. Y resumir ya no existe en el esqueleto congelado: las tools son buscar, leer, escribir_seccion. Esa regla es muerta.
Clasificación regla a regla:
| Regla (resumida) | Categoría | Acción |
|---|---|---|
| Eres un agente de investigación; redacta un informe | Señal | Queda (bloque de rol) |
| Usa las tools buscar / leer / escribir_seccion | Señal | Queda (bloque de tools) |
| Cita siempre los doc_id que uses | Señal | Queda (bloque de formato) |
| No inventes datos; solo lo de los documentos leídos | Señal | Queda (es la salvaguarda contra poisoning) |
| Si búsqueda da 0 resultados → prueba sinónimos | Lógica frágil | Generalizar: "reformula si una búsqueda no rinde" |
| Si documento muy largo → lee solo el primer tercio | Lógica frágil | A la tool leer o eliminar (no es señal del agente) |
| ... (las otras 10 reglas "si X haz Y") | Lógica frágil | Generalizar las útiles; eliminar las puntuales |
La tool resumir condensa documentos largos | Regla muerta | Fuera (esa tool no existe) |
| Responde rápido para no gastar tokens | Contradicción | Resolver con la siguiente |
| Tómate el tiempo que necesites a fondo | Contradicción | Resolver: una sola política de esfuerzo |
Paso 2 — reorganizar lo superviviente en secciones
Lo que queda, denso y en secciones con Markdown headers:
1## Rol
2Eres un agente de investigación. Investigas el encargo y redactas un informe estructurado por subtemas.
3
4## Tools
5- buscar(query): recupera documentos del corpus. Si una búsqueda no rinde, reformula la query.
6- leer(doc_id): devuelve un documento completo.
7- escribir_seccion(...): añade una sección al informe.
8
9## Formato del informe
10- Cubre todos los subtemas del encargo.
11- Cita el doc_id de cada documento que uses.
12
13## Reglas de fidelidad
14- Solo afirma lo que esté en los documentos leídos. No inventes datos.
15- Investiga a fondo; prioriza cobertura sobre velocidad.Las doce reglas frágiles colapsaron en una sola línea general ("reformula si una búsqueda no rinde"). El clash velocidad/exhaustividad se resolvió eligiendo una política: cobertura sobre velocidad. La regla muerta de resumir desapareció. Lo que queda es señal, en secciones.
Paso 3 — medir los tokens
No estimes "se ve más corto". Mide. El SDK de Anthropic cuenta tokens sin samplear:
1import anthropic
2
3client = anthropic.Anthropic()
4
5def contar_tokens_prompt(system_prompt: str, model: str = "claude-opus-4-8") -> int:
6 # count_tokens no genera respuesta: solo cuenta el input.
7 # La llamada no tiene coste de input tokens, pero sí tiene rate limits propios.
8 resp = client.messages.count_tokens(
9 model=model,
10 system=system_prompt,
11 messages=[{"role": "user", "content": "x"}], # mensaje mínimo: medimos el system
12 )
13 return resp.input_tokens
14
15antes = contar_tokens_prompt(PROMPT_GEOLOGICO)
16despues = contar_tokens_prompt(PROMPT_PODADO)
17print(f"system prompt: {antes} -> {despues} tokens")count_tokens recibe model, system, messages y opcionalmente tools, y devuelve input_tokens. · firma: corpus F.6. Esa cifra es coste fijo por turno: cada token que quitas se ahorra tantas veces como turnos tenga el run.
Paso 4 — re-ejecutar el sweep
El número de tokens no demuestra que el prompt sea mejor. Demuestra que es más barato. La calidad la dice la curva. Re-ejecuta el sweep de N0 EXACTO —mismo encargo, mismas longitudes, mismo seed— con el prompt podado, y superpón su curva a las del nivel:
1npx promptfoo eval -c promptfooconfig.yamlEl provider de N0·L4 ya invoca el grafo congelado de Magallanes; solo cambias el system prompt que el grafo carga. Lees cuatro curvas superpuestas: baseline (N0), trimming (L2), compaction (L3) y ahora compaction + prompt podado (L4). Una intervención por re-ejecución: si tocas el prompt y el umbral de compaction a la vez, no sabrás cuál movió la curva.
Self-explanation
Antes de leer la respuesta, intenta tú: ¿por qué la regla de los sinónimos es "lógica frágil" y no "señal"? ¿Dónde debería vivir?
Razónalo y comprueba
Es lógica frágil porque codifica un caso concreto ("0 resultados") con una acción concreta ("sinónimos") en prosa. Frágil: el siguiente incidente ("1 resultado irrelevante") exige otra regla, y otra, hasta las doce que viste. Esa enumeración no escala y se pudre.
Dónde vive: o en la tool buscar, como su lógica de retry —ahí es código testeable, no prosa—; o como una regla general ("reformula si una búsqueda no rinde"). La regla general cubre todos los casos sin enumerarlos. El criterio de altitud lo dice: la lógica frágil se convierte en tool, en validación, o se generaliza.
Si pensaste que es señal porque "describe un comportamiento útil", revisa: lo útil no es la regla puntual, es el principio general detrás. La regla puntual es coste fijo que se paga doce veces por nada.
4.6Hazlo tú
Andamiaje decreciente: primero podas con la tabla a medio hacer; luego subes un prompt vago sin plantilla.
Ejercicio 1 — poda con tabla a medio rellenar
Te dan una variante sobre-especificada del prompt de Magallanes y la tabla de clasificación empezada. Complétala y poda.
1Eres un investigador meticuloso. Tu trabajo es de máxima importancia.
2Usa buscar, leer y escribir_seccion siempre con cuidado y profesionalidad.
3Si buscar devuelve menos de 3 resultados, amplía con sinónimos y abreviaturas.
4Si un doc_id empieza por "doc-0", es del bloque antiguo: léelo igual.
5Recuerda que la tool indexar reordena el corpus antes de buscar.
6Cita los doc_id. Es muy importante que cites los doc_id. Cita siempre.
7Cubre todos los subtemas. Sé exhaustivo, profesional y meticuloso.| Regla | Categoría | Acción |
|---|---|---|
| Eres un investigador meticuloso | ? | ? |
| "Tu trabajo es de máxima importancia" | ? | ? |
| Si buscar < 3 resultados → sinónimos | Lógica frágil | Generalizar a "reformula si no rinde" |
| Si doc_id empieza por "doc-0"... | ? | ? |
La tool indexar reordena el corpus | ? | ? |
| "Cita los doc_id" ×3 | ? | ? |
Pistas: una regla menciona una tool que no está en el esqueleto congelado (buscar, leer, escribir_seccion). Una regla se repite tres veces seguidas: repetir no sube la señal, sube el coste. Los adjetivos de relleno ("meticuloso", "profesional", "máxima importancia") no perfilan ningún comportamiento observable.
Tras clasificar, reescribe el prompt en secciones, mídelo con count_tokens y re-ejecuta el sweep. No hay solución cerrada; reutiliza el patrón de 4.5.
Ejercicio 2 — el camino inverso, sin plantilla
Ahora lo difícil: subir un prompt vago a la altitud correcta. No hay tabla.
1Investiga bien el encargo y escribe un buen informe.Este prompt no tiene reglas muertas ni clash. Su problema es el extremo opuesto: no da señal. "Bien" y "buen" no significan nada operativo para el modelo.
Súbelo a la altitud correcta sin hardcodear lógica. Añade señal —qué tools hay, qué formato tiene el informe, qué cuenta como fidelidad— sin caer en los doce if-else de la versión geológica. Mídelo con el sweep contra el prompt vago: la curva debe subir.
Elaborative interrogation — antes de correrlo, predice: ¿la curva del prompt vago se parecerá más a la del baseline o a la del prompt geológico sobre-especificado? ¿Por qué?
Comprueba tu predicción
Las dos curvas degradadas —vago y sobre-especificado— caen, pero por motivos opuestos. El sobre-especificado paga coste fijo en cada turno y arrastra clash entre reglas. El vago no cuesta casi nada en tokens, pero no da señal: el modelo improvisa el formato y la cobertura.
Esperas que el prompt vago dé una curva más plana y baja de forma uniforme. Rinde mal en todas las longitudes, no solo en las largas: le falta señal desde el primer turno. El sobre-especificado cae más en las longitudes altas, donde el coste fijo y el clash se acumulan turno a turno.
La lección es la misma: Goldilocks. Ambos extremos pierden contra el punto medio denso. · fuente: corpus B.3 (los dos failure modes de la altitud).
Si predijiste que el prompt vago rendiría bien "porque es limpio y barato", revisa: barato no es lo mismo que bueno. Sin señal, el modelo no sabe qué entregar.
4.7Comprueba
Sin pistas. Gate de maestría: clasificar las reglas de un system prompt ajeno y justificar cada veredicto con el criterio de altitud.
Un compañero te pasa estas seis reglas del system prompt de su agente para que las audites. Una de ellas es señal legítima disfrazada de verborrea: si la podas, empeoras.
11. Eres un asistente de investigación cuidadoso y diligente.
22. Si una query devuelve resultados vacíos, intenta con términos relacionados.
33. La herramienta archivar guarda los informes terminados en el almacén.
44. Antes de afirmar un dato en el informe, verifica que aparece en un documento
5 que has leído en esta sesión; si no lo has leído, no lo afirmes.
65. Cita los doc_id. Cita los doc_id. Es crítico citar los doc_id.
76. Si el encargo tiene N subtemas, escribe exactamente N secciones, una por subtema.Para cada regla:
- Clasifícala: mantener / reescribir / convertir en tool / eliminar.
- Justifica el veredicto con el criterio de altitud.
- Identifica la regla que es señal legítima disfrazada de verborrea.
Criterio de corrección + feedback
Regla a regla:
-
Eliminar (o vaciar de adjetivos). "Cuidadoso y diligente" no perfila ningún comportamiento observable. Es altitud demasiado alta: vaga, sin señal. Reescribir solo si aporta el rol concreto ("agente de investigación que redacta informes").
-
Reescribir / convertir en tool. Es lógica frágil: un caso ("resultados vacíos") con una acción ("términos relacionados"). Generalízala ("reformula si una búsqueda no rinde") o llévala a la lógica de retry de la tool de búsqueda.
-
Eliminar. Regla muerta:
archivarno está entre las tools del agente. Describe una tool que no existe → fuera. -
MANTENER — esta es la trampa. Parece verborrea ("verifica que aparece en un documento que has leído… si no lo has leído, no lo afirmes"), pero es señal de alta densidad: es la salvaguarda contra inventar datos, la regla de fidelidad. Podarla degrada el informe (afirmaciones sin respaldo). Es minimal y fully outlines: no sobra una palabra del comportamiento que define.
-
Reescribir (a una sola línea). La instrucción "cita los doc_id" es señal; repetirla tres veces no sube la señal, sube el coste fijo. Colapsa a una línea.
-
Reescribir o convertir en validación. "Exactamente N secciones" es lógica frágil rígida: rompe si un subtema se subdivide o se funde. Mejor como guía ("una sección por subtema del encargo") o como validación de salida, no como if-else en prosa.
La trampa: la regla 4. Es la única que sobrevive intacta. Quien la poda por "larga" confunde longitud con baja señal — el error de intuición central de la lección.
Feedback formativo: si clasificaste bien la regla 4 como señal, dominas lo esencial. Distinguir densidad de longitud es lo que separa la poda de la mutilación — y es exactamente lo que la rúbrica C1 (dim 3) evalúa. Si la marcaste para podar, vuelve a 4.4: "minimal ≠ corto" significa que el conjunto más pequeño que aún describe del todo el comportamiento es el objetivo, no el más corto. Gate: necesitas la regla 4 identificada como señal y al menos cuatro de las otras cinco bien clasificadas para superar este punto.
4.8Conecta
Acabas de aplicar la tercera intervención del plan que escribiste en L1. Y la mediste, no la intuiste.
Esto es exactamente la dimensión 3 de la rúbrica C1: el system prompt a la altitud correcta —zona Goldilocks, en secciones, sin reglas muertas ni contradicciones—. Tienes la tabla de clasificación, el prompt reescrito, los tokens antes/después y la curva superpuesta. Eso es evidencia, no opinión.
Repasa lo que cierra este nivel. El plan de L1 tenía tres intervenciones de compress y poda: trimming (L2), compaction (L3) y altitud del prompt (L4). Las tres están aplicadas y medidas contra el baseline. Falta empaquetarlo en el entregable de C1 — eso es L5.
Las otras partidas del coste fijo siguen abiertas. El system prompt era una; las tool definitions y el conocimiento precargado son las otras. Se atacan con select en tools-y-jit. Allí verás que un setup de varios servidores con decenas de tools consume decenas de miles de tokens antes de que empiece la conversación · fuente: corpus A.4. Misma idea que hoy —coste fijo por turno— sobre otra partida.
Cierra el arco que abrimos en 4.1. Tenías una página de geología que pagaba renta en cada turno y plantaba clash entre sus reglas. Ahora tienes un prompt denso, en secciones, medido. La regla muerta no se paga. El clash no existe. Y lo demostraste con la curva, no con la sensación de que "se ve mejor".
4.9Reflexiona
Tómate un minuto. Responder esto por escrito consolida lo aprendido mejor que releer.
- ¿Qué aprendiste? Resume en una frase por qué "minimal ≠ corto" — qué pasa si recortas una regla que daba señal.
- ¿Qué sigue sin estar claro? ¿Distingues cuándo una regla frágil se generaliza y cuándo se convierte en tool? Si no, vuelve a 4.4, tercera caja de la tabla.
- ¿Qué harías distinto? La próxima vez que alguien quiera arreglar un fallo añadiendo una regla "si pasa X, haz Y" al prompt, ¿qué le preguntarías antes de aceptarla?
Esto requiere práctica. La intuición de "esto es señal, esto es relleno" llega clasificando prompts reales y midiendo el efecto, no leyendo. En L5 integrarás esta poda con el trimming de L2 y la compaction de L3 en el entregable de C1.