MÓDULO 6 · OBSERVABILIDAD · LECCIÓN 04 · 30 MIN

Prompt registry: sacar el prompt del código

Un prompt hardcodeado es una constante de configuración disfrazada de código: cambiar una palabra obliga a un commit, unos tests y un despliegue. El registry lo saca fuera, le pone número de versión y — lo que de verdad importa — enlaza cada traza con la versión exacta que la produjo.
01 — El problema
No es escribir el prompt, es cambiarlo

La situación típica de la guía es exacta: alguien cambia el prompt el viernes, los usuarios se quejan el lunes, y el desarrollador no recuerda qué cambió ni puede revertirlo sin bucear en el historial de Git. Hay dos costes distintos ahí, y conviene separarlos.

Coste de despliegue
Cambiar texto exige el ciclo completo de código, aunque el texto no sea código. Bloquea a quien no programa.
Coste de atribución
Cuando una respuesta sale mal, no sabes qué versión la generó. Sin eso no puedes comparar versiones: optimizas a ojo.
// el segundo coste es el que conecta con el resto del módulo: esto es observabilidad, no comodidad.
02 — El ciclo
Recuperar, compilar, enlazar
registro→ get_prompt("chiste-bot")→ compile(tema=…)→ langfuse_prompt=prompt_obj→ traza enlazada
prompt_obj = langfuse.get_prompt("chiste-bot")
mensajes   = prompt_obj.compile(tema=tema)

resp = client.chat.completions.create(
    model=prompt_obj.config["model"],
    messages=[{"role": "user", "content": mensajes}],
    temperature=prompt_obj.config["temperature"],
    langfuse_prompt=prompt_obj,       # <- el eslabón que cierra el círculo
)
El paso que se olvida
Sin langfuse_prompt=prompt_obj todo funciona igual y la traza queda huérfana: sabrás qué se respondió, no con qué versión. Y ése era el punto.

Dos detalles que la guía pasa por encima. Ese argumento solo lo entiende el cliente instrumentado (langfuse.openai); con el cliente estándar es un argumento desconocido. Y compile() de un prompt de texto devuelve una cadena, no una lista de mensajes, aunque en el código de la guía la variable se llame mensajes_compilados.

03 — El prompt lleva su configuración
config, no solo texto
langfuse.create_prompt(
    name="chiste-bot",
    prompt="Cuenta un chiste muy corto sobre {{tema}}.",
    config={"model": "gpt-3.5-turbo", "temperature": 1},
)

Con eso, cambiar de modelo o bajar la temperatura es una edición en la web. El código define cuándo se llama al modelo; el registro define qué se le dice y con qué parámetros.

El límite razonable: lógica fuera del template. Un if/else dentro del prompt convierte el registro en una segunda base de código sin tests. La lógica en Python, el texto en el registro.

04 — Tres mecanismos que se confunden
Versión, etiqueta y caché
MecanismoQué hacePara qué sirve
VersiónCada create_prompt con el mismo nombre crea una nuevaHistorial y reversión
Etiqueta (production, staging)Apunta a una versión concretaDesplegar sin tocar código ni número de versión
CachéEl SDK guarda el prompt localmente un ratoQue get_prompt no sea una llamada de red por petición

La caché es la que sorprende en desarrollo: cambias el prompt en la web, reejecutas y sale el viejo. No está roto, está cacheado. En producción eso es exactamente lo que quieres.

Auditoría

La caché. Un comentario del código de la guía dice "en prod el TTL es 60s", y la pista 4 del ejercicio de prompts lo repite como "TTL de 60s por defecto". Es un número concreto sin fuente. Compruébalo en la documentación y, mejor, mídelo: se mide en dos minutos. Mientras no lo midas, no lo cites.

La contradicción con las etiquetas. Otro comentario dice que "get_prompt busca la última versión si no se especifica". Si eso es cierto, etiquetar como production no protege nada: cualquier borrador nuevo pasa a ser el último y entra en producción solo. O el comportamiento por defecto es "la última etiquetada como production" y el comentario está mal, o el consejo de "etiqueta para despliegues seguros" está incompleto y falta decir que hay que pedir la etiqueta explícitamente al recuperar. ¿Cuál de las dos? Averigúalo antes de montar un despliegue encima: la diferencia entre las dos lecturas es que alguien publique sin querer un borrador en producción.

05 — Ahora tú
Mide el TTL en vez de citarlo

Crea un prompt de usar y tirar, recupéralo desde un script en bucle e imprime prompt_obj.version en cada vuelta. Con el script corriendo, edita el prompt en la web.

Cronometra cuántos segundos tardan en cambiar el número de versión que imprime tu bucle. Ese número es tu TTL real, medido por ti. Apúntalo junto a lo que afirma la guía: es la diferencia entre una cifra repetida y una cifra comprobada.