Как показать модели пальцем, что важно

от автора

Вы наверняка замечали: один и тот же вопрос в ChatGPT или Claude иногда даёт отличный ответ, иногда – качество ответа не соответствует ожиданиям. Многие списывают это на «непредсказуемость AI». На самом деле у этого есть и структурная причина.

В апреле 2025 года Anthropic публиковали официальную документацию по промпт-инжинирингу для Claude 4.6 – Prompting Best Practices. Это технический документ для разработчиков API. Массовому пользователю читать его не предполагается.

Однако, там есть пара инсайтов, которые работают и буду полезны всем.

Как модель «смотрит» на текст

Трансформер – архитектура, лежащая в основе современных языковых моделей, – обрабатывает текст через механизм внимания (attention). Упрощённо: каждый токен «смотрит» на все остальные и вычисляет, насколько каждый из них важен для понимания текущего.

Полное внимание vs Sparse attention

Полное внимание vs Sparse attention

Это означает, что модель не читает текст слева направо как человек. Она строит карту взаимных связей между всеми частями входящего текста одновременно.

Из этого следует неочевидный вывод. Человеку кажется логичным давать задачу постепенно: сначала обозначить тему, потом уточнить, потом добавить контекст по ходу диалога. Итерации действительно уточняют – но одновременно накапливают риск. Каждое новое уточнение ложится поверх предыдущего контекста: внимание модели распределяется по всему диалогу, более ранние части получают меньший вес, а интерпретация может наслоиться или сместиться непредсказуемо. Чем полнее и точнее контекст с самого начала – тем меньше этой неопределённости. Это тема для отдельного разговора – но держите в голове.

Проблема обычного промпта в том, что эта карта получается размытой. Где заканчиваются инструкции и начинаются данные? Где пример, а где реальная задача? Модель вынуждена угадывать – и тратит на это часть своего ресурса «внимания» вместо того, чтобы решать задачу.

Что делают XML-теги

Возьмём два промпта с одинаковым содержанием.

Без структуры:

Ты аналитик. Вот данные по продажам за март. Напиши вывод в трёх предложениях.Данные: 1200 транзакций, средний чек 850 сомов, отток 12%.Пример хорошего вывода: краткий, с цифрами, без оценочных суждений.

Со структурой:

<role>Ты аналитик данных</role><data>  1200 транзакций, средний чек 850 сомов, отток 12%</data><instructions>  Напиши вывод в трёх предложениях</instructions><example>  Краткий, с цифрами, без оценочных суждений</example>

Содержание идентично. Но во втором случае открывающий и закрывающий теги создают парный якорь. Токены внутри блока <data> получают высокий вес относительно друг друга – и низкий относительно содержимого <instructions>. Модель перестаёт угадывать, где что находится. Мы буквально показываем ей пальцем что важно относительно чего.

Полное внимание: вложенные якоря

Полное внимание: вложенные якоря

При вложенных тегах иерархия весов выстраивается автоматически: внешняя пара охватывает всё содержимое, внутренняя создаёт локальный кластер внутри него. Модель «видит» структуру документа без дополнительных объяснений.

Ничего удивительного, это закономерное следствие того, на чём обучались модели: огромный корпус HTML, XML, кода. Механизм внимания натренирован распознавать парные структуры как семантические границы.

Именно поэтому Anthropic включили XML-теги в официальные рекомендации для Claude 4.6: «XML tags help Claude parse complex prompts unambiguously, especially when your prompt mixes instructions, context, examples, and variable inputs». Это не совет из блога – это позиция разработчиков модели, основанная на том, как она устроена внутри.

Честная оговорка 
Для короткого одноразового промпта XML избыточен – структура угадывается легко. XML даёт ощутимый выигрыш когда промпт длиннее, семантически похожие блоки, семантически. Для простого одиночного запроса – текст вполне работает.

Почему это проявлется на больших контекстах

Полное внимание – когда каждый токен смотрит на все остальные – работает хорошо на коротких текстах. Но это квадратичная сложность: вдвое длиннее контекст – вчетверо больше вычислений. На больших контекстах модели переключаются на sparse attention: каждый токен смотрит только на ближайших соседей плюс небольшое число «глобальных» токенов.

Это означает, что токен в начале длинного промпта может не иметь прямой связи с токеном в конце. Модель не «видит» весь контекст целиком – она видит фрагменты.

XML-теги в этой ситуации работают как структурные маяки. Открывающий и закрывающий тег создают локальный кластер с высоким взаимным вниманием внутри блока. Модель не обязана дотягиваться через весь контекст – граница видна локально.

Полное внимание vs Sparse attention

Полное внимание vs Sparse attention

Контекст (и промт) растёт. Даже если первый запрос короткий – после нескольких обменов контекст уже включает весь диалог: твои сообщения, ответы модели, данные которые ты вставил. К 5-й итерации sparse attention может уже быть активен. Чем компактнее и структурнее каждый блок с самого начала – тем дольше модель «видит» весь контекст целиком, а не только его фрагменты. Структура промпта – это инвестиция не в качество первого ответа, а в качество всей сессии.

Три паттерна, которые работают сразу

Не нужно перестраивать все промпты разом. Не нужно сложных инструкций. Достаточно применять теги там, где в одном тексте смешивается разное:

Задача

Теги

Смешанный контент (инструкции + данные)

<instructions><data>

Примеры в промпте

<examples><example>

Роль + задача + ограничения

<role><task><constraints>

Граница как принцип

Когда начинаешь думать об этом как о принципе – а не как о синтаксическом трюке – область применения расширяется.

Если модель ищет границы, то задача автора промпта – делать эти границы явными. Не объяснять их через смысл, а обозначать структурно. Это работает на уровне одного запроса. Это работает на уровне длинной сессии. Это работает на уровне документа.

Именно на этом принципе построена разметка документов по методологии GRACE, ок которой я писал ранее. Когда модель получает документ без разметки, она угадывает структуру. Когда каждый смысловой блок обёрнут в семантический тег – она знает границы ответственности точно. Тот же механизм, другой масштаб.

Промпт-инжиниринг часто преподносят как набор хитростей. На самом деле большинство работающих техник сводятся к одному: помоги модели не угадывать, не додумывать.

XML-теги – один из самых прямых способов это сделать. И это не теория – Anthropic прямо рекомендуют их в официальной документации к своей последней модели.

Бонус: что ещё почитать по теме на Хабре

Перед публикацией я прошёлся по Хабру и собрал статьи, которые касаются смежных тем. Статьи разного уровня – от практических советов до архитектурных деталей.

Про XML и структуру промптов

Про механизм внимания (технический уровень)

ссылка на оригинал статьи https://habr.com/ru/articles/1022862/