XML Tags Prompting

[object Object]

XML Tags Prompting — это способ разделить сложный prompt на именованные блоки: контекст, инструкции, ограничения, примеры и формат выхода. В 2026 эта техника особенно полезна для длинных, compositional и agentic prompt-цепочек, где plain text быстро превращается в кашу.

XML-теги — это просто ярлыки для частей промпта. Вместо одного длинного абзаца вы явно показываете модели: вот контекст, вот задача, вот правила, вот ожидаемый формат.

Суть в двух словах

XML нужен не потому, что модели "любят XML", а потому что теги помогают явно разделить слои запроса.

Типичный каркас:

<context>...</context>
<task>...</task>
<constraints>...</constraints>
<output_format>...</output_format>
ПромптClaude Sonnet 4.6
<context>У нас B2B SaaS для бухгалтерии малого бизнеса.</context>
<task>Сформулируй 3 гипотезы для роста trial-to-paid conversion.</task>
<constraints>Не предлагай скидки как основной механизм. Смотри на onboarding и activation.</constraints>
<output_format>Для каждой гипотезы: hypothesis, why it may work, experiment.</output_format>
Ответ модели
  1. hypothesis: сократить time-to-first-value через guided onboarding why it may work: пользователи быстрее увидят пользу до момента оплаты experiment: A/B тест с чек-листом первых 3 действий

  2. hypothesis: добавить шаблоны типовых операций для первого входа why it may work: снизит friction на пустом аккаунте experiment: сравнить activation rate новых аккаунтов

  3. hypothesis: триггерить contextual help в критических местах настройки why it may work: меньше отказов на сложных шагах импорта и подключения experiment: измерить completion rate setup funnel

На практике XML-tags — это способ заставить prompt выглядеть как интерфейс между несколькими смысловыми слоями, а не как один большой текст.

Когда XML особенно полезен

XML становится особенно полезен там, где prompt уже перестаёт быть "ручным вопросом" и превращается в составной объект с несколькими независимыми слоями:

  • policy;
  • user request;
  • retrieved context;
  • tool results;
  • output contract.

Если эти слои не разделять, модель начинает путать:

  • что является инструкцией;
  • что является данными;
  • что является внешним результатом;
  • что является желаемым форматом ответа.

XML vs Markdown

Markdown
Удобен для human-readable инструкции, memo и обычных задач
XML
Удобен для строгой сегментации сложных prompt-компонентов и template-driven pipelines

Markdown чаще выигрывает по читаемости для человека. XML чаще выигрывает по явной сегментации, особенно когда prompt собирается программно.

Практически граница выглядит так:

  • Markdown лучше для human-authored prompts.
  • XML лучше для programmatic prompt assembly.
  • Schema/tool args лучше для machine-validated outputs.

То есть XML — это не конкурент JSON, а скорее промежуточный слой организации входа.

Хорошие практики

Плюсы

  • Явно разделяет context, task и rules
  • Хорошо масштабируется на длинные prompt templates
  • Удобен для programmatic prompt assembly
  • Особенно полезен в Claude-centric workflows

Минусы

  • Избыточен для простых коротких задач
  • Непродуманная вложенность делает prompt тяжелее
  • Теги сами по себе не гарантируют лучший ответ
  • Слишком много нестандартных тегов ухудшает читаемость

Практические правила:

  • используйте 3-6 стабильных тегов, а не 20;
  • называйте теги очевидно;
  • не смешивайте в одном теге и данные, и инструкции;
  • отдельно маркируйте retrieved content и output format.

Хороший XML prompt чаще всего похож на аккуратный контракт. Плохой — на pseudo-HTML, где теги размножаются только ради красоты.

Полезные шаблоны тегов

Базовый template

<role>...</role>
<task>...</task>
<context>...</context>
<constraints>...</constraints>
<output_format>...</output_format>

Agent pipeline template

<system_rules>...</system_rules>
<retrieved_context>...</retrieved_context>
<tool_result>...</tool_result>
<user_request>...</user_request>
<output_contract>...</output_contract>

Review template

<artifact>...</artifact>
<evaluation_rubric>...</evaluation_rubric>
<hard_constraints>...</hard_constraints>
<response_format>...</response_format>

Эти каркасы полезны не потому, что "они универсально магические", а потому что они дисциплинируют prompt design и уменьшают скрытое смешение ролей.

Anti-patterns

XML теги помогают только тогда, когда отражают реальную структуру задачи. Если структура фиктивная, пользы почти нет.

Плохие паттерны:

  1. Вкладывать теги слишком глубоко без необходимости.
  2. Дублировать одну и ту же инструкцию в context и constraints.
  3. Помещать retrieved documents внутрь того же тега, где лежат policy rules.
  4. Использовать нестандартные теги вроде <super_important_secret_context_block> вместо простых имён.
  5. Пытаться решать XML-тегами задачу, где нужен уже schema-constrained output.

Отдельная проблема — отсутствие экранирования данных. Если вы программно подставляете в XML пользовательский текст, полезно думать не только о prompt clarity, но и о том, чтобы payload не ломал структуру шаблона.

Техническая реализация

Программная сборка prompt-а

def build_prompt(context, task, constraints, output_format):
    return f"""
<context>
{context}
</context>

<task>
{task}
</task>

<constraints>
{constraints}
</constraints>

<output_format>
{output_format}
</output_format>
""".strip()

Полезный паттерн для agents

<system_rules>...</system_rules>
<retrieved_context>...</retrieved_context>
<tool_result>...</tool_result>
<user_request>...</user_request>
<output_contract>...</output_contract>

Этот каркас помогает не смешивать:

  • policy-layer;
  • retrieved knowledge;
  • tool outputs;
  • саму задачу пользователя.

Минимальный safe builder

from html import escape

def xml_block(tag: str, value: str) -> str:
    return f"<{tag}>{escape(value)}</{tag}>"

Даже если модель не "парсит XML как браузер", такой builder полезен для:

  • аккуратной сборки шаблонов;
  • избежания поломанной структуры;
  • более предсказуемого prompt assembly.

Когда переключаться с XML на schema

def choose_structure(input_complexity: str, output_needs_schema: bool) -> str:
    if output_needs_schema:
        return "schema"
    if input_complexity == "high":
        return "xml"
    return "markdown"

Это хорошая ментальная модель:

  • XML в первую очередь структурирует вход;
  • schema в первую очередь структурирует выход.
Если prompt в основном пишется руками и читается людьми, чаще достаточно markdown. Если prompt собирается кодом и живёт в agent pipeline, XML часто удобнее.

Проверьте себя

Проверьте себя

1. Для чего XML-теги полезнее всего?

2. Когда XML чаще всего избыточен?

3. Что лучше не делать с XML-тегами?