Cargando

Cuando necesitas que Claude genere datos estructurados como JSON, código Python o listas con viñetas, a menudo te encontrarás con un problema común: Claude quiere ser útil y agregar texto explicativo alrededor de tu contenido. Si bien esto suele ser genial, a veces solo necesitas los datos en bruto sin nada más.

Considera construir una aplicación web que genere reglas de AWS EventBridge. Los usuarios ingresan una descripción, hacen clic en generar, y esperan ver JSON limpio que puedan copiar y usar de inmediato. Si Claude devuelve el JSON envuelto en bloques de código markdown con texto explicativo, los usuarios no pueden simplemente copiar toda la respuesta; tienen que seleccionar manualmente solo la parte del JSON.

El problema con las respuestas predeterminadas

Por defecto, cuando le pides a Claude que genere JSON, podrías obtener algo como esto:

markdown
```json
\{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": \{
    "state": ["running"]
  \}
\}
```

This rule captures EC2 instance state changes when instances start running.

El JSON es correcto, pero está envuelto en formato markdown e incluye texto explicativo. Para una aplicación web donde los usuarios necesitan copiar el JSON en bruto, esto crea friction en la experiencia del usuario.

La solución: Prefilling de mensajes del asistente + secuencias de parada

Puedes combinar el prefilling de mensajes del asistente con secuencias de parada para obtener exactamente el contenido que deseas. Así es como funciona:

python
messages = []

add_user_message(messages, "Generate a very short event bridge rule as json")
add_assistant_message(messages, "```json")

text = chat(messages, stop_sequences=["```"])

Esta técnica funciona de la siguiente manera:

  1. El mensaje del usuario le indica a Claude qué generar
  2. El mensaje del asistente prellenado hace que Claude piense que ya comenzó un bloque de código markdown
  3. Claude continúa escribiendo solo el contenido JSON
  4. Cuando Claude intenta cerrar el bloque de código con ```, la secuencia de parada finaliza inmediatamente la generación

El resultado es JSON limpio sin formato adicional:

json
{
  "source": ["aws.ec2"],
  "detail-type": ["EC2 Instance State-change Notification"],
  "detail": {
    "state": ["running"]
  }
}

Procesando la respuesta

Podrías notar algunos caracteres de nueva línea adicionales en la respuesta. Estos son fáciles de manejar:

python
import json

# Limpiar y analizar el JSON
clean_json = json.loads(text.strip())

Más allá de JSON

Esta técnica no se limita a la generación de JSON. Úsala siempre que necesites datos estructurados sin comentarios:

  • Fragmentos de código Python
  • Listas con viñetas
  • Datos CSV
  • Cualquier contenido formateado donde quieras solo el contenido, no explicaciones

La clave está en identificar en qué quiere envolver Claude naturalmente tu contenido, y luego usar eso como tu prefill y secuencia de parada. Para código, suelen ser bloques de código markdown. Para listas, podrían ser marcadores de formato diferentes.

Este enfoque te da un control preciso sobre el formato de salida de Claude, lo que facilita mucho la integración de contenido generado por IA en aplicaciones donde los datos limpios y estructurados son esenciales.