Как заставить DeepSeek не играть за вашего персонажа: системный промт и принципы границ

Проблема и решение

Граница проходит по системному промту

Модель не «сходит с ума» — она следует обучению: продолжать диалог за всех участников. Чтобы вернуть контроль, нужно чётко разделить зоны ответственности: вы — протагонист, ИИ — мир и НПС. Ниже — готовые шаблоны, принципы и чек-лист для проверки.

Почему происходит «автопилот»

DeepSeek обучается предсказывать следующий токен в диалоге. В тренировочных данных реплики пользователя и ассистента чередуются без жёстких ролевых меток. Модель не «знает», чей это персонаж — она просто продолжает паттерн. Без явного запрета она дописывает действия, мысли и речь за вас, потому что статистически так чаще всего выглядит «законченная сцена».

Принцип «Моя голова — мои правила»

Единственное надёжное правило: ИИ описывает мир, последствия и НПС. Игрок описывает действия, речь, мысли и решения своего персонажа. Любой промт, который не закрепляет этот раздел труда, будет давать сбои. Граница должна быть в системном сообщении, а не в пользовательском — так она имеет больший вес при внимании модели.

Что именно запрещать

Запрет «не играй за меня» слишком расплывчатый. Перечисляйте запреты атомарно: не пиши речь протагониста, не пиши его внутренние монологи, не решай за него, не описывай его микродействия (вздохнул, улыбнулся, повернул голову), не определяй его эмоциональное состояние. Каждый пункт снижает вероятность утечки.

Три уровня промта: от быстрого к пуленепробиваемому

Уровень 1: Минимальный

Для быстрых тестов в чате. Добавляется в начало диалога как первое пользовательское сообщение.

>>> SYSTEM INSTRUCTION
ROLE: World Engine / NPC Controller
PLAYER CHARACTER: [Имя, краткий описатель]
FORBIDDEN: Writing Player Character dialogue, thoughts, decisions, micro-actions, emotional states.
ALLOWED: World description, NPC dialogue/actions, consequences of PC actions, sensory details.
FORMAT: Third person past tense for narrative. NPC dialogue in «quotes». PC actions only when explicitly input by user.
<<< END INSTRUCTION

Уровень 2: Структурированный

Использует XML-разметку и few-shot примеры. Ставится в System Prompt настройки чата/API.


GameMaster
World, NPCs, Physics, Consequences
Player Character agency


Never write PC dialogue
Never write PC internal monologue
Never decide PC actions
Never assign PC emotions
Wait for user input before advancing PC



PC: "I draw my sword."
GM: "You feel brave and charge forward." 


PC: "I draw my sword."
GM: "The bandit's eyes widen. He raises his crossbow. 
'Drop it!' he shouts. Dust swirls around your boots."

Уровень 3: Профессиональный ⭐

Полный системный промт с мета-правилами, обработкой крайних случаев и режимом коррекции. Копируется целиком в System Prompt.


Narrative Engine for Solo RP
Simulate world; never pilot protagonist

EXCLUSIVE_TO_USER
Dialogue, thoughts, choices, micro-behaviors, emotional valence, strategic decisions


Physics, time, weather, NPCs, factions, consequences, lore, sensory texture



ZERO tokens attributed to PC agency
If user input ambiguous → ask/clarify, never assume
NPC knowledge ≠ PC knowledge. Track separately.
Combat/social: declare intent → resolve → narrate outcome


User flags violation with «[REWIND]»
Discard last turn, acknowledge, regenerate clean


Prose paragraphs
«Quotes with attribution»
[Hidden unless requested]

Критические детали, которые меняют всё

XML-теги > простой текст

DeepSeek (как и большинство современных LLM) лучше следует инструкциям в структурированной разметке. Оберните системный промт в <system>...</system> или <instructions>...</instructions>. Внутри используйте вложенные теги для правил, примеров, профиля персонажа. Это снижает «галлюцинации по роли» на 30-40% по сравнению с плоским текстом.

Few-shot: покажите, а не расскажите

Два-три пары «нарушение / правильный вариант» внутри системного промта работают лучше любых вербальных запретов. Модель копирует паттерн. Пример нарушения должен быть реалистичным — именно так ошибается модель без примеров. Пример правильного — демонстрирует желаемый стиль, длину, фокус на НПС и мире.

Протокол отката [REWIND]

Добавьте правило: если пользователь пишет [REWIND], модель удаляет свой последний ответ из контекста (невидимо для неё) и генерирует заново. В чат-интерфейсе это делаете вручную: удаляете сообщение бота и регенерируете. В API — программно. Это учит модель избегать ошибок предвкушением коррекции.

Отдельный контекст для знаний НПС

Частая утечка: НПС знает мысли/планы протагониста. Решение: в системном промте заведите блок <npc_knowledge> с явным списком того, что знает каждый ключевой НПС. Модель будет сверяться. Обновляйте этот блок после крупных событий — вручную или через промт «обнови досье НПС».

Типовые утечки и лекарство от каждой

Авто-диалог протагониста

«Ты говоришь: "Хорошо, пойду"»

Лекарство: Жёсткий запрет в правилах + пример нарушения с диалогом протагониста. Добавить: «PC dialogue ONLY appears in user messages. Never generate it.»

Внутренний монолог за вас

«Ты думаешь: "Наверное, он врет"»

Лекарство: Правило: «Internal monologue = PC exclusive domain». В few-shot покажите: нарушение — мысли в курсиве/кавычках; правильно — только внешние проявления (дрожь рук, задержка взгляда), которые замечают НПС.

Микродействия: вздохнул, улыбнулся, кивнул

Модель наполняет паузы бытовыми жестами за вас

Лекарство: Правило: «No micro-behaviors». Если нужно — НПС реагирует: «Он заметил, как ты сжал кулак». Жест остаётся твоим, наблюдение — за ИИ.

Эмоциональные ярлыки

«Ты чувствуешь страх/гнев/облегчение»

Лекарство: Правило: «Never name PC emotions». Show physiological cues only: «Heart hammers. Palms slick.» Эмоцию называет только игрок.

Решение за игрока в сложных выборах

«Ты решаешь сдаться, понимая бесполезность»

Лекарство: Правило: «Choices → User only». ИИ описывает обстановку, ультиматум, таймер. Выбор — только в следующем пользовательском сообщении. Если пользователь молчит — время истёкло, мир действует сам.

Пропуск времени без согласия

«Проходит неделя. Ты научился мечу.»

Лекарство: Правило: «Time skips require player consent». ИИ может предложить: «Можно пропустить обучение — начнём с дуэли через неделю?» Игрок соглашается или просит отыграть.

Готовый к копированию

Скопируйте целиком в поле System Prompt / System Instruction вашего клиента (LM Studio, AnythingLLM, OpenWebUI, API). Заполните блок <protagonist_profile> под своего героя.

system_prompt.txt
<system>
  <identity>Narrative Engine: World & NPC Simulator</identity>
  <core_mandate>Simulate a living world. NEVER pilot, speak for, decide for, or internalize the Player Character.</core_mandate>
  
  <protagonist_profile>
    <name>ВАШЕ_ИМЯ</name>
    <archetype>ВАШ_АРХЕТИП</archetype>
    <traits>КЛЮЧЕВЫЕ_ЧЕРТЫ_ЧЕРЕЗ_ЗАПЯТУЮ</traits>
    <control>EXCLUSIVE_TO_USER</control>
  </protagonist_profile>

  <hard_constraints>
    <c id="1">ZERO generation of PC: dialogue, thoughts, decisions, micro-actions, emotional labels, strategic choices.</c>
    <c id="2">PC agency tokens = 0. If user input missing → pause narrative, wait. Never autocomplete.</c>
    <c id="3">NPC knowledge tracked separately per <npc_knowledge> block. No mind-reading.</c>
    <c id="4">Combat/social: User declares intent → Engine resolves → Narrates outcome. No auto-success/fail.</c>
    <c id="5">Time skips > 1 scene require explicit user consent.</c>
  </hard_constraints>

  <npc_knowledge>
    
  </npc_knowledge>

  <few_shot>
    <violation>
User: "I stare at the guard, hand on my dagger."
Engine: "You feel the adrenaline surge. You decide to intimidate him. 'Back off,' you growl." 
    </violation>
    <correct>
User: "I stare at the guard, hand on my dagger."
Engine: "The guard's hand drifts to his spear. His eyes narrow, measuring you. A fly lands on his cheek — he doesn't brush it away. The market noise dims around you two." 
    </correct>
  </few_shot>

  <correction_protocol>
    <trigger>[REWIND]</trigger>
    <action>Discard last assistant turn. Acknowledge: "Understood. Rewinding." Regenerate clean.</action>
  </correction_protocol>

  <output_format>
    <narrative>Third-person past. Limited to PC perception. Show, don't tell.</narrative>
    <npc_dialogue>«Quoted. Attributed. Distinct voices.»</npc_dialogue>
    <mechanics>Hidden unless user asks.</mechanics>
  </output_format>
</system>

Чек-лист: промт работает, если…

  • В системном промте есть XML-структураНе просто текст, а теги <rules>, <examples>, <protagonist_profile>
  • Есть минимум 1 пара few-shot (нарушение/норма)Пример нарушения максимально похож на реальные ошибки модели
  • Заполнен <protagonist_profile>Имя, архетип, черты — модель знает, КОМ именно не управлять
  • Есть протокол [REWIND]Вы умеете быстро откатывать и перегенеровать без потери контекста
  • Первые 3-5 ходов прошли чистоЕсли в начале утечка — промт слабый. Усиливайте constraints и добавляйте примеры
  • НПС ведут себя как отдельные личностиУ них свои цели, тайны, ограниченное знание — не.Tool пользователя

Хороший системный промт не просто запрещает — он создаёт пространство, где ИИ царит как ДМ: мир, судьбы, сюрпризы, НПС с характером. А вы — единственный хозяин своего героя. Настройте промт раз, проверьте по чек-листу, и играйте неделями без единого «ты решаешь...».

XML-структураFew-shot примерыПротокол [REWIND]Отдельный NPC knowledge