GPTs-ActionsのSchemaまとめ

トレンド
この記事は約9分で読めます。

2023年11月6日にOpenAIよりChatGPTの新機能となるGPTsが発表されました。

GPTsを使えば、ノーコードでオリジナルなGPT(自分専用チャットボット)を簡単に作れるとあって、大変な注目を集めています。

GPTsの機能の一つにActionsというのがあり、Actionsを使えば外部APIとの連携が可能になります。これができることでどのような利点があるのか、ChatGPTは語ります。

ChatGPTも推すActions、使わない手はありません。ですが、GPTsと外部APIのやり取りはSchemaというものになっており、それが障壁となって利用を躊躇している方もいらっしゃるのではないでしょうか。

そこで、Schemaについてまとめました。

Schemaを一言で言うと

OpenAPIの仕様に基づくAPIのリクエスト形式やレスポンスデータのデータ構造の定義。

OpenAPIを一言で言うと

Web APIのインターフェースを記述する為の仕様(Specification)。

OpenAPIとChatGPT開発元のOpenAI、似ていますが無関係です。
OpenAIがSchemaの仕様を作ったのではありません。
名前が似ているだけに勘違いする人がいるかも。。。

OpenAPIを年表にまとめると
・2010年:Swagger APIプロジェクトが始動。
・2011年:Swagger Specification 1.0 リリース。
・2014年:Swagger Specification 2.0 リリース。
・2016年:Swagger Specificationは OpenAPI Specification(OAS)に改名。
・2017年:OpenAPI Specification 3.0.0 リリース。
・2021年:OpenAPI Specification 3.1.0 リリース。

OpenAPIとSchemaの関係をまとめると

OpenAPI 特徴

・RESTful API インタフェースの定義(GET、POST等)
・言語に依存しない(Java、Python、Ruby等のAPIに適用可)
・人間とコンピュータの両方が読める記述(ユーザー、AI等)
・定義を元にさまざまなツールで使用可能(GPTビルダー等)

Schema 特徴

・データ構造の定義(リクエスト形式、レスポンスデータ)
・データ型の指定(文字列、数値、ブール値など)
・フィールドの制約設定(必須フィールド、最大・最小の長さ、パターンなど)

GPTビルダーにサンプルとして収録の「weather.example.com」を元にSchemaの構造を解説します。

以下は、サンプルの外部API呼び出しイメージです。

以下は、サンプルのSchemaのコードです。

{
  "openapi": "3.1.0",
  "info": {
    "title": "Get weather data",
    "description": "Retrieves current weather data for a location.",
    "version": "v1.0.0"
  },
  "servers": [
    {
      "url": "https://weather.example.com"
    }
  ],
  "paths": {
    "/location": {
      "get": {
        "description": "Get temperature for a specific location",
        "operationId": "GetCurrentWeather",
        "parameters": [
          {
            "name": "location",
            "in": "query",
            "description": "The city and state to retrieve the weather for",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "deprecated": false
      }
    }
  },
  "components": {
    "schemas": {}
  }
}

以下は、Schemaの親要素です。 (コードと照らし合わせて見て下さい)

openapi必須OpenAPI Specificationのバージョン。
2023年12月時点の最新は3.1.0
info必須APIに関する基本的なメタデータを提供し、APIの概要や詳細を説明。
servers必須APIがホストされているサーバーに関する情報。
paths必須APIが提供する各種エンドポイントと、それらのエンドポイントで利用可能な操作(GET、POST、PUT、DELETEなど)に関する情報を定義。
・APIの各エンドポイントのパス。
・各エンドポイントでサポートされているHTTPメソッド。
・各操作に関する詳細情報、例えばパラメータ、リクエストボディ、レスポンス、セキュリティ要件など。
components任意再利用可能なオブジェクトを定義(共通定義)

以降は、親要素毎の子要素です。

▽infoの要素

title必須APIの名前やタイトル
version必須APIのバージョン。これはOpenAPI仕様のバージョンとは異なります。
description任意APIの詳細な説明
termsOfService任意APIの利用規約へのURL
contact任意APIに関する連絡先情報。名前、URL、電子メールアドレスなどが含まれる
license任意APIのライセンス情報。ライセンスの名前や、ライセンスへのURLを含む

▽serversの要素

url必須サーバーのURL
description任意サーバーに関する説明。サーバーの役割や環境(開発、ステージング、本番など)について説明
variables任意サーバーURL内で使用される変数についての詳細情報。

▽pathsの要素

   構造:APIのエンドポイントのパス
      ├ エンドポイントのHTTPメソッド
        ├ パラメータ (parameters)
        ├ レスポンス (responses)
        ├ リクエストボディ (requestBody)
        ├ セキュリティ要件 (security)
summary任意APIエンドポイントの簡潔な説明(通常は短い一文)
description任意APIエンドポイントの役割や振る舞いを具体的に説明。(記述内容はAIがAPIの仕様を理解するのに役立つ)
operationId任意APIエンドポイントの関数名やメソッド名。(例えば、天気データを提供するサイトのAPI関数がGetCurrentWeather()である場合、”GetCurrentWeather”と記述)
parametersNAリクエストの際に指定するオプションや設定。
NA・・・必要性はAPIエンドポイントの仕様に依存。
deprecated任意APIエンドポイントや操作の推奨有無。(true or false)
デフォルトはfalse。
responses任意APIエンドポイントで想定されるレスポンスの形式を定義。
requestBody任意parametersのクエリでは不十分な複雑な構造のデータ形式を定義。
security任意APIエンドポイントが特定の認証(APIキー,OAuth2,HTTPベーシック認証)を要求する場合に定義。

   ▽parametersの要素

name必須パラメータの名前。
in必須パラメータの位置。いづれかを選択。
(query, header, path, cookie)
description任意パラメータの説明。
required任意パラメータの必須有無。(true or false)
デフォルトはfalse。
schema任意パラメータのデータタイプや構造を定義。
・type (データタイプ),
・format (データフォーマット),
・item (配列の場合の項目のタイプ)
・enum (取り得る値の固定セット)
・nullable (null値許容有無。true or false)
content任意queryパラメータにJSON形式の文字列を送信する場合。
schemaと排他的に使用。

▽componentsの要素

schemas任意データモデルのスキーマを定義。
responses任意共通のレスポンスを定義。
parameters任意エンドポイント間で共通のパラメータを定義。
examples任意リクエストやレスポンスの具体例。
requestBodies任意リクエストボディの定義を再利用。
headers任意HTTPヘッダーの再利用可能な定義。
securitySchemes任意セキュリティスキームの再利用可能な定義。
links任意リンクの再利用可能な定義。
callbacks任意コールバックの再利用可能な定義。

まとめ

GPTsビルドのActions編集画面で初めて目にしたschemaですが、調べると使い方がわかってきました。

一から作るとなると作り慣れないと時間がかかりそうですが、ChatGPTに投げてしまえば即座に作ってくれるので慣れる必要もありません。

丸投げして省エネ作成したGPTアプリがこちらの記事になります。(体験もできます)

ただ、ChatGPTが作るschemaは高精度ですが修正が必要なこともあるので、ChatGPTが作成したものをレビューできるくらいの知識は持ち合わせたいものです。

#それ程までに大きくなかったSchemaの壁

【注目】GPTsメンション機能って何?、どう使う?