2023年11月6日にOpenAIよりChatGPTの新機能となるGPTsが発表されました。
GPTsを使えば、ノーコードでオリジナルなGPT(自分専用チャットボット)を簡単に作れるとあって、大変な注目を集めています。
GPTsの機能の一つにActionsというのがあり、Actionsを使えば外部APIとの連携が可能になります。これができることでどのような利点があるのか、ChatGPTは語ります。
ChatGPTも推すActions、使わない手はありません。ですが、GPTsと外部APIのやり取りはSchemaというものになっており、それが障壁となって利用を躊躇している方もいらっしゃるのではないでしょうか。
そこで、Schemaについてまとめました。
OpenAPIの仕様に基づくAPIのリクエスト形式やレスポンスデータのデータ構造の定義。
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の関係をまとめると
・RESTful API インタフェースの定義(GET、POST等)
・言語に依存しない(Java、Python、Ruby等のAPIに適用可)
・人間とコンピュータの両方が読める記述(ユーザー、AI等)
・定義を元にさまざまなツールで使用可能(GPTビルダー等)
・データ構造の定義(リクエスト形式、レスポンスデータ)
・データ型の指定(文字列、数値、ブール値など)
・フィールドの制約設定(必須フィールド、最大・最小の長さ、パターンなど)
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”と記述) | |
parameters | NA | リクエストの際に指定するオプションや設定。 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の壁