Few-Shot промптинг это техника, где вместо описания задачи словами вы показываете несколько примеров нужного ввода и вывода. Языковые модели обучены на паттернах, и несколько хороших примеров часто работают лучше, чем длинное описание. Особенно это мощно для задач с нестандартным форматом вывода или когда нужен конкретный стиль.
Zero-Shot vs Few-Shot vs Many-Shot
Zero-Shot: никаких примеров, только инструкция. «Определи тональность отзыва: [отзыв]». Работает для простых задач.
Few-Shot: 2-5 примеров ввода и ожидаемого вывода перед основной задачей. Для нестандартных форматов.
Many-Shot: 10+ примеров. Используется для задач где важна стабильность формата или когда задача плохо описывается словами. Claude с контекстом 200k токенов может обработать сотни примеров.
Структура Few-Shot промпта
Базовая структура:
Задача: [описание что нужно сделать] Примеры: Вход: [пример 1] Выход: [ожидаемый вывод для примера 1] Вход: [пример 2] Выход: [ожидаемый вывод для примера 2] Вход: [пример 3] Выход: [ожидаемый вывод для примера 3] Теперь: Вход: [ваша реальная задача] Выход:
Когда модель видит паттерн «Вход: … Выход: …» несколько раз, она подхватывает его и продолжает в том же формате для вашего реального ввода.
Пример 1: классификация обращений
Задача: автоматически классифицировать входящие сообщения поддержки. Без примеров модель может дать разные ответы в разных форматах. С Few-Shot:
Классифицируй обращение в службу поддержки. Категории: BILLING, TECHNICAL, GENERAL. Вход: "Почему с меня списали дважды?" Выход: BILLING Вход: "Приложение не открывается" Выход: TECHNICAL Вход: "Когда у вас рабочее время?" Выход: GENERAL Вход: "Хочу оформить возврат за прошлый месяц" Выход:
Модель ответит: BILLING. Стабильно, без лишних слов.
Пример 2: форматирование данных
Задача: извлечь структурированные данные из неструктурированного текста:
Извлеки данные о сотруднике в JSON формате.
Вход: "Александр Петров, 32 года, старший разработчик, опыт 8 лет, Python, Go"
Выход: {"name": "Александр Петров", "age": 32, "position": "старший разработчик", "experience": 8, "skills": ["Python", "Go"]}
Вход: "Мария Соколова, 28 лет, UX дизайнер, 5 лет опыта, Figma, Sketch, Adobe XD"
Выход: {"name": "Мария Соколова", "age": 28, "position": "UX дизайнер", "experience": 5, "skills": ["Figma", "Sketch", "Adobe XD"]}
Вход: "Дмитрий Козлов, 41 год, руководитель проектов, 15 лет в IT, PMP, Scrum Master"
Выход:
Пример 3: стиль письма
Few-Shot идеально для передачи стиля письма, который трудно описать словами:
Перефразируй сухой технический текст в живой стиль корпоративного блога. Вход: "Функция авторизации была реализована с использованием JWT токенов." Выход: "Теперь вход в систему надёжно защищён: мы внедрили JWT-токены, которые делают каждую сессию уникальной и безопасной." Вход: "База данных была оптимизирована путём добавления индексов." Выход: "Мы ускорили работу системы втрое: добавили умные индексы в базу данных, и запросы теперь выполняются мгновенно." Вход: "Интеграция с платёжной системой была завершена." Выход:
Качество примеров важнее их количества
2 отличных примера лучше 10 посредственных. Критерии хорошего примера:
- Охватывает типичный случай (а не экзотику)
- Вывод полностью соответствует желаемому формату
- Пример и вывод логично связаны (очевидно что именно формирует вывод)
- Примеры разнообразны (не почти одинаковые)
Few-Shot в API: через system или user сообщения
В Claude/ChatGPT API примеры можно передавать в системный промпт или как часть диалога (user + assistant пары). Второй вариант часто более надёжен: модели обучены что assistant-ответы это то, что модель «должна делать».
Вывод
Few-Shot промптинг это один из самых эффективных инструментов когда нужен конкретный формат или стиль вывода. Если словесное описание задачи даёт нестабильные результаты, попробуйте добавить 2-3 примера ввода/вывода. В большинстве случаев это улучшает точность и стабильность значительно больше, чем попытки точнее описать задачу словами.
Почему примеры работают лучше объяснений
Few-Shot Prompting использует то, как работают языковые модели: они предсказывают продолжение паттерна из контекста. Когда ты даёшь примеры «вход → выход», модель видит паттерн и воспроизводит его. Это мощнее словесного описания формата по нескольким причинам: примеры устраняют двусмысленность (тысяча слов могут описать стиль хуже, чем один пример в этом стиле), примеры задают распределение (не просто «будь кратким», а фактически краткий пример устанавливает желаемую длину), примеры демонстрируют edge cases (как обрабатывать пустые данные, необычные случаи). Zero-Shot — без примеров. One-Shot — один пример. Few-Shot — 2-5 примеров. Оптимум: 3-5 примеров для большинства задач. Больше примеров тратят токены без значительного прироста.
Эффективные применения Few-Shot
- Классификация тональности: дай 3 примера (Позитивный/Нейтральный/Негативный) с текстами, затем новый текст → модель классифицирует точнее.
- Извлечение данных: пример входного текста → пример JSON-структуры на выходе. Модель повторит формат для новых текстов без дополнительных инструкций.
- Стиль написания: 2-3 примера твоих текстов → попроси написать новый в том же стиле. Примеры передают стиль точнее, чем «пиши неформально, коротко, с юмором».
- Перевод с терминологией: примеры переводов с вашей отраслевой терминологией → модель использует правильные отраслевые термины.
- Форматирование: пример «сырой текст → готовый пост для Telegram с эмодзи и структурой» → новые тексты форматируются аналогично.
Частые вопросы
Сколько примеров нужно для Few-Shot промпта?
Для простых задач (классификация по 2-3 классам) — 2-3 примера достаточно. Для сложных задач (специфический стиль текста, многоступенчатое извлечение) — 5-8 примеров. Больше 10 примеров редко дают значительный прирост качества, но занимают много токенов. Правило: добавляй примеры пока результаты улучшаются, останавливайся когда перестают.
Важен ли порядок примеров в Few-Shot?
Да, особенно для больших контекстов. Последний пример перед задачей имеет больший вес (recency bias). Для сбалансированной классификации: перемешивай примеры разных классов, не группируй одинаковые. Для стиля: лучший/наиболее характерный пример ставь последним.
Работает ли Few-Shot без разделителей между примерами?
Хуже работает. Явные разделители (пустая строка, «—», XML-теги) помогают модели чётко отделить один пример от другого. Без разделителей модель может «склеить» примеры. Рекомендуемый формат: Input: [текст]\nOutput: [результат]\n—\nInput: [следующий]\nOutput: [результат]
Чем Few-Shot отличается от Fine-Tuning?
Few-Shot: примеры в промпте каждый раз при запросе, без изменения весов модели, дорого при большом числе примеров в токенах. Fine-Tuning: обучение модели на примерах один раз, примеры не нужны в промпте при использовании, требует данных и затрат на обучение. Для 10-50 примеров: Few-Shot. Для 500+ одинаковых примеров, нужных постоянно: Fine-Tuning может быть дешевле на дистанции.
