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

В общем случае бизнес может настроить GPT-чат (доступно начиная с плана "GPT Plus" и выше) и предоставить к нему доступ — как публичный, так и по приватной ссылке.
К основным настройкам чата относятся:
-
название чата;
-
иконка;
-
краткое описание (до 300 символов);
-
инструкции (системный промпт);
-
фразы-стартеры (предложения для новых пользователей, чтобы начать диалог);
-
библиотека знаний (загружаемые файлы);
-
дополнительные возможности (поиск в сети, генерация изображений, интерпретатор кода);
-
действия (интеграция GPT-чата с внешними веб-сервисами).
Пример моего демо-чата — CustomGPT Integration Demo, скриншоты его настроек приведены ниже:



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

Демо-чат предоставляет следующие действия:
-
userSignUpInit
: инициирует процесс регистрации пользователя во внешнем приложении. -
emailTestSend
: отправляет запрос во внешнее приложение для отправки тестового email на адрес пользователя. -
userProfileUpdateInit
: запрашивает у внешнего приложения отправку ссылки на email пользователя для редактирования профиля или сброса парольной фразы. -
emailOwnerSend
: отправляет запрос во внешнее приложение на отправку email в свободном формате на адрес владельца бизнеса (в данном случае — на мой).
Настройка GPT-чата выполняется с использованием OpenAPI-спецификации (схемы).

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

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

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

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

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

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

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

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

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

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