Что будет, если дать GPT-3 браузер с интернетом?
Как предприниматель я уже давно мечтаю об ИИ-помощнике, а как разработчик пользуюсь штуками вроде GitHub Copilot и, конечно, GPT-3. Эти вещи в моей голове соединились в понимание того, что нужная мне технология ближе, чем кажется. На самом деле, нам почти только и осталось, что дать нейросетям возможность не только дополнять текст, но и совершать действия. Пока Microsoft готовит нам интеграцию Chat GPT в Bing, я решил поставить небольшой эксперимент и предоставить нейросети от OpenAI доступ к полноценному браузеру с возможностью ввода текста, нажатия кнопок и перехода по ссылкам.
Начнем с того, что API, к которому можно подключиться для Chat GPT-3 официально "coming soon", поэтому мне пришлось довольствоваться GPT-3 Text Completion API, то есть никакой истории чата, каждый запрос является для нейросети отдельным.
Я сделал приложение на Node.js и благодаря Electron создаю окно браузера, с возможностью передачи данных из браузера в Node и обратно. При загрузке каждой страницы подгружается JS скрипт, который отвечает за логику взаимодействия и отображает поле ввода для "задачи", которая далее становится частью общего prompt (запроса к нейросети).
Интерфейс нейросети исключительно текстовый, то есть передать желаемую веб-страницу мы не можем. По-хорошему, здесь нужна отдельная система в духе "компьютерного зрения" или хотя бы какой-то умный парсер, и это, конечно, будет сделано в серьезной разработке в самом ближайшем будущем, но для эксперимента на один день это было бы слишком, поэтому я решил просто передавать структуру HTML элементов и самые "содержательные" их атрибуты вроде value, type, name и т.д.
Затем в нейросеть передается довольно сложный Prompt, описывающий логику нашего взаимодействия.
Выше показана его стартовая часть, а далее еще более длинно описывается конкретная логика предоставляемых данных и требуемый формат ответов.
Нейросеть должна прислать ответ в JSON формате, содержащий список взаимодействий, которые она хочет совершить на странице (с указанием Id элемента), либо, если считает, что задача выполнена, отправить объект completed и информацию о результате, после чего будет выведено то самое окошко Task Completed, которое вы видите на картинках.
Общий prompt многократно корректировался, но в целом уже на этом этапе все более-менее работало. Реальной проблемой оказался лимит на длину запроса к API, который составляет 4096 токенов (примерно 10000 символов) из-за которого даже в финальной версии приложения нейросеть "видит" в основном только верхнюю часть страницы сложных сайтов, что сильно снижает качество результата.
Путем множества оптимизаций, включающих сокращения всего и вся, удаления структуры, лишних тегов, пробелов и тому подобного, страницы при передаче GPT-3 стали выглядеть примерно так (фрагмент):
А в запросе, помимо прочего, нейросети теперь объясняются значения сокращений:
После получения результата от API OpenAI, он передается в тот самый предзагруженный скрипт на странице и тот симулирует действия (нажатия, ввод, отправку) и выделяет красной рамкой элементы, с которыми происходит взаимодействие. Именно взаимодействие оказалось второй существенной проблемой, потому что многие сайты используют неочевидную вложенность элементов или реализуют интерактивность через JavaScript, так что даже когда нейросеть правильно попадает по элементу, взаимодействие не происходит. Но это, конечно, не будет препятствием в настоящей разработке.
Получив более-менее адекватный результат, я решил считать этот маленький эксперимент завершенным. Надо отметить, что на изображениях я показал избранные удачные дубли. Часто нейросеть не может попасть в правильный элемент, что через какое-то время автоматически вызывает перезагрузку страницы и я жду результата несколько итераций. Иногда случается досрочное завершение задачи, а стабильность "системы" снижается с удалением от стартовой страницы (ею был bing.com) из-за ошибочных переходов по неверным ссылкам. Но надо отдать должное GPT-3 в том, что она самостоятельно поддерживает порядок в списке взаимодействий таким образом, чтобы заполнения полей были в начале, а отправка форм в конце, и почти всегда отдает ответ в корректном JSON виде.
Подводя итог, на мой взгляд, распространение нейросетей, способных самостоятельно действовать — сёрфить интернет, пользоваться электронной почтой, соц. сетями, мессенджерами и совершать звонки, является перспективой самого ближайшего будущего.
P.S. Как я уже сказал, я разработчик и предприниматель. Мой основной бизнес это RocketBrush Studio — студия аутсорсинга и разработки игр. Мы активно растем и если вдруг вы лично ищете работу или ваша организация предлагает услуги для бизнеса, то у нас есть задачи в области управления, маркетинга, развития бизнеса и продаж (B2B, США \ Европа), SEO и SMM, Веб-дизайна, QA (Unity), Unity C# и Node.JS разработки. А также я ищу хорошего помощника :)
Вы можете связаться со мной через alex@rocketbrush.com. Я открыт для любых предложений в области бизнеса и IT \ gamedev.