简体中文
  • gpt
  • oauth
  • openai

在 GPT 操作中验证用户:构建个人日程助手

在你的 GPT 中为用户构建个性化体验。本教程展示了如何使用 OAuth 创建个人日程助手 GPT。

Gao
Gao
Founder

GPTs 非常适合为特定用例深度定制 ChatGPT 体验。更重要的是,它允许你通过 actions 直接与服务交互。

在本教程中,我们将演示如何使用 OAuth 在你的 GPT 操作中验证用户。我们将构建一个个人日程助手,允许用户直接在 GPT 中管理他们的活动。

最终的 GPT 将如下所示:

左侧是用户与 GPT 的交互;右侧是显示用户日程的 web 应用。使用这种方法还有更多可能性,例如:

  • 创建一个帮助用户阅读电子邮件和新闻的个人助手。
  • 创建一个不需要离开对话即可浏览和预订航班的 GPT。

本教程的结果和资源:

前提条件

  • 截至本文撰写时,GPT 仅对 ChatGPT Plus 及以上用户开放。
  • 一个 Logto Cloud 租户。如果还没有,请 注册,免费使用。
  • 一个你可以控制的域名。将同时用于 GPT 和 Logto Cloud。
  • 一个可以公开 REST API 的 web 应用。在本教程中,我们将使用预构建的日程应用。

创建和配置 GPT

创建 GPT

  1. 打开 ChatGPT,在左侧,点击 Explore GPTs 按钮,然后点击右上角的 Create 按钮。
  2. 在新的 GPT 页面中,为你的 GPT 输入名称和描述。例如,Agenda AssistantManages your agenda directly in the conversation
  3. 你可以选择为你的 GPT 上传一个 logo,或者通过点击加号图标使用 DALL-E 为你生成一个。

创建一个操作

点击底部的 Create new action 按钮。在新页面中,有三个部分:

  • Authentication:此部分允许你配置用户如何在操作中进行身份验证。我们暂时将其保留为 None
  • Schema:以 YAML 格式定义操作 REST APIs 的 OpenAPI 架构。架构越详细,GPT 越能理解用户的意图。
  • Privacy policy:你的操作的隐私政策 URL。

在本教程中,我们有一个预构建的日程应用,它公开了管理用户日程的 REST APIs。你可以在 GitHub 仓库 中找到 OpenAPI 架构。

一旦你粘贴了架构,GPT 将自动识别端点并为你生成一个表格。你可以点击 Test 按钮来测试端点。

添加操作

GPT 将请求你的授权来执行 API 调用。点击 AllowAlways Allow 按钮继续。

测试操作

如果你的端点需要身份验证,你将看到如上所示的错误信息。当我们检查服务器日志时,可以看到 GPT 在发送请求时没有附带身份验证信息。

测试操作错误


API 调用没有身份验证

在 Logto Cloud 中配置自定义域

ChatGPT 要求操作和身份验证端点必须在相同的根域中。例如,如果你的操作端点是 https://api.example.com/,则身份验证端点必须是类似 https://auth.example.com/

为了满足这一要求,我们需要在 Logto Cloud 中配置一个自定义域。在你登录 Logto Cloud 后,点击左侧的 Settings 标签,然后点击顶部的 Domains 标签。

通常只需要几分钟即可完成配置。完成后,你将看到自定义域显示为 In use

自定义域

在 Logto Cloud 中创建一个应用

为了执行 OAuth 验证,我们需要在 Logto Cloud 中创建一个应用。在你登录 Logto Cloud 后,点击左侧的 Applications 标签,然后点击右上角的 Create application 按钮。

在新页面中,点击底部的 "Create app without framework"。选择 "Traditional web" 作为应用类型,并为你的应用输入一个名称,例如 GPT Agenda Assistant。然后点击底部的 "Create application"。

应用创建完成后,导航到 ENDPOINTS & CREDENTIALS 卡(可能需要稍微向下滚动)。点击 Show endpoint details 以展开信息。

Logto 应用配置

配置操作

现在,返回 GPT 操作页面,点击 Authentication 部分,然后选择 OAuth。表单项与 Logto Cloud 中的信息如下:

  • Client ID:Logto Cloud 中的 App ID
  • Client Secret:Logto Cloud 中的 App secret
  • Authorization URL:Logto Cloud 中的 Authorization endpoint
  • Token URL:Logto Cloud 中的 Token endpoint

Scope 字段中输入 openid offline_access;在 "Token Exchange Method" 字段中保持默认值(POST 请求)。

GPT 操作身份验证配置

最后,点击底部的 Save 按钮。

更新 Logto 应用配置

返回 GPT 配置页面,现在你可以在 Actions 部分下看到一个 Callback URL 字段。

复制该 URL,然后返回 Logto Cloud 应用页面。将该 URL 粘贴到 Redirect URIs 部分。

Logto 应用重定向 URI

现在,向下滚动到底部,打开 Always issue Refresh Token 以启用 GPT 的刷新令牌支持。这可以帮助你的用户在 GPT 中保持更长时间的登录状态。

然后点击底部的 Save 按钮。

检查点:测试 OAuth 流程

现在我们已准备就绪,让我们测试 OAuth 流程,以确保一切正常。返回 GPT 配置页面,点击我们创建的操作,然后点击 listItems 端点(第一个)的 Test 按钮。

预览部分会提示你登录。点击 Sign in with [你的操作名称] 按钮,然后完成 OAuth 流程。

测试登录提示

你可以自定义登录体验,例如品牌化和登录方法,请参阅 🎨 自定义登录体验 了解更多信息。

如果一切工作正常,你的后端服务器应收到一个包含访问令牌的请求,位于 Authorization 标头中。在我们的示例中,后端服务器是日程应用。它将在响应主体中返回用户的日程:

测试 API 成功

令人惊讶的是,由于我们的 OpenAPI 架构足够详细,GPT 无需任何额外配置即可执行 API 调用。例如,如果你点击 createItems 端点的 Test 按钮,你将看到 GPT 为你生成请求主体(或者根据其情绪要求你提供缺少的信息)。

测试 API 创建

验证访问令牌

随着 OAuth 流程运行,我们现在可以在后端服务中验证访问令牌,以确保请求来自经过身份验证的用户。由于 Logto 是一个 OIDC 提供商,我们可以使用 Userinfo 端点 验证访问令牌。该端点可以在 Logto Cloud 应用页面找到。

只需发送一个 GET 请求到该端点,并在 Authorization 标头中附上访问令牌。如果访问令牌有效,端点将在响应主体中返回用户的信息。以下是使用 Node.js 的一个示例:

你可以在 GitHub 仓库 中找到完整代码。

额外内容:与主应用的实时同步

你可能有自己的日程应用,通过身份验证,你可以在不离开对话的情况下实时同步用户的日程。若要查看实时同步,请前往 web 应用,并使用你在 demo GPT 中使用的相同账户登录。

结论

GPT actions 可以成为为用户创建个性化体验的强大工具。如果你有任何问题或反馈,请随时加入我们的 Discord 服务器 进行讨论。