$ sudo teach IT

Представьте, что вы даёте задание дизайнеру:

“Сделай красиво.”

Что именно нужно сделать? Какой стиль? Какие цвета? Формат — картинка, слайд, плакат? Без контекста — слишком много вариантов. Так же и с LLM. Чем четче и структурнее вы формулируете промпт, тем лучше результат.

В этом уроке вы научитесь:

  • строить понятные, управляемые промпты;
  • использовать типовые конструкции, которые воспринимаются LLM надёжно;
  • и избегать ошибок, которые приводят к “расплывчатым” или бессмысленным ответам.

📌 Пример: вы хотите, чтобы модель написала e-mail. Но вместо “Напиши письмо” вы скажете: “Напиши деловое письмо для клиента, в котором сообщается об успешной доставке заказа #4532. Используй вежливый тон, упомяни дату доставки, добавь подпись менеджера.”

Вероятность получить нужный результат растёт в разы — благодаря правильной структуре промпта.

Что вы узнаете в рамках статьи

  • Что входит в хорошую структуру промпта
  • Почему важно давать контекст, а не просто команду
  • Как работают zero-shot, few-shot и chain-of-thought промпты
  • Когда полезна self-reflection стратегия
  • Какие ошибки чаще всего встречаются и как их избежать

🧩 Ключевые термины

  • Контекст — дополнительная информация, которая помогает модели “понять” ситуацию или роль.
  • Инструкция — чёткая команда, что нужно сделать.
  • Примеры (few-shot) — образцы входа и желаемого выхода.
  • Формат вывода — ожидаемый стиль, структура или тип данных.
  • Zero-shot — промпт без примеров.
  • Few-shot — промпт с 1–3 примерами.
  • Chain-of-thought — подход, при котором модель генерирует пошаговые размышления.
  • Self-reflection — приём, где модель оценивает и уточняет свой собственный ответ.

📐 Формула хорошего промпта — подробно и на аналогиях

1. Контекст — «где мы и кто мы»

Аналогия: GPS-координаты для таксиста Если вы просто скажете «Подвезите меня домой», водитель будет гадать, какой это район и как туда доехать. Назовите точный адрес — и маршрут построен верно с первой попытки.

Что даёт контекст LLM-у:

  • задаёт роль модели («ты — SMM-специалист», «ты — наставник по SQL»);
  • описывает аудиторию и цель (молодёжный бренд, HR-отчёт для руководства);
  • ограничивает «вселенную» фактов, чтобы снизить галлюцинации.

2. Инструкция — «что именно нужно сделать»

Аналогия: кнопка «режим» на микроволновке Указывая мощность и время, вы говорите прибору как разогревать еду. Без этого он выберет случайный режим.

Хорошая инструкция:

  • начинается с глагола действия («напиши», «сравни», «проанализируй»);
  • содержит минимально необходимую детализацию («в 3 абзацах», «используй список»);
  • включает оговорки типа «если данных нет — скажи об этом».

3. Примеры (Few-shot) — «покажи и повтори»

Аналогия: образцовая строка в таблице Когда бухгалтер видит заполненный образец, риск ошибки в формате сразу падает.

Почему пара примеров творит чудеса:

Ситуация Без примеров С примерами
Перевод терминов Может подобрать не тот оттенок Подстраивается под показанный глоссарий
Генерация кода Использует «любимый» стиль скобок Клонирует ваш стиль и именования
Заголовки статей Слишком креативно/сухо Держит нужный тон

💡 Совет: примеры должны быть короткими и типичными, иначе они «съедят» контекстное окно.

4. Формат вывода — «как упаковать результат»

Аналогия: коробка нужного размера Курьер спросит: «Упаковать подарок в бумагу или положить в пакет?» Если не ответить — решит сам.

  • Чётко задавайте тип (JSON, таблица Markdown, абзац текста).
  • Ограничивайте длину (до 300 символов, не более пяти пунктов).
  • Для машинной обработки перечисляйте ключи строго («title», «description», «cta»).

🔗 Вся цепочка в действии

Шаг Пример для поста о летней коллекции
Контекст «Ты — SMM-специалист молодёжного бренда уличной одежды».
Инструкция «Напиши продающий пост для Instagram, подчёркивая лёгкость и яркость новой коллекции».
Пример «Лето уже здесь — а ты готов к жаре? Встречай наш свежий дроп!»
Формат «До 300 символов, энергичный стиль, 2–3 эмодзи, один хэштег #FreshDrop».

Что получает модель? Чёткий «бриф»: кто говорит, с какой целью, в какой манере и в каком виде должен быть результат.

🛑 Типичные промахи и быстрые фиксы

Ошибка Как выглядит Как исправить
Нет контекста «Сделай презентацию». Добавьте «для инвесторов FinTech-стартапа, 10 слайдов».
Расплывчатая инструкция «Оптимизируй код». Уточните: «сократи сложность, избегая сторонних библиотек».
Отсутствие формата Ожидали JSON, получили эссе. Явно требуйте: {"title": "...", "body": "..."}.
Слишком длинные примеры Переполняют окно контекста. Оставьте 1-2 ключевых строки.

🔄 Типы промптов: как выбирать способ общения с моделью

Представьте, что вы даёте задание разным людям. Одному достаточно сказать "сделай", другому нужно показать пример, а третьему — сначала объяснить логику. Точно так же и с языковыми моделями: они могут работать в разных режимах, и от того, как вы подадите запрос, зависит результат.

В промпт-инжиниринге принято выделять несколько типов промптов, каждый из которых решает свою задачу:

  • Zero-shot — когда вы просто формулируете задание без примеров;
  • Few-shot — когда добавляете 1–2 образца для ориентира;
  • Chain-of-thought — когда просите рассуждать пошагово;
  • Self-reflection — когда модель проверяет и уточняет свой собственный ответ.

Эти подходы не конкурируют между собой — они дополняют друг друга. В зависимости от цели и сложности задачи, вы можете выбрать наиболее подходящий формат. Далее разберём каждый из них подробнее.

🔹 Zero-shot: “Сделай без примеров”

Zero-shot промпт — это самый простой и быстрый способ взаимодействия с моделью. Вы просто даёте инструкцию, не приводя примеров, шаблонов или пояснений. Модель сама пытается понять, что вы хотите, и выдать результат на основе общих знаний, полученных при обучении.

📌 Пример: Промпт: «Переведи на испанский: Добро пожаловать в наш магазин!» Ответ: «¡Bienvenidos a nuestra tienda!»

📚 Аналогия: попросить официанта без уточнений

Представьте, что вы пришли в кафе и сказали:

«Принесите что-нибудь вкусное.»

Если повар опытный — он догадается и принесёт популярное блюдо. Но если вы добавите уточнения («вегетарианское», «без специй», «на завтрак») — шанс получить именно то, что вы хотите, будет выше.

Так и с LLM: zero-shot — это как общая просьба, надеющаяся на интуицию модели. Она «угадывает» ваш смысл, но не всегда точно попадает в ожидания.

🧠 Как модель обрабатывает zero-shot

Модель полагается на то, что уже “читала” в процессе обучения. Она не знает, как именно вы хотите получить результат, но делает выводы из огромного корпуса текстов, диалогов, статей и переводов.

💡 Zero-shot лучше всего работает, когда:

  • задача однозначна (например, перевод, пересказ, извлечение сущностей);
  • результат имеет общеизвестную структуру (например, список, вопрос-ответ, описание товара);
  • важна скорость взаимодействия (например, чат-бот для коротких ответов).

✅ Примеры zero-shot промптов

Задача Промпт Ожидаемый результат
Перевод Переведи на английский: "Мне нравится учиться" I like studying
Краткое описание Сформулируй краткое описание товара — кофеварка. Компактная кофеварка на 2 чашки с функцией автоматического отключения
Продолжение Продолжи текст: «Однажды в тёмном лесу…» я услышал шорох, и кто-то вышел из тени

⚠️ Ограничения zero-shot

Несмотря на простоту, zero-shot может:

  • приводить к неоднозначным формулировкам, особенно в сложных задачах;
  • игнорировать формат, если вы не уточнили явно;
  • не удерживать стиль, если не указана цель и аудитория.

📉 Пример ошибки: Промпт: «Напиши деловое письмо» Ответ: слишком неформальное или чрезмерно длинное письмо — модель не знала, кому и зачем писать.

🔧 Как усилить zero-shot без перехода к few-shot

Чтобы получить более точный ответ, вы можете:

  • Добавить контекст:

    “Ты — помощник по маркетингу. Составь слоган для весенней коллекции.”

  • Уточнить формат:

    “Ответь в виде списка из 5 пунктов.”

  • Указать ограничения:

    “Используй не больше 20 слов. Без эмодзи.”

Таким образом, вы остаетесь в рамках zero-shot, но делаете промпт управляемым.

🔸 Few-shot: “Вот пример — повтори по шаблону”

Few-shot prompting — это метод, при котором вы не просто даёте задание, а ещё и показываете модели 1–3 примера, как должен выглядеть ответ. Это позволяет точнее управлять форматом, стилем и логикой генерации.

📌 Пример:

Q: What is the capital of France?
A: Paris

Q: What is the capital of Germany?
A:

Модель “видит” структуру и выдаёт: A: Berlin

📚 Аналогия: обучение через образец

Представьте, что вы обучаете ассистента оформлять отчёты. Вместо того чтобы объяснять правила словами, вы просто даёте ему уже готовый шаблон:

«Вот так надо делать. Продолжи по этому образцу.»

Точно так же работает и few-shot: вы не описываете правила, а показываете результат, на который стоит равняться.

🧠 Как модель воспринимает few-shot

LLM не «запоминает» примеры как правило. Она ищет в них шаблоны:

  • порядок слов,
  • стиль написания,
  • формат ответа,
  • форму представления данных (таблица, JSON, маркированный список).

И дальше пытается продолжить в том же стиле.

🔧 Когда few-shot особенно полезен

Сценарий Почему работает
Генерация кода Модель понимает, какой синтаксис и стиль оформления нужен
Имитация стиля Модель “впитывает” манеру речи, тональность, структуру
Заполнение форм Можно задать чёткий шаблон — и получить аналогично оформленные блоки
Работа с JSON/XML Модель копирует структуру, не забывает запятые и кавычки

✅ Примеры few-shot промптов

💬 Перевод:

Translate the following sentences into German:

Q: Hello!
A: Hallo!

Q: How are you?
A:

→ A: Wie geht’s dir?

🔠 Генерация словаря:

Q: Define the word "curiosity"
A: A strong desire to know or learn something.

Q: Define the word "resilience"
A:

→ A: The capacity to recover quickly from difficulties; toughness.

🧾 Ответы в формате JSON:

Input: "I need to book a table for 2 on Friday at 7 PM."
Output:
{
  "action": "book_table",
  "people": 2,
  "day": "Friday",
  "time": "7 PM"
}

Input: "Reserve a spot for 4 people on Saturday at noon."
Output:

→ Модель продолжает структуру в том же формате.

⚠️ Что может пойти не так

  • Слишком длинные примеры → уменьшается доступный контекст.
  • Смешанные стили → модель не понимает, какой из них воспроизводить.
  • Слишком сложные примеры без пояснений → возможны сбои.

💡 Совет: выбирайте короткие, репрезентативные примеры и следите за их единообразием.

📊 Few-shot против zero-shot: в чём разница

Характеристика Zero-shot Few-shot
Простота + −
Предсказуемость − +
Гибкость − +
Использование токенов мало больше
Подходит для нестандартных задач не всегда да

🧠 Chain-of-thought: “Думай по шагам”

Иногда, чтобы получить правильный ответ от модели, недостаточно просто задать вопрос. Нужно попросить её подумать вслух — разбить задачу на шаги, проговорить ход рассуждений и только потом выдать результат. Такой подход называется Chain-of-thought (CoT) — «цепочка рассуждений».

📌 Пример: Промпт: “Реши пошагово: если у Пети было 12 яблок, он отдал 3 Маше, а затем поделил остаток на 3 друга, сколько получил каждый?”

Ответ модели с CoT:

У Пети было 12 яблок.
Он отдал 3 Маше → осталось 9.
9 / 3 = 3 яблока на каждого.
Ответ: 3

📚 Аналогия: решение задачи на черновике

Вспомните школьную математику. Если вы просто пишете в контрольной “Ответ: 3”, учитель может снизить балл. Почему? Потому что не видно, как вы пришли к выводу. А если вы распишете:

12 - 3 = 9
9 / 3 = 3
Ответ: 3

— видно, что вы понимаете, а не угадали.

Chain-of-thought делает то же самое: модель объясняет сама себе, прежде чем ответить.

🧠 Как это работает

LLM умеет “размышлять”, но по умолчанию она стремится к краткости. Если вы не попросите, она может сразу прыгнуть к финальному ответу — и ошибиться.

Добавив фразу “Решай пошагово”, “Подумай прежде, чем отвечать”, или “Поясни свой вывод”, вы включаете внутренний диалог модели. Это резко повышает точность в сложных задачах.

✅ Где особенно полезен CoT

  • Логика и дедукция:

    “Если А больше В, а В больше С, то кто самый маленький?”

  • Математика и проценты:

    “В магазине была скидка 25% на товар за 800 рублей. Сколько он стоит со скидкой?”

  • Пошаговый анализ текста:

    “Прочитай отзыв и выдели три причины недовольства покупателя.”

  • Инструкции с несколькими условиями:

    “Если клиент не подписался, но оставил email, предложи скидку. Если подписался — отправь благодарность.”

🔁 Сравнение: обычный промпт vs Chain-of-thought

Промпт Результат
“Сколько будет (8 + 2) × 3?” Ответ: 30 (ошибка)
“Реши пошагово: (8 + 2) × 3” Рассуждение: 8 + 2 = 10 → 10 × 3 = 30 → Ответ: 30 ✅

🔍 Даже простые вычисления становятся надёжнее, если модель “думает”.

🛠 Примеры промптов с CoT

Пример 1:

“Подумай шаг за шагом: 5 друзей делят 2 пиццы. Если каждая пицца разделена на 8 частей, сколько кусков получит каждый?”

Ответ:

2 пиццы × 8 = 16 кусков
16 / 5 = 3.2
Каждый получит по 3 куска, и ещё 1 кусок останется.
Ответ: 3 куска, 1 в остатке

Пример 2:

“Решай пошагово. В тексте сказано, что ‘Мария приехала в 8:00, а Алексей на 15 минут позже’. Во сколько приехал Алексей?”

Ответ:

Мария приехала в 8:00
Алексей — на 15 минут позже → 8:15
Ответ: 8:15

💡 Советы по применению CoT

  • Явно добавляйте фразы:

    “Поясни шаг за шагом” “Реши пошагово и обоснуй” “Сначала рассуждение, потом вывод”

  • Можно комбинировать с few-shot: сначала дать пару примеров пошаговых решений.

  • Уместно использовать в задачах, где ошибка “на лету” может испортить всё — например, в расчётах, логике, обработке условий.

🔁 Self-reflection: “Оцени свой ответ”

Иногда модель отвечает быстро, уверенно… и неправильно. Но что если попросить её саму проверить себя?

Self-reflection prompting — это приём, при котором модель сначала генерирует черновой ответ, а затем сама его перепроверяет, находит возможные ошибки и корректирует.

📚 Аналогия: вторая попытка после черновика

Представьте, что студент сдаёт контрольную. Сначала он решает задачу, а потом пересматривает решение:

«Стоп. А ведь я ошибся во втором шаге. Сейчас перепишу правильно.»

То же делает модель, если вы скажете:

«Ответь на вопрос. Затем оцени свой ответ и исправь, если нужно.»

🧠 Как это работает

По умолчанию LLM генерирует текст линейно: от начала к концу, не оглядываясь. Но если вы попросите:

  • разбить процесс на два этапа, и
  • задать себе уточняющий вопрос или провести проверку, модель способна пересмотреть свой собственный вывод — и улучшить его.

✅ Пример self-reflection-промпта

Промпт:

Вопрос: Какие страны входят в ЕС?

Сначала дай быстрый ответ. Затем проанализируй, есть ли в нём ошибки. Если есть — предложи исправленный вариант.

Ответ модели:

Ответ: Франция, Германия, Норвегия, Испания.

Проверка: Норвегия не входит в ЕС. Остальные страны — входят.

Исправленный ответ: Франция, Германия, Испания.

🔍 Когда self-reflection особенно полезен

Ситуация Почему это работает
❗ Ответ должен быть точным Модель перепроверяет сама себя, снижая риск “галлюцинации”
📋 Длинные списки Можно отловить “затесавшихся” лишних элементов
🧠 Сложные рассуждения Модель может найти логическую ошибку в цепочке
📄 Структурированные данные Можно проверить соответствие формату или требованиям

🛠 Формулы для запуска self-reflection

Включить самопроверку можно с помощью фраз вроде:

  • “Оцени свой ответ. Найди возможные ошибки.”
  • “Проверь результат и уточни, если нужно.”
  • “Дай черновой ответ, затем улучши его.”
  • “Представь, что ты проверяешь сам себя. Видишь ли ты неточности?”

🧾 Ещё примеры использования

📦 Пример 1: Проверка списка

Промпт:

Назови 5 стран, где официальным языком является испанский. Потом оцени, все ли они действительно соответствуют условию.

Ответ:

Испания, Мексика, Бразилия, Аргентина, Чили.

Рефлексия: Бразилия — португалоязычная страна, а не испаноязычная.

Исправленный список: Испания, Мексика, Аргентина, Чили, Колумбия.

💬 Пример 2: Проверка формулировки

Промпт:

Напиши деловое письмо клиенту, сообщающее об отказе в возврате средств. Затем оцени стиль письма: вежлив ли он? Не звучит ли грубо?

Ответ:

... (письмо) ...

Рефлексия: Формулировка "Вы не получите деньги обратно" звучит резко. Лучше переформулировать.

Улучшенный вариант: "К сожалению, согласно условиям, возврат в данном случае невозможен..."

⚠️ Что стоит учитывать

  • Модель может "запутаться", если первая версия уже хорошая — иногда она начнёт придумывать «ошибки на всякий случай».

  • Лучше явно указать:

    “Исправляй только в случае очевидной ошибки.”

  • Дополнительная генерация тратит токены — self-reflection немного дороже по объёму вывода.

❌ Типовые ошибки и как их избежать

1. Слишком короткий промпт

“Напиши текст.” Результат — абстрактный или банальный.

Решение: добавьте роль, цель, стиль и ограничение.

2. Непоследовательность

Сначала просим “на ты”, потом “в деловом стиле”.

Решение: заранее указать стиль общения в явной форме.

3. Ожидание конкретной формы, но не указание её

Ожидаете JSON — получаете абзац.

Решение: явно напишите:

“Ответ верни в виде JSON с полями: name, age, city.”

4. Промпт без уточнения “если не уверен — скажи”

Модель начинает галлюцинировать.

Решение: добавляйте инструкции вроде:

“Если информации нет — скажи об этом прямо.”

5. Слишком общие или абстрактные формулировки

“Сделай красиво”, “напиши гениально”, “пусть будет эффектно”.

Решение: замените метафору на конкретные критерии: стиль, длина, аудитория, формат.

❓ Частые вопросы

Q: Нужно ли всегда использовать примеры?
A: Нет. Для простых задач zero-shot подходит. Но few-shot стабилизирует результаты.

Q: Что важнее — стиль или структура?
A: Структура важнее: даже сухой текст в нужной форме полезнее “красивого, но неправильного”.

Q: Можно ли комбинировать подходы?
A: Да, и даже желательно: контекст + инструкция + примеры + формат — это основа.

📌 Итоги

Сегодня вы узнали:

  • Как строить надёжные промпты с понятной структурой
  • Почему важно указывать контекст, инструкцию, примеры и формат вывода
  • Какие типы промптов существуют и когда их применять
  • Какие ошибки встречаются чаще всего — и как их избегать

Эта тема лежит в основе всего промпт-инжиниринга. Чем лучше вы научитесь общаться с моделью, тем больше она сможет работать на вас. В следующем уроке мы разберём, как модели воспринимают таблицы, списки, JSON и Markdown — и как подать данные так, чтобы LLM их поняла.

На следующий урок