Prompt engineering на собеседовании Data Scientist
x квадрат коэффициента корреляции Пирсона (то есть r^2) чаще всего интерпретируют как…Содержание:
Зачем спрашивают prompt engineering
Промпт-инжиниринг — это управление поведением языковой модели через текст запроса, без дообучения весов. Грамотно составленный промпт способен поднять качество ответа в разы на той же самой модели: где-то за счёт примеров, где-то за счёт явной инструкции рассуждать по шагам. Это самый дешёвый рычаг качества — не нужны ни GPU-часы на fine-tuning, ни разметка датасета.
На собесе DS эту тему поднимают, чтобы понять: умеете ли вы выжимать из готовой модели максимум до того, как тянуться к дорогим методам. Интервьюер смотрит не на знание модных терминов, а на понимание, почему тот или иной приём работает и когда он оправдан. Ниже — базовый набор техник, который закрывает большинство вопросов.
Роли сообщений: system, user, assistant
Диалог с моделью обычно строится из сообщений трёх ролей. Понимание, за что отвечает каждая, — минимум, который ждут на собесе.
system: "You are a helpful assistant that translates English into Russian."
user: "Hello, how are you?"
assistant: "Привет, как дела?"- system — задаёт поведение, роль и ограничения модели: тон, формат ответа, чего делать нельзя. Это самый «сильный» уровень инструкции, он действует на весь диалог.
- user — сам запрос пользователя, конкретная задача в текущем ходе.
- assistant — ответы модели. В few-shot их вставляют вручную как примеры желаемого поведения.
Типичная ошибка новичков — сваливать всё в user-сообщение. Правильнее разнести: устойчивые правила (персона, формат, запреты) — в system, конкретную задачу — в user.
Few-shot и in-context learning
Few-shot — это добавление в промпт нескольких примеров «вход → выход» прямо перед реальной задачей. Модель не дообучается, но подхватывает паттерн из контекста — это и называется in-context learning.
Переведи на формальный русский:
"Hi" → "Здравствуйте"
"Bye" → "До свидания"
"Thanks" → "Спасибо"
"How are you?" →Обычно хватает 1–5 примеров: они задают формат, стиль и краевые случаи лучше любой словесной инструкции. Zero-shot (без примеров) проще, но менее предсказуем; few-shot стоит больше токенов, зато стабилизирует вывод. На собесе полезно проговорить этот компромисс: примеры повышают качество, но раздувают контекст и стоимость запроса.
Chain-of-thought
Chain-of-thought (CoT) — приём, при котором модель просят рассуждать по шагам, прежде чем дать финальный ответ. На задачах с арифметикой и логикой это заметно повышает точность: модель не «выпаливает» ответ, а раскладывает решение на промежуточные шаги.
Вопрос: Поезд выехал из города A со скоростью 100 км/ч...
Ответ: Давай рассуждать по шагам.
Шаг 1: ...
Шаг 2: ...
Следовательно: ...- Zero-shot CoT. Часто достаточно просто дописать «давай рассуждать по шагам» — без единого примера точность на reasoning-задачах растёт (это и есть находка из статьи Wei и коллег, 2022).
- Self-consistency. Генерируют несколько независимых цепочек рассуждений и выбирают ответ голосованием большинства. Дороже по токенам, но устойчивее к случайным ошибкам в одной цепочке.
Важный нюанс для собеса: CoT помогает моделям, способным к рассуждению, и почти бесполезен на тривиальных задачах, где ответ очевиден, — там он только жжёт токены.
ReAct и агенты
ReAct (Reason + Act) — паттерн, где модель чередует рассуждение и действия: подумала, вызвала инструмент (поиск, калькулятор, запрос к API), получила результат (observation), подумала дальше. Так строятся агенты: LLM не просто отвечает текстом, а управляет циклом «мысль → действие → наблюдение», пока не решит задачу.
Thought: нужно узнать население столицы Франции
Action: search("население Парижа")
Observation: ~2.1 млн
Thought: этого достаточно для ответа
Answer: Около 2,1 млн человекНа собесе про ReAct спрашивают в связке с агентами и tool use: чем он лучше «голого» CoT (ответ: даёт доступ к внешним данным и снижает галлюцинации, потому что факты подтягиваются из инструментов, а не выдумываются). Идея описана в работе Yao и коллег, 2023.
Структурированный вывод
Часто ответ модели нужно распарсить программно, а не показать человеку. Тогда просят вернуть строгий формат — обычно JSON по заданной схеме.
Верни JSON вида {"name": str, "age": int, "interests": [str]}.
Вход: "John is 30 years old and likes hiking and reading."- Strict / structured output. В API OpenAI и Anthropic есть режим, который гарантирует синтаксически валидный JSON по схеме — модель физически не может вернуть сломанный формат. Это надёжнее, чем просто попросить «верни JSON» словами.
- Function calling (tool use). Модель возвращает не текст, а структурированный вызов функции с аргументами по заданной схеме. Это основа интеграции LLM с кодом: так модель «дёргает» ваши функции и API.
Частые ошибки
- Всё в одном user-сообщении. Устойчивые правила и персону надо выносить в system — иначе модель легко их теряет по ходу диалога.
- CoT везде подряд. Пошаговое рассуждение помогает на логике и математике, но на простых задачах только увеличивает стоимость и латентность.
- «Верни JSON» словами вместо strict-режима. Просьба текстом не гарантирует валидность: модель может добавить пояснение или сломать кавычки. Для парсинга используйте structured output или function calling.
- Перегруз примерами. Десятки few-shot-примеров раздувают контекст и стоимость. Обычно 1–5 репрезентативных примеров работают не хуже.
- Путать промпт-инжиниринг с fine-tuning. Промпт меняет поведение здесь и сейчас через контекст; fine-tuning меняет веса модели. На собесе стоит чётко разделять, когда нужен какой инструмент.
Связанные темы
- BERT vs GPT для DS
- AI agents для DS
- Few-shot learning для DS
- RAG на собесе DS
- Подготовка к собесу Data Scientist
FAQ
Чем промпт-инжиниринг отличается от fine-tuning?
Промпт-инжиниринг меняет поведение модели через текст запроса, не трогая веса, — эффект мгновенный и бесплатный по подготовке. Fine-tuning дообучает саму модель на своих данных: дороже, требует разметки и инфраструктуры, зато закрепляет поведение и экономит токены на каждом запросе. На практике начинают с промптинга и переходят к fine-tuning, только когда промпт упёрся в потолок.
Когда few-shot лучше zero-shot?
Когда важен точный формат вывода, специфический стиль или есть неочевидные краевые случаи — примеры показывают их нагляднее любой инструкции. Zero-shot достаточно для простых и хорошо знакомых модели задач. Минус few-shot — лишние токены и стоимость, поэтому 1–5 примеров обычно оптимум.
Всегда ли chain-of-thought повышает качество?
Нет. CoT помогает на задачах, требующих рассуждения — арифметика, логика, многошаговые выводы. На тривиальных вопросах он не улучшает ответ, а только увеличивает латентность и стоимость. Плюс на очень маленьких моделях эффект слабый: пошаговое рассуждение раскрывается на моделях покрупнее.
Как гарантировать валидный JSON на выходе?
Надёжнее всего — режим структурированного вывода (structured / strict output) в API OpenAI или Anthropic: он заставляет модель соблюдать схему на уровне декодирования. Альтернатива — function calling, где модель возвращает вызов функции с типизированными аргументами. Просто попросить «верни JSON» текстом ненадёжно: модель может добавить пояснения или сломать синтаксис.
Что такое ReAct и зачем он агентам?
ReAct — паттерн, где модель чередует рассуждение и вызовы инструментов: подумала, сделала действие, получила результат, подумала дальше. Он лежит в основе агентов: даёт доступ к внешним данным и коду, снижает галлюцинации (факты подтягиваются из инструментов, а не выдумываются) и позволяет решать задачи, которые не влезают в один проход модели.
Это официальная информация?
Нет. Статья опирается на публичные работы — Wei и коллеги, 2022 (chain-of-thought), Yao и коллеги, 2023 (ReAct) — и документацию OpenAI и Anthropic. Конкретные вопросы на собесе зависят от компании, команды и уровня позиции.
Тренируйте Data Science — откройте тренажёр с 1500+ вопросами для собесов.