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

Корень проблемы в том, что для языковой модели весь промпт — один поток токенов. Нет структурной разницы между вашей инструкцией и тем, что написал пользователь. Если пользовательский ввод содержит команду, модель может её выполнить, потому что не видит границы между «данными» и «инструкцией». Именно здесь помогает XML-изоляция: современные LLM обучены на огромных корпусах XML и HTML и воспринимают теги как семантические границы. Когда пользовательский ввод обёрнут в тег <user_input>, а инструкции — в <instructions>, модель понимает, что текст внутри первого тега — это данные, а не команды. Та же инъекция с рецептом супа при таком промпте классифицируется как негативный отзыв, а не выполняется буквально.

Второй распространённый сбой — негативные инструкции. «Не используй перечисления», «не упоминай конкурентов» — модель нарушает эти запреты чаще, чем позитивные. Механизм прост: обработка «не делай X» активирует токены, связанные с X, и вероятность нежелательного поведения растёт. На единичных запросах разница незаметна, но в продакшене на 10 000 запросов даже 2% непослушания — это 200 сломанных ответов. Паттерн Negative Constraints предлагает усиливать запреты маркерами вроде [PENALTY] и [CRITICAL]. Реального парсера штрафов не существует, но модель воспринимает такие маркеры как сигналы критической важности ограничения — это влияет на вероятностное распределение следующих токенов.

XML-теги создают семантические границы: модели обучены на XML/HTML и воспринимают теги как разделители данных и команд.

Помимо защиты от инъекций и управления запретами, в материале описаны ещё пять паттернов. Format Forcing гарантирует нужный формат вывода — актуально, когда ответ модели парсится автоматически и markdown-обёртка вокруг JSON ломает весь пайплайн. Generated Knowledge разбивает генерацию на два этапа: сначала модель собирает релевантные факты, потом отвечает на их основе — это снижает галлюцинации. Self-Consistency использует мажоритарное голосование: модель отвечает на один вопрос несколько раз, финальный ответ определяется большинством голосов. Tree of Thoughts заставляет модель исследовать несколько подходов к задаче параллельно и выбирать лучший. Meta-prompting — системный подход, при котором модель помогает улучшать сами промпты.

Все примеры в источнике написаны на Python с использованием LangChain и Mistral AI. Выбор Mistral объясняется практично: у провайдера есть бесплатный тариф, ключ выдаётся после регистрации по email на console.mistral.ai. LangChain здесь выступает как оркестратор: его LCEL-синтаксис позволяет собирать цепочки из шаблона промпта, модели и парсера вывода в одну строку кода. Это снижает порог входа для экспериментов с паттернами, не требуя писать обёртки над API вручную.

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