Usa prompts XML para sacer el máximo provecho a Claude
Al usar Claude en Copilot se nos abre un nuevo mundo de posibilidades en el que hay peculiaridades como el uso de formato XML en los prompts.
Una vez que tienes habilitado Claude en tu tenant de Microsoft para usarlo en Copilot («Cómo usar Claude en Copilot«) y haberte leído el post sobre cuando utilizar un modelo u otro (GPT versus CLAUDE: «Ventajas principales de Claude frente a GPT«), el siguiente paso es familiarizarte con el prompting XML de Claude para sacarle todo su jugo.
Si no quieres leer todo, aquí tienes un resumen
Anthropic recomienda el uso de etiquetas XML para organizar prompts complejos en sus modelos Claude1. Esta técnica es especialmente útil cuando el prompt incluye múltiples componentes, como instrucciones, contexto, ejemplos o documentos largos. Según la documentación oficial, las etiquetas XML ayudan a Claude a analizar el input de manera más precisa, reduciendo errores de interpretación y mejorando la calidad de las respuestas.¿Por qué usar etiquetas XML?
- Claude ha sido entrenado específicamente para reconocer y manejar bien este formato, pero también se puede utilizar formato JSON o Markdown aunque no será igual de efectivo, si que será más efectivo que un prompt normal.
- Facilita la separación clara de partes del prompt, evitando confusiones.
- Permite estructurar las respuestas (por ejemplo, obligando a Claude a responder dentro de ciertas etiquetas).
Mejores prácticas
- Nombres de etiquetas descriptivos: Usa nombres significativos y consistentes, como <instructions>, <examples>, <thinking> o <answer>. No hay etiquetas estándar ni obligatorias, pero deben reflejar el contenido que encierran.
- Anidamiento: Para contenido jerárquico, anida etiquetas: <external><internal>…</internal></external>.
- Consistencia: Mantén los mismos nombres de etiquetas en todo el prompt y refiérete a ellos en las instrucciones (ej.: «Usa el contrato dentro de las etiquetas <contract>…»).
- Combinación con otras técnicas: Úsalas junto a few-shot prompting (con <ejemplos>), chain-of-thought (con <pensamiento> y <respuesta>) o prompts largos/multidocumento.
¿Qué son las etiquetas XML en el contexto de Claude?
Las etiquetas XML son una forma de estructurar el texto de un prompt usando marcas similares a XML (por ejemplo <etiqueta>...</etiqueta>). En lugar de escribir un prompt como un bloque de texto plano, se envuelven las distintas partes (instrucciones, datos, ejemplos, etc.) dentro de etiquetas descriptivas.
Anthropic recomienda esta técnica porque ayuda a Claude a reconocer y separar claramente cada componente del mensaje. Al delimitar secciones, se evitan confusiones – por ejemplo, que el modelo confunda instrucciones con el contenido de un documento o con ejemplos incluidos en el prompt. En la práctica, esto conduce a respuestas de mayor calidad y más enfocadas a lo que se le pide al modelo.
¿Por qué usar etiquetas XML? Las ventajas principales que Anthropic destaca son:
- Claridad: las etiquetas permiten segmentar explícitamente cada parte de la indicación, manteniendo una estructura ordenada y comprensible. Claude puede así distinguir qué texto es contexto, cuáles son instrucciones, cuáles son ejemplos, etc.
- Precisión: al estar bien delimitadas las secciones, se reduce el riesgo de que el modelo malinterprete partes del prompt o mezcle diferentes elementos. Por ejemplo, unas etiquetas
<instructions>aseguran que Claude identifique claramente las instrucciones que debe seguir, separadas de cualquier otro texto. - Flexibilidad: es más fácil añadir, quitar o modificar componentes del prompt sin reescribirlo por completo. Cada sección está “contenida” en su etiqueta, de modo que podemos reemplazar solo esa parte (p. ej., actualizar el contexto o los datos) sin romper la coherencia del prompt.
- Facilidad de procesamiento posterior: si hacemos que Claude también responda usando etiquetas XML, la salida será más parseable. Es decir, podremos extraer automáticamente secciones específicas de la respuesta de forma sencilla mediante software, ya que la estructura en XML facilita el post-procesamiento.
Cabe aclarar que Claude no tiene un conjunto fijo de etiquetas predefinidas aprendidas en entrenamiento. No existe una etiqueta “mágica” especial – el modelo no ha sido entrenado con etiquetas concretas como <instructions> o <data> de forma privilegiada. En cambio, la utilidad radica en la coherencia y claridad que aportan: somos libres de elegir nombres de etiqueta que tengan sentido para el contenido delimitado. Por ejemplo, podríamos usar <contract> para encerrar el texto de un contrato, <analysis> para la sección de análisis, <example> para ejemplos, etc., siempre y cuando seamos consistentes. Lo importante es que los nombres describan lógicamente la información que envuelven.
Casos de uso principales
Las etiquetas XML son especialmente útiles cuando el prompt contiene múltiples componentes o es muy largo. Algunos escenarios típicos donde se aplican son:
- Prompts con contexto extenso o datos embebidos: Si proporcionamos a Claude párrafos de contexto (por ejemplo, una política, un contrato, datos de una tabla) junto con instrucciones sobre qué hacer con ese contexto, conviene delimitarlos. Por ejemplo, incluir el contexto dentro de
<context>o<document>y las instrucciones dentro de<instructions>evita que el modelo mezcle texto fuente con indicaciones. Anthropic señala que en prompts con contexto + instrucciones + ejemplos, el uso de XML “puede ser un cambio radical”, pues permite que Claude analice la entrada con mayor precisión. - Few-shot prompting (ejemplos): Al dar ejemplos para guiar la respuesta de Claude (técnica multishot)2, es recomendable encerrarlos en etiquetas. Una práctica común es usar una etiqueta
<examples>que contenga varias etiquetas<example>anidadas, cada una con un ejemplo. De este modo, los ejemplos quedan separados de la pregunta principal. Por ejemplo:<examples><example>...ejemplo 1...</example><example>...ejemplo 2...</example></examples>. Claude tomará esos ejemplos como referencia y no los confundirá con la consulta. Antrópic confirma que esta técnica mejora la consistencia y estructura de las respuestas. - Instrucciones complejas o pasos a seguir: Si el prompt incluye pasos secuenciales o varias instrucciones, envolverlas en
<instructions>ayuda a que el modelo las reconozca como la guía a seguir. Además, dentro de<instructions>podemos usar listas numeradas para enfatizar la secuencia. Esto reduce la probabilidad de que Claude ignore u omita alguna instrucción importante. - Solicitud de formato específico en la respuesta: Podemos indicar a Claude el formato deseado de la salida mediante etiquetas. Por ejemplo, usar una etiqueta
<output_format>o<formatting>para describir o ejemplificar la estructura del resultado esperado. Incluso se pueden proporcionar plantillas de formato: Anthropic sugiere, por ejemplo, incluir un ejemplo de formato deseado envuelto en<formatting_example>...</formatting_example>. De esta forma, Claude entiende cómo estructurar su respuesta (secciones, estilo, etc.) imitando ese ejemplo. Otro uso es pedir directamente que la respuesta venga envuelta en ciertas etiquetas para facilitar su parseo; por ejemplo:<answer>...</answer>. Esto es útil cuando vamos a procesar automáticamente la respuesta de Claude en una aplicación. - Cadena de pensamiento (razonamiento paso a paso): En prompts que animan a Claude a razonar «en voz alta» (chain-of-thought), se pueden usar etiquetas como
<thinking>y<answer>para separar el razonamiento interno de la respuesta final. Un patrón común es pedir a Claude que primero genere su análisis dentro de<thinking>y luego dé la conclusión final dentro de<answer>. De este modo, si necesitamos descartar el texto de razonamiento antes de mostrar la respuesta al usuario, es trivial eliminar todo lo dentro de<thinking>. Esta técnica estructurada mejora la coherencia y permite inspeccionar o filtrar el proceso de pensamiento del modelo.
En resumen, cualquier caso en el que el prompt tenga partes diferenciadas (contexto extenso, varias instrucciones, ejemplos, formatos de salida, etc.) es un candidato ideal para beneficiarse de esta segmentación mediante XML. La técnica aporta orden y reduce la ambigüedad, lo cual se traduce en un desempeño más confiable de Claude.
Recomendaciones y buenas prácticas
Para aprovechar al máximo las etiquetas XML en los prompts, Anthropic propone varias buenas prácticas:
- Ser consistente: Define un conjunto de etiquetas y utilízalas sistemáticamente. Si decides, por ejemplo, usar
<instruction>para las instrucciones y<data>para datos, mantén esos mismos nombres en todos tus prompts similares. Asimismo, cuando te refieras en el texto a información encapsulada, puedes mencionar la etiqueta para reforzar la referencia. Esta consistencia ayuda a Claude a crear un “mapa” mental de la estructura; cambiar nombres o usar etiquetas arbitrariamente podría disminuir la claridad. - Anidar etiquetas para contenido jerárquico: Si una parte del prompt es lógicamente parte de otra, refleja esa jerarquía en la estructura XML. Por ejemplo, podrías tener:
<context><section>...</section></context>o un caso más complejo:<report><introduction>...</introduction><body>...<section>...</section></body></report>. La anidación correcta (<outer><inner>...</inner></outer>) asegura que Claude entienda relaciones de contención entre piezas de información. No cierres etiquetas fuera de orden y verifica que cada etiqueta abierta se cierre adecuadamente, tal como se haría con XML bien formado. Un marcado mal anidado o con etiquetas sin cerrar podría confundir al modelo. - Usar nombres descriptivos y sencillos: Aunque no haya etiquetas estándar, elige nombres de etiqueta significativos. Mejor
<contract>que<foo>para un contrato, o<user_message>en lugar de<part1>. Esto no solo documenta mejor tu prompt para otros humanos, sino que probablemente ayude a Claude a deducir la intención de cada sección. Evita caracteres especiales o nombres muy largos; mantén un estilo similar a etiquetas HTML/XML normales (letras minúsculas, sin espacios). - Combinar etiquetas con otras técnicas avanzadas: Las etiquetas XML no están peleadas con otros métodos de prompt engineering. De hecho, Anthropic sugiere combinarlas para máxima eficacia. Por ejemplo, puedes envolver varios
<example>dentro de<examples>(few-shot) y a la vez tener una sección<thinking>para que Claude explique su lógica, seguida de<answer>con la respuesta final (CoT). Otra combinación poderosa es usar un system prompt (rol) junto con etiquetas en el prompt del usuario: el system prompt establece el contexto general (p. ej. “Eres un analista financiero experimentado”), y luego el user prompt estructurado le da las instrucciones y datos específicos dentro de etiquetas. Estas mezclas producen prompts muy estructurados que aprovechan múltiples capacidades del modelo a la vez, resultando en respuestas más precisas y confiables. - Referenciar ejemplos o formatos con etiquetas: Si incluyes un ejemplo de cómo debería ser la respuesta (por ejemplo, un reporte ya hecho, una respuesta ideal), encierra ese ejemplo en una etiqueta especial, e indica en las instrucciones que siga ese formato. En el caso de Claude, en la documentación se muestra un
<formatting_example>que contiene un informe del trimestre anterior como plantilla. Esto guía al modelo en estilo y estructura. Asegúrate de distinguir claramente ese ejemplo de la tarea actual (usando la etiqueta y quizás un texto introductorio), para que Claude no lo confunda con contenido que deba analizar.
En definitiva, la clave es que las etiquetas aporten orden sin agregar confusión. Mantén un esquema consistente, coherente con la lógica de tu prompt, y Claude podrá entender mejor qué esperas en cada parte.
Limitaciones y consideraciones
Si bien el uso de etiquetas XML mejora la estructura de los prompts, es importante tener en cuenta algunas consideraciones y límites de esta técnica:
- No son un estándar universal ni un lenguaje formal: Las etiquetas que uses no forman parte de un estándar XML validado ni algo intrínseco al modelo; son simplemente texto estructurado de manera conveniente. Claude no “valida” que el XML esté bien formado como lo haría un parser XML real. Por tanto, la responsabilidad de estructura recae en el diseñador del prompt. Asegúrate manualmente de que las etiquetas abren y cierran correctamente y de que la estructura tiene sentido lógico. Un error tipográfico en una etiqueta (ej.
<instrucions>en lugar de<instructions>) podría hacer que esa sección pierda el beneficio de la etiqueta porque el modelo no la reconocerá como la misma marca que esperabas. - Cualquier nombre de etiqueta puede funcionar, pero el modelo no “sabe” su significado: Como mencionamos, Claude no fue entrenado con etiquetas fijas. Si usas
<contract>o<document>, el modelo deducirá por el nombre y contexto que allí hay un documento/contrato, pero no porque tenga una regla grabada; podría entenderlo gracias a su conocimiento lingüístico. No confíes en supuestos ocultos: por ejemplo, no esperes que por envolver algo en<urgent>el modelo lo priorice mágicamente – debes indicarle en instrucciones cómo tratar esa sección. Las etiquetas son ayudas para estructurar, no reemplazan instrucciones claras sobre qué hacer con cada parte. - Uso excesivo o innecesario de etiquetas: En prompts sencillos o muy cortos, rodear cada palabra con etiquetas sería contraproducente. No conviene sobre-estructurar cuando no hace falta. Las etiquetas añaden tokens extra al prompt, consumiendo parte del límite de contexto; en la mayoría de casos es un costo mínimo comparado con los beneficios en claridad, pero si se abusa de ellas en prompts enormes, podría impactar. Usa etiquetas donde realmente aporten claridad. Si tu prompt es de una sola frase directa, añadir
<instruction>alrededor de todo el texto no cambia nada y solo gasta tokens. Reserva la técnica para cuando la complejidad lo justifique (múltiples párrafos, datos tabulares embebidos, varios ejemplos, etc.). - Compatibilidad con otros modelos: Esta técnica está recomendada específicamente por Anthropic para Claude. Otros modelos de lenguaje (como GPT de OpenAI) también entienden texto con formato pseudo-XML, pero la eficacia puede variar. Por ejemplo, OpenAI suele sugerir Markdown o JSON para estructuras análogas. Si trabajas en entornos con múltiples LLMs, ten en cuenta que un prompt con etiquetas XML pensado para Claude podría no tener el mismo efecto óptimo en otro modelo, o viceversa. Siempre verifica y ajusta el prompt según el modelo objetivo (Claude en general maneja bien XML libre, pero cada modelo tiene peculiaridades).
- Seguridad y filtrado: Un beneficio colateral de las etiquetas es que pueden mitigar ciertos ataques de prompt injection al delimitar claramente hasta dónde llega el contexto del usuario. Sin embargo, no es infalible: Claude aún leerá todo el texto del prompt (etiquetas incluidas) como entrada. Aún debes ser cuidadoso con qué incluyes dentro de los tags (por ejemplo, no insertes instrucciones conflictivas esperando que las ignore por estar en una etiqueta distinta). Siempre formula las instrucciones de seguridad/políticas de uso de forma que el modelo las entienda como superiores, con o sin etiquetas.
En resumen, las etiquetas XML son una herramienta de estructuración, no una solución mágica a todos los problemas de prompting. Su correcto uso puede mejorar mucho la interacción con Claude, pero es importante seguir las prácticas recomendadas y continuar proporcionando indicaciones claras.
Ejemplos representativos de uso de etiquetas XML
A continuación se muestran dos ejemplos basados en la documentación oficial de Anthropic que ilustran cómo estructurar un prompt con etiquetas XML para casos de uso distintos. En cada ejemplo, se incluyen diferentes secciones (rol/contexto, datos de entrada, instrucciones, formato esperado, etc.) envueltas en etiquetas que reflejan su propósito.
Ejemplo: Generación de informes financieros
En este escenario, queremos que Claude genere un informe financiero trimestral. Observa cómo el prompt se divide en secciones claras: primero se establece el contexto/rol (analista financiero en la empresa), luego se proporciona información de contexto adicional, después vienen los datos (p. ej., datos numéricos en una etiqueta <data>), a continuación las instrucciones específicas dentro de <instructions> (incluyendo qué secciones incluir y qué destacar), y finalmente un ejemplo de formato deseado dentro de <formatting_example> para que Claude siga ese modelo. Esta estructura garantiza que el modelo distinga claramente cada parte y entienda tanto el contenido como la forma esperada de la respuesta:
Eres un analista financiero en AcmeCorp. Genera un informe financiero del Q2 para nuestros inversionistas.
AcmeCorp es una empresa SaaS B2B. Nuestros inversores valoran la transparencia y los *insights* accionables.
Usa estos datos para tu informe:<data>{{SPREADSHEET_DATA}}</data>
<instructions>
1. Incluye secciones: Crecimiento de Ingresos, Márgenes de Beneficio, Flujo de Caja.
2. Destaca fortalezas y áreas de mejora.
</instructions>
Mantén un tono conciso y profesional. Sigue esta estructura:
<formatting_example>{{Q1_REPORT}}</formatting_example>
Qué está sucediendo en este prompt: La sección inicial establece el rol y la tarea (“analista financiero en AcmeCorp, genera reporte Q2”). Luego se añade un contexto sobre la empresa y lo que valoran los inversionistas, seguido de los datos sin procesar ({{SPREADSHEET_DATA}} representa, por ejemplo, una tabla con cifras del trimestre) envueltos en <data>. Después, dentro de <instructions>, se detallan los requerimientos: las secciones específicas que debe incluir el reporte y el énfasis en fortalezas vs. mejoras. Por último, se indica el tono (“conciso y profesional”) y se provee un ejemplo de formato previo ({{Q1_REPORT}} podría ser el informe del primer trimestre) dentro de <formatting_example> para que Claude lo use como guía de estructura. Con esta plantilla, Claude sabrá exactamente qué hacer: utilizar los datos proporcionados, seguir las instrucciones al pie de la letra, y formatear la respuesta de manera similar al ejemplo dado. La respuesta de Claude a un prompt así probablemente consistiría en un informe bien organizado con las secciones de Crecimiento de Ingresos, Márgenes de Beneficio, etc., reflejando los datos de SPREADSHEET_DATA e imitando el estilo profesional indicado.
Ejemplo: Análisis de contrato legal
Ahora consideremos un caso de análisis de un contrato. Aquí queremos que Claude lea un contrato legal y extraiga cierta información o alertas importantes. Estructuramos el prompt para que el texto del contrato esté claramente separado de las instrucciones de análisis, evitando que se mezclen. Usamos una etiqueta <contract> para encerrar todo el contenido del contrato, y luego proporcionamos instrucciones en <instructions> indicando qué debe buscar o resumir Claude. Esto ayuda a que el modelo no confunda el texto legal con lo que le pedimos que haga con ese texto:
Eres un asesor legal. A continuación se proporciona un contrato de servicio. Analiza el contrato y prepara un resumen con los puntos clave y posibles riesgos identificados.
<contract>{{CONTRACT_TEXT}}</contract>
<instructions>
1. Resume las obligaciones principales de cada parte según el contrato.
2. Señala cualquier cláusula inusual o potencialmente riesgosa que requiera atención.
</instructions>
Presenta tu análisis en formato de viñetas, de manera estructurada y concisa.
Qué está sucediendo en este prompt: La primera línea asigna un rol (“asesor legal”) para contextualizar a Claude en el dominio jurídico. Luego se enuncia la tarea de alto nivel: analizar el contrato y resumir puntos clave y riesgos. El contrato en sí —que puede ser extenso— se inserta en la plantilla donde aparece {{CONTRACT_TEXT}}, completamente encapsulado dentro de <contract>. Gracias a esto, Claude trata todo ese contenido como el documento a analizar. Después del contrato, en <instructions> se listan las tareas específicas: (1) resumir obligaciones de cada parte y (2) destacar cláusulas inusuales o riesgosas. Por último, se le indica que la respuesta (el análisis) se presente en formato de viñetas, bien estructurada y concisa. Esta última frase actúa como un formato de salida esperado, aunque no usemos aquí una etiqueta especial para el formato, sí estamos dando instrucciones claras de estilo.
Con esta estructura, Claude distinguirá claramente el texto fuente (el contrato) de lo que tiene que hacer con él (las instrucciones). Podemos esperar que la respuesta de Claude sea, por ejemplo, una lista de puntos bajo quizás un tag implícito <analysis> (o simplemente como texto estructurado) enumerando: “- Obligaciones del Proveedor: …; – Obligaciones del Cliente: …; – Cláusulas especiales: …; – Potenciales riesgos: …”, cumpliendo exactamente con los dos puntos solicitados. Todo el análisis estará basado únicamente en el contenido entre <contract>…</contract> porque especificamos que debe hacerlo así, evitando contaminación con conocimiento fuera del documento.
Conclusión de ambos ejemplos
En ambos ejemplos, se aprecia cómo las etiquetas definen límites claros: Claude sabe qué parte del prompt es información que debe usar, qué parte son instrucciones que debe seguir, y (en el primer ejemplo) incluso qué formato imitar. Esta separación hace los prompts más robustos y las salidas más predecibles. Al seguir estas prácticas en tus propios prompts, podrás aprovechar la máxima capacidad de Claude para generar respuestas exactas y bien estructuradas, incluso en tareas complejas con múltiples piezas de información.
Información basada en la información oficial de Anthropic: «Use XML tags to structure your prompts – Claude Docs«.
- La información y recomendaciones de este post están basadas en la documentación oficial de Anthropic sobre ingeniería de prompts con Claude, específicamente la sección de uso de etiquetas XML, complementada con ejemplos adaptados de la misma fuente. Estas técnicas han sido validadas por Anthropic y la comunidad de usuarios de Claude como una forma eficaz de mejorar la interacción con el modelo, aportando orden y claridad a la comunicación humano-IA. Con una implementación cuidadosa, las etiquetas XML pueden ser una herramienta valiosa para cualquier desarrollador que busque prompts más determinísticos, fáciles de mantener y listos para post-procesamiento. ↩︎
- El few-shot prompting consiste en incluir unos pocos ejemplos en el prompt para mostrar al modelo el tipo de respuesta esperada. Se utiliza cuando la tarea no es trivial o requiere un formato específico, mejorando la precisión sin entrenar el modelo.
El multi-shot prompting amplía esta idea usando más ejemplos o secuencias de pasos para reforzar el patrón o guiar el razonamiento. La diferencia principal es que el few-shot muestra el patrón, mientras que el multi-shot lo refuerza y puede enseñar cómo razonar.
Ambas técnicas permiten obtener mejores resultados ajustando el prompt en lugar de modificar el modelo. ↩︎
