ГЛУБОКОЕ ПОГРУЖЕНИЕ В ОДНО ИЗ САМЫХ КРУТЫХ ПРИЛОЖЕНИЙ ИИ.

Демистификация ChatGPT

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

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

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

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

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

К сожалению, API недоступен.

Почти каждый разработчик ищет API для взаимодействия и интеграции chatGPT в свое приложение. К сожалению, OpenAPI не предлагает общедоступный API для использования через их SDK или простой HTTP-интерфейс, как поясняет модель по запросу.

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

В этой статье обратный инжиниринг частных API предлагает лучшее понимание поведения chatGPT и некоторые сведения о его внутреннем функционировании.

Обратный инжиниринг демо-приложения

Отказ от ответственности: эта статья предназначена исключительно для лучшего понимания внутренних функций chatGPT, пока мы ожидаем, что OpenAI выпустит полную документацию и поддержку через свои официальные SDK с соответствующей оплатой. Будьте осторожны, потому что API могут быть изменены без предварительного уведомления, поскольку они не являются общедоступными, и/или ваша учетная запись может быть заблокирована за ненадлежащее использование службы. Если вы используете результаты этого анализа, делаете это на свой страх и риск.

Демонстрационное приложение ChatGPT — это веб-приложение, выпущенное на HTML, CSS и Javascript. Его код полностью минимизирован и разбит на части с помощью веб-пакета, но с помощью инспектора Chrome относительно легко отслеживать удаленные сетевые вызовы и идентифицировать некоторые интересные факты.

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

Вызов этих конечных точек из любого клиента REST позволяет взаимодействовать с моделью чата, например с демонстрационным приложением. Большая часть работы выполняется через HTTP-заголовки, которые передают параметры в серверную часть без сохранения состояния, что позволяет восстановить сеанс и состояние пользователя. Чтобы обеспечить доступ к службам чата через веб-приложение, OpenAI требует указать заголовок пользовательского агента, который мы должны соответствующим образом установить в нашем HTTP-клиенте в допустимое значение; в противном случае наши запросы будут отклонены. В нашем случае для эмуляции пользовательского агента Chrome на Mac OS X. Этот заголовок должен быть установлен в любом запросе.

Получение токена сеанса

Как только имя пользователя известно после входа в систему, первым шагом является получение объекта сеанса из его относительной конечной точки (https://chat.openai.com/api/auth/session). Это достигается с помощью вызова, который возвращает следующую полезную нагрузку:

Также возвращается токен доступа со значимой информацией о пользователе за один месяц. Токен представляет собой стандартный токен JWT, который можно декодировать для извлечения информации о пользователе, поставщике удостоверений (в основном Google через Auth0) и авторизованных областях для пользовательских данных.

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

2. Начните разговор

Используя полученный токен, мы можем вызвать конечную точку диалог (https://chat.openai.com/backend-api/conversation) со следующими параметрами. Интересным аспектом является то, что первое сообщение требует установки атрибута действия как вариант, а затем массив сообщений.

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

Чтобы привести пример, первый ответ в потоке

Пока последний фрагмент потока

Каждый фрагмент отправляется обратно в виде строкового JSON, содержащего текстовые данные и ид_беседы, который помогает обрабатывать продолжение беседы.

3. Продолжение разговора

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

Одним из наиболее интересных атрибутов полезной нагрузки является атрибут model, который указывает на text-davinci-002-render, предполагая, что он использует OpenAI davinci-002. модель под капотом. Эта модель была настроена так, чтобы предоставлять информацию, относящуюся к chatGPT, и модерировать результаты.

Мониторинг модерации также осуществляется через конечную точку moderation (https://chat.openai.com/backend-api/moderations), которая получает весь текст чата каждый раз, когда добавляется новое предложение ( либо моделью, либо пользователем) и возвращает отзыв о том, содержит ли беседа конфиденциальную информацию или нет.

Куда пойти отсюда?

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

Меня зовут Лука Бьянки. Я главный технический директор в Neosperience и автор книги Шаблоны бессерверного проектирования и рекомендации. Я создавал программные архитектуры для крупномасштабных производственных рабочих нагрузок на AWS почти десять лет.

Вы можете связаться со мной через Twitter и LinkedIn.