XML-теги в промптах

11 часов назад

Никита Вихров

Ответы

0

XML-теги в промптах

Когда промпт длинный — модель путается где инструкция, где данные, где пример. XML-теги решают это: явно размечают структуру промпта, и модель понимает что к чему относится.

Anthropic официально рекомендует этот подход для сложных промптов.


Без тегов — модель угадывает структуру

from anthropic import Anthropic

client = Anthropic()

# Плохо: всё в одной каше
response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=512,
    messages=[{
        "role": "user",
        "content": """Проверь код на баги. Вот правила: не используй var, всегда обрабатывай ошибки.
Вот код: function getData() { var url = 'api/data'; return fetch(url) }
Вот пример хорошего ответа: Найден баг в строке 1: используется var вместо const."""
    }]
)

Модель может перепутать «пример ответа» с частью кода или инструкцией.


С тегами — структура явная

response = client.messages.create(
    model="claude-opus-4-5",
    max_tokens=512,
    messages=[{
        "role": "user",
        "content": """<instructions>
Проверь код на баги. Правила проекта:
- Не используй var, только const/let
- Всегда обрабатывай ошибки от fetch
</instructions>

<code>
function getData() {
  var url = 'api/data';
  return fetch(url)
}
</code>

<example_output>
Баг в строке 2: используется var вместо const.
Баг в строке 3: отсутствует обработка ошибок (.catch или try/catch).
</example_output>

Найди баги в коде выше."""
    }]
)

Теперь модель точно знает: <instructions> — правила, <code> — что проверять, <example_output> — формат ответа.


Теги в системном промпте

Особенно полезны когда системный промпт большой:

system = """<role>
Ты — ассистент code review для Python-проектов.
</role>

<rules>
- PEP 8 обязателен
- Типизация через type hints
- Docstring для публичных функций
- Максимальная длина функции — 20 строк
</rules>

<output_format>
Для каждой проблемы:
1. Строка
2. Описание проблемы
3. Как исправить (с примером кода)
</output_format>

<tone>
Конструктивно, без оценочных суждений о разработчике.
</tone>"""

Теги для разделения нескольких документов

Когда передаёшь несколько файлов или кусков данных:

content = """Проанализируй эти два файла и найди несоответствия между ними.

<file name="schema.sql">
CREATE TABLE users (
  id SERIAL PRIMARY KEY,
  email VARCHAR(255) UNIQUE NOT NULL,
  created_at TIMESTAMP DEFAULT NOW()
);
</file>

<file name="user_model.py">
class User(BaseModel):
    id: int
    email: str
    name: str  # этого поля нет в схеме
    # created_at отсутствует
</file>

Что в модели не совпадает со схемой?"""

Как называть теги

Имена тегов не стандартизированы — называй по смыслу. Часто используемые:

<instructions> / <task> — что делать <context> — фоновая информация <input> / <data> / <code> — данные для обработки <example> / <example_output>— примеры <format> / <output_format> — формат вывода <rules> / <constraints> — ограничения <thinking> — для chain-of-thought

Главное — последовательность. Используй одни и те же теги во всех промптах проекта.


Подробнее о структурировании промптов для продакшн-задач — на курсе «ИИ для разработчиков» на Хекслете.

11 часов назад

Никита Вихров

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845