26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【GPTs Actions】GPTsの外部API連携方法

Last updated at Posted at 2024-02-18

目的

昨今話題のGPTs、皆さんは触ってみたでしょうか。
GPTをカスタマイズできるこの機能ですが、あらかじめGPTに何をやらせたいか程度の指示を与えるだけではその魅力の数パーセントしか引き出せていません。
その程度であれば無印のGPTでも賄えますからね。

今回はGPTsの魅力を一気に加速させる外部APIとの連携方法の手順をまとめました。
原理原則というよりかはサクッと動くものを作ることに重心を置いています。

今回はQiitaから自身の投稿記事を取得するGPTsを作っていきます。

環境

※あらかじめアカウントと個人用アクセストークンの作成までしておいてください。↓
https://qiita.com/settings/applications
image.png

手順

ではサクッとやっていきます。

GPTsの基本を作成

image.png

項目 内容
Name Qiitaの記事ゲッター
Description あなたのQiitaの記事を取得します
Instructions Qiitaから記事を1つ取得してください
Conversation starters 記事を取得

Knowledge, Capabilities は今回は無しにします。

Actionsを設定

さて、本日メインのActionsになります。
公式ドキュメントはこちら → https://platform.openai.com/docs/actions/introduction

GPTsの画面の Actions > Create new action から設定画面へ遷移してください
image.png

下記項目の設定ができる画面が表示されます。

項目 内容
認証 APIの認証方法(None, API Key,OAuth)
スキーマ API用のOpenAPI仕様を定義
プライバシーポリシー GPTsを使う人に向けてのプライバシーポリシー

※プライバシーポリシーについてはGPTsを公開する場合のみ必要になるので、今回は割愛します。
必要な方はGoogle Sitesとかでサクッと作りましょう。
参考:プライバシーポリシー

認証

Authenticationが「None」となっているので、
あらかじめ作っておいたOpenWeatherのAPI Keyを設定します。
Qiitaの認証認可はBearerを使用します。
https://qiita.com/api/v2/docs#%E8%AA%8D%E8%A8%BC%E8%AA%8D%E5%8F%AF

image.png

Schema

ここでは、どのAPIをどのようなパラメータを含めて実行するか、そしてどのようなレスポンスを期待するかの定義が必要になります。

認証ユーザーの記事を取得するAPIの呼び出し方法は以下になります。
https://qiita.com/api/v2/docs#get-apiv2authenticated_useritems

https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=20

しかし、公式ドキュメントを見て手作業で定義していくにはあまりにも面倒な作業になります。
こんな時こそGPTsの手を借りましょう。
API用のOpenAPI仕様を定義するGPTsが公式から提供されています。

このGPTsに以下のプロンプトを投げてみてください。

このAPI用のOpenAPI仕様3.1を定義してください
OpenAPI 3.1.0を使用してください
https://qiita.com/api/v2/authenticated_user/items?page=1&per_page=20

そうするとGPTsからymlファイルが提供されるかと思います。
私の場合は以下になりました。

openapi: 3.1.0
info:
  title: Qiita API
  description: Qiitaの認証済みユーザーの投稿を取得するAPI。
  version: 1.0.0
servers:
  - url: https://qiita.com/api/v2
    description: Qiita API サーバ
paths:
  /authenticated_user/items:
    get:
      operationId: getAuthenticatedUserItems
      summary:、 認証済みユーザーの投稿を取得
      description: 認証済みユーザーの投稿リストをページネーションで取得します。
      parameters:
        - in: query
          name: page
          required: false
          description: ページ番号
          schema:
            type: integer
            default: 1
        - in: query
          name: per_page
          required: false
          description: 1ページあたりのアイテム数
          schema:
            type: integer
            default: 20
      responses:
        '200':
          description: 成功時のレスポンス
          content:
            application/json:
              schema: 
                type: array
                items: 
                  type: object
                  properties:
                    id:
                      type: string
                      description: 投稿のID
                    title:
                      type: string
                      description: 投稿のタイトル
                    created_at:
                      type: string
                      format: date-time
                      description: 作成日時
                    updated_at:
                      type: string
                      format: date-time
                      description: 更新日時

それをSchemaに張り付けましょう。
image.png

構文にエラーがなければAvailable actionsに定義したAPIが表示されるはずです。

では、実際に動作を見てみましょう。
初めて実行する場合、リクエスト先のサイトの信頼の有無を問われます。
こちらはAllow、もしくはAlways Allowを選択してください。
image.png

無事取得できましたね。
ちなみに [debug] Calling HTTP endpoint[debug] Response receivedを開くとリクエストやレスポンスの内容が見れますので、実際に動作しているか確認もしやすいです。
image.png

まとめ

以上、GPTsで外部APIと連携する方法でした。
認証方法がOAuthとかになると、また設定がややこしくなりので、そこらへんも次回まとめようと思います。

これからの時代は生成系AIをいかに使いこなせるかが重要になってくるため、試行錯誤が楽しみですね。

26
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
25

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?