23:40. Пятница. До дедлайна 20 минут, на кону $800.
Я скопировал системный промпт из открытого репозитория, вставил в своего бота и нажал тест. Бот начал игнорировать половину инструкций - отвечал не в том тоне, пропускал обязательные шаги, вёл себя как будто читал только каждое второе правило.
Клиент написал в 00:05. Я попросил час. Потом ещё два.
До этого момента я писал системные промпты интуитивно. Добавлял правила, форматировал списком, думал - чем подробнее, тем лучше. Это работало... примерно. Боты иногда вели себя предсказуемо, иногда нет. Я списывал это на "температуру модели" или "особенности GPT-4".
Классическое объяснение всего непонятного через магию.
Та ночь показала, что я не понимал базовую вещь - как модель вообще читает то, что я пишу. Я потратил три часа, перебирал варианты вслепую, менял формулировки наугад. В итоге клиент получил бота на следующий день. $800 я не потерял, но потерял репутацию надёжного подрядчика - а это иногда дороже.
Самое неприятное - я понял, что так работает большинство разработчиков. Пишут промпты как технические задания, добавляют пункты, нумеруют правила, и молятся чтобы сработало. Это не подход, это лотерея.
Я собрал промпты по этой теме в PDF. Забери бесплатно: https://t.me/airozov_bot
ChatGPT не читает системный промпт как список правил. Он читает его как контекст - как рамку, через которую интерпретирует всё остальное.
Это звучит как тонкое различие, но на практике меняет всё.
Когда ты пишешь "отвечай кратко, не используй маркированные списки, всегда уточняй детали заказа" - модель не складывает три правила в стек и не выполняет их по очереди. Она строит образ: кто я, в какой ситуации нахожусь, чего от меня ждут. И уже из этого образа генерирует ответ.
Первые два-три предложения системного промпта задают этот образ. Всё остальное интерпретируется через него.
Тот промпт из репозитория начинался с "You are a helpful assistant for e-commerce". Мой бот был для B2B SaaS. Модель взяла чужой контекст, натянула на него мои инструкции - и получила конфликт. Она не игнорировала правила. Она их читала через неправильную линзу.
Три часа ночи ради одного абзаца в начале файла.
Первое - я начал думать о системном промпте как о персонаже, а не о техническом задании.
Не "бот должен делать X, Y, Z", а "этот бот - менеджер по продажам SaaS-компании с пятилетним опытом, который разговаривает с техническими директорами". Когда у модели есть конкретный персонаж с контекстом, она сама додумывает детали правильно. Правила тогда работают как уточнения, а не как основа.
Второе - я стал проверять конфликты в промпте до запуска.
Простой тест: беру системный промпт, добавляю в конце "Перечисли все противоречия в этих инструкциях" и отправляю в новый чат. GPT-4 честно находит места где одно правило конфликтует с другим. Это сэкономило мне несколько ночей за последние месяцы.
Третье - иерархия важнее полноты.
Раньше я добавлял всё что приходило в голову. Теперь я выбираю три главных принципа и строю промпт вокруг них. Остальное либо следует из них, либо не нужно. Промпт на 150 слов с чёткой иерархией работает лучше промпта на 600 слов с полным списком правил. Я проверил это на шести разных проектах.
Вот неочевидная вещь, которую я не видел ни в одном курсе.
Модель не просто читает системный промпт перед разговором. Она возвращается к нему каждый раз, когда нужно решить неоднозначную ситуацию. Это значит, что промпт работает не как инструкция на старте - он работает как якорь на протяжении всего диалога.
Отсюда следует кое-что важное: если в начале разговора пользователь говорит что-то, что переопределяет контекст ("представь что ты другой бот"), а в системном промпте нет явного запрета на это - модель может "поплыть". Не потому что плохо обучена. А потому что пользовательский контекст перевесил системный.
Я видел это в продакшене. Бот для юридической компании начинал давать финансовые советы после того как пользователь написал "давай поговорим как два друга". Промпт запрещал финансовые советы, но не устанавливал достаточно жёсткую рамку идентичности.
Фикс простой, но неочевидный: в системном промпте нужна строчка о том, что идентичность бота не меняется независимо от того, как пользователь формулирует запрос. Не список запрещённых сценариев, а одно предложение про устойчивость роли.
Каждый день разбираю один такой инструмент в Telegram: https://t.me/yevheniirozov
Если у тебя есть хоть один бот или системный промпт который "иногда работает странно" - вот конкретный шаг.
Зайди на chat.openai.com, создай новый чат и вставь этот промпт:
*"Вот мой системный промпт: [вставь свой]. Проанализируй его и ответь на три вопроса: 1) Какой образ или роль он формирует в первых двух предложениях? 2) Есть ли инструкции, которые противоречат друг другу? 3) Что произойдёт если пользователь попробует изменить контекст разговора?"*
Это займёт пять минут. Я делаю так с каждым новым проектом - после той пятницы в феврале без исключений.
• [90% людей выбирают нейросети наугад. И теряют время.](https://telegra.ph/90-lyudej-vybirayut-nejroseti-naugad-I-teryayut-vremya-05-23)
• [% AI-инструментов — мусор. Что реально работает?](https://telegra.ph/AI-instrumentov--musor-CHto-realno-rabotaet-05-24)
• [Как я отсеял лучшие AI-инструменты за 30 дней работы](https://telegra.ph/Kak-ya-otseyal-luchshie-AI-instrumenty-za-30-dnej-raboty-05-24)
[teletype] Оказывается, ChatGPT работает иначе. Я узнал это случайно.
Вы уверены, что знаете, как на самом деле работает ChatGPT?
Как я случайно узнал, что ChatGPT работает не так, как я думал