Программируем ChatGPT: условные предикаты в памяти

Программируем ChatGPT.
Программируем ChatGPT.

Динамическое управление через правила в памяти, выборочно срабатывающие при истинности сторожевых условий в зависимости от текущих значений переменных

Представьте, что ваш собеседник – это не просто нейросеть, а гибкий партнёр по общению, который мгновенно переключает стиль общения, стоит лишь попросить его об этом. Например, одним словом можно заставить его шутить или стать строгим и серьёзным.

Звучит заманчиво?

Это реально и очень просто сделать при помощи памяти, переменных и условной логики предикатов.

В феврале 2024 года ChatGPT начал тестировать возможность сохранять информацию о пользователе и использовать её в будущих беседах.
В сентябре эта функция стала доступной для всех, а в апреле 2025 получила расширение, благодаря которому нейросеть начала учитывать всю историю общения.

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

Предлагаю опробовать придуманный мной оригинальный способ, который наверняка поможет существенно расширить ваши возможности.

Идея очень простая, а возможности безграничны

Метод основан на использовании текстовых переменных и простых сторожевых условий (защитных предикатов), зависящих от текущих значений этих переменных, и предваряющих каждое правило, которое должно использоваться, только если значение защитного предиката - триггера является истинным.

Это немного похоже на язык Prolog - классический декларативный язык логического программирования, основанный на логике предикатов первого порядка. Так что можно для определенности и наш метод смело назвать Нейро-Пролог (Neuro-Prolog).

Вы можете записать в память ChatGPT специальные переменные и их значения простым текстом, например:

использовать_юмор = да режим_критики = мягкий формат_ответа = список

Также вы можете задать в памяти простые защитные условия, зависящие от записанных переменных, и связать их с правилами таким образом, чтобы при истинности условия связанные с ним правила выполнялись бы нейросетью.

ЕСЛИ использовать_юмор = да ТО: Допускается лёгкий юмор в ответах. ИНАЧЕ: У нас с тобой всё серьёзно. ЕСЛИ режим_критики = строгий ТО: Использовать прямую и бескомпромиссную подачу. ЕСЛИ режим_критики = мягкий ТО: Не критиковать слишком сильно. ЕСЛИ формат_ответа = список ТО: Структурировать вывод в виде списка. ЕСЛИ формат_ответа = таблица ТО: Структурировать вывод в виде таблицы. ЕСЛИ: формат_ответа = НЕ таблица И НЕ список ТО: Не структурировать вывод; выводить в виде простого текста.

В результате в памяти будут одновременно храниться разные правила, которые вы сможете в любое время активировать или отключить одними лишь изменениями значений переменных.

Простое изменение значения переменной в промпте чата или в памяти позволит вам мгновенно переключать нейросеть из дружелюбного стиля в строгий, из академического в неформальный, буквально на лету и без утомительного переписывания длинных правил.

У вас появится своего рода панель управления, которая позволит вам мгновенно изменять как стиль общения, так и другие настройки поведения нейромодели.

Каскадность и приоритеты

Переменные можно задавать на трёх уровнях с разным приоритетом:

  • На уровне промпта – действует только на текущий вопрос;
  • На уровне чата – применяется ко всей текущей беседе;
  • На глобальном уровне – действует по умолчанию для всех чатов.

Порядок приоритетов выглядит так:

промпт > чат > глобал

Последовательность приоритетов.

Например, если на глобальном уровне вы отключили юмор, но для конкретного чата включили его, то ваш нейродруг будет шутить только в этом чате. Однако, если в том же чате для какого-нибудь отдельного вопроса вы явно отключите юмор, то ответ именно на этот вопрос будет в строгом стиле, несмотря на весёлые настройки данного чата.

То есть, значения переменных на уровне промпта имеют наивысший приоритет. Если значение какой-то переменной не установлено на уровне промпта, то будет использоваться её значение на уровне чата, если таковое имеется. При отсутствии значений на локальных уровнях - промпта и чата, будет применяться самое последнее глобальное значение, записанное в памяти. Поэтому имеет смысл всегда устанавливать в памяти значения по умолчанию для всех переменных.

Простые примеры использования

Глобальный уровень

Вы установили в памяти:

использовать_юмор = нет

Пользователь:
Расскажи о квантовой запутанности.

ChatGPT:
Квантовая запутанность – это явление, при котором состояния частиц взаимозависимы вне зависимости от расстояния между ними... (сухо и серьёзно)

Пример диалога

Уровень чата

Вы начинаете новый чат со словами:

Пользователь:
В этом чате: использовать_юмор = да

Пользователь:
Расскажи о квантовой запутанности.

ChatGPT:

Представьте, что два шарика танцевали вместе, а затем разлетелись далеко друг от друга. Стоит одному из них повернуться – второй сразу повторит движение. Настоящая квантовая любовь, правда?

Пример диалога

Уровень промпта

Внутри конкретного запроса:

Пользователь:
Расскажи о квантовой запутанности без шуток.
использовать_юмор = нет

ChatGPT:
Квантовая запутанность характеризуется нелокальными корреляциями между частицами, возникающими вследствие их совместного состояния... (снова серьёзно)

Пример диалога

Чем полезен такой подход?

  • Активные правила легко менять на лету, не нужно каждый раз их переписывать заново.
  • Поведение нейросети становится полностью управляемым в режиме реального времени.
  • Можно быстро переключать целые стили и протоколы общения простым изменением переменных.

Нюансы, о которых стоит помнить

  • Порядок записей важен: последние значения могут заменить предыдущие.
  • Переставлять записи местами не получится, можно только их удалять и добавлять заново.
  • Если указаны противоречивые правила, модель может запросить уточнение.

Заключение

Этот подход открывает совершенно новые возможности по управлению поведением нейросети, превращая общение с ней из простого обмена репликами в программируемый и гибкий нейродиалог.

Теперь вы сможете легко создавать свои сценарии общения, настраивать модель под любые задачи и быстро менять стиль ответов.

Дополнение для продвинутых: формальный псевдокод, групповые операции и многое другое

Продвинутые пользователи могут формализовать переменные с помощью специального псевдокода, что позволит им точнее контролировать поведение нейромодели, например:

# Только текущий вопрос @промпт: использовать_юмор = нет # Весь текущий чат @чат: режим_критики = строгий # По умолчанию для всех чатов @глобально: формат_ответа = список

Также можно попробовать создать свои стилевые профили путём групповых присваиваний значений нескольким переменным, например:

Наставник:

ЕСЛИ Профиль = Наставник, ТО: { использовать_юмор = мягкий режим_критики = конструктивный формат_ответа = список }

Критик:

ЕСЛИ Профиль = Критик, ТО: { использовать_юмор = нет режим_критики = строгий формат_ответа = текст }

Это позволяет одним выражением включать заранее подготовленные стили общения, например:

Профиль = Наставник

Попробуйте сами: экспериментируйте, создайте свои переменные, предикаты и профили и убедитесь, насколько вам удобнее будет управлять общением с вашей любимой нейронкой при помощи обычной декларативной логики и наборов простых текстовых правил со сторожевыми условиями.

Возможности открываются поистине безграничные!

Для самых продвинутых: реалистичность и ограничения подхода

Методика условного управления правилами поведения нейромодели через текстовые переменные и защитные предикаты - триггеры включения правил – это не просто эффектный приём.

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

Механизм работает благодаря тому, что модель учитывает содержимое памяти и контекст истории диалога, поэтому может адаптировать своё поведение в соответствии с явно заданными переменными и зависящими от них сторожевыми условиями.

Это делает предлагаемый мной подход вполне реалистичным и применимым уже сегодня, особенно для продвинутых пользователей, способных системно мыслить и формулировать простые, точные и непротиворечивые наборы инструкций.

Для точности и надежности работы есть смысл добавить соответствующие системные инструкции, описывающие метамодель нашего Нейро-Пролога, включая описание форматов записи значений переменных, логических триггеров включения правил, области видимости и приоритеты значений переменных, общий порядок действий, другие особенности. Но это для продвинутых юзеров не сложно, а в крайнем случае сама нейронка подскажет, как её лучше настроить.

Однако, как и у любой системы, у нашего метода есть ограничения:

  • Чем точнее и проще – тем надёжнее. Простые переменные и понятные правила работают стабильнее. Чем сложнее логика, тем выше риск сбоев или неверной интерпретации.
  • Отсутствие интерпретатора. Нейромодели не выполняют наш "псевдокод" – они лишь старательно имитируют его выполнение. Это значит, что даже если вы напишете логически корректные правила, модель может ошибиться в их применении. Она не проверяет строгую истинность условий, а просто очень старается соответствовать предполагаемому смыслу.
  • Вероятностная природа ответов. Ни одна нейромодель не гарантирует однозначного поведения. Если одно и то же условие сформулировать по-разному, поведение модели может отличаться. Даже при повторении идентичного промпта возможны отклонения. Это делает нашу систему имманентно вероятностной, а не строго детерминированной.
  • Контекстное окно. Все переменные и правила должны помещаться в контекст текущей сессии. В очень длинных диалогах самые ранние инструкции могут выпадать из внимания модели. Это необходимо учитывать и тестировать, особенно в случаях сложных наборов правил со множеством условий, имён переменных и их значений.
  • Риск конфликтов. При множестве переменных и пересекающихся условий модель может запутаться в приоритетах. Особенно, если ваши правила явно не описывают, что делать при конфликте.
  • Контентные фильтры и системные ограничения. Модель не выполнит правило, если оно противоречит внутренним политикам безопасности, – даже если ваши переменные это “разрешают“.
  • Неявная и нестрогая интерпретация переменных. В отличие от обычной программы, значение переменной режим_ответа = краткий не всегда гарантирует вам "краткий" ответ. Это просто намёк для модели, и его восприятие зависит от многих факторов, в том числе от точности формулировки правил и их положения в памяти.

Вывод: Метод условных предикатов - триггеров правил – это инструмент гибкой настройки нейросети, но не полноценный язык программирования. Он не очень надёжен для критических приложений, но в рамках креативных, образовательных и исследовательских задач – это мощный, оригинальный способ управления поведением нейромодели. Данный метод подойдёт тем, кто уже умеет мыслить системно, но пока всё ещё работает с текстом.

Пишите, что у вас получается!

1
Начать дискуссию