Около трёх месяцев назад я задумался о том, что в ближайшем будущем взаимодействие человека с техносферой (программно-аппаратно-сетевой инфраструктурой) будет происходить скорее через мессенджеры, такие как Telegram, чем через привычный браузер. Частое использование чатов на смартфоне быстро подтолкнуло меня к попытке снова попробовать голосовой ввод вместо привычных тапов по виртуальной клавиатуре или набора слов жестами. К моему приятному удивлению, распознавание голоса сейчас достигло очень высокого уровня как на Android, так и на iPhone. Причём настолько высокого, что STT (speech-to-text) стал для меня основным способом ввода текста в чатах, включая браузер.

Поскольку искусственный интеллект в целом, и технологии OpenAI в частности, уже практически стали повседневной нормой (по крайней мере, для меня), я, естественно, начал использовать голосовое общение и в GPT-чатах. А узнав о действиях (actions) в настраиваемых GPT-чатах, я сразу загорелся идеей соединить GPT-чат с каким-нибудь внешним приложением. Однако на этом этапе встал вопрос: как аутентифицировать пользователей чата во внешнем приложении? Несмотря на то что OpenAI предлагает использовать OAuth 2.0 для интеграции, в этой статье я рассмотрю альтернативный вариант — парольную аутентификацию, которая, на мой взгляд, лучше подходит для голосового взаимодействия.

Настраиваемый чат

С точки зрения интеграции, GPT-чат по сравнению с Telegram-чатом всё ещё находится на начальной стадии развития. OpenAI предлагает только одно направление передачи данных — от чата наружу:

Общая схема взаимодействия GPT-чата с внешними приложениями
Общая схема взаимодействия GPT-чата с внешними приложениями

В общем случае бизнес может настроить GPT-чат (доступно начиная с плана "GPT Plus" и выше) и предоставить к нему доступ — как публичный, так и по приватной ссылке.

К основным настройкам чата относятся:

  • название чата;

  • иконка;

  • краткое описание (до 300 символов);

  • инструкции (системный промпт);

  • фразы-стартеры (предложения для новых пользователей, чтобы начать диалог);

  • библиотека знаний (загружаемые файлы);

  • дополнительные возможности (поиск в сети, генерация изображений, интерпретатор кода);

  • действия (интеграция GPT-чата с внешними веб-сервисами).

Пример моего демо-чата — CustomGPT Integration Demo, скриншоты его настроек приведены ниже:

Имя, описание, инструкции
Имя, описание, инструкции
Фразы-стартеры и файлы знаний
Фразы-стартеры и файлы знаний
Возможности и действия
Возможности и действия

Действия в чате

Действия — это именно та функция, которая позволяет интегрировать GPT-чат с внешними веб-приложениями. Эти действия группируются по доменам, которые соответствуют адресам веб-сервисов в интернете. В моём случае используется один домен — user.demo.gpt.wiredgeese.com, на котором размещены четыре веб-сервиса.

Список доступных действий
Список доступных действий

Демо-чат предоставляет следующие действия:

  • userSignUpInit: инициирует процесс регистрации пользователя во внешнем приложении.

  • emailTestSend: отправляет запрос во внешнее приложение для отправки тестового email на адрес пользователя.

  • userProfileUpdateInit: запрашивает у внешнего приложения отправку ссылки на email пользователя для редактирования профиля или сброса парольной фразы.

  • emailOwnerSend: отправляет запрос во внешнее приложение на отправку email в свободном формате на адрес владельца бизнеса (в данном случае — на мой).

Настройка GPT-чата выполняется с использованием OpenAPI-спецификации (схемы).

Импорт OpenAI-спецификации
Импорт OpenAI-спецификации

Доступ к веб-сервису ограничивается с помощью авторизации. В моём случае используется заголовок Authorization: Bearer ...):

Настройки аутентификации
Настройки аутентификации

Доступность решения

По странам

GPT-чаты доступны во многих странах, но есть ряд регионов, где их использование недоступно. К таким странам относятся:

  • Китай

  • Гонконг

  • Россия

  • Иран

  • Северная Корея

  • Сирия

  • Куба

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

По подписке

Для использования GPT-чатов необходима хотя бы минимальная подписка на сайте chatgpt.com. Хотя OpenAI утверждает, что преднастроенные чаты доступны даже для бесплатных планов, я бы не рекомендовал основывать на этом свою бизнес-модель. Пользователи с бесплатным планом могут использовать преднастроенный чат какое-то время, однако это больше похоже на демонстрацию возможностей самого ChatGPT. Кроме того, пользователи с бесплатным планом периодически могут сталкиваться с такими сообщениями в чате:

Уведомление об ограничении доступа
Уведомление об ограничении доступа

Голосовое взаимодействие

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

STT-преобразование

В этом варианте пользователь использует возможности смартфона для преобразования голоса в текст. Для GPT-чата такой способ ввода практически не отличается от набора текста с помощью клавиатуры.

Набор голосом через STT
Набор голосом через STT

Ответы чата в этом случае будут выводиться в текстовом формате.

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

Включение записи аудио-файла
Включение записи аудио-файла

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

Диалог GPT

Вы можете переключить своё GPT-приложение в режим голосового диалога:

Переход в режим голосового общения
Переход в режим голосового общения

В этом случае взаимодействие с GPT-чатом будет происходить исключительно голосом.

Чат готов к общению
Чат готов к общению

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

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

Отправка данных чатом на сервер

В текущем состоянии эта функция реализована довольно неудобно с точки зрения UX. Наиболее комфортный вариант, с которым мне удалось столкнуться, — это нативное приложение ChatGPT для Android, работающее в режиме диалога.

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

Хотя в GPT-чате предусмотрена возможность отключить подтверждение отправки данных на соответствующий внешний сервер:

Настройка разрешений для действий
Настройка разрешений для действий

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

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

Контроль отправляемых данных
Контроль отправляемых данных

Заключение

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

В целом, эксперимент можно считать успешным:

  • Интеллектуальных возможностей GPT-чата более чем достаточно для распознавания запросов пользователя и подготовки данных в нужном формате для взаимодействия с внешним веб-сервисом через действия.

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

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

  • Самая большая сложность — подтверждение через email. Некоторые адреса сложно продиктовать голосом, их проще вводить вручную. В таких случаях было бы удобнее использовать подтверждение через номер мобильного телефона с цифровым вводом, аналогично PIN.

  • Очевидно, что безопасность данных (PIN и паролей), хранящихся в чате, оставляет желать лучшего. Любой, кто получит доступ к вашему чату, сможет легко запросить секретную информацию.

В целом, я удовлетворён результатами эксперимента. Хотя область применения такой интеграции не слишком широка, использование аутентификации через OAuth может существенно повысить безопасность. Однако однонаправленность передачи данных (от чата к внешнему приложению) ограничивает возможности. Интересные перспективы открываются при совмещении GPT-чата с Telegram-ботами. На мой взгляд, широкое применение мессенджеров может со временем вытеснить Web Push API.

Список ссылок:

Комментарии (2)


  1. VNagin
    07.12.2024 23:37

    Alex, отличная статья! Спасибо! Учитывая ограничения в передаче данных от внешнего приложения к GPT-чату, какие альтернативные архитектурные решения вы бы предложили для создания более гибкой системы двусторонней коммуникации?


    1. flancer Автор
      07.12.2024 23:37

      Спасибо на добром слове :) У Open AI в ChatGPT я в принципе не вижу возможности доставки информации до пользователя без его на то явного пожелания. Их фишка не коммуникация, а ИИ.

      И вот если пользователю в разговоре с ИИ понадобится информация от внешнего источника, только в этот момент появляется возможность предоставить информацию пользователяю. Другими словами, пользователь может запросить погоду в своём городе у GPT-чата и чат сможет сформулировать запрос и отправить его к внешнему источнику (если он подключен), а затем представить результат пользователю (pull-модель отношений).

      Если же бизнесу в его отношениях с пользователем нужна push-модель, то придётся создавать альтернативный канал доставки информации от бизнеса к пользователю (email, мессенджер, Web Push, наконец).

      Для двусторонней коммуникации с пользователем наиболее интересно для меня выглядит "туннель" от пользователя к OpenAI API внутри мессенджера (Телеграм, например). Но это, разумеется, если бизнес готов (и может!) платить за использование ИИ сам. Или у него есть ресурсы самому запускать LLM в достаточном объёме. В таком случае пользователь, не выходя из своего мессенджера, может взаимодействовать через него с ИИ, а бизнес может не только модерировать запросы пользователя (создавать дополнительный контекст, исходя из имеющихся у него данных по пользователю), но и в любой момент напрямую отправлять данные пользователю (например, по крону). В том числе и с предварительной обработкой данных пользователя через ИИ,