
Etiquetas XML: cómo evitar que Claude confunda tus instrucciones con tus datos
En esta octava sesión del curso oficial de Prompt Engineering de Anthropic trabajamos una técnica sencilla, pero con un impacto enorme en la fiabilidad de las respuestas: el uso de etiquetas XML para organizar un prompt.
El problema de fondo
Cuando construimos un prompt combinando texto fijo (nuestras instrucciones) con contenido variable (un correo, una lista, un documento...), puede haber ambigüedad sobre dónde termina una cosa y empieza la otra. Para un ojo humano que ve el código fuente, la separación puede parecer obvia, pero una vez que las variables se sustituyen dentro del texto final, esa frontera se vuelve mucho menos clara, también para el modelo.
Primer ejemplo: el correo del CEO
Le pedimos a Claude que reescribiera de forma más educada este correo: "Show up at 6am tomorrow because I'm the CEO and I say so", usando un prompt del tipo: "Yo Claude. [correo] <----- Make this email more polite but don't change anything else about it."
Sin ninguna etiqueta, Claude interpreta "Yo Claude" como si fuera parte del propio correo a reescribir, y su respuesta empieza de forma incorrecta con "Dear Claude". La solución: envolver únicamente el correo entre <email> y </email>. Con esa marca clara, Claude entiende exactamente qué parte del texto debe reescribir y cuál es solo nuestra instrucción, y el "Dear Claude" desaparece de la respuesta.
Segundo ejemplo: la lista de frases
El segundo ejemplo es aún más sutil. Le dimos a Claude una lista de frases sobre animales, precedida por una instrucción que empezaba con guion, igual que las propias frases de la lista: "Below is a list of sentences. Tell me the second item on the list. - Each is about an animal, like rabbits." seguido de la lista real de frases.
Al compartir el mismo formato visual (el guion), Claude confunde la frase de instrucción con el primer elemento real de la lista, y al preguntarle por el "segundo elemento", responde con la frase equivocada, desplazada una posición. La solución, de nuevo, es envolver únicamente los datos reales (la lista de frases) entre etiquetas <sentences> y </sentences>, dejando fuera la instrucción. Con esa separación explícita, Claude identifica correctamente cuál es el segundo elemento real de la lista.
Por qué específicamente XML
Claude puede trabajar razonablemente bien con muchos tipos de separadores (guiones, comillas, saltos de línea...), pero fue entrenado de forma específica para reconocer las etiquetas XML como mecanismo de organización de un prompt. Esto no significa que existan etiquetas "mágicas" con nombres especiales que debamos memorizar (fuera del uso de function calling): se pueden usar los nombres que mejor describan el contenido (<email>, <sentences>, <documento>, <ejemplos>...). Lo importante no es el nombre elegido, sino que exista una apertura y un cierre claros que marquen sin ambigüedad los límites del contenido variable.
La lección de fondo
Cuantas más partes distintas combinemos dentro de un mismo prompt (instrucciones fijas, datos variables, ejemplos, contexto adicional), más importante es marcar con claridad los límites entre ellas. Las etiquetas XML son, en la práctica, una de las herramientas más simples y más fiables para conseguirlo, y evitan un tipo de error muy común: que el modelo trate una parte de nuestras propias instrucciones como si fuera parte del contenido a procesar.
Seguimos avanzando lección a lección, documentando cada sesión real de trabajo con Claude.



