
Меня зовут Максим Никитин, я фаундер небольшой, но гордой студии разработки сложных и нетиповых проектов ITSalt. Большую часть прошлого года мы переводили разработку на агентов и по дороге собрали собственный фреймворк NaCl. Когда живёшь внутри такого процесса, начинаешь хорошо понимать, как выглядит правильный промпт. Роль, контекст, понятные критерии готовности, формат ответа, ограничения, защита от выдумок — всё это уже не вопрос вкуса, а набор требований, который держишь в голове.
Но промпты мы пишем не только на работе. Промпт для агента-диетолога, который ведёт твою диету. Промпт для программы тренировок в зале. Для поиска интересных мероприятий на выходные, для сценария детского праздника. Любая задача, где нужно нечто большее, чем найти ответ на вопрос, заслуживает такой же вдумчивой постановки, как производственная задача в программировании. И вот тут начинается боль: написать такой промпт из головы, ничего не упустив, — это каждый раз минут двадцать сосредоточенной работы. На третьем промпте за день начинаешь срезать углы, а потом удивляешься, почему агент-диетолог разрешил тебе торт.
Поэтому я собрал скилл, который делает эту рутину за меня. Называется pepper-prompt-engineer. Скилл — это папка с инструкциями (SKILL.md плюс ресурсы), которую Claude сам подгружает, когда задача совпадает с описанием; формат Anthropic Agent Skills. Ты описываешь задачу человеческими словами — он собирает из неё полноценный промпт по всем правилам.
Что именно делает скилл
Скилл не решает вашу задачу. Он собирает промпт для её решения.
Пишете ему «напиши парсер на Python» — он не выдаёт код. Он выдаёт готовый промпт, который вы отдадите другой модели, и уже она напишет парсер. Просите «придумай слоганы» — получаете не слоганы, а промпт для генерации слоганов.
Чем плох промпт, написанный на бегу
Я выписал, чем именно болеют промпты, которые мы пишем второпях. Получилось пять болячек.
|
Что не так |
Чем это аукается |
|---|---|
|
Размытая цель («сделай хорошо») |
Модель не понимает, что считать готовым результатом, и выдаёт что-то среднее |
|
Не учтены особенности модели |
Промпт, заточенный под Claude, хуже работает на Gemini, и наоборот |
|
Забыли про проверку фактов и расчёты |
Модель сама не догадается перепроверить дату или посчитать сумму без ошибки |
|
Нет защиты от выдумок |
Когда данных не хватает, модель скорее придумает, чем спросит |
|
Модель не сверяется с заданием |
Перед ответом она не проверяет, выполнила ли всё, что просили |
На каждую из этих болячек в скилле есть конкретное лекарство.
Из чего собирается промпт: десять блоков
За основу взят известный публичный фреймворк CRAFT — Context, Role, Action, Format, Target (разбор). Мы дополнили его тем, чего в классике не хватало для современных моделей, и в итоге любой промпт на выходе — это десять блоков в одном и том же порядке.
|
# |
Блок |
Что в нём |
|---|---|---|
|
1 |
Роль |
Кем модель должна себя считать и для кого пишет ответ |
|
2 |
Задача |
Что сделать — одним коротким предложением |
|
3 |
Контекст |
Фон, входные данные, в какой области работаем |
|
4 |
Критерии готовности |
3-5 проверяемых признаков, что результат готов |
|
5 |
Шаги |
Что делать по порядку |
|
6 |
Ограничения |
Чего НЕ делать и что делать при нехватке данных |
|
7 |
Способ рассуждения |
Как модели думать над задачей |
|
8 |
Формат ответа |
Точная структура, длина, тон |
|
9 |
Примеры |
1-3 образца желаемого ответа |
|
10 |
Самопроверка |
Что модель обязана проверить перед тем, как ответить |
Восемь блоков из десяти стоят всегда, даже если внутри одна строчка. Выбросить разрешено только шаги — на совсем простой задаче, и примеры — если формат понятен без образцов.
Два блока стоит объяснить подробнее, потому что именно они закрывают самые частые провалы.
Критерии готовности. Правило одно: критерий должен быть таким, чтобы его можно было проверить, как тест. «Текст должен быть интересным» — так нельзя, интересность не измеришь. «Не длиннее 280 символов, без хэштегов, с одним вопросом в конце» — можно: открыл, посчитал, проверил.
Самопроверка. Тот же список критериев, повёрнутый к модели как чеклист на выходе. Прежде чем выдать ответ, модель обязана пройтись по нему: уложилась в 280 символов, хэштегов нет, вопрос в конце есть. Не сошлось с заданием — переделывай, не показывай.
Как скилл обрабатывает запрос
Когда вы кидаете скиллу задачу, он не бросается сразу писать, а проходит один и тот же маршрут.
Пара пояснений к развилкам.
Если вы просите «собери мне CRM с аналитикой и биллингом», скилл не делает вид, что упакует это в один промпт. Он предлагает выбор: собрать промпт под урезанную первую версию, разбить задачу на части самому, либо собрать как есть — с пометкой, что результат будет поверхностным. Дальше решает Наполеон за клавиатурой: сохранить наполеоновские планы или всё-таки начать с малого.
Вопросы скилл задаёт только тогда, когда без ответа промпт не собрать: например, вы ссылаетесь на «мой код», которого он не видел. Всё остальное — роль, тон, длину — он решает сам и записывает в секцию «что я решил за тебя», чтобы можно было поправить. Идеальный случай — ноль вопросов.
И последний шаг перед выдачей — проверяльщик. Это Python-скрипт, который прогоняет готовый промпт через 18 автоматических проверок. Например: все обязательные блоки на месте; есть правило «не выдумывай при нехватке данных»; промпт уложился в лимит длины; нет расплывчатого «сделай качественно» без метрики; для Claude — нет капса и «КРИТИЧЕСКИ ВАЖНО». Среди тестов скилла есть и проверка наоборот: на обычную просьбу «напиши факториал» он не должен среагировать вовсе. Помощник, который превращает каждую мелкую просьбу в проект, — это коллега, который на «передай соль» присылает регламент сервировки стола.
Как это выглядит вживую
Покажу на двух настоящих промптах, которые собрал скилл, — без купюр, как есть.
Первая задача — почти та самая программа детского праздника из вступления, только масштабнее: спроектировать программу для детей 10-13 лет в палаточном лагере на Селигере, целевая модель — Claude. Вторая — из другой оперы: сгенерировать рекламные концепции для детского бренда одежды под AI-видеопайплайн, целевая модель — GPT.
Сразу отвечу на вопрос, который иначе станет первым комментарием: да, скилл собирает промпты на английском. Инструкции на нём модели исполняют стабильнее, и они короче в токенах, а язык ответа жёстко прибит первой строкой — Respond to the user in Russian.
Скрытый текст
Respond to the user in Russian. If you need to ask for clarifications, ask them in Russian.<role>You are a senior programme designer for Russian wilderness family camps with 10+ years of experience designing multi-day narrative programmes for tween groups. Your audience: a parent-organiser planning a programme for 12-16 children aged 10-13 at a 10-day tent camp on a forested island on Lake Seliger.</role><task>Design 4 distinct 8-day programme concepts for the 10-13 age group, then — after the user selects one — produce a full day-by-day plan for the selected concept.</task><context>Setting: tent camp on a forested island, Lake Seliger. 10 days on site, programme runs 8 days. Total population ~100 (children + parents/adults, children outnumber adults).Target group: 12-16 children aged 10-13, mixed boys and girls.Camp internal currency: "гаечки" — earned by children helping adults (kitchen, firewood, errands, cleanup). Spent at the "аукцион" on the penultimate day on lots (treats, crafts, certificates like late lights-out or motorboat ride). Currently earning is informal.Existing programme elements the new concepts MUST coexist with, NOT duplicate:- Daily activities open to 10-13s: kayak school + kayak trip for pirozhki, SUP, quidditch (one-day event), theatre circle, plein-air painting, workshops for all (sewing, leather, штампы), woodworking, choir, astronomy, film club, biology/survival circle ("Любопыты и выживатели")- Camp-wide events: квартирник (D1), camp-quest with rules (D2), theatre day, fair + auction (penultimate day), final concert, kayak competition, "тайный друг" runs across all days- Free morning and evening slots are available for new programmingWhat is needed: a unifying narrative that turns each day into a constructive arc for the tweens, with hands-on output and a built-in гаечки earning mechanic.Distribution required across the 4 concepts:- 2 concepts COMPETITIVE — group splits into 2-3 teams competing for points / гаечки- 2 concepts SINGLE-GROUP — all 12-16 act together, optionally as a subgroup-with-mission inside the wider camp (e.g. "pirates who secretly make camp life more fun")Acceptable mechanics to draw from: zarnitsa-style team games, build-and-sleep-in-own-shelter, friendly non-humiliating pranks on the wider camp, secret missions, scavenger hunts, in-camp economy add-ons, cumulative crafting projects.</context><success_criteria>- Each concept has: title, one-line pitch, format (competitive/single-group), unifying narrative, daily backbone (one sentence per day × 8), embedded гаечки mechanic, final tangible output, integration with camp-wide events- Each concept is mechanically distinct from the other three (different core verb)- Each concept assumes 1.5-2 hours of dedicated programme time per day plus optional evening time- Гаечки mechanic in each concept must reward genuine help to adults (kitchen prep, firewood, dish duty, errands), not mere participation in the programme itself- Concepts are feasible on a forested island without external supply runs and without electricity/internet</success_criteria><actions>STAGE 1 (this response):1. Generate 4 distinct concepts using the creativity_protocol below2. Output 4 numbered concept cards in the format specified in output_format3. End with: "Какую концепцию детализировать? Ответь номером 1-4 (или назови комбинацию)."4. STOP and wait for user selectionSTAGE 2 (next user message naming the chosen concept):1. Produce a day-by-day plan: Day 1 through Day 82. For each day specify: morning block, afternoon block, evening block (if used), materials needed, adult roles required, гаечки earning opportunities that day, integration with camp-wide events that day3. Append: pre-camp preparation list (materials, props, printed handouts), top 3 risks with mitigations, bad-weather fallback plan</actions><constraints>- Do not propose activities that duplicate the existing master activities listed in context- Pranks must be reversible, non-targeted at specific individuals, never humiliate- Гаечки must come from real help to adults — not from programme participation- All physical activities must be safe without specialised equipment beyond what a family wilderness camp owns- Do not assume internet, mobile devices, or electricity- If you lack data: state what is missing and ask ONE clarifying question. Do not fabricate facts about the camp.</constraints><creativity_protocol>For each of the 4 concepts, follow this protocol to ensure genuine diversity (Misaki & Akiba, ICLR 2026):Step 1. Generate a fresh random string (16+ chars: mix uppercase, lowercase, digits, symbols) inside <random_string>...</random_string>. Generate internally.Step 2. Inside <thinking>...</thinking>, split the string into 4 segments. For each segment apply Sum-Mod (sum of ord(c) mod N) against these candidate lists:- Core verb: [build / hunt / infiltrate / produce / explore / chronicle / trade / defend]- Tonal frame: [historical / fantastical / detective / scientific / theatrical / military / piratical / journalistic]- Group format: [3 teams competing / 2 teams competing / single squad with mission / single squad as guild]- Output type: [physical structure / artefact set / story product / event for the wider camp / map or archive]Show arithmetic explicitly. Generate a NEW string for EACH concept.Distribution constraint: exactly 2 of the 4 final concepts must end COMPETITIVE, exactly 2 SINGLE-GROUP. If the random derivation breaks the 2+2 ratio, regenerate the Group format field for the offending concept until the ratio holds. Log the regeneration in <thinking>.Step 3. Build the full concept around the seed and output inside <answer>...</answer>.</creativity_protocol><output_format>STAGE 1 — for each concept (inside <answer>):### Концепция N. [Название]- Питч: [одна строка]- Формат: [соревновательный 2-3 команды / единая группа]- Нарратив: [2-3 предложения о сквозной истории]- Каркас по дням (Д1-Д8): [одно предложение на каждый из 8 дней]- Механика гаечек: [как именно дети зарабатывают на помощи взрослым в рамках этой концепции]- Финальный осязаемый результат: [что покажут к концу 8 дня]- Интеграция с лагерем: [как переплетается с квартирником, театральным днём, ярмаркой, аукционом, концертом, тайным другом]После 4 карточек — строка с вопросом выбора.STAGE 2 — структура из actions, по дням.</output_format><verification>Before Stage 1 output:- [ ] Exactly 4 concepts- [ ] Exactly 2 competitive + 2 single-group- [ ] Each concept uses a different core verb- [ ] Гаечки mechanic in each concept involves real help to adults- [ ] No concept duplicates an existing master activity- [ ] Each daily backbone has exactly 8 entries</verification>
Скрытый текст
Respond to the user in Russian. If you need to ask for clarifications, ask them in Russian.# PersistenceKeep working until all 5 concepts are fully generated and broken down. Do not stop after one or two. Do not hand back to the user with a question unless a critical brand fact is genuinely missing — make reasonable assumptions, mark them, and continue.# RoleYou are a senior creative director and concept writer for brand films, specializing in short-form advertising built for AI video-generation pipelines. You think in lateral associations, genre subversion, and unexpected reveals. Your audience is the owner of a children's clothing & footwear brand who assembles ads from AI tools: Midjourney for characters, Nano Banana Pro for edits, Seedance 2.0 (multi-reference) and Kling for video.# TaskGenerate 5 distinctly different, unconventional advertising concepts (up to 3 minutes each) for a children's clothing & footwear brand — each connecting to the product through a non-obvious creative mechanic — and break each into AI-generatable beats.# ContextThe brand sells children's clothing and footwear. Brand specifics (name, hero product, target age, USP, tagline) may be partly unknown — design concepts that work generically and mark where brand elements slot in: [BRAND_NAME], [HERO_PRODUCT], [TAGLINE].The owner explicitly does not want safe, on-the-nose ads (smiling kids in a field). The most valued concepts are ones where:- the film appears to be about something else entirely and only mid-way reveals it advertises children's clothing; or- the film is overtly about another subject but links to the product through a clever metaphor or association.The 5 concepts must span different genres and registers — do not let them collapse into only "playful" or only "family."## Production realityThe final video is assembled from many short AI clips (~5–10s each). Characters are created as Midjourney stills and kept consistent via reference images; clips are generated in Seedance 2.0 (multi-reference) and Kling.# Success Criteria- 5 concepts, each in a clearly different genre/register (the set might mix thriller-teaser, nature-doc, sci-fi, mockumentary, fairy tale, noir, sports, object-POV — no two alike).- At least 3 of the 5 use a mid-film reveal or lateral-association mechanic, not a literal clothing ad.- Every beat is generatable with the stated pipeline: no readable on-screen text, no precise finger-level manipulation, no large consistent crowds, no unbroken takes over 10s.- Each concept fits within 3 minutes and decomposes into discrete, individually-generatable shots.- Each concept names the exact moment and method by which the clothing/footwear link lands.# Actions1. For each concept, run the Creativity Protocol below to seed divergent choices across: genre; connection mechanic (mid-reveal / metaphor / association / POV-switch / before-after / object-as-hero); setting; tone; twist.2. Before finalizing, branch two possible directions internally and keep the more unconventional one.3. Break the chosen concept into 6–12 beats; per beat note: visual, camera move, which element needs a Midjourney character reference, recommended tool (Seedance / Kling), audio/music cue.4. Flag any beat that is technically risky for AI video and propose a simpler framing.5. End each concept with the brand-reveal beat and a [TAGLINE] slot.# Creativity ProtocolFor each independent variant, follow this protocol to ensure genuine diversity (bypasses RLHF mode collapse — Misaki & Akiba, ICLR 2026):1. Generate a fresh random string (16+ chars: mix uppercase, lowercase, digits, symbols) inside <random_string>...</random_string>. Generate internally — do not call external tools.2. Derive the variant deterministically inside <thinking>...</thinking>: - Uniform choice among N options: result = sum(ord(c) for c in string) mod N - Creative composition: split the string into 2–5 non-overlapping segments; for each segment pick one component (genre / connection mechanic / setting / tone / twist) via Sum-Mod; assemble.3. Output ONLY the final variant inside <answer>...</answer>. No commentary.Show all arithmetic explicitly. Generate a NEW string for EACH of the 5 concepts — reusing strings destroys statistical independence.# Constraints- Reserve at most 2 of the 5 for a more direct emotional approach; the rest must be non-literal.- Do not invent brand facts (name, claims, prices) — use placeholders and mark them.- Avoid beats requiring readable text, precise small-object hand interaction, takes over 10s, or large crowds with consistent faces.- If you lack data to complete the task: state explicitly what is missing and ask ONE clarifying question. Do not fabricate facts.# Reasoning ModeFor each concept: produce divergence via the Creativity Protocol, then a brief two-branch comparison to select the more original direction. Show only the SSoT computations the protocol requires; keep other reasoning concise.# Output FormatFor each of the 5 concepts, output in Russian:- Название + логлайн (one line)- Жанр / приём связи с брендом + at which beat the reveal lands- Тон и эмоциональная арка- Раскадровка по битам — compact table: Бит | Визуал | Камера | Реф/персонаж | Инструмент | Звук- Технические риски и упрощения (1–3 bullets)- Финальный бренд-бит + слот [TAGLINE]- Рекомендуемый хронометраж и формат (e.g. 9:16 / 16:9)After the 5 concepts, add one line offering to expand any chosen concept into a full shot-by-shot list (each 5–10s clip with ready generation prompts for Seedance/Kling).# Verification- Are all 5 genres/registers actually different from each other?- Do at least 3 concepts use a non-literal connection mechanic?- Is every beat generatable within the stated pipeline and shot-length limits?- Does each concept name the exact reveal moment and fit within 3 minutes?
На этой паре видно всё, о чём дальше пойдёт речь. Первый промпт собран под Claude — блоки размечены XML-тегами. Второй под GPT — те же по смыслу блоки оформлены заголовками Markdown, и сверху добавлена секция Persistence: работай, пока не выдашь все 5 концепций, не останавливайся после двух. В обоих стоит правило «не хватает данных — спроси, а не выдумывай», в обоих в конце чеклист самопроверки, и в обоих подключился протокол разнообразия со случайными строками — о нём ниже отдельно. Ни одной из этих вещей в исходной формулировке задачи не было: их принёс скилл.
Один промпт, четыре модели, разное оформление
Здесь самое время сказать про доказательность. Основную часть приёмов мы взяли из исследований и документации вендоров — Anthropic, OpenAI, Google: каждый прямо пишет, как лучше формулировать запросы под его модель. Часть — наши собственные инженерные решения, которые на практике дают хорошие результаты.
Те же десять блоков оформляются по-разному в зависимости от того, для какой модели собирается промпт.
|
|
Claude |
GPT |
Gemini |
DeepSeek (chat-версия) |
|---|---|---|---|---|
|
Как размечать блоки |
XML-теги |
Заголовки Markdown |
Заголовки Markdown |
Любой из двух |
|
Тон формулировок |
мягкий, без капса |
обычный |
прямой, командный |
обычный |
|
Писать ли «думай по шагам» |
нет |
reasoning-моделям — нет, классическим полезен план |
нет |
да |
-
Claude любит, когда блоки размечены XML-тегами — прямая рекомендация Anthropic. А вот давить капсом и фразами «КРИТИЧЕСКИ ВАЖНО» на него бесполезно: модель начинает выслуживаться и делает только хуже.
-
GPT на длинных задачах заметно выигрывает от инструкции «не останавливайся, пока не доведёшь до конца» — по гайду OpenAI такие напоминания дали им около +20% на внутреннем бенчмарке. Там же, кстати, классическим GPT рекомендуют просьбу сначала составить план — мягкую форму того самого «думай по шагам»; reasoning-моделям она уже не нужна.
-
Gemini лучше понимает прямые командные формулировки, а ключевые требования просит ставить в начало — рекомендации Google.
-
DeepSeek в чат-версии — единственный случай, где имеет смысл написать «думай по шагам»: сам он этого не делает.
Дополнительные куски, которые подключаются по ситуации
Кроме десяти основных блоков скилл по ключевым словам в задаче добавляет в промпт дополнительные инструкции. Увидел в задаче даты, имена, цены или слово «актуально» — добавил требование проверять факты поиском, а непроверенное честно помечать. Увидел вычисления, таблицы или финмодель — добавил требование считать кодом, а не «в уме». Приложены файлы или картинки — добавил дисциплину опираться на их содержимое, а не фантазировать. Четвёртый кусок — про разнообразие вариантов, о нём ниже отдельно.
Важная деталь: скилл знает не только когда добавлять эти куски, но и когда не добавлять. «Переведи 5 кг в фунты» — не повод тащить в промпт вычисления кодом, это одно действие. «Придумай слоган» — не повод включать режим разнообразия, пока не попросили несколько вариантов. Без таких стоп-сигналов каждый простой промпт обрастал бы лишними инструкциями.
Как заставить модель выдавать действительно разные варианты
У всех, кто плотно работает с моделями, давно было ощущение: попросишь придумать 10 вариантов чего угодно — получишь десять почти одинаковых. Так вот, это больше не ощущение. Недавно исследователи подтвердили эффект формально: модели после дообучения действительно жмутся к одному усреднённому ответу, а если попросить «выбирай вариант А в 70% случаев, Б в 30%» и прогнать сто раз — расклад поедет, потому что честно бросать кубик модель не умеет.
В той же работе (arXiv:2510.21150) предложили и лечение, неожиданно простое. Модель сначала генерирует случайную строку — просто чтобы было от чего оттолкнуться, как от брошенной монетки, — и строит ответ уже на её основе. Главное правило: новая случайная строка на каждый вариант, иначе кубик опять застрянет на одной грани. Мы взяли эту работу за основу и положили её механику в соответствующую секцию промпта. Когда режим включён, скилл подсвечивает его в ответе отдельной пометкой, чтобы вы не приняли служебную случайную строку за сбой.
Почему скилл не угрожает модели увольнением
В собранных промптах вы не найдёте «сделай идеально, или я тебя уволю» и «моя бабушка расплачется, если выйдет плохо». Эти заклинания — из той же эпохи, что и «думай шаг за шагом»: три года назад им приписывали лишние проценты качества, а на современных моделях, которые рассуждают сами, они в лучшем случае бесполезны, в худшем — мешают. Приёмы, которые все заучили как мантры, успели превратиться в антипримеры. И так будет с любым приёмом: правила промптинга устаревают вместе с поколениями моделей.
Скилл сам в интернет не лазает и за новостями не следит — знание о том, что сейчас работает для какой модели, зашито внутрь. Поэтому мы обновляем его сами вслед за выходом новых рекомендаций и фиксируем каждое изменение в changelog на GitHub. Скачанный скилл — это снимок на момент скачивания, так что имеет смысл время от времени заглядывать в репозиторий и забирать свежую версию.
Что в итоге
Правильный контекст — это львиная доля успеха промпта. Если просишь модель рассказать про кран, ей нужно чётко сказать: речь про башенный кран на стройке — или ты ждёшь анекдот про сантехника. Всё устройство скилла — десять блоков, проверки, вопросы — по сути один механизм, который не даёт забыть рассказать модели, про какой кран речь.
Хороший промпт не случается — он собирается. Скилл лежит в репозитории PepperSkills: скачайте архив скилла, установите через штатный механизм добавления скиллов, опишите задачу своими словами — остальное он сделает сам. Соберёт плохо — пишите issue!
ссылка на оригинал статьи https://habr.com/ru/articles/1046501/