Lil’Log: промпт-инжиниринг
Конспект обзора Лилиан Венг (март 2023): zero-shot и few-shot, как выбирать и упорядочивать примеры, промпты-инструкции, самосогласованность, цепочки рассуждений и их варианты, автоматический подбор промптов, поиск, код и внешние API (TALM, Toolformer) — и что из этого работает с моделями 2026 года.
Коротко
Заголовок раздела «Коротко»- Промпт-инжиниринг (промпт-инжинирингпромпт-инжинирингEN prompt engineering) — способы управлять поведением LLM, не меняя весов. Венг называет его эмпирической наукой: эффект приёма сильно зависит от модели, поэтому нужны эксперименты.
- Базовые режимы — zero-shot и few-shot (few-shotfew-shot (примеры в промпте)EN few-shot promptingНесколько пар «вход → выход» прямо в промпте; модель подхватывает формат без дообучения (in-context learning). Zero-shot — без примеров.). Качество few-shot сильно зависит от формата, выбора и порядка примеров — от уровня случайного угадывания до лучших результатов.
- Для моделей, дообученных следовать инструкциям, лучше прямо и конкретно описать задачу: что делать (а не чего не делать), для кого, в каком формате.
- Самосогласованность (самосогласованностьсамосогласованность (голосование большинством)EN self-consistency (majority voting)Сгенерировать N ответов и выбрать самый частый итоговый. В отчётах — maj@k или cons@k.) — сгенерировать несколько ответов с температурой больше нуля и выбрать большинством голосов или проверкой (юнит-тестами).
- Цепочка рассуждений (цепочка рассужденийцепочка рассужденийEN chain of thought (CoT)) помогает на сложных задачах и больших моделях; у неё десятки вариантов: few-shot и zero-shot CoT, STaR, выбор «сложных» примеров, Self-Ask, Tree of Thoughts.
- Промпт можно подбирать автоматически (APE, кластеризация примеров) и дополнять модель поиском, исполнением кода и вызовом API (Toolformer).
Как читать вместе с курсом
Заголовок раздела «Как читать вместе с курсом»Пост — обзор литературы к уроку 8.1.2 «Промптинг». Читайте после него: в уроке — практика с локальной моделью, здесь — откуда взялись приёмы и что о них известно из статей. Раздел «Поиск» — предыстория RAG (8.2.1), разделы о самосогласованности и CoT — предыстория вычислений во время ответа (вычисления во время инференсавычисления во время инференса (test-time compute)EN test-time computeБольше вычислений на ответ вместо большей модели: длинное рассуждение, много сэмплов с голосованием, поиск с проверщиком., ступень 6.4 и конспект «Why We Think»), раздел о внешних API — к агентам (конспект «LLM Powered Autonomous Agents»).
Помните о дате — март 2023 года. Многие приёмы тех лет придумывали для моделей, которые плохо следовали инструкциям. С рассуждающими моделями 2025–2026 годов часть советов работает иначе: например, «думай по шагам» не нужно модели, которая и так рассуждает, а подробные пошаговые инструкции иногда даже мешают. Мнение автора поста тоже стоит знать: по её словам, многие статьи о промптах можно было бы уложить в пару предложений, а остальное в них — замеры на бенчмарках; сообществу больше помогла бы общая инфраструктура для сравнения.
1. Базовые промпты
Заголовок раздела «1. Базовые промпты»Zero-shot — дать модели только задачу. Few-shot — сначала несколько примеров «вход → правильный выход». Модель лучше понимает, чего от неё хотят, но тратится больше токенов, и длинные примеры упираются в окно контекста.
Пример few-shot для классификации тональности (наш, по образцу поста, где используются отзывы из набора SST-2):
Отзыв: Актёры играют так, что забываешь, что это кино.Тональность: положительнаяОтзыв: Два часа жизни, которые мне никто не вернёт.Тональность: отрицательнаяОтзыв: Игра по мотивам фильма наверняка веселее самого фильма.Тональность:Почему few-shot нестабилен. Венг пересказывает работу Zhao и др. (2021) о трёх смещениях GPT-3:
| Смещение | Что происходит |
|---|---|
| смещение к большинству меток | если среди примеров больше «положительных», модель чаще отвечает «положительная» |
| смещение к недавнему | модель склонна повторить метку последнего примера |
| смещение к частым токенам | частые слова выдаются охотнее редких |
Авторы предложили калибровку: подать «пустой» вход вроде N/A, посмотреть, какие вероятности меток модель выдаёт
без всякой информации, и выровнять их.
Как выбирать примеры (сводка советов из поста):
- брать примеры, близкие к текущему входу по эмбеддингам (поиск ближайших соседей);
- для разнообразия — графовый отбор: строить граф ближайших соседей и выбирать представительные вершины;
- обучить эмбеддинги специально под отбор примеров (контрастивным обучением; «хороший» пример — тот, с которым модель даёт правильному ответу высокую вероятность);
- активное обучение: размечать вручную те вопросы, на которых несколько попыток модели расходятся сильнее всего.
Как упорядочивать: примеры разнообразные, близкие к задаче и в случайном порядке. Рост модели и числа примеров не уменьшает разброс качества между перестановками; порядок, хороший для одной модели, бывает плохим для другой. Если валидационных данных мало, выбирайте порядок, при котором ответы модели не слишком однобоки и не слишком самоуверенны (Lu и др., 2022).
2. Инструкции
Заголовок раздела «2. Инструкции»Модели, дообученные на тройках «инструкция, вход, правильный выход» (InstructGPT, наборы natural instructions, часто с RLHF), понимают задачу без примеров — и это дешевле few-shot. Советы Венг:
- описывать задачу конкретно и точно;
- говорить, что делать, а не только чего не делать;
- указывать аудиторию: «объясни квантовую физику шестилетнему ребёнку», «языком, безопасным для работы».
In-context instruction learning (Ye и др., 2023) совмещает оба подхода: в промпте несколько примеров разных задач, каждый со своей инструкцией, входом и выходом, а в конце — инструкция и вход вашей задачи.
3. Самосогласованность
Заголовок раздела «3. Самосогласованность»Сгенерировать несколько ответов с температурой больше нуля и выбрать лучший (Wang и др., 2022). Общий способ — голосование большинством; если ответ легко проверить (код с юнит-тестами), — просто запустить проверку. Почему это работает, видно в разделе «Что сделать руками».
4. Цепочка рассуждений (CoT)
Заголовок раздела «4. Цепочка рассуждений (CoT)»CoT (Wei и др., 2022) — модель пишет короткие шаги рассуждения перед ответом. Польза заметна на сложных задачах рассуждения и у больших моделей (по данным поста — больше примерно 50 млрд параметров); на простых задачах выигрыш небольшой.
Два вида. Few-shot CoT — примеры с выписанными решениями (в посте — задачи из GSM8k). Zero-shot CoT (Kojima и др., 2022) — фраза вроде «Давай рассуждать по шагам», а потом «Итак, ответ:».
Приёмы и расширения, которые собрала Венг:
- самосогласованность поверх CoT: несколько цепочек — голосование по ответам;
- ансамбли: менять порядок примеров или подставлять порождённые моделью решения вместо написанных людьми;
- STaR (Zelikman и др., 2022): модель пишет решения, оставляем только приведшие к правильному ответу, дообучаем на них и повторяем. (Это предок отбора с отклонением и RL с проверяемой наградой из ступени 6.4.)
- примеры с более сложными рассуждениями (больше шагов) дают лучший результат; шаги лучше разделять переводом строки, чем «шаг i», точкой или точкой с запятой; «Question:» работает лучше, чем «Q:» (Fu и др., 2023);
- голосование по сложности: голосовать только среди самых длинных цепочек; но только сложные примеры ухудшают ответы на простые вопросы (Shum и др., 2023);
- объяснения в промпте для задач понимания текста помогают слабо или умеренно, и ложные объяснения чаще ведут к неверному ответу (Ye и Durrett, 2022);
- Self-Ask, IRCoT и ReAct: модель задаёт себе уточняющие вопросы и отвечает на них поиском;
- Tree of Thoughts: дерево вариантов мысли с поиском в ширину или глубину.
5. Автоматический подбор промптов
Заголовок раздела «5. Автоматический подбор промптов»- Промпт можно считать обучаемыми параметрами и оптимизировать градиентом в пространстве эмбеддингов: AutoPrompt, Prefix-Tuning, P-tuning. (Это уже ближе к PEFT, ступень 6.2.)
- APE (Zhou и др., 2022): модель предлагает варианты инструкции по примерам «вход → выход», каждый оценивается на данных (точность или логарифм вероятности правильного ответа), лучшие перефразируются и снова оцениваются. Так нашлась формулировка zero-shot CoT лучше классической: «Давай разберём это по шагам, чтобы быть уверенными, что ответ правильный».
- Augment–prune–select (Shum и др., 2023): породить псевдоцепочки, отбросить те, что дают неверный ответ, и выбрать набор примеров методом градиента политики с точностью на валидации как наградой.
- Кластеризация (Zhang и др., 2023): ошибки модели похожи друг на друга, поэтому вопросы кластеризуют k-means и берут по одному примеру из кластера — так в промпт не попадёт много примеров с одной и той же ошибкой.
6. Дополненные языковые модели
Заголовок раздела «6. Дополненные языковые модели»Поиск. Модель не знает фактов после даты среза знаний и закрытых данных компании. Lazaridou и др. (2022) брали 20 результатов Google, резали тексты на абзацы по 6 предложений, ранжировали по TF-IDF и вставляли лучший абзац в промпт в формате «Свидетельство → Вопрос → Ответ» (если поменять местами вопрос и свидетельство, становится хуже). Любопытные наблюдения: даже с доступом к поиску модель хуже отвечает на вопросы о событиях после своего среза знаний — контекст конфликтует с «внутренним» знанием; а «внутренний поиск» — попросить модель сначала выписать относящиеся к вопросу знания — тоже помогает (Liu и др., 2022).
Код. PAL и Program of Thoughts просят модель написать программу на Python, а вычисления выполняет интерпретатор: рассуждение отделено от арифметики.
Внешние API.
- TALM (Parisi и др., 2022): модель пишет вызов инструмента и его вход, система вставляет результат, модель продолжает. Набор примеров расширяют итеративно — «самоигрой»: оставляют вызовы, которые улучшили ответ.
- Toolformer (Schick и др., 2023): калькулятор, система вопросов-ответов, поиск, переводчик, календарь. Обучение самоконтролируемое: (1) модель по нескольким примерам расставляет в тексте кандидатов-вызовов API; (2) вызовы выполняются, и вызов оставляют, только если с его результатом модели заметно легче предсказывать следующие токены (потеря падает больше порога); (3) модель дообучают на тексте с оставленными вызовами. Ограничения на момент поста: нет цепочек вызовов и интерактивного использования.
Что сделать руками
Заголовок раздела «Что сделать руками»Почему самосогласованность работает? Пусть модель на задаче отвечает правильно с вероятностью 0,4, а три неправильных ответа встречаются по 0,2. Один ответ верен в 40 % случаев. Голосование среди ответов выбирает правильный всё чаще — потому что неправильные ответы «расходятся» по разным вариантам, а правильный один. Если же есть идеальная проверка (юнит-тесты), достаточно, чтобы правильный ответ встретился хотя бы раз: .
import numpy as nprng = np.random.default_rng(0)probs = np.array([0.4, 0.2, 0.2, 0.2]) # ответ 0 правильный; три неправильных по 20%
def majority_acc(n, trials=100_000): samples = rng.choice(4, size=(trials, n), p=probs) counts = np.stack([(samples == k).sum(axis=1) for k in range(4)], axis=1) counts = counts + rng.random(counts.shape) * 0.1 # случайно разбиваем ничьи winners = counts.argmax(axis=1) return (winners == 0).mean()
for n in [1, 5, 15, 45]: best_of_n = 1 - (1 - probs[0]) ** n # если есть идеальный проверяющий (юнит-тесты) print(f"N={n:3}: голосование {majority_acc(n):.3f}, best-of-N с идеальным проверяющим {best_of_n:.4f}")Ожидаемый вывод:
N= 1: голосование 0.399, best-of-N с идеальным проверяющим 0.4000N= 5: голосование 0.509, best-of-N с идеальным проверяющим 0.9222N= 15: голосование 0.693, best-of-N с идеальным проверяющим 0.9995N= 45: голосование 0.910, best-of-N с идеальным проверяющим 1.0000Голосование растёт медленно, а с проверяющим — почти сразу. Отсюда практический вывод поста: для задач, которые легко проверить, выбирайте ответ проверкой, а не большинством.
Дальше — с локальной моделью из урока 8.1.1:
- Возьмите 20 задач в стиле GSM8k на русском и сравните zero-shot, zero-shot CoT («Давай рассуждать по шагам») и самосогласованность по 5 ответам. Для рассуждающей модели сравните ещё с выключенным «мышлением».
- Проверьте смещение к недавнему: в few-shot для тональности поставьте в конец три «положительных» примера подряд и посмотрите, как изменится доля «положительных» ответов на нейтральных отзывах.
- Повторите «внутренний поиск»: попросите модель сначала выписать факты, относящиеся к вопросу, и только потом ответить; сравните точность на 20 фактических вопросах.
Словарик
Заголовок раздела «Словарик»| EN | RU |
|---|---|
| prompt engineering, in-context prompting | промпт-инжиниринг, управление через контекст |
| zero-shot / few-shot | без примеров / с несколькими примерами |
| demonstration, in-context example | пример в промпте |
| majority label bias, recency bias, common token bias | смещение к большинству меток, к недавнему, к частым токенам |
| instruction prompting, instructed LM | промпт-инструкция, модель, дообученная следовать инструкциям |
| self-consistency, majority vote | самосогласованность, голосование большинством |
| chain-of-thought, rationale | цепочка рассуждений, обоснование |
| automatic prompt engineer (APE) | автоматический подбор промпта |
| augmented language model | дополненная языковая модель |
| retrieval, open-domain QA | поиск (извлечение), ответы на вопросы в открытой области |
| program-aided LM | модель, решающая задачу через программу |
| tool-augmented LM, API call | модель с инструментами, вызов API |