TL;DR
Prompt Chaining — техника, которая разбивает сложную многоуровневую классификацию на цепочку отдельных запросов. Каждый следующий промпт использует ответ предыдущего и предлагает только релевантный подсписок вариантов: сначала широкий уровень, потом уже по его результату — узкий.
Когда просишь модель сразу определить и раздел, и подраздел, и тему — она теряет точность. Вместо последовательного сужения она пытается «прыгнуть» к конкретному ответу через всю иерархию сразу. Это как попросить кого-то одновременно выбрать город, район и улицу — вместо того чтобы сначала выбрать город, потом в нём район.
Решение: три отдельных промпта вместо одного. На первом шаге — только список верхнего уровня. На втором — только подкатегории внутри выбранного. На третьем — только темы внутри выбранного подраздела. Каждый шаг сокращает пространство выбора и снижает ошибку.
Схема метода
Три отдельных запроса — каждый в той же переписке.
ЗАПРОС 1: Дай текст + список категорий верхнего уровня
→ LLM выбирает одну категорию
ЗАПРОС 2: Дай тот же текст + список подкатегорий
ТОЛЬКО внутри выбранной категории
→ LLM выбирает одну подкатегорию
ЗАПРОС 3: Дай тот же текст + список конкретных тем
ТОЛЬКО внутри выбранной подкатегории
→ LLM выбирает финальную метку
Важно: каждый следующий запрос содержит сужённый список, а не полную таксономию. В этом и есть механика.
Пример применения
⚠️ Сильная зона метода: задачи с заранее заданной иерархией категорий. Слабая — когда категории размытые, субъективные или иерархии нет.
Задача: Ты продавец на Wildberries, у тебя 40 новых товаров. Нужно правильно разместить каждый в дереве категорий, чтобы карточки находили поиском. Дерево Wildberries глубокое: Одежда → Женская → Верхняя → Куртки утеплённые. Ошибёшься на первом уровне — потеряешь весь трафик.
Промпт 1 — верхний уровень:
Я добавляю товар на Wildberries.
Описание товара:
[вставь название и описание товара]
Выбери ОДНУ категорию верхнего уровня из этого списка:
— Одежда
— Обувь
— Дом и сад
— Электроника
— Красота и здоровье
— Спорт
— Детские товары
Ответь только названием категории, без объяснений.
Промпт 2 — средний уровень:
Товар: [то же описание]
Мы уже определили: категория верхнего уровня — [ответ из шага 1].
Теперь выбери подкатегорию из этого списка:
[вставь только подкатегории внутри выбранной категории]
Ответь только названием, без объяснений.
Промпт 3 — нижний уровень:
Товар: [то же описание]
Категория: [ответ шага 1] → [ответ шага 2]
Выбери финальную подкатегорию из этого списка:
[вставь только подкатегории третьего уровня]
Ответь только названием.
Результат: На каждый запрос модель даст короткий чёткий ответ — одно название категории. По итогу трёх запросов получишь путь вида: «Одежда → Женская → Куртки утеплённые». Если добавить few-shot (примеры похожих товаров с правильными метками) в каждый промпт, точность вырастет ещё заметнее.
Почему это работает
Слабость LLM: когда в промпте длинный список вариантов всех уровней сразу, модель теряется в пространстве выбора. Она видит сотни меток — и начинает угадывать «примерно правильную», а не логически сужать.
Сильная сторона LLM: модель хорошо справляется с выбором из короткого, конкретного списка вариантов. Это она делает уверенно. Ключевое слово — короткого.
Как метод использует сильное: вместо одного большого выбора мы даём серию маленьких. Каждый раз модель смотрит только на 4–10 вариантов, а не на 100+. Ошибиться на маленьком списке значительно сложнее.
Рычаги управления: - Количество шагов → если иерархия двухуровневая, хватит двух запросов вместо трёх - Few-shot примеры в каждом промпте → добавь 1–2 примера правильной классификации похожих текстов — точность растёт, особенно на втором и третьем уровнях - Температура ~0.8 → исследование показало, что это лучше крайностей: нулевая температура (строго детерминированная) справляется хуже, чем умеренная. В ChatGPT температуру не настроить напрямую, но модели по умолчанию близки к этому значению - Инструкция "только название" → убирает объяснения и лишний текст, делает результат машинообрабатываемым
Шаблон промпта
Промпт 1 — верхний уровень:
Классифицируй {объект} по следующей системе категорий.
{объект}: {описание или текст}
Выбери ОДНУ категорию из списка:
{список категорий верхнего уровня — по одной на строку}
Ответь только названием категории.
Промпт 2 — средний уровень:
{объект}: {то же описание}
Уровень 1: {ответ из промпта 1}
Теперь выбери подкатегорию:
{список подкатегорий только внутри выбранной категории}
Ответь только названием.
Промпт 3 — финальный уровень:
{объект}: {то же описание}
Уровень 1: {ответ 1} → Уровень 2: {ответ 2}
Выбери финальную категорию:
{список финальных категорий внутри выбранной подкатегории}
Ответь только названием.
Что подставлять:
- {объект} — что классифицируем: товар, статья, задача, заявка, резюме
- {описание или текст} — текст, по которому классифицируем
- Списки категорий — твоё дерево категорий, нарезанное по уровням
🚀 Быстрый старт — вставь в чат:
Вот шаблон Prompt Chaining для иерархической классификации.
Адаптируй под мою задачу: {опиши свою задачу}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит твои категории и их структуру — потому что без конкретного дерева категорий цепочка не работает. Она возьмёт паттерн из шаблона и подставит твои уровни.
Ограничения
⚠️ Нет иерархии — нет смысла: Если у тебя плоский список категорий без уровней вложенности, обычного zero-shot или few-shot промпта будет достаточно. Цепочка здесь избыточна.
⚠️ Третий уровень нестабилен: Даже с Prompt Chaining точность на самом глубоком уровне иерархии падает примерно до 50%. Чем точнее и уже тема — тем выше риск ошибки. Для критичных задач третий уровень стоит проверять вручную.
⚠️ Нужна готовая таксономия: Метод работает только когда у тебя есть чёткое дерево категорий. Если категории размытые или субъективные — модель всё равно будет угадывать.
⚠️ Длинные многозначные метки: Если названия категорий длинные и похожи друг на друга («Гидрология, лимнология, городское водоснабжение» vs «Гидрогеология, гидрология» и т.д.) — модель путается вне зависимости от метода.
⚠️ Трата токенов: Три запроса вместо одного. Для разовых задач — нормально. Для обработки тысяч объектов — нужно автоматизировать, что требует кода.
Ресурсы
Работа: Automating Categorization of Scientific Texts with In-Context Learning and Prompt-Chaining in Large Language Models
Авторы: Gautam Kishore Shahi, Oliver Hummel — Technische Hochschule Mannheim, Germany
Контакт: g.shahi@hs-mannheim.de
Датасет: FORC (Field of Research Classification) Shared Task — 50 441 научных текстов
Таксономия: ORKG (Open Research Knowledge Graph) — https://orkg.org/fields
