Зачем нужен system
Каждый запрос к Claude — это массив messages с сообщениями пользователя. Но есть отдельное верхнеуровневое поле system: туда выносят роль, тон и правила, по которым модель отвечает. Сами вопросы остаются в messages, а system задаёт рамку для всех них.
Представь бота поддержки интернет-магазина. Без system на вопрос «где мой заказ?» Claude ответит общими словами. С system — заговорит как ваш оператор: вежливо, по правилам, не выдумывая номера заказов.
Как это выглядит в запросе
{
"model": "claude-opus-4-8",
"max_tokens": 1024,
"system": "Ты — оператор поддержки магазина «Полка». Отвечай вежливо и кратко. Если не знаешь номер заказа — попроси его, не придумывай.",
"messages": [
{"role": "user", "content": "Где мой заказ?"}
]
}
system — это одна строка на верхнем уровне тела запроса, а не сообщение с ролью system внутри messages. Это не обязательное поле: без него модель просто отвечает как ассистент по умолчанию.
Держи в system стабильные правила, а конкретику (имя клиента, номер заказа) передавай в messages. Так промпт легче переиспользовать и кэшировать.
Порепетируй
Ниже — один и тот же вопрос с system-промптом и без него. Почувствуй разницу.
Бот поддержки магазина «Полка». Один и тот же вопрос клиента — «Где мой заказ?». Посмотри, как ответ Claude меняется в зависимости от того, задал ли ты роль через system.
Claude
Ты собираешь запрос к /v1/messages. Вопрос клиента «Где мой заказ?» уже в messages. Что сделаешь с полем system?