Skeleton-of-Thought: план и параллельные ответы устроены так: модель сначала выдаёт короткий скелет из нескольких пунктов, затем каждый пункт расширяется отдельным запросом. В оригинальной работе ICLR 2024 расширения идут параллельно через API или batch. Ниже — паспорт занятия, четыре готовых запроса, ручные эталоны и проверки.
Паспорт занятия до всех промптов
Работа начинается с паспорта — единого набора фактов, который дословно повторяется в каждом запросе. Возьмём полностью вымышленный учебный пример.
Учебное занятие «Бумажный ветер». Аудитория — взрослые новички. Тема — бумажный кораблик. Формат — онлайн. Дата — 20 мая 2027. Время — с 12:00 до 13:00 UTC+03:00. Материалы — лист А4 и карандаш. Адрес — https://class.example.test/roomA. Тариф, аккаунт, число участников и результаты учеников неизвестны.
Паспорт решает две задачи. Первая: все запросы получают одинаковый вход. При расхождении разделов можно проверить выполнение инструкции расширения и сверить каждый результат с одним паспортом. Вторая: неизвестные поля перечислены явно, и инструкция запрещает заполнять их догадками. Соблюдение запрета проверяют по результату. Статус «неизвестно» явно записан в паспорте.
В оригинальной работе авторы из Tsinghua и Microsoft описывают два этапа: skeleton stage, где модель выдаёт сжатый скелет, и point-expanding stage, где пункты разворачиваются. Скелет извлекается из ответа, и число пунктов B становится параметром дальнейшей работы. В нашем примере B равно трём.
Паспорт удобно держать отдельным текстовым файлом и вставлять в каждый запрос целиком. При правке даты или адреса обновите файл, затем заново вставьте полный паспорт во все четыре запроса и проверьте совпадение.
Запрос скелета: три пункта без содержания
Первый запрос просит только скелет. Требование «не пиши содержание разделов» отделяет планирование от расширения: если модель сразу напишет абзацы, параллельное расширение потеряет смысл.
Учебное занятие «Бумажный ветер». Аудитория — взрослые новички. Тема — бумажный кораблик. Формат — онлайн. Дата — 20 мая 2027. Время — с 12:00 до 13:00 UTC+03:00. Материалы — лист А4 и карандаш. Адрес — https://class.example.test/roomA. Тариф, аккаунт, число участников и результаты учеников неизвестны.
Задача: составь только скелет краткой памятки участнику. Верни ровно три пункта с номерами 1, 2 и 3: тема и аудитория; что подготовить; когда и где подключиться. В каждом пункте 3–5 слов. Не пиши содержание разделов, не добавляй фактов и не заполняй неизвестные поля.
Ручной эталон скелета выглядит так:
- Тема и аудитория
- Что подготовить для занятия
- Когда и где подключиться
Ограничение в 3–5 слов на пункт — рабочий приём. Короткую строку легко сверить глазами. Даже краткий пункт нужно проверить на лишние сведения. Если модель возвращает четыре пункта или добавляет подпункты, запрос повторяют с уточнением числа.
Скелет стоит сохранить отдельным сообщением или файлом. Он понадобится в каждом запросе расширения, и его дословное совпадение важнее красоты формулировок.
Три запроса расширения по одному пункту
Каждый запрос расширения содержит паспорт целиком, общий скелет целиком и указание развернуть ровно один пункт. Требование — до двух предложений, без ссылок на другие части и без новых фактов.
Учебное занятие «Бумажный ветер». Аудитория — взрослые новички. Тема — бумажный кораблик. Формат — онлайн. Дата — 20 мая 2027. Время — с 12:00 до 13:00 UTC+03:00. Материалы — лист А4 и карандаш. Адрес — https://class.example.test/roomA. Тариф, аккаунт, число участников и результаты учеников неизвестны.
Общий скелет памятки:
1. Тема и аудитория
2. Что подготовить для занятия
3. Когда и где подключиться
Разверни только пункт 1 «Тема и аудитория» в одно или два предложения. Остальные пункты не пиши, не ссылайся на них. Используй только факты паспорта. Не добавляй новых дат, чисел, материалов и обещаний; неизвестные поля не заполняй.
Учебное занятие «Бумажный ветер». Аудитория — взрослые новички. Тема — бумажный кораблик. Формат — онлайн. Дата — 20 мая 2027. Время — с 12:00 до 13:00 UTC+03:00. Материалы — лист А4 и карандаш. Адрес — https://class.example.test/roomA. Тариф, аккаунт, число участников и результаты учеников неизвестны.
Общий скелет памятки:
1. Тема и аудитория
2. Что подготовить для занятия
3. Когда и где подключиться
Разверни только пункт 2 «Что подготовить для занятия» в одно или два предложения. Остальные пункты не пиши, не ссылайся на них. Используй только факты паспорта. Не добавляй новых дат, чисел, материалов и обещаний; неизвестные поля не заполняй.
Учебное занятие «Бумажный ветер». Аудитория — взрослые новички. Тема — бумажный кораблик. Формат — онлайн. Дата — 20 мая 2027. Время — с 12:00 до 13:00 UTC+03:00. Материалы — лист А4 и карандаш. Адрес — https://class.example.test/roomA. Тариф, аккаунт, число участников и результаты учеников неизвестны.
Общий скелет памятки:
1. Тема и аудитория
2. Что подготовить для занятия
3. Когда и где подключиться
Разверни только пункт 3 «Когда и где подключиться» в одно или два предложения. Остальные пункты не пиши, не ссылайся на них. Используй только факты паспорта. Не добавляй новых дат, чисел, материалов и обещаний; неизвестные поля не заполняй.
Три запроса отличаются одной строкой — номером и названием пункта. Паспорт и скелет в них совпадают дословно. Такая конструкция позволяет отправить запросы параллельно и склеить ответы в исходном порядке.
Ручные эталоны расширения
Эталон — заранее написанный правильный ответ, с которым сравнивают вывод модели. Для нашего паспорта эталоны такие.
- Учебное онлайн-занятие «Бумажный ветер» посвящено бумажному кораблику и подходит для взрослых новичков.
- Подготовьте лист А4 и карандаш.
- Занятие пройдёт 20 мая 2027 с 12:00 до 13:00 UTC+03:00; подключение по адресу https://class.example.test/roomA.
Эталоны показывают границу допустимого. В первом предложении есть тема, формат и аудитория — ровно то, что лежит в строке паспорта про занятие. Во втором перечислены материалы без пояснений, зачем они нужны. В третьем дата, окно времени и адрес приведены без дополнительных условий.
Сравнение с эталоном ловит типичные отклонения: модель пишет «понадобится цветная бумага», которой в паспорте нет; заменяет адрес на общий домен. При таком расхождении верните пункт на исправление с указанием нарушенного поля паспорта, затем проверьте повторный результат.
Две проверки и отрицательная задача
Проверка первая: согласованность раздела со своей исходной строкой паспорта. Каждый расширенный пункт содержит только факты той строки, из которой он вырос. Пункт про материалы говорит о листе А4 и карандаше и молчит о дате.
Проверка вторая: отсутствие дат, чисел и материалов, которых нет в паспорте. Сюда попадают тариф, аккаунт, число участников и результаты учеников — все они помечены как неизвестные.
Отрицательная задача показывает границу метода. Условие: сначала вычисли x=2+3, затем используй только полученный x для y=x×4. Эталон — x=5, y=20. Если развернуть два шага независимыми запросами, второй запрос не знает значения x и не может вычислить y. Передача промежуточного результата обязательна, и параллельные расширения её не заменяют.
Оговорка: если формулу x=2+3 дать каждому независимому запросу, он способен посчитать её заново. Отрицательная задача демонстрирует зависимость второго шага от промежуточного значения. Ошибка конкретной модели в этом упражнении не измерялась.
Таблица выбора и правило отката
| Признак | Независимый раздел | Зависимая задача |
|---|---|---|
| Вход | строка паспорта | результат предыдущего шага |
| Порядок | любой | фиксированный |
| Проверка | сверка со своей строкой | сверка с эталоном цепочки |
| Пример | «что подготовить» | x=2+3, затем y=x×4 |
| Решение | параллельное расширение | последовательная генерация |
Правило отката: если в пункте появляется ссылка на результат другого пункта, расширение выполняют последовательно. В оригинальной работе авторы отмечают, что SoT игнорирует зависимости между пунктами, и предлагают организовывать их как граф, где каждое ребро означает зависимость.
SoT и обычный чат с конспектом
Оригинальный SoT — это скелет, затем параллельные API-запросы или batched decoding. Для моделей с доступом только по API авторы описывают несколько параллельных вызовов; для локальных моделей — пакетную обработку с выравниванием запросов. Склейка ответов даёт итоговый текст.
Обычный чат с конспектом и последовательным расширением повторяет структуру, но остаётся последовательным: каждое следующее сообщение ждёт предыдущего. Такой сценарий годится для обучения и отладки формулировок.
Разница важна при оценке. Последовательные сообщения в чате не измеряют ускорение, потому что декодирование идёт шаг за шагом. Замеры задержки, токенов и процентов выигрыша в нашем примере не проводились.
Что проверить до отправки расширений
В руководстве Promptliness предлагают смотреть на скелет до написания полного ответа: так можно обнаружить пропущенный или недостаточно раскрытый пункт. Для нашего паспорта пройдите от каждой нужной группы сведений к названию раздела. Тема и аудитория должны попасть в первый пункт, материалы — во второй, подключение — в третий. Если пункт отсутствует, сначала исправьте скелет и только после этого копируйте его в запросы расширения.
Promptliness отдельно предупреждает: неполный или неверно очерченный скелет передаёт свой пробел расширениям. Развёрнутый текст сам по себе не исправляет структуру. После принятия плана проверьте, что расширение действительно отвечает за свой раздел, и соберите результаты в исходном порядке. Для нашего примера достаточно сравнить полученные абзацы с тремя ручными эталонами и повторно проверить дату, материалы и адрес.
В оригинальном репозитории SoT описан вариант с маршрутизатором, который включает метод только для подходящих вопросов. Это ещё одно основание сначала решить, допускает ли задача независимые разделы. Там же у консольного помощника отдельно оговорено последовательное расширение при обычном тестировании и пакетное при соответствующем режиме. Поэтому наличие скелета и нескольких ответов ещё не показывает, что они выполнялись параллельно. В этой статье предъявлены промпты и ручные эталоны; замер работы API не проводился.
Частые вопросы
Что такое skeleton of thought prompting?
Это приём, при котором модель сначала выдаёт короткий скелет ответа, а затем разворачивает каждый пункт отдельным запросом. Авторы работы ICLR 2024 описывают два этапа: генерацию скелета и параллельное расширение пунктов. Для моделей с API используются параллельные вызовы, для локальных — пакетная обработка. Итог собирается склейкой расширенных пунктов.
Чем skeleton of thought отличается от обычного запроса?
Обычный запрос просит готовый ответ целиком, и модель декодирует его последовательно. SoT разделяет планирование и написание: сначала появляется структура, потом содержание. Это позволяет отправлять расширения параллельно. Структура также упрощает проверку: каждый раздел сверяется со своей строкой исходных данных.
Как применить skeleton of thought в prompt engineering?
Задайте паспорт с фактами и статусом неизвестных полей. Попросите скелет из фиксированного числа коротких пунктов. Затем отправьте по одному запросу на каждый пункт, повторяя паспорт и скелет дословно. Сравните выводы с ручными эталонами и проверьте, что в разделах нет фактов вне паспорта.
Почему параллельные расширения ошибаются на вычислениях?
Потому что каждый запрос получает только паспорт и свой пункт. Промежуточный результат предыдущего шага в него не попадает. В задаче с x=2+3 и y=x×4 второй запрос не знает значения x. Передача промежуточного значения обязательна, и здесь нужна последовательная генерация.
Когда отказываться от параллельного расширения?
Когда пункты связаны причинно-следственной связью или один опирается на результат другого. Авторы работы про Adaptive Skeleton Graph Decoding отмечают, что допущение о независимости пунктов нарушается на логических задачах. В таких случаях пункты выстраивают в граф зависимостей и декодируют по порядку.
