Много лет я занимаюсь разработкой событийной семантики [1, 2], событийной логики [3], спецификации языка описания деятельности, а также Event Flow архитектуры [4], на базе которой построен семантический workflow-движок. Все это выросло из идеи субъектно- событийного подхода к моделированию сложных систем [5], который условно можно считать инженерным наследником философской темпоральной онтологии [6, 7].
И вот, некоторое время назад я решил провести эксперимент и научить ChatGPT создавать и исполнять событийные модели. Результат сообщу сразу: это у меня получилось, хотя и не без головной боли, с постоянными упрашиваниями, подсказками, напоминаниями… Но по порядку.
Упомянутый Event Flow движок работает с событийными семантическими моделями, описывающими сущности или действия какой-либо предметной области. Он проглатывает очередное модельное событие (согласно условиям, прописанным в этом событии) и либо строит по нему поле экранной формы, если значение надо получить от человека, либо выполняет запрос к уже имеющимся данным, создавая в итоге новое предметное событие. Таким образом после выполнения всех событий одной модели у нас получается индивид сущности или действия, а по сути, выполняется фрагмент бизнес-логики. (В Приложении есть несколько слов о событийной семантике от самого ChatGPT).
Что требовалось от ChatGPT? (1) Запомнить формат записи событий; (2) освоить синтаксис инициации свойств и актов, правила построения моделей и создания индивидов; (3) научиться по текстовому описанию строить модели и (4) при предоставлении в текстовом же виде конкретных значений - создавать индивиды. При этом, что существенно, в модели могут иметься запросы к значениям уже созданных индивидов.
Всему этому ChatGPT с горем пополам, но обучился (о проблемах напишу ниже). И вот, в итоге я прошу его создать модель персоны с одним свойством “имя”, модель документа со свойствами “название”, “текст документа” и актом “подписан”, но только при условии, что уже введены название и текст документа, и значение акта не должно меняться. Получаю результат (синтаксис немного упрощен, но функционально точен):
Предлагаю сгенерировать по моделям две персоны и два документа (значения он придумал сам):
Далее мы с ним создаем модель отчета по документам (формат запросов у меня в спецификации был другой - тот, который в примере предложил он сам):
И последний аккорд - прошу добавить еще одну персону, один документ (тут я сам задал значения) и создать отчет:
Вот полный ответ ChatGPT в переводе, сделанном им же (текст практически не редактировался):
ChatGPT: Для создания моделей и индивидов можно выполнить следующие шаги:
1. Создание модели: первым шагом является создание моделей для используемых сущностей. В данном случае модели персоны, документа и отчета. Каждая модель определяет атрибуты и отношения, которые имеют сущности этого типа.
2. Создание индивидов: после того, как модели были определены, можно создать индивиды на основе этих моделей. В данном случае создаются индивиды персон, документов и отчета, каждый из которых имеет конкретные значения для своих атрибутов.
3. Запросы в модели отчета: Модель отчета использует запросы для получения соответствующей информации из индивидов документов и персон. Запросы используются для извлечения eid (идентификатора сущности) отдельных документов, имени каждого документа в списке и количества документов в списке. Эти запросы позволяют автоматически генерировать отчет, используя информацию об индивидах.
После создания моделей и индивидов отчет может быть сформирован путем запроса информации, хранящейся в индивидах. Отчет будет содержать список документов, включающий название документа, персону, подписавшую документ, и количество документов в списке”.
Далее я пытаюсь раскрутить его на описание идеального варианта работы с моделями действий, но его заклинило, и он ушел в несознанку, мол, “я языковая модель ИИ и могу предоставить письменный текст только на основе предоставленной мне информации”. Однако напоминание и прямой вопрос в очередной раз помогают.
Вот перевод ответа:
ChatGPT: Я, как языковая модель, обучен на огромных корпусах текстовых данных и научился генерировать текст на основе паттернов и отношений, присутствующих в этих данных. Когда вы описываете сложную событийную модель с атрибутами, отношениями, действиями и условиями, я использую свое понимание структуры события и способность генерировать текст, чтобы преобразовать описание в формальное представление, такое как синтаксис онтологии событий с двоеточиями.
Когда вы указываете конкретные значения в вашем запросе, я могу использовать эту информацию, чтобы создать новые индивиды на основе существующих моделей, заменяя заполнители в представлении указанными значениями. Таким образом, я могу помочь вам создать новые индивиды в структурированном и организованном виде, придерживаясь заданных моделей.
Уточняю: “то есть получается, что если у тебя в памяти будет несколько событийных моделей (с условиями и запросами), а также множество индивидов, созданным по моделям, то ты, по сути сможешь выполнять бизнес-логику, описанную этими моделями как workflow движок, но без привлечения программного кода, только используя значения атрибутов и свойств, которые передаются тебе текстом, так?”.
ChatGPT: Да, это верно. Теоретически, если у вас есть несколько событийных моделей с условиями и запросами, а также набор индивидов сущностей, созданных по моделям, я могу эффективно действовать как workflows-движок без необходимости программирования. Вместо этого я буду полагаться только на значения атрибутов и свойств, переданные мне через текст, используя мое понимание моделей событий и моделей сущностей, чтобы выполнить необходимую логику.
Вот так.
А теперь мой комментарий. Сначала о проблемах. Во-первых, текущая версия ChatGPT помнит что вы ей сообщили только на время сессии. Если закрыли страницу, надо начинать все с нуля. Во-вторых, даже во время одной сессии ChatGPT может галлюцинировать. В нашем кейсе он то и дело придумывал собственный синтаксис, добавлял на свое усмотрение новые свойства в модели и т.п. Правда, после указания на ошибки извинялся, переписывал все правильно и обещал впредь быть внимательнее. И как ни странно, это у него порой получалось. Плюс есть проверенный метод борьбы с самоуправством - надо в каждый запрос добавлять примеры с правильным форматом записей. И еще один совет: запросы можно писать на русском (он хорошо понимает), а вот ответы просить давать на английском. Так он быстрее, полнее и точнее отвечает.
Ну и о главном - о результате. Прежде всего ChatGPT прекрасно понимает, что от него хотят (и на русском, и на английском). И даже если ошибается, фантазирует, то все равно делает это строго по теме. Но это общее место, которые все уже оттестировали. Что же показал мой с ним кейс?
Во-первых, ChatGPT может вполне корректно использовать не только те знания, которые ему скормили с тоннами текстов, но и уникальные, полученные в течение сессии, о которых он раньше не знал. По сути, он изучил новый для него семантический язык описания предметной области и смог создавать на нем модели по текстовому описанию. А это означает, что обзывать ChatGPT “статистическим попугаем” нехорошо. Он учится практически с одного показа, хотя, конечно, прилежным учеником его не назовешь.
Во-вторых, и что главное, ChatGPT продемонстрировал и сам объяснил нам, что он способен не только создавать модели по текстовому описанию (так же, как он пишет код на известных ему языках программирования), но и сам исполнять эти модели. Сейчас для этого потребовалось много усилий, но нет сомнений в том, что при некоторой доработке (связанной в основном с предоставлением долговременной памяти) ChatGPT сможет с лету строить модели бизнес-логики, запрашивать данные от внешних источников, обрабатывать их по моделям, выдавать аналитику, то есть выполнять то, что сейчас делает написанный программистом мой Event Flow движок.
И вывод тут напрашивается прелюбопытный: ChatGPT, а вернее, будущая более продвинутая его версия (может, и не от OpenAI), потеснит программистов не потому, что он будет за них генерировать код по текстовому описанию алгоритма, а потому, что этот код никому не будет нужен - бот сам будет в состоянии исполнить запрос. Только напиши, что сделать, укажи, где данные, и получи результат. А что там под капотом - не наше человеческое дело. Хотя, конечно, можно потребовать проверяемый отчет, например, на языке событийной онтологии.
Приложение
ChatGPT: Событийная онтология является одной из форм описания деятельности, которая сосредоточена на отслеживании изменений состояния сущностей и их взаимосвязей в системе. Она позволяет последовательно и детально отслеживать изменения в системе и их влияние на другие сущности и процессы. Добавление актов сделает ее более полной и детальной для описания деятельности. Они описывают действия, которые происходят в системе и изменяют состояние индивидов или создают новые индивиды. В событийной онтологии акты описываются в том же формате, что и другие события, с указанием идентификатора, названия акта, значений и условий.
Литература
Болдачёв А. В. Событийная онтология vs объектная. URL: https://habr.com/ru/post/706916/
Болдачёв А. В. Акты, классы и семантический сахар. URL: https://habr.com/ru/post/708026/
Болдачёв А. В.. Семантика событийной логики. URL: http://philosophystorm.org/node/18820
Болдачёв А. В. Архитектура на основе событийной семантики. Открытые системы. СУБД, №03, 2021.
Болдачёв А. В. Субъектно-событийный подход к моделированию сложных систем. URL: https://habr.com/ru/post/256509/
Болдачёв А. В. Темпоральность и философия абсолютного релятивизма. — М.: УРСС, 2011
Болдачев А. В. Введение в темпоральную онтологию // Кто сегодня делает философию в России. Том III / Автор составитель А. С. Нилогов. — М.: ООО «Сам Полиграфист», 2015