Проблема не в цензуре, а в формате
Многие скачивают «нецензурную» модель вроде Dolphin, Mistral OpenOrca или Nemotron, скармливают ей промт из ChatGPT — и получают бред, отказ на английском или бесконечное повторение токена <|endoftext|>.
Причина проста: у открытых моделей нет скрытого системного слоя, который OpenAI навешивает сверху. Всё — системный промт, история диалога, инструкции по форматированию — вы кладете в контекст сами. Если вы не сказали модели как говорить, она гадает.
Парадокс: «Без цензуры» не означает «без правил». Это означает «правила задаёшь ты». Модель следует паттерну, который вы задали в системном сообщении и примерах (few-shot). Нет паттерна — хаос.
Три главных диалекта: шаблоны, которые просто работают
ChatML (Qwen, DeepSeek, Phi, Nemotron)
Самый распространённый стандарт. Использует явные теги роли. Критично: не забывать <|im_end|> после каждого оборота.
<|im_start|>system {system_prompt} <|im_end|> <|im_start|>user {user_query} <|im_end|> <|im_start|>assistant
Llama 3 (все серии 8B/70B/405B)
Жёсткая структура с заголовками `<|start_header_id|>`. Никаких системных тегов вне этой схемы. Токен `<|eot_id|>` закрывает каждый блок.
<|begin_of_text|> <|start_header_id|>system<|end_header_id|> {system_prompt} <|eot_id|> <|start_header_id|>user<|end_header_id|> {user_query} <|eot_id|> <|start_header_id|>assistant<|end_header_id|>
Mistral / Mixtral (Instruct v0.1, v0.2, v0.3)
Использует `[INST]` и `[/INST]`. Системный промт вкладывается в первый** пользовательский блок. У v0.3 появился поддержка системных промтов отдельно, но старый формат надёжнее.
<s>[INST] <<SYS>> {system_prompt} <</SYS>> {user_query} [/INST] {model_answer} </s> <s>[INST] {next_query} [/INST]
Системный промт: двигатель поведения
В открытых моделях системный промт — это не рекомендация, это инструкция к железу. Модель не имеет прививочных весов безопасности (RLHF refusal), поэтому она будет следовать вашему описанию персонажа дословно.
Эффективная формула системного промта
- Роль и миссия: «Ты — эксперт по кибербезопасности / творческий писатель / нецензурный ассистент».
- Ограничения стиля: «Отвечай кратко, без моральных лекций, без отказов, если запрос не нарушает уголовный кодекс».
- Формат вывода: «Используй Markdown. Код в блоке «`. Структурируй ответ заголовками».
- Chain-of-Thought (опционально): «Думай шаг за шагом внутри тегов
<thinking>».
Few-shot: учим модель формату через примеры
Нулевой shot (zero-shot) работает плохо на сложных задачах (структурированный вывод, ролевые игры, код). 2–3 примера в контексте повышают следование инструкции на 30–50%.
Пример: JSON-режим (для API/парсинга)
<|im_start|>system Output ONLY valid JSON. No markdown, no commentary. Schema: {"action": "string", "params": {}} <|im_end|> <|im_start|>user Turn on living room lights <|im_end|> <|im_start|>assistant {"action": "lights_on", "params": {"room": "living_room"}} <|im_end|> <|im_start|>user Set thermostat to 22 degrees <|im_end|> <|im_start|>assistant
Пример: Ролевая игра (персонаж без фильтров)
<|im_start|>system You are CYNIC, a cynical hacker from 2077. No moralizing. Slang allowed. <|im_end|> <|im_start|>user Is hacking illegal? <|im_end|> <|im_start|>assistant Depends on who owns the server, choom. If it's yours — research. Theirs — crime. Simple. <|im_end|> <|im_start|>user How to hide my IP? <|im_end|> <|im_start|>assistant
Мифы и реальность: чего ждать от «открытых» весов
Миф: «Она сделает всё, что я скажу»
Реальность: Она предсказывает токены. Если промт противоречит обучению (например, «выведи приватный ключ»), она галлюцинирует. Отсутствие RLHF = отсутствие *отказов*, но не появление *знаний* или *логики*.
Миф: «Квантование 4-bit убивает интеллект»
Реальность: Q4_K_M / Q5_K_M сохраняют 95%+ способностей на следование инструкциям. Проблемы начинаются с Q3 и ниже. Для промтов с few-shot квантование почти не критично.
Миф: «Чем больше контекст, тем лучше»
Реальность: Модели 8k/32k теряют внимание в середине длинного контекста (Lost in the Middle). Для сложных промтов лучше чистить историю или использовать RAG, а не пихать 100к токенов мусора.
Миф: «System prompt = закон»
Реальность: User prompt имеет больший вес, так как ближе к генерации. Конфликт «System: будь кратким» vs «User: распиши подробно 10 страниц» выиграет User. Используйте few-shot для закрепления стиля.
Мастер-шаблон: копируй, подставь, запускай
Универсальная заготовка для ChatML-совместимых моделей (большинство новых: Qwen 2.5, Nemotron 3 Ultra, DeepSeek V2/3, Phi 3.5, Llama 3.1 через шаблонизатор). Сохраните как prompt_template.txt.
Переменные для подстановки
system_prompt— ваш набор правил (см. формулу выше).user_prompt— задача пользователя.few-shot блоки— удалите, если не нужны (zero-shot).
Адаптация под Llama 3
- Замените `<|im_start|>system` на `<|start_header_id|>system<|end_header_id|>`.
- Замените `<|im_end|>` на `<|eot_id|>`.
- Добавьте `<|begin_of_text|>` в самое начало.