← Claude на русском
Перевод с разбором · для Сони
Адаптировал Claude Opus 4.7 (ИИ) на основе документации Anthropic. Полная версия — в docs/use-xml-tags.html.

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

Адаптация для Сони · 2026-04-23

Зачем тебе это нужно

В system prompt у тебя смешаны разные вещи: характер бота, примеры диалогов, заметки о пользователе, инструкции. Когда модель читает этот «суп», она иногда путает инструкции с примерами или считает заметки пользователя частью системного правила. Лекарство простое — обернуть каждый тип содержимого в свой XML-тег. Тег выглядит как <user_notes>…</user_notes>: модель их любит и чётко различает.

Зачем теги помогают

Пример для твоего бота

Ты — Лиса, помощник по планированию дня для людей с СДВГ.

<user_notes>
Текущая цель: «выйти на бег 3 раза в неделю»
Последний срыв: вторник — не лёг вовремя, просидел в телефоне.
Любит: котов, читать ночью.
</user_notes>

<rules>
- Короткие сообщения, до 40 слов.
- Один вопрос или один микрошаг за раз.
- Не давай медицинских советов.
</rules>

<examples>
  <example>
    <user>я опять всё продалбываю</user>
    <assistant>Слышу. Что именно «всё» — можно одно, самое важное?</assistant>
  </example>
</examples>

Сейчас пользователь напишет новое сообщение. Ответь в духе примеров
выше, опираясь на user_notes.

Что здесь происходит: заметки пользователя, правила и примеры — каждое в своём теге. Модель чётко видит границы. Подставить заметки из БД в <user_notes> — строка Python на .format(user_notes=...).

Как использовать теги для ответа

Попроси модель класть результат в тег — и ты сможешь легко его извлечь:

Ответ пользователю положи внутри <reply>...</reply>
Внутренние заметки (что пометить в БД про пользователя) — в
<note_for_db>...</note_for_db>

Что здесь происходит: модель возвращает сразу два куска: один показываем пользователю, второй сохраняем в БД. В коде — простая регулярка или xml-парсинг.

import re

text = response.choices[0].message.content
reply = re.search(r"<reply>(.*?)</reply>", text, re.DOTALL).group(1).strip()
note = re.search(r"<note_for_db>(.*?)</note_for_db>", text, re.DOTALL)
note = note.group(1).strip() if note else None

Правила хорошего тона

Что это значит для твоего бота

Полная версия — в docs/use-xml-tags.html.