Prompt engineering на собеседовании Data Scientist

Проверь себя · 1/3разбор после ответа
В простой линейной регрессии с одним признаком 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 помогает моделям, способным к рассуждению, и почти бесполезен на тривиальных задачах, где ответ очевиден, — там он только жжёт токены.

Готовься к собесу аналитика как в Duolingo
10 минут в день — SQL, Python, A/B, метрики. 1700+ вопросов в Telegram
Открыть Карьерник в Telegram

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 меняет веса модели. На собесе стоит чётко разделять, когда нужен какой инструмент.

Связанные темы

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+ вопросами для собесов.