Olvidemos la noción de que el «prompting» es un arte conversacional. En ingeniería de software, un prompt enviado a una API (sea Claude 3.5 Sonnet, GPT-4 o un modelo local) es un paquete de ejecución. Si el paquete no tiene una serialización impecable, el sistema falla.
Parte 1: El Problema de Arquitectura
El error más común al escalar sistemas con agentes IA es la contaminación de la ventana de contexto. Los desarrolladores inyectan las instrucciones, los datos de los usuarios y las restricciones de seguridad en el mismo formato plano.
Cuando el LLM procesa esto, le resulta imposible distinguir algorítmicamente dónde termina la instrucción del sistema y dónde empiezan los datos no confiables. Esto no solo abre la puerta a inyecciones de prompt, sino que dispara el índice de fallos al parsear las salidas esperadas. Si tu backend en Django o FastAPI espera un JSON estricto y la API devuelve «Aquí tienes el resultado: {…», tu pipeline se cae.
Parte 2: La Implementación Técnica
Para resolver esto, descartamos el texto plano y aplicamos el framework de inyección estructurada de Anthropic, basándonos en delimitadores XML y «Prefilling».
A continuación, un esquema de implementación en Python:
import anthropic
client = anthropic.Anthropic(api_key="TU_API_KEY")
# Construcción determinista del Prompt
system_instructions = """
Eres un analizador de datos determinista.
Tu única tarea es extraer entidades de los <datos_usuario> y devolverlas.
Reglas:
1. No asumas información.
2. Si un campo falta, devuelve null.
3. Piensa tu lógica dentro de <scratchpad>.
"""
user_data = "El cliente Juan Pérez compró 3 servidores ayer."
prompt = f"""
{system_instructions}
<datos_usuario>
{user_data}
</datos_usuario>
Devuelve el output siguiendo exactamente este esquema JSON:
{{
"nombre": "string",
"cantidad_servidores": "int"
}}
"""
response = client.messages.create(
model="claude-3-5-sonnet-20240620",
max_tokens=500,
messages=[
{"role": "user", "content": prompt},
# Prefill: Obligamos al LLM a iniciar la respuesta con la estructura correcta
{"role": "assistant", "content": "<scratchpad>"}
]
)
print(response.content)
Justificación de Diseño:
- Delimitación (
<datos_usuario>): Aísla el payload de la inyección de instrucciones. - Espacio de trabajo (
<scratchpad>): Fuerza al modelo a gastar tokens en razonamiento antes de emitir la salida final. Es equivalente a darle memoria RAM temporal. - Prefill Assistant: Al pre-cargar el inicio de la respuesta del asistente con
<scratchpad>, eliminamos los saludos corporativos («¡Claro! Aquí tienes…») y vamos directo al procesamiento algorítmico.
Métricas de Éxito en Producción
La adopción de este protocolo estricto debe medirse. Al implementarlo, los KPIs a observar son:
- JSON Parsing Success Rate: Debe elevarse del 85% al 99.8%.
- Token Ratio Eficiencia: Un aumento en tokens de input (~15%), pero una caída drástica en tokens de output basura y una reducción del 100% en llamadas de reintento (Retry Loops).
Si tu orquestación actual depende de la suerte, estás acumulando deuda técnica. Estructura tus LLMs como los sistemas deterministas que tu infraestructura exige.
Deja una respuesta