Системный промпт: это набор инструкций, который ИИ-модель получает до начала диалога и который действует на все последующие сообщения. Он задаёт роль модели, её аудиторию, её правила и формат ответа по умолчанию, чтобы вам не приходилось повторять их в каждом сообщении. Пользователь пишет промпты; системный промпт определяет, как модель на все них отвечает.
Он уже есть в каждом чат-приложении. Когда вы открываете ChatGPT, Claude или Gemini, у модели уже есть инструкции от компании-разработчика, которые окно чата вам не показывает. Когда разработчики строят приложение поверх модели, именно в системном промпте они превращают универсальную модель в репетитора по программированию, ассистента поддержки или автора сообщений коммитов.
Что делает системный промпт
У входных данных модели в чате есть структура: сначала системный промпт, затем диалог в виде чередующихся сообщений пользователя и ассистента. Системный промпт стоит над всем обменом репликами, поэтому он находится перед моделью при каждом ответе, какой бы длинной ни была переписка.
Такое положение делает его правильным местом для всего, что должно действовать всегда: к кому обращается модель, что ей можно и нельзя, как по умолчанию должен выглядеть ответ. Кроме того, модели обучены придавать ему больший вес, чем сообщению пользователя, когда они противоречат друг другу. Это склонность, а не замок. Настойчивый пользователь иногда может уговорить модель отступить от системного промпта, поэтому он никогда не должен быть вашей единственной защитой.
Системный промпт и сообщение пользователя
| Системный промпт | Сообщение пользователя | |
|---|---|---|
| Кто пишет | Разработчик или вы в настройках приложения | Вы, в поле чата |
| Область действия | Весь диалог | Один запрос |
| Типичное содержание | Роль, аудитория, правила, факты, формат по умолчанию | Задача и материал для неё |
| Когда меняется | Редко | В каждой реплике |
| Вес при конфликте | Обычно выше | Обычно ниже |
Полезная проверка: если фраза верна для каждого сообщения в чате, ей место в системном промпте. Если она про конкретный запрос, ей место в сообщении пользователя. «Отвечай не больше чем в 100 слов» может стоять и там, и там; «кратко перескажи письмо ниже» всегда сообщение пользователя.
Где задать системный промпт
В API системный промпт передаётся отдельно. В Python-библиотеке OpenAI это первое сообщение в списке с ролью system. В документации OpenAI для новых моделей та же инструкция называется ещё developer message.
from openai import OpenAI
client = OpenAI()
MODEL = "your-model-id" # e.g. from your provider's model list
response = client.chat.completions.create(
model=MODEL,
messages=[
{"role": "system", "content": "You are a patient Python tutor. Give hints, not full solutions."},
{"role": "user", "content": "Why does my loop stop at 9?"},
],
)
print(response.choices[0].message.content)
В Python-библиотеке Anthropic это параметр верхнего уровня system, а список messages содержит только диалог:
import anthropic
client = anthropic.Anthropic()
MODEL = "your-model-id" # e.g. from your provider's model list
message = client.messages.create(
model=MODEL,
max_tokens=500,
system="You are a patient Python tutor. Give hints, not full solutions.",
messages=[{"role": "user", "content": "Why does my loop stop at 9?"}],
)
print(message.content[0].text)
В Gemini API от Google это называется system instruction. Название другое, идея та же.
В чат-приложениях доступа к самому полю system нет, потому что у приложения уже есть своё. Вместо этого есть место для постоянных инструкций, которые приложение добавляет за вас. В ChatGPT это пользовательские инструкции, инструкции проекта и инструкции собственного GPT. В Claude это инструкции проекта и настройки в профиле. В Gemini это инструкции Gem. Как именно каждое приложение объединяет ваш текст со своими инструкциями, полностью не документировано, но на практике они ведут себя как системный промпт, который вы делите с приложением.
Что писать в системный промпт
- Роль и аудиторию. «Ты репетитор для студентов, которые учатся программировать первый месяц» задаёт словарь и уровень каждого ответа. Что роль меняет и чего не меняет, разобрано на странице ролевой промптинг.
- Правила, которые действуют в каждой реплике. Что модель должна делать всегда или не делать никогда: давать подсказки вместо готовых решений, отвечать только на вопросы о продукте, отвечать на языке пользователя.
- Что делать при неуверенности. «Если ответа нет в фактах ниже, скажи, что не знаешь» делает против выдуманных ответов больше, чем общее «будь точным».
- Факты, которые нужны модели. Детали продукта, правила, текущая дата, тариф пользователя. Модель не может ответить на вопросы о вашем приложении по данным обучения.
- Формат по умолчанию. Длина, структура, использовать ли блоки кода. Если вывод читает программа, задайте точную форму; см. структурированный вывод.
Чего не писать
Секреты. Системный промпт не приватен. Пользователи могут попросить модель повторить её инструкции или обманом добиться этого, и модели не всегда отказывают. API-ключам, паролям и всему, что вы не хотели бы видеть опубликованным, там не место. Считайте системный промпт текстом, который пользователь однажды может прочитать, а как переопределяют инструкции, смотрите на странице промпт-инъекции.
Задачу одного сообщения. Если в системном промпте написано «кратко перескажи эту статью», второму сообщению в чате деваться некуда.
Груды пересекающихся правил. Двадцать правил, написанных в разное время, обычно противоречат друг другу, и модели приходится угадывать, какое главнее. Группируйте правила, убирайте дубли и указывайте приоритеты там, где два правила могут столкнуться.
Воду. Системный промпт отправляется заново с каждым запросом и занимает место в контекстном окне модели, так что за каждый лишний абзац вы платите в каждой реплике.
Примеры системных промптов
Первый пример: ассистент внутри продукта. Системный промпт задаёт границы, длину и правило для вопросов, на которые он не может ответить, и содержит факты, нужные модели. Переключайте вкладки, чтобы отправить ему разные сообщения: один и тот же системный промпт формирует все три ответа.
Откройте покупку в списке транзакций и нажмите Разделить. Затем выберите две категории, Продукты и Товары для дома, и укажите сумму для каждой.
Второй пример: текст, который можно поместить в пользовательские инструкции или инструкции проекта в чат-приложении. Он описывает вас и то, какие ответы вам нужны, и каждый чат начинается с этого.
import { readFile } from "node:fs/promises";
const config = JSON.parse(await readFile("config.json", "utf8"));
Если передать кодировку, readFile вернёт строку, которую JSON.parse превратит в объект. await на верхнем уровне работает только в ES-модуле ("type": "module" в package.json или файл .mts); иначе оберните вызов в асинхронную функцию. Добавьте try/catch, если файла может не быть или он повреждён.
Без системного промпта вопрос вроде «как прочитать JSON-файл?» оставляет модели угадывать язык, и ответ часто приходит на Python или обычном JavaScript с абзацем о том, что такое JSON. С системным промптом ответ выбирает правильный язык и среду выполнения, пропускает основы и следует запрошенной форме.
Та же структура подходит для любого ассистента, которого вы настраиваете: кому он служит, правила, что делать при неуверенности, нужные ему факты и формат ответа. Напишите её один раз, проверьте на обычном вопросе, на вопросе не по теме и на попытке нарушить правило, и дорабатывайте, пока все три ответа не станут такими, как вам нужно.
Часто задаваемые вопросы
Что такое системный промпт?
Системный промпт: это набор инструкций, который ИИ-модель получает до начала диалога и который действует на все последующие сообщения. Обычно он задаёт роль, аудиторию, правила и формат ответа по умолчанию. В API это отдельное поле или сообщение system; в чат-приложениях ту же роль играют пользовательские инструкции и инструкции проекта.
Чем системный промпт отличается от пользовательского?
Системный промпт содержит постоянные инструкции для всего диалога, и обычно его пишет разработчик или задают один раз в настройках. Пользовательский промпт: одно сообщение с одной просьбой. Когда они противоречат друг другу, модели обучены придавать системному промпту больший вес, но это склонность, а не гарантия.
Можно ли задать системный промпт в ChatGPT, Claude или Gemini?
Не само поле system, но нечто близкое. В ChatGPT есть пользовательские инструкции, инструкции проекта и инструкции для собственных GPT. В Claude есть инструкции проекта и настройки профиля. В Gemini есть инструкции для Gems. Приложение объединяет написанное вами со своими системными инструкциями и применяет это к вашим чатам.
Могут ли пользователи увидеть или вытащить системный промпт?
Часто да. Пользователь может попросить модель повторить её инструкции или обманом заставить это сделать, и модели не хранят их надёжно в секрете. Никогда не кладите в системный промпт пароли, API-ключи или конфиденциальные данные компании и не полагайтесь на него как на защитный барьер.
Какой длины должен быть системный промпт?
Достаточной, чтобы охватить всё, что относится к каждому сообщению, и не длиннее. Личный системный промпт может занимать три-четыре предложения. Системный промпт продукта часто занимает страницу: роль, правила, факты и формат вывода. Каждое слово отправляется с каждым запросом, так что оно ещё и каждый раз стоит токенов.