Программируем ChatGPT: условные предикаты в памяти
Динамическое управление через правила в памяти, выборочно срабатывающие при истинности сторожевых условий в зависимости от текущих значений переменных
Представьте, что ваш собеседник – это не просто нейросеть, а гибкий партнёр по общению, который мгновенно переключает стиль общения, стоит лишь попросить его об этом. Например, одним словом можно заставить его шутить или стать строгим и серьёзным.
Звучит заманчиво?
Это реально и очень просто сделать при помощи памяти, переменных и условной логики предикатов.
В феврале 2024 года ChatGPT начал тестировать возможность сохранять информацию о пользователе и использовать её в будущих беседах.
В сентябре эта функция стала доступной для всех, а в апреле 2025 получила расширение, благодаря которому нейросеть начала учитывать всю историю общения.
Однако, большинство нейро-юзеров полностью не использует возможности этой памяти, ограничиваясь простыми пожеланиями (например, «пиши без таблиц»).
Предлагаю опробовать придуманный мной оригинальный способ, который наверняка поможет существенно расширить ваши возможности.
Идея очень простая, а возможности безграничны
Метод основан на использовании текстовых переменных и простых сторожевых условий (защитных предикатов), зависящих от текущих значений этих переменных, и предваряющих каждое правило, которое должно использоваться, только если значение защитного предиката - триггера является истинным.
Это немного похоже на язык Prolog - классический декларативный язык логического программирования, основанный на логике предикатов первого порядка. Так что можно для определенности и наш метод смело назвать Нейро-Пролог (Neuro-Prolog).
Вы можете записать в память ChatGPT специальные переменные и их значения простым текстом, например:
Также вы можете задать в памяти простые защитные условия, зависящие от записанных переменных, и связать их с правилами таким образом, чтобы при истинности условия связанные с ним правила выполнялись бы нейросетью.
В результате в памяти будут одновременно храниться разные правила, которые вы сможете в любое время активировать или отключить одними лишь изменениями значений переменных.
Простое изменение значения переменной в промпте чата или в памяти позволит вам мгновенно переключать нейросеть из дружелюбного стиля в строгий, из академического в неформальный, буквально на лету и без утомительного переписывания длинных правил.
У вас появится своего рода панель управления, которая позволит вам мгновенно изменять как стиль общения, так и другие настройки поведения нейромодели.
Каскадность и приоритеты
Переменные можно задавать на трёх уровнях с разным приоритетом:
- На уровне промпта – действует только на текущий вопрос;
- На уровне чата – применяется ко всей текущей беседе;
- На глобальном уровне – действует по умолчанию для всех чатов.
Порядок приоритетов выглядит так:
промпт > чат > глобал
Например, если на глобальном уровне вы отключили юмор, но для конкретного чата включили его, то ваш нейродруг будет шутить только в этом чате. Однако, если в том же чате для какого-нибудь отдельного вопроса вы явно отключите юмор, то ответ именно на этот вопрос будет в строгом стиле, несмотря на весёлые настройки данного чата.
То есть, значения переменных на уровне промпта имеют наивысший приоритет. Если значение какой-то переменной не установлено на уровне промпта, то будет использоваться её значение на уровне чата, если таковое имеется. При отсутствии значений на локальных уровнях - промпта и чата, будет применяться самое последнее глобальное значение, записанное в памяти. Поэтому имеет смысл всегда устанавливать в памяти значения по умолчанию для всех переменных.
Простые примеры использования
Глобальный уровень
Вы установили в памяти:
Пользователь:
Расскажи о квантовой запутанности.ChatGPT:
Квантовая запутанность – это явление, при котором состояния частиц взаимозависимы вне зависимости от расстояния между ними... (сухо и серьёзно)
Уровень чата
Вы начинаете новый чат со словами:
Пользователь:
В этом чате: использовать_юмор = даПользователь:
Расскажи о квантовой запутанности.ChatGPT:
Представьте, что два шарика танцевали вместе, а затем разлетелись далеко друг от друга. Стоит одному из них повернуться – второй сразу повторит движение. Настоящая квантовая любовь, правда?
Уровень промпта
Внутри конкретного запроса:
Пользователь:
Расскажи о квантовой запутанности без шуток.
использовать_юмор = нетChatGPT:
Квантовая запутанность характеризуется нелокальными корреляциями между частицами, возникающими вследствие их совместного состояния... (снова серьёзно)
Чем полезен такой подход?
- Активные правила легко менять на лету, не нужно каждый раз их переписывать заново.
- Поведение нейросети становится полностью управляемым в режиме реального времени.
- Можно быстро переключать целые стили и протоколы общения простым изменением переменных.
Нюансы, о которых стоит помнить
- Порядок записей важен: последние значения могут заменить предыдущие.
- Переставлять записи местами не получится, можно только их удалять и добавлять заново.
- Если указаны противоречивые правила, модель может запросить уточнение.
Заключение
Этот подход открывает совершенно новые возможности по управлению поведением нейросети, превращая общение с ней из простого обмена репликами в программируемый и гибкий нейродиалог.
Теперь вы сможете легко создавать свои сценарии общения, настраивать модель под любые задачи и быстро менять стиль ответов.
Дополнение для продвинутых: формальный псевдокод, групповые операции и многое другое
Продвинутые пользователи могут формализовать переменные с помощью специального псевдокода, что позволит им точнее контролировать поведение нейромодели, например:
Также можно попробовать создать свои стилевые профили путём групповых присваиваний значений нескольким переменным, например:
Наставник:
Критик:
Это позволяет одним выражением включать заранее подготовленные стили общения, например:
Попробуйте сами: экспериментируйте, создайте свои переменные, предикаты и профили и убедитесь, насколько вам удобнее будет управлять общением с вашей любимой нейронкой при помощи обычной декларативной логики и наборов простых текстовых правил со сторожевыми условиями.
Возможности открываются поистине безграничные!
Для самых продвинутых: реалистичность и ограничения подхода
Методика условного управления правилами поведения нейромодели через текстовые переменные и защитные предикаты - триггеры включения правил – это не просто эффектный приём.
Это реальный, инженерный подход к логически программируемому нейродиалогу, реализуемый доступными средствами самой нейромодели, без использования внешних зависимостей.
Механизм работает благодаря тому, что модель учитывает содержимое памяти и контекст истории диалога, поэтому может адаптировать своё поведение в соответствии с явно заданными переменными и зависящими от них сторожевыми условиями.
Это делает предлагаемый мной подход вполне реалистичным и применимым уже сегодня, особенно для продвинутых пользователей, способных системно мыслить и формулировать простые, точные и непротиворечивые наборы инструкций.
Для точности и надежности работы есть смысл добавить соответствующие системные инструкции, описывающие метамодель нашего Нейро-Пролога, включая описание форматов записи значений переменных, логических триггеров включения правил, области видимости и приоритеты значений переменных, общий порядок действий, другие особенности. Но это для продвинутых юзеров не сложно, а в крайнем случае сама нейронка подскажет, как её лучше настроить.
Однако, как и у любой системы, у нашего метода есть ограничения:
- Чем точнее и проще – тем надёжнее. Простые переменные и понятные правила работают стабильнее. Чем сложнее логика, тем выше риск сбоев или неверной интерпретации.
- Отсутствие интерпретатора. Нейромодели не выполняют наш "псевдокод" – они лишь старательно имитируют его выполнение. Это значит, что даже если вы напишете логически корректные правила, модель может ошибиться в их применении. Она не проверяет строгую истинность условий, а просто очень старается соответствовать предполагаемому смыслу.
- Вероятностная природа ответов. Ни одна нейромодель не гарантирует однозначного поведения. Если одно и то же условие сформулировать по-разному, поведение модели может отличаться. Даже при повторении идентичного промпта возможны отклонения. Это делает нашу систему имманентно вероятностной, а не строго детерминированной.
- Контекстное окно. Все переменные и правила должны помещаться в контекст текущей сессии. В очень длинных диалогах самые ранние инструкции могут выпадать из внимания модели. Это необходимо учитывать и тестировать, особенно в случаях сложных наборов правил со множеством условий, имён переменных и их значений.
- Риск конфликтов. При множестве переменных и пересекающихся условий модель может запутаться в приоритетах. Особенно, если ваши правила явно не описывают, что делать при конфликте.
- Контентные фильтры и системные ограничения. Модель не выполнит правило, если оно противоречит внутренним политикам безопасности, – даже если ваши переменные это “разрешают“.
- Неявная и нестрогая интерпретация переменных. В отличие от обычной программы, значение переменной режим_ответа = краткий не всегда гарантирует вам "краткий" ответ. Это просто намёк для модели, и его восприятие зависит от многих факторов, в том числе от точности формулировки правил и их положения в памяти.
Вывод: Метод условных предикатов - триггеров правил – это инструмент гибкой настройки нейросети, но не полноценный язык программирования. Он не очень надёжен для критических приложений, но в рамках креативных, образовательных и исследовательских задач – это мощный, оригинальный способ управления поведением нейромодели. Данный метод подойдёт тем, кто уже умеет мыслить системно, но пока всё ещё работает с текстом.