Элементы промпта
Анатомия промпта
Проблема: Ты просишь ИИ «Напиши что-нибудь хорошее» и получаешь размытый ответ. Но когда просишь точно — получаешь именно то, что нужно. В чём разница?
Решение: Думай как рецепт
Хороший промпт похож на рецепт блюда. Если просто сказать «приготовь что-то вкусное», повар не поймёт, что ты хочешь. Но в рецепте есть чёткая структура: ингредиенты, пропорции, шаги и ожидаемый результат. Промпт устроен так же — он собирается из нескольких переиспользуемых частей, и каждая из них подталкивает модель к тому ответу, который ты на самом деле имел в виду.
Из чего состоит промпт
Роль (role) задаёт, чьим голосом говорит модель: «Ты — старший инженер по безопасности» направляет её к аккуратным, предметным формулировкам вместо общего ответа. Контекст (context) даёт фон, который модель не может угадать сама, — твою аудиторию, кодовую базу, цель, — чтобы ответ подходил именно к твоей ситуации. Инструкция (instruction) — самая важная часть: она называет конкретное действие («суммаризируй», «перепиши», «классифицируй»). Размытые глаголы дают размытый результат, поэтому задачу нужно формулировать явно и однозначно.
Ещё три части уточняют ответ. Примеры (examples), то есть техника few-shot, показывают модели образец для копирования: одна-две пары «вход → выход» часто работают сильнее, чем абзац описания. Входные данные (input data) — это сам материал для работы (письмо, на которое надо ответить, текст для перевода); их лучше отделять от инструкций понятными разделителями — тройными кавычками или тегами в духе XML, — чтобы модель не путала данные с командами. Наконец, формат и ограничения (output format and constraints) фиксируют форму и пределы ответа: «Верни валидный JSON с ключами title и tags, не длиннее 50 слов, без markdown». Ограничения не дают модели растекаться и упрощают разбор ответа дальше по цепочке.
Сравни «тонкий» промпт со структурированным. До: «Напиши про наш продукт» — получаешь пресный общий текст. После: «Ты — B2B-копирайтер. Мы продаём софт для учёта времени небольшим агентствам. Напиши пост для LinkedIn на 40 слов про функцию еженедельных отчётов; дружелюбный тон, один эмодзи, заверши вопросом» — теперь результат в духе бренда, нужной длины и готов к публикации. Все шесть элементов сразу нужны редко: для быстрого фактического вопроса хватит одной инструкции, а сложной генерации помогают роль, контекст, формат и примеры вместе. Роль особенно часто задаётся один раз через системный промпт, который определяет поведение модели ещё до сообщения пользователя.
Представьте это как рецепт с ключевыми ингредиентами:
- 1. Роль: кем должен быть ИИ? «Ты — опытный Python-разработчик»
- 2. Контекст: какая предыстория? «Я делаю REST API для интернет-магазина»
- 3. Задача: что конкретно нужно сделать? «Напиши функцию для валидации email-адресов»
- 4. Формат: как должен выглядеть результат? «Верни как Python-функцию с docstring и type hints»
- 5. Ограничения: какие есть лимиты? «Без внешних библиотек, Python 3.9+»
- 6. Примеры: покажи, что хочешь получить. «Для входа "test@email.com" верни True»
Совет профи: Порядок важен! Ставь самую важную информацию в начало и конец промпта — модели уделяют этим частям больше внимания. Это называется «эффект первичности и недавности» в когнитивной науке.
Где это применяется?
Интересный факт: Ключевые ингредиенты промпта как строительные блоки — Роль, Контекст, Задача, Формат, Ограничения и Примеры. Комбинируй их в зависимости от потребностей!
Попробуйте сами!
Кликай на элементы промпта, чтобы включать или выключать их. Заметь, как добавление каждого элемента делает выход точнее!
Включай и выключай элементы промпта — посмотри, как это влияет на качество ответа модели. Попробуй разные комбинации!
Что модель должна сделать. Чёткая задача или команда.
Дополнительная информация, которая помогает модели лучше понять задачу.
Данные, которые модель должна обработать.
Подсказка о формате ожидаемого ответа.
Ты — профессиональный переводчик. Сохраняй стиль и тон оригинала.
Переведи следующий текст на английский язык.
Текст: "Сегодня прекрасный день для прогулки в парке."
Перевод:
Собери промпт и нажми «Сгенерировать»
Контекст → Инструкция → Данные → Индикатор вывода. Такой порядок помогает модели лучше понять задачу.
Простые запросы могут содержать только инструкцию. Добавляй другие элементы по мере усложнения задачи.
Чёткое разделение элементов промпта помогает модели понять, что от неё ожидается. Инструкция отвечает на "что делать", контекст — на "как делать", входные данные — на "с чем работать", а индикатор вывода направляет формат ответа.
Частые вопросы
Из чего состоит хороший промпт?
Хороший промпт собирается из нескольких переиспользуемых частей: роль (role), контекст (context), инструкция (instruction), примеры (few-shot), входные данные и формат с ограничениями. Не все элементы нужны сразу — для простого вопроса хватит одной инструкции, а сложной задаче помогают роль, контекст, формат и примеры вместе.
Зачем нужна роль в промпте?
Роль задаёт, чьим голосом говорит модель: «Ты — старший инженер по безопасности» направляет её к аккуратным, предметным формулировкам вместо общего ответа. Это сразу повышает релевантность и тон ответа под нужную область. Роль удобно задавать один раз через системный промпт, который определяет поведение модели ещё до сообщения пользователя.
Чем инструкция отличается от контекста в промпте?
Инструкция называет конкретное действие, которое нужно выполнить («суммаризируй», «перепиши», «классифицируй»), и это самая важная часть промпта. Контекст же даёт фон, который модель не может угадать сама, — аудиторию, цель, кодовую базу. Инструкция говорит «что сделать», а контекст — «при каких обстоятельствах», и вместе они дают точный, подходящий под ситуацию ответ.
Как задать формат ответа в промпте?
Опиши форму и пределы ответа прямо в промпте, например: «Верни валидный JSON с ключами title и tags, не длиннее 50 слов, без markdown». Такие ограничения не дают модели растекаться и упрощают разбор результата дальше по цепочке. Входные данные при этом лучше отделять разделителями — тройными кавычками или тегами в духе XML, — чтобы модель не путала данные с командами.
Попробуй сам
Интерактивное демо этой техники
Написать функцию для вычисления факториала числа
def factorial(n):
if n == 0:
return 1
return n * factorial(n-1)
def factorial(n: int) -> int:
"""Calculate factorial of n.
Args:
n: Non-negative integer
Returns:
Factorial of n
Raises:
ValueError: If n is negative
"""
if n < 0:
raise ValueError("n must be non-negative")
if n == 0 or n == 1:
return 1
return n * factorial(n - 1)
Низкая temperature (0.1) для кода обеспечивает более консистентный, документированный и безопасный результат.
Создайте бесплатный аккаунт для решения челленджей
4 челленджей с AI-проверкой для этого урока
Этот урок — часть структурированного курса по LLM.
Мой путь обучения