AmigaОбучение ИИ
Модуль 1 · Основы · урок 2 из 13

Базовая структура промпта

9 мин чтения▶ есть видеоверсия

Когда вы пишете в чат «переведи это на английский», вам кажется, что вы отправили одну строку. На самом деле модель получает структуру: системные инструкции, историю диалога с разметкой «кто говорил» и ваш новый ход. Понимание этой структуры — фундамент всех приёмов курса. Без него непонятно, куда класть правила, почему модель «забывает» инструкции и что такое системный промпт.

Запрос — это список сообщений

Claude работает через Messages API: вы отправляете список сообщений, модель генерирует следующее. У каждого сообщения есть роль — user (человек) или assistant (модель) — и содержимое. Ключевых правил два: сообщения чередуются, и первое всегда от пользователя.

Когда вы ведёте диалог в чате, приложение за вас собирает этот список: ваш первый вопрос, ответ модели, второй вопрос, второй ответ. Каждый раз, когда вы пишете новое сообщение, модели уходит весь список с начала. Она не «помнит» разговор — она читает его заново целиком. Отсюда два следствия. Первое: всё, что вы написали выше, влияет на ответ ниже, даже если вы об этом забыли. Второе: очень длинный диалог — это очень длинный запрос, и модель может уделить последним инструкциям меньше внимания, чем хотелось бы.

Для разработчика это выглядит так:

python
import anthropic

client = anthropic.Anthropic()

response = client.messages.create(
    model="claude-opus-5",
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "Назови три риска при миграции на новую версию React."},
    ],
)
print(response.content[0].text)

Кроме messages обязательны model (какую модель вызывать) и max_tokens (жёсткий потолок длины ответа — модель может остановиться раньше, но не позже, причём обрыв возможен посреди слова). Актуальные имена моделей и параметры — в документации.

Системный промпт

Кроме сообщений есть отдельный параметр system. Это текст, который модель читает до начала диалога: кто она, что за задача, какие правила соблюдать. Системный промпт не участвует в чередовании ролей и не является «сообщением», это скорее рамка для всего разговора.

python
response = client.messages.create(
    model="claude-opus-5",
    max_tokens=1000,
    system="Ты — тимлид тестирования в агентстве продуктовой разработки. "
           "Отвечай коротко, по делу, без вводных фраз. "
           "Если в вопросе не хватает данных, сначала задай уточняющий вопрос.",
    messages=[
        {"role": "user", "content": "Как проверить форму оплаты?"},
    ],
)

Что класть в системный промпт, а что в сообщение пользователя? Рабочее правило: в system — то, что не меняется от запроса к запросу (роль, тон, общие правила, формат ответа по умолчанию), в user — конкретная задача и данные для неё. Модели хорошо следуют инструкциям из системного промпта, но это не магия: правило из user тоже сработает. Разница в том, что системный промпт — постоянная рамка, а сообщение — разовый ход.

В чате Claude аналог системного промпта — инструкции проекта: вы один раз описываете, кто вы и как хотите получать ответы, и это применяется ко всем разговорам внутри проекта. Если проектов нет, роль системного промпта играет первое сообщение с правилами — работает почти так же.

Ход ассистента: зачем он вам

Роль assistant — это ответы модели, и в чате вы их не пишете. Но через API вы можете вставить в историю любые сообщения от имени ассистента. Это полезно в двух случаях.

Первый — примеры. Пара «вопрос пользователя — идеальный ответ ассистента» перед реальным вопросом показывает модели, чего вы ждёте. Об этом отдельный урок «Примеры в промпте».

Второй — цепочки. Вы берёте ответ модели из первого вызова и подставляете его как ход ассистента во второй, а следом задаёте новый вопрос. Так строятся многошаговые сценарии, см. «Цепочки промптов».

Раньше был и третий приём: последнее сообщение в списке делали ассистентским и оставляли незаконченным — например, писали открывающий тег <answer> или скобку { — и модель продолжала с этого места. Это называлось «предзаполнением» (prefill). На текущих моделях Claude, начиная с поколения 4.6, предзаполнение последнего хода не поддерживается: запрос вернёт ошибку. Всё, что раньше решали префиллом (формат, отсутствие вступлений), теперь решается прямыми инструкциями и структурированным выводом. Мы упоминаем приём только для того, чтобы вы узнали его в старых статьях и промптах и не тратили на него время.

Параметры, о которых стоит знать

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

max_tokens — уже упоминали: не бюджет, а потолок. Ставьте с запасом, иначе получите обрезанный ответ.

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

Как это выглядит в работе

Аналитик готовит промпт для разбора писем клиентов. В системный промпт он кладёт: кто модель (ассистент аналитика), формат ответа (список требований с приоритетами), правила (не додумывать, чего нет в письме). В сообщение — само письмо и просьбу «извлеки требования». Завтра письмо другое, системный промпт тот же. Через неделю формат надо поменять — правится одно место, а не десять чатов.

Попробуйте сами

10–15 мин на рабочем месте
  1. В новом чате добейтесь от Claude, чтобы он просто посчитал от одного до трёх — и ничего больше. Обратите внимание, сколько лишнего он добавляет по умолчанию и как формулировка запроса это меняет.
  2. Создайте проект в Claude (или начните чат с сообщения-инструкции) с текстом вроде: «Отвечай как стажёр-аналитик в первый рабочий день: осторожно, с оговорками, задавая уточняющие вопросы». Задайте вопрос «Сколько времени займёт редизайн главной страницы?» и сравните с ответом без инструкции.
  3. Если у вас есть доступ к консоли: соберите там тот же запрос, разнеся роль в поле системного промпта, а задачу — в сообщение. Выставьте температуру 0 и 1, прогоните по три раза каждую, посмотрите на разброс.

Коротко

  • Запрос — это список сообщений с ролями user и assistant; роли чередуются, первое — от пользователя.
  • Модель каждый раз читает весь диалог заново: всё написанное выше влияет на ответ ниже.
  • Системный промпт — постоянная рамка: роль, тон, правила. В чате его роль играют инструкции проекта.
  • Ход ассистента можно подставлять для примеров и цепочек; предзаполнение последнего хода на новых моделях не работает.
  • max_tokens — потолок, а не бюджет; temperature — степень случайности.

Видеоверсия

Сценарий озвучки · 464 слова, ≈ 4 мин

Когда вы пишете в чат «переведи на английский», кажется, что вы отправили одну строку. На самом деле модель получает структуру. Разберём её, потому что на ней держится весь курс.

Запрос к Claude — это список сообщений. У каждого есть роль: «пользователь» или «ассистент». Сообщения чередуются, и первое всегда от пользователя. Когда вы ведёте диалог, приложение собирает этот список за вас: ваш вопрос, ответ модели, следующий вопрос, следующий ответ. И вот что важно: каждый раз, когда вы пишете новое сообщение, модели уходит весь список с самого начала. Она не помнит разговор — она читает его заново целиком. Поэтому всё, что вы написали выше, влияет на ответ ниже, даже если вы об этом забыли. И поэтому в очень длинном диалоге модель может уделить последним инструкциям меньше внимания.

Кроме сообщений есть отдельная часть — системный промпт. Это текст, который модель читает до начала диалога: кто она, какая задача, какие правила. Он не участвует в чередовании ролей, это рамка для всего разговора. Рабочее правило простое: в системный промпт кладём то, что не меняется от запроса к запросу — роль, тон, формат. В сообщение пользователя — конкретную задачу и данные. Например, аналитик один раз описывает в системном промпте, что модель — его ассистент, что нужен список требований с приоритетами и что додумывать ничего нельзя. А письмо клиента каждый раз новое. В чате Claude аналог системного промпта — инструкции проекта. Если проектов нет, подойдёт первое сообщение с правилами.

Теперь про роль ассистента. В чате вы её не пишете, но через API можно вставить в историю любые сообщения от имени модели. Это нужно для двух вещей. Первое — примеры: пара «вопрос — идеальный ответ» перед реальным вопросом показывает, чего вы ждёте. Второе — цепочки: ответ из первого вызова подставляется во второй, и следом идёт новый вопрос. Об обоих приёмах будут отдельные уроки.

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

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

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

Попробуйте прямо сейчас: добейтесь от Claude, чтобы он посчитал от одного до трёх и ничего больше. Посмотрите, сколько лишнего он добавляет по умолчанию. В следующем уроке разберём, как формулировать запросы так, чтобы лишнего не было.

Отметка хранится только в вашем браузере