AI · 6 мин чтения

Промпт: из чего он состоит и почему от структуры зависит ответ

Промпт задаёт модели три вещи одновременно: что она должна сделать, в каком контексте и в каком виде выдать результат. За несколько лет работы с GPT, Claude и локальными моделями я вывел для себя правило: качество ответа процентов на семьдесят зависит не от выбора модели, а от того, как собран запрос. Когда я подключаю Claude API к боту на aiogram или строю RAG-поиск по базе знаний клиента, один и тот же вопрос, заданный в свободной форме и оформленный по чёткой структуре, выдаёт совершенно разные по пользе ответы. Дальше разберу, из каких блоков состоит рабочий промпт и почему порядок этих блоков решает больше, чем формулировки внутри них.

Из каких блоков состоит промпт

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

  • Роль. Кем модель должна себя вести: редактором, юристом, аналитиком данных, ассистентом поддержки. Роль задаёт словарь и уровень детализации ответа.
  • Контекст. Факты, которые модель не может знать сама: данные о продукте, фрагмент документа, история переписки, ограничения проекта.
  • Задача. Конкретное действие: не «расскажи про доставку», а «сформируй ответ клиенту про сроки доставки СДЭК по его региону на основе таблицы ниже».
  • Формат ответа. JSON, таблица, три пункта списка, текст без markdown - модель держит формат заметно лучше, если он описан явно, а не подразумевается.
  • Ограничения. Что нельзя делать: не придумывать цифры, не выходить за 200 слов, не использовать данные вне контекста.
  • Примеры. Эталонный ответ или пара «вопрос-ответ», особенно если формат нестандартный.

Когда я собираю системный промпт для чат-бота с базой знаний, все шесть блоков идут в системную часть, а в пользовательскую попадает только сам вопрос. Для разовой задачи в интерфейсе Claude или ChatGPT обычно хватает роли, контекста и задачи, формат и ограничения можно держать в голове и поправить руками, если ответ не подошёл.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Почему порядок частей запроса к нейросети меняет ответ

Модель читает промпт последовательно и держит больший вес у того, что стоит ближе к концу запроса и в самом начале, а середина длинного текста теряется первой. Это видно на практике при работе с RAG: если в промпт подмешать десять фрагментов документа, а инструкцию по формату ответа поставить в самое начало, до документов, модель к третьему абзацу успевает про неё забыть.

Правило, которое я применяю в проектах: контекст (документы, данные, история переписки) идёт первым, задача и формат ответа - последними, прямо перед вопросом пользователя. Так модель видит инструкцию, когда уже «прогрелась» на контексте, и не теряет её за объёмом данных.

Промпт без структуры Промпт со структурой
Роль, задача и формат перемешаны в одном абзаце Роль, контекст, задача и формат разнесены на отдельные блоки
Модель додумывает формат ответа сама, результат нестабилен от запуска к запуску Формат задан явно, ответ повторяем при одинаковом входе
Длинный контекст «съедает» инструкцию, стоящую перед ним Инструкция стоит после контекста, модель её не теряет
Ограничения приходится добавлять постфактум, правкой готового ответа Ограничения заданы заранее, меньше повторных запросов

На объёмных задачах разница ощутима в деньгах, если считать в токенах: неструктурированный промпт часто требует двух-трёх итераций с уточнениями, а при работе через API это лишние токены в счёте за каждый повторный запрос.

Системный промпт и пользовательский: разная работа с контекстом

В API Claude и OpenAI промпт физически делится на роли: system, user, assistant. Системная часть задаёт модели устойчивое поведение на весь диалог, тон, границы, формат, доступные инструменты. Пользовательская меняется от сообщения к сообщению.

Смешивать их - частая ошибка при первой сборке бота. Если инструкцию «отвечай только по базе знаний, не выдумывай факты» положить в пользовательское сообщение, при следующем вопросе клиента она может потерять вес, потому что модель обрабатывает диалог целиком, а системная часть держит приоритет стабильнее реплики из середины переписки. В системном промпте это правило действует на весь диалог по умолчанию.

Когда я собираю бота на aiogram с интеграцией Claude API, системный промпт обычно занимает 40-60 строк: роль ассистента, список того, что он умеет и не умеет, формат ответа под мессенджер, короткие абзацы без markdown-таблиц, которые Telegram не рендерит, и жёсткое ограничение по теме разговора. Пользовательская часть - только текст от клиента плюс, если нужно, последние сообщения переписки для контекста.

Для задач сложнее чат-бота с FAQ, например ассистента, который достаёт данные из CRM и отвечает с учётом истории заказов, структура промпта усложняется, и здесь я закладываю отдельный слой на разработку AI-интеграций с Claude API и RAG, а не пытаюсь впихнуть всю логику в один системный промпт без внешней памяти.

Примеры и техники: когда промпту нужен few-shot

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

Техника Что это Когда применяю
Zero-shot Задача без примеров, только описание Простые однозначные запросы: перевод, короткое summary, классификация
Few-shot Один-три примера «вход - ожидаемый выход» прямо в промпте Нестандартный формат ответа, специфичный стиль, парсинг в строгую структуру
Chain-of-thought Просьба рассуждать по шагам перед финальным ответом Расчёты, многошаговая логика, задачи с условиями
Структурные теги Разметка частей промпта тегами вроде <context>, <task>, <format> Длинные промпты с несколькими источниками данных, RAG-системы

Few-shot особенно выручает, когда нужно, чтобы модель стабильно возвращала JSON нужной формы для дальнейшей обработки скриптом. Я так делаю в связках с n8n: промпт содержит два примера входного текста и точного JSON на выходе, и нода дальше по цепочке разбирает результат без дополнительных проверок на битый формат. Без примеров модель через раз меняет названия полей или добавляет пояснение перед JSON, и это ломает автоматизацию.

Частые ошибки в структуре промпта

Список того, что чаще всего чиню в чужих промптах на консультациях.

  • Задача сформулирована через отрицание. «Не пиши длинно» модель понимает хуже, чем «уложись в 100 слов», положительная формулировка работает надёжнее.
  • Формат ответа не описан явно. Ожидается таблица, а модель выдаёт текст, потому что нигде не сказано, в каком виде нужен результат.
  • Контекст без источника. В промпт вставлен кусок текста без пометки, что это цитата или данные, и модель путает его с частью инструкции.
  • Один промпт на две задачи. «Переведи текст и заодно проверь орфографию» размывает фокус, лучше разбить на два вызова или на две чётких секции.
  • Нет ограничения на выдумывание фактов. Для задач с базой знаний фраза «отвечай только на основе предоставленного контекста, если ответа нет - сообщи об этом» заметно снижает число придуманных ответов.
  • Инструкция теряется в объёме контекста. Актуально для RAG: если инструкция стоит перед пятью абзацами документов, к концу модель учитывает её уже не так строго.

Каждая из этих ошибок чинится без смены модели, простой перестановкой и уточнением блоков. Время экономится именно на этом этапе, а не на подборе более дорогой модели под ту же задачу.

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

Чем промпт отличается от обычного вопроса нейросети?

Формально ничем, любой ввод в чат уже промпт. Разница в том, что случайный вопрос модель дополняет предположениями, а собранный по структуре запрос убирает пространство для догадок: роль, контекст, формат и ограничения заданы заранее, и модели не приходится решать за пользователя, что он имел в виду.

Нужно ли писать промпт на английском для лучшего результата?

Для Claude и GPT разница в качестве между русским и английским промптом на моей практике минимальна для большинства задач. Английский иногда даёт небольшой выигрыш в задачах с кодом или узкоспециализированной терминологией, но структура запроса влияет на результат сильнее, чем язык, на котором она написана.

Сколько должен весить системный промпт для чат-бота?

Зависит от задачи. Для простого FAQ-бота хватает 15-20 строк: роль, тема, формат, ограничения. Для ассистента с доступом к базе знаний или CRM системный промпт у меня обычно вырастает до 40-80 строк за счёт правил обращения с контекстом и примеров формата ответа. Дальше этого объёма логику разумнее выносить во внешние инструменты, а не раздувать один текстовый блок.

Как проверить, что структура промпта реально работает?

Прогоняю один и тот же промпт на 10-15 разных входных данных и смотрю на стабильность формата и фактов в ответах. Если структура рабочая, ответы отличаются содержанием, но не расползаются по формату. Если формат каждый раз новый, значит, инструкция сформулирована нечётко или стоит не на том месте в тексте промпта.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно