XML-теги для организации контента
XML-теги для организации контента
Разделители, которые мы освоили в прошлом уроке, отлично работают для простых случаев. Но когда промпт становится сложным — много секций, вложенные данные, несколько примеров — на помощь приходят XML-подобные теги. Они создают древовидную структуру, которую модель понимает почти так же хорошо, как программист — код.
Почему XML, а не что-то другое
Современные языковые модели обучались на огромном количестве текстов, содержащих XML и HTML. Они «понимают» концепцию открывающих и закрывающих тегов, вложенности и атрибутов на очень глубоком уровне. Когда модель видит <document>...</document>, она автоматически воспринимает содержимое как единый блок с определённым смыслом.
Базовый синтаксис
<тег>содержимое</тег>
В отличие от настоящего XML, в промптах не нужно соблюдать строгую валидность. Достаточно:
- Открывающий тег:
<instruction> - Закрывающий тег:
</instruction> - Вложенность:
<section><subsection>...</subsection></section>
Пример: от разделителей к XML
С разделителями (из прошлого урока):
## ЗАДАЧА
Проанализируй документ.
## ДАННЫЕ
[ДОКУМЕНТ_НАЧАЛО]
...текст документа...
[ДОКУМЕНТ_КОНЕЦ]
## ТРЕБОВАНИЯ
- Краткость
- Деловой стиль
То же с XML-тегами:
<task>Проанализируй документ.</task>
<document>
...текст документа...
</document>
<requirements>
- Краткость
- Деловой стиль
</requirements>
Преимущества XML: теги короче, легко вкладываются, модель «знает» этот формат из обучения.
Вложенные структуры
Настоящая сила XML — во вложенности. Вот пример промпта для анализа нескольких документов:
<task>Сравни два документа и найди расхождения.</task>
<documents>
<document id="1">
<title>Договор аренды от 15.01.2025</title>
<content>
Арендодатель передаёт помещение площадью 50 кв.м.
Арендная плата: 30 000 руб./мес.
</content>
</document>
<document id="2">
<title>Дополнительное соглашение от 01.03.2025</title>
<content>
Арендная плата повышается до 35 000 руб./мес.
Площадь аренды увеличивается до 55 кв.м.
</content>
</document>
</documents>
<requirements>
- Выпиши только расхождения в виде таблицы.
- В таблице 3 колонки: параметр, документ 1, документ 2.
</requirements>
Модель видит иерархию: <documents> содержит два <document>, у каждого есть <title> и <content>. Она не спутает заголовок первого документа со вторым.
XML для few-shot примеров
Особенно полезны теги для организации примеров:
<instruction>
Классифицируй обращение клиента.
Категории: жалоба, вопрос, предложение.
</instruction>
<examples>
<example>
<input>Почему мой заказ до сих пор не отправлен?</input>
<output>вопрос</output>
</example>
<example>
<input>Курьер нахамил и бросил пакет у двери!</input>
<output>жалоба</output>
</example>
<example>
<input>Было бы удобно, если бы вы добавили оплату через СБП.</input>
<output>предложение</output>
</example>
</examples>
<query>
<input>Когда уже исправите баг с авторизацией?</input>
</query>
Теги <example>, <input>, <output> явно определяют, что есть что. Модель не спутает пример с реальным запросом.
Когда использовать XML, а когда разделители
| Ситуация | Что выбрать |
|---|---|
| Одна секция данных | Разделители (###, ---, [TEXT]) |
| Несколько однотипных блоков | XML теги |
| Вложенные данные | Только XML |
| Few-shot с примерами | XML (чётко отделяет примеры друг от друга) |
| Короткий промпт (< 100 слов) | Ничего, достаточно абзацев |
Типичная ошибка: незакрытые теги
Если открыл <document>, обязательно закрой </document>. Модель может воспринять незакрытый тег как границу, и весь последующий текст окажется «внутри» тега.
Плохо:
<document>
...текст документа...
<instruction>Напиши краткое содержание.</instruction>
Модель может решить, что <instruction> — это часть документа, а не команда для неё.
Хорошо:
<document>
...текст документа...
</document>
<instruction>Напиши краткое содержание.</instruction>
Проверь себя
У тебя задача: модель должна обработать 5 студенческих эссе, для каждого указать тему, оценку (1–10) и комментарий. Как организуешь промпт?
Пример ответа: <task> с задачей, <essays> как контейнер, внутри 5 блоков <essay id="...">, в каждом <text> для эссе, <output_format> с JSON-схемой для ответа. Теги иерархически отделяют эссе друг от друга и от инструкций.
Итог
- XML-подобные теги создают древовидную структуру промпта, которую модель хорошо понимает.
- Главное преимущество перед разделителями — вложенность: теги могут содержать другие теги.
- Используй XML для: многосоставных данных, few-shot примеров, вложенных структур.
- Всегда закрывай теги — незакрытый тег «съедает» последующий текст.
- Для простых случаев разделителей достаточно. Не усложняй без необходимости.
Что дальше
Ты освоил разделители и XML-теги. В следующем уроке — практика: возьмём реальную сложную задачу и структурируем промпт от начала до конца, используя все инструменты модуля.