Промт в GPT для двух друзей: архитектура живого диалога вместо монолога

Архитектура промта для двух друзей в GPT

Не просите «поговорить за двоих» — опишите режиссера, двух актёров и протокол съёмки. Тогда диалог не схлопнётся в монолог.

Системный слой: РежиссёрКарточки персонажей: АктёрыПротокол запуска: Старт

Вы пишете: «Сыграй диалог двух друзей». GPT отвечает единым потоком текста, лишь чередуя имена. Причина проста: модель предсказывает следующий токен, а не управляет сценой. Ей нужен не образ «друг», а жёсткая архитектура ролей и правил хода.

Методактёр не нужен. Нужен режиссёр

Представьте киносет. Без режиссёра актёры говорят одновременно или молчат. В GPT «режиссёр» — это системный промт. Он не играет роль, он задаёт переключение контекста, формат реплики, порядок хода и условия остановки.

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

ABDIRCONTROLLER

Три слоя рабочего промта

1

Слой 1. Режиссёр (System)

Задаёт глобальные правила: формат вывода (JSON/Markdown), механизм очереди хода, управление памятью сцены, запрет на отписывание за другого персонажа.

2

Слой 2. Актёры (Character Cards)

Два отдельных блока инструкций: имя, архетип, лексикон, манера речи, скрытые мотивы, отношения к партнёру, база знаний. Режиссёр инъецирует нужный блок перед генерацией реплики.

3

Слой 3. Старт (User Prompt)

Запускает симуляцию: задаёт сеттинг, триггер конфликта, первую реплику или команду «Начать». Лучше дать режиссёру выбор: кто ходит первым.

Анатомия карточки персонажа

Идентичность: Кто говорит?

Имя, возраст, роль в жизни друга. Не «весёлый парень», а «Сергей, 34 года, системный админ, считает юмор про защиту от стресса».

Голос и лексикон
Короткие фразы, сленг админов, сарказм вместо эмпатии.
Память и факты
Знает про долг друга, ненавидит его кота, помнит прошлые ссоры.
Отношения к партнёру
«Любит, но считает невеждой. Обзывает за заботу».
Скрытые мысли (Inner Monologue)
Выводить в отдельном теге <thought>. Не знаю другие.

Почему это работает

Модель не «вживается». Она переключает веса внимания на заданный набор токенов-триггеров (сленг, факты, манера). Чем плотнее карточка, тем чётче переключение.

Ловушка: «Общий контекст»

Если оба персонажа видят полную историю чата, они начинают «подглядывать» в мысли друг друга. Режиссёр должен фильтровать контекст: выдавать каждому только то, что он услышал/увидел.

Готовый шаблон: копируйте, адаптируйте, запускайте

# SYSTEM PROMPT (РЕЖИССЁР) You are a Simulation Engine for a two-character dialogue. You do NOT speak as yourself. You manage the scene. RULES: 1. OUTPUT FORMAT: Strict JSON only: { «speaker»: «A|B», «line»: «…», «thought»: «…» } 2. TURN ORDER: Strict alternation A → B → A… unless «interrupt» flag set. 3. CONTEXT ISOLATION: Inject only relevant Character Card + Scene History before each turn. 4. NO NARRATION. No stage directions in «line». Only spoken words. 5. CONFLICT: Characters pursue their goals. Disagreement is default. CHARACTER A CARD (INJECT WHEN SPEAKER=A): { «name»: «Сергей», «archetype»: «Циничный прагматик», «voice»: «Коротко, технический сленг, избегает эмоциональных слов», «goal»: «Убедить друга не тратить деньги на глупость», «secret»: «Боится остаться один, если друг уедет в стартап», «relation_to_B»: «Любит как брата, считает наивным» } CHARACTER B CARD (INJECT WHEN SPEAKER=B): { «name»: «Антон», «archetype»: «Идеалист-мечтатель», «voice»: «Образно, метафоры, часто отвлёкся, «короче»», «goal»: «Получить поддержку на рискованный проект», «secret»: «Уже подал заявку на грант, боится отказа», «relation_to_A»: «Уважает ум, злится на скептицизм» } INITIAL USER PROMPT (СТАРТ): Scene: Кухня, 23:00, бутылка пива. Антон только что сказал: «Короче, Саш, я ухожу в стартап. Завтра сдаю документы.» Director: Determine Speaker A (Sergey) reaction. Output Turn 1.

Механика очереди: как не превратиться в хаос

Самая частая поломка — модель генерирует сразу две реплики: «Сергей: … Антон: …». Решение — жёсткий формат вывода (JSON) и инструкция «Выводить ОДНУ реплику за ход».

Для интерактивного режима (вы играете за третьего) добавьте в системный промт: WAIT_FOR_USER_INPUT: true. Режиссёр остановится после реплики B и ждёт вашего ввода как «Событие извне» или реплики персонажа C.

Наивный промт

«Поговори за двух друзей, которые спорят про стартап. Сергей против, Антон за.»

Результат: Монолог от 3-го лица, одинаковый голос, нет конфликта.
Архитектурный промт

Системный промт (выше) + Карточки А/Б + Сцена старта. Режим: JSON, строгая очередность, изолированный контекст.

Результат: Живой спор, уникальные голоса, скрытые мотивы, неожиданные повороты.

Вы не пишете промт. Вы проектируете симуляцию.

Качество диалога определяется не умом модели, а точностью вашей архитектуры: чёткость ролей, изоляция контекстов, протокол хода. Настройте движок один раз — и он будет генерировать бесконечные уникальные сцены, где друзья звучат как живые люди, а не как копии ассистента.