Разделители и секции
Разделители и секции
В прошлом уроке мы говорили, ЧТО нужно структурировать. Теперь разберём КАК. Самый простой и универсальный способ — разделители. Это символы или строки, которые явно отделяют одну секцию промпта от другой.
Зачем нужны разделители
Представь промпт, в котором ты даёшь модели документ для анализа:
Проанализируй текст и напиши краткое содержание. Текст: "В этой
статье мы рассмотрим основные принципы работы с базами данных.
Реляционные базы данных..." [ещё 500 слов статьи]
Где заканчивается инструкция и начинается текст статьи? Модель должна понять это по смыслу — и может ошибиться. Особенно если в самой статье встречаются слова «проанализируй» или «напиши».
Разделитель решает эту проблему однозначно:
Проанализируй текст и напиши краткое содержание.
Текст:
###
В этой статье мы рассмотрим основные принципы работы с базами данных.
Реляционные базы данных... [ещё 500 слов статьи]
###
Модель чётко видит границы текста для анализа.
Типы разделителей
1. Одинарные символы-разделители
Подходят для коротких данных (одно предложение, одно слово):
Переведи на английский: |Привет, как дела?|
Символ | отмечает начало и конец текста.
2. Повторяющиеся символы
Для данных средней длины (абзац, короткий документ):
Исправь ошибки в тексте:
---
я пошол в магозин и купил хлеп
---
Ответь только исправленным текстом.
--- — визуально заметен, модель редко генерирует три дефиса подряд самостоятельно.
3. Символы-ограничители (fences)
Для длинных документов или кода:
Напиши unit-тест для этой функции:
```javascript
function sum(a, b) {
return a + b;
}
Тест должен проверять: положительные числа, отрицательные, ноль.
Тройные обратные кавычки — стандартный способ выделения кода, модель к ним привыкла.
**4. Кастомные текстовые разделители**
Для максимальной надёжности, когда внутри данных может быть что угодно:
Извлеки все даты из документа:
[ДОКУМЕНТ_НАЧАЛО] Договор заключён 15.01.2025. Срок действия — до 31.12.2026. Платёж должен быть произведён до 10.02.2025. [ДОКУМЕНТ_КОНЕЦ]
Верни даты списком.
Кастомные разделители `[ДОКУМЕНТ_НАЧАЛО]` и `[ДОКУМЕНТ_КОНЕЦ]` гарантируют, что модель не спутает границы, даже если внутри документа есть тройные кавычки или дефисы.
### Секции с заголовками
Для сложных промптов с несколькими блоками используй markdown-заголовки как секции:
РОЛЬ
Ты — технический писатель.
ЗАДАЧА
Напиши документацию для функции.
ДАННЫЕ
def calculate_discount(price, user_level):
...
Каждая секция — отдельный логический блок. Модель «читает» их как независимые части.
### Сравнение: с разделителями и без
**Без разделителей (вход):**
Ответь на вопрос клиента, используя информацию из базы знаний. Вопрос: как вернуть товар? База знаний: возврат товара возможен в течение 14 дней с момента покупки. Товар должен быть в оригинальной упаковке. Деньги возвращаются на карту в течение 5 рабочих дней. Чек обязателен. Ответь вежливо.
**Потенциальная проблема:** модель может вплести фразу «Ответь вежливо» в ответ клиенту.
**С разделителями (вход):**
Ответь на вопрос клиента, используя информацию из базы знаний.
[ВОПРОС] как вернуть товар? [/ВОПРОС]
[БАЗА_ЗНАНИЙ] Возврат товара возможен в течение 14 дней с момента покупки. Товар должен быть в оригинальной упаковке. Деньги возвращаются на карту в течение 5 рабочих дней. Чек обязателен. [/БАЗА_ЗНАНИЙ]
[ТРЕБОВАНИЯ]
- Ответь вежливо, в стиле сотрудника поддержки.
- Не выдумывай информацию, которой нет в базе знаний. [/ТРЕБОВАНИЯ]
Модель чётко видит: это вопрос, это знания, это требования к ответу.
### Правила хорошего разделителя
1. **Уникальность.** Разделитель не должен встречаться в данных. Не используй `---` как разделитель, если анализируешь Markdown-документ.
2. **Парность.** Открывающий и закрывающий разделители — лучше, чем один. Модель видит начало и конец блока.
3. **Осмысленность.** `[ДОКУМЕНТ]` лучше, чем `===`. Модель понимает семантику.
4. **Консистентность.** Одинаковый стиль разделителей во всех твоих промптах — тебе самому будет легче их читать.
### Проверь себя
Ты пишешь промпт для анализа юридического документа. В документе встречаются и тройные кавычки, и дефисы, и markdown-заголовки. Какой разделитель выберешь?
*Ответ: кастомные текстовые разделители `[ДОКУМЕНТ_НАЧАЛО]` и `[ДОКУМЕНТ_КОНЕЦ]`. Они гарантированно не встретятся в юридическом документе и явно обозначают границы.*
### Итог
- Разделители — простейший и самый надёжный способ структурирования промпта.
- Выбирай разделитель в зависимости от данных: `|` для коротких, `---` для средних, кавычки для кода, `[ТЕГ_НАЧАЛО]`/`[ТЕГ_КОНЕЦ]` для сложных документов.
- Кастомные текстовые разделители — самые надёжные: они не встречаются в данных и понятны модели.
- Используй парные разделители (открывающий + закрывающий) — модель видит начало и конец блока.
- Для сложных промптов комбинируй разделители с markdown-заголовками секций.
### Что дальше
Разделители — простой и мощный инструмент. Но есть ещё один подход, особенно полезный для сложных многоуровневых промптов: XML-теги. В следующем уроке разберём, как использовать XML-подобную разметку для организации контента.