Около трёх месяцев назад я задумался о том, что в ближайшем будущем взаимодействие человека с техносферой (программно-аппаратно-сетевой инфраструктурой) будет происходить скорее через мессенджеры, такие как 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.
VNagin
Alex, отличная статья! Спасибо! Учитывая ограничения в передаче данных от внешнего приложения к GPT-чату, какие альтернативные архитектурные решения вы бы предложили для создания более гибкой системы двусторонней коммуникации?
flancer Автор
Спасибо на добром слове :) У Open AI в ChatGPT я в принципе не вижу возможности доставки информации до пользователя без его на то явного пожелания. Их фишка не коммуникация, а ИИ.
И вот если пользователю в разговоре с ИИ понадобится информация от внешнего источника, только в этот момент появляется возможность предоставить информацию пользователяю. Другими словами, пользователь может запросить погоду в своём городе у GPT-чата и чат сможет сформулировать запрос и отправить его к внешнему источнику (если он подключен), а затем представить результат пользователю (pull-модель отношений).
Если же бизнесу в его отношениях с пользователем нужна push-модель, то придётся создавать альтернативный канал доставки информации от бизнеса к пользователю (email, мессенджер, Web Push, наконец).
Для двусторонней коммуникации с пользователем наиболее интересно для меня выглядит "туннель" от пользователя к OpenAI API внутри мессенджера (Телеграм, например). Но это, разумеется, если бизнес готов (и может!) платить за использование ИИ сам. Или у него есть ресурсы самому запускать LLM в достаточном объёме. В таком случае пользователь, не выходя из своего мессенджера, может взаимодействовать через него с ИИ, а бизнес может не только модерировать запросы пользователя (создавать дополнительный контекст, исходя из имеющихся у него данных по пользователю), но и в любой момент напрямую отправлять данные пользователю (например, по крону). В том числе и с предварительной обработкой данных пользователя через ИИ,