在 GPT actions 中驗證用戶:建立個人行事曆助理
直接在你的 GPT 中為用戶建立個人化體驗。本教程將展示如何使用 OAuth 建立個人行事曆助理 GPT。
GPTs 非常適合用於深度自訂 ChatGPT 的特定使用案例。更好的是,它允許你使用 actions 與你的服務直接互動。
在本教程中,我們將向你展示如何使用 OAuth 驗證在 GPTs actions 中的用戶。我們將建立一個個人行事曆助理,允許用戶直接在 GPT 中管理他們的活動。
最終的 GPT 會像這樣:
左側是用戶與 GPT 的互動;右側是顯示用戶行事曆的 web 應用。此方法還有更多可能性,例如:
- 創建個人助理,幫助用戶消化電子郵件和新聞。
- 創建一個 GPT 來瀏覽和預訂航班,而不離開對話。
本教程的結果和資源:
- 最終的 GPT 可在 ChatGPT 上獲得。
- 該 demo web 應用可在 gpt-agenda.fordemo.app 上找到。
- 完整的代碼可在 GitHub 上獲得。
先決條件
- 截至撰寫本文時,GPTs 僅對 ChatGPT Plus 及以上用戶可用。
- 一個 Logto Cloud 租戶。如果你沒有,可以 免費註冊。
- 你可以 控制的域名。它將用於 GPT 和 Logto Cloud。
- 可以公開 REST API 的 web 應用。在本教程中,我們將使用預建的行事曆應用。
創建和配置 GPT
創建 GPT
- 打開 ChatGPT,在左側,點擊 Explore GPTs 按鈕,然後點擊右上角的 Create 按鈕。
- 在新 GPT 頁面上,輸入你的 GPT 的名稱和描述。例如,Agenda Assistant 和 Manages your agenda directly in the conversation。
- 你可以選擇性地上傳 GPT 的 logo,或者通過點擊加號圖標使用 DALL-E 生成一個。
創建 action
點擊底部的 Create new action 按鈕。在新頁面上,有三個部分:
- Authentication:此部分允許你配置用戶如何使用你的 action 進行身份驗證。我們現在將其保留為 None。
- Schema:定義你的 action 的 REST API 的 OpenAPI 方案,以 YAML 格式顯示。方案越詳細,GPT 就越能理解用戶的意圖。
- Privacy policy:你的 action 的隱私政策 URL。
在本教程中,我們有一個預建的行事曆應用,公開用於管理用戶行事曆的 REST API。你可以在 GitHub repo 中找到 OpenAPI 方案。
一旦你粘貼了方案,GPT 將自動識別端點並為你生成表格。你可以點擊 Test 按鈕來測試這些端點。
GPT 將請求你的授權以執行 API 調用。點擊 Allow 或 Always Allow 按鈕以繼續。
如果你的端點需要身份驗證,你將看到類似上圖的錯誤信息。當我們檢查服務器日誌時,能看到 GPT 正在發送沒有任何身份驗證信息的請求。
在 Logto Cloud 中配置自訂域
ChatGPT 要求 actions 和身份驗證端點都在同一個根域名中。例如,如果你的 actions 端點是 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 以展開信息。
配置 action
現在,返回到 GPT action 頁面,點擊 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 request)。
最後,點擊底部的 Save 按鈕。
更新 Logto 應用配置
返回到 GPT 設定頁面,現在你可以看到 Callback URL 欄位在 Actions 部分下方。
複製該 URL,然後返回到 Logto Cloud 應用頁面。將該 URL 粘貼到 Redirect URIs 部分。
現在,滑動到底部,打開 Always issue Refresh Token 以啟用 GPT 的刷新 token 支援。這可以幫助你的用戶在 GPT 中保持更長時間的登錄狀態。
然後點擊底部的 Save 按鈕。
檢查點:測試 OAuth 流程
現在我們已經準備好一切,讓我們測試 OAuth 流程,確保一切如預期運作。返回到 GPT 設定頁面,點擊我們創建的 action,然後點擊 listItems 端點的 Test 按鈕(第一個)。
預覽部分將提示你登錄。點擊 Sign in with [your action name] 按鈕,然後完成 OAuth 流程。
你可以自訂登錄體驗,例如品牌設置和登錄方法等,詳細信息請參考 🎨 Customize sign-in experience。
如果一切如預期運作,你的後端服務器應收到帶有 Authorization
標題中訪問 token 的請求。在我們的例子中,後端服務器是行事曆應用。它會在返回体中返回用戶的行事曆:
令人驚奇的是,由於我們的 OpenAPI 方案詳盡,GPT 可以在沒有任何額外配置的情況下執行 API 調用。例如,如果你點擊 createItems 端點的 Test 按鈕,你會看到 GPT 正在為你生成請求體(或要求你提供缺失的信息,取決於它的心情)。
驗證訪問 token
有了 OAuth 流程的運作,我們現在可以在後端服務中驗證訪問 token,以確保請求來自經過身份驗證的用戶。由於 Logto 是一個 OIDC 供應商,我們可以使用 Userinfo endpoint 來驗證訪問 token。可以在 Logto Cloud 應用頁面中找到該端點。
只需向端點發送帶有訪問 token 的 GET 請求在 Authorization
標頭中。如果訪問 token 有效,端點將在返回体中返回用戶的信息。以下是一個使用 Node.js 的例子:
你可以在 GitHub repo 中找到完整的代碼。
獎勵:與主應用的實時同步
你可能有自己的行事曆應用,透過身份驗證可以在不離開對話的情況下實時同步用戶的行事曆。要查看實時同步的效果,你可以前往 web 應用 並使用在 demo GPT 中使用的相同帳戶登錄。
結論
GPT actions 是建立個人化用戶體驗的強大工具。如果你有任何問題或反饋,請隨時加入我們的 Discord 伺服器 討論。