Аутентификация пользователей в действиях GPT: создание персонального помощника по расписанию
Создайте персонализированный опыт для ваших пользователей непосредственно в GPT. В этом руководстве показано, как использовать OAuth для создания персонального помощника по расписанию GPT.
GPTs отлично подходят для глубокого кастомизации опыта ChatGPT для конкретных случаев использования. Более того, они позволяют вам напрямую взаимодействовать с вашими сервисами, используя действия.
В этом руководстве мы покажем вам, как использовать OAuth для аутентификации пользователей в действиях ваших GPTs. Мы создадим персонального помощника по расписанию, который позволит пользователям управлять своими событиями непосредственно в GPT.
Итоговый GPT будет выглядеть так:
Слева - взаимодействие пользователя с GPT; справа - веб-приложение, которое показывает расписание пользователя. С помощью этого подхода доступны и другие возможности, такие как:
- Создание персонального помощника, который помогает пользователям усваивать электронные письма и новости.
- Создание GPT для поиска и бронирования авиабилетов без выхода из беседы.
Результаты и ресурсы этого руководства:
- Итоговый GPT доступен на ChatGPT.
- Демонстрационное веб-приложение доступно на gpt-agenda.fordemo.app.
- Полный код доступен на GitHub.
Предварительные требования
- На момент написания GPT доступны только для пользователей ChatGPT Plus и выше.
- Тенант Logto Cloud. Зарегистрируйтесь бесплатно, если у вас его нет.
- Домен, который вы можете контролировать. Он будет использоваться как для GPT, так и для Logto Cloud.
- Веб-приложение, которое может открывать REST API. В этом руководстве мы используем заранее построенное приложение для управления расписанием.
Создание и настройка GPT
Создание GPT
- Откройте ChatGPT, слева нажмите кнопку Explore GPTs, затем нажмите кнопку Create в правом верхнем углу.
- На новой странице GPT введите имя и описание для вашего GPT. Например, Помощник по расписанию и Управляет вашим расписанием непосредственно в беседе.
- Вы можете загрузить логотип для вашего GPT или использовать DALL-E, чтобы создать его, нажав на значок плюс.
Создание действия
Нажмите кнопку Создать новое действие внизу. На новой странице есть три раздела:
- Аутентификация: Этот раздел позволяет настроить, как пользователи проходят аутентификацию с вашим действием. Оставьте Нет пока что.
- Схема: OpenAPI схема в формате YAML, определяющая REST API для вашего действия. Чем более детализирована схема, тем лучше GPT может понять намерения пользователя.
- Политика конфиденциальности: URL политики конфиденциальности для вашего действия.
В этом руководстве у нас есть заранее построенное приложение для управления расписанием, которое открывает REST API для управления расписанием пользователя. Вы можете найти OpenAPI схему в репозитории GitHub.
После вставки схемы GPT автоматически распознает конечные точки и создаст для вас таблицу. Вы можете нажать кнопку Тест для тестирования конечных точек.
GPT запросит ваше разрешение на выполнение вызова API. Нажмите кнопку Разрешить или Всегда разрешать, чтобы продолжить.
Если ваша конечная точка требует аутентификации, вы увидите сообщение об ошибке, как выше. Когда мы проверяем логи сервера, мы видим, что GPT отправляет запрос без какой-либо информации о аутентификации.
Настроить пользовательский домен в Logto Cloud
ChatGPT требует, чтобы как действия, так и конечные точки аутентификации находились на одном корневом домене. Например, если конечная точка ваших действий - https://api.example.com/
, тогда конечная точка аутентификации должна быть что-то вроде https://auth.example.com/
.
Чтобы соответствовать этому требованию, нам нужно настроить пользовательский домен в Logto Cloud. После входа в Logto Cloud нажмите вкладку Настройки слева, затем вкладку Домены сверху.
Обычно настройка занимает лишь несколько минут. После ее завершения вы увидите, что пользовательский домен стал В использовании.
Создать приложение в Logto Cloud
Чтобы выполнить аутентификацию OAuth, нам нужно создать приложение в Logto Cloud. После входа в Logto Cloud нажмите вкладку Приложения слева, затем нажмите кнопку Создать приложение в правом верхнем углу.
На новой странице нажмите "Создать приложение без фреймворка" внизу. Выберите "Традиционное веб" в виде типа приложения и введите имя для вашего приложения, например, GPT Помощник по расписанию. Затем нажмите "Создать приложение" внизу.
После создания приложения перейдите к карточке ENDPOINTS & CREDENTIALS (возможно, вам потребуется немного прокрутить вниз). Нажмите Показать детали конечной точки, чтобы развернуть информацию.
Настроить действие
Теперь вернитесь на страницу действий GPT, нажмите раздел Аутентификация, затем выберите OAuth. Элементы формы соответствуют информации в Logto Cloud следующим образом:
- ID клиента: ID приложения в Logto Cloud.
- Секрет клиента: Секрет приложения в Logto Cloud.
- URL авторизации: Конечная точка авторизации в Logto Cloud.
- URL токена: Конечная точка токена в Logto Cloud.
Для поля Объем введите openid offline_access
; для поля "Метод обмена токенами" оставьте значение по умолчанию (POST запрос).
Наконец, нажмите кнопку Сохранить внизу.
Обновить конфигурацию приложения Logto
Вернитесь на страницу конфигурации GPT, и теперь вы увидите поле URL обратного вызова в разделе Действия.
Скопируйте этот URL, затем вернитесь на страницу приложения Logto Cloud. Вставьте URL в раздел URI переадресации.
Теперь прокрутите вниз, включите Всегда выдавать токен обновления, чтобы поддерживать поддержку токена обновления для GPT. Это может помочь вашим пользователям оставаться вошедшими в систему дольше в GPT.
Затем нажмите кнопку Сохранить внизу.
Контрольная точка: протестируйте поток OAuth
Теперь у нас всё готово, давайте протестируем поток OAuth, чтобы убедиться, что все работает как ожидалось. Вернитесь на страницу конфигурации GPT, нажмите действие, которое мы создали, затем нажмите кнопку Тест для конечной точки listItems (первая).
В разделе предварительного просмотра вас попросят войти в систему. Нажмите кнопку Войти с [вашим именем действия], затем завершите поток OAuth.
Вы можете настроить опыт входа, например брендинг и методы входа, в Logto Cloud. Для получения дополнительной информации, пожалуйста, обращайтесь к 🎨 Настроить опыт входа.
Если всё работает как ожидалось, ваш сервер на заднем плане должен получить запрос с токеном доступа в заголовке Authorization
. В нашем случае сервер на заднем фоне - это приложение для управления расписанием. Он вернет расписание пользователя в теле ответа:
Удивительно, так как наша схема OpenAPI достаточно детальна, GPT может выполнять вызов API без какой-либо дополнительной настройки. Например, если вы нажмете кнопку Тест для конечной точки createItems, вы увидите, что GPT генерирует для вас тело запроса (или попросит вас предоставить недостающую информацию, в зависимости от его настроения).
Проверка токена доступа
С работающим потоком OAuth мы теперь можем проверить токен доступа в серверных службах, чтобы убедиться, что запрос исходит от аутентифицир ованного пользователя. Поскольку Logto является провайдером OIDC, мы можем использовать конечную точку Userinfo для проверки токена доступа. Конечная точка может быть найдена на странице приложения Logto Cloud.
Просто отправьте GET запрос на конечную точку с токеном доступа в заголовке Authorization
. Если токен доступа действителен, конечная точка вернет информацию о пользователе в теле ответа. Вот пример, использующий Node.js:
Вы можете найти полный код в репозитории GitHub.
Бонус: Синхронизация в реальном времени с основным приложением
Возможно, у вас есть собственное приложение для управления расписанием, и с аутентификацией вы можете синхронизировать расписание пользователя в реальном времени, не выходя из беседы. Чтобы увидеть синхронизацию в реальном времени в действии, вы можете перейти к веб-приложению и войти в систему с той же учетной записью, которую вы использовали в демонстрационном GPT.
Заключение
Действия GPT могут быть мощным инструментом для создания персонализированного опыта для ваших пользователей. Если у вас есть какие-либо вопросы или отзывы, пожалуйста, присоединяйтесь к нашему серверу Discord для обсуждения.