generated at
Actionsの始め方

GPTのアクションを作成するには、以下の3つのステップが必要です。

APIを構築する
OpenAPI YAMLまたはJSON形式でAPIを文書化する
ChatGPT UIでスキーマをGPTに公開する

このセクションの残りの部分では、GPTのカスタムアクションを定義することにより、TODOリストGPTを作成することに焦点を当てます。

スキーマ定義
TODOリストGPTの基本を作成したら、次のステップは、APIを文書化するためのOpenAPI仕様を構築することです。ChatGPTのモデルは、スキーマで定義されているAPIの構造のみを認識します。APIが広範囲にわたる場合、そのすべての機能をモデルに公開する必要はありません。特定のエンドポイントのみを選択して含めることができます。たとえば、ソーシャルメディアAPIがある場合、GETリクエストを介してサイトのコンテンツにモデルがアクセスできるようにしたいと思うかもしれませんが、スパムの可能性を減らすために、モデルがユーザーの投稿にコメントできないようにすることができます。

OpenAPI仕様は、APIの上に存在するラッパーです。基本的なOpenAPI仕様は次のようになります。

yaml
openapi: 3.0.1 info: title: TODO Action description: An action that allows the user to create and manage a TODO list using a GPT. version: 'v1' servers: - url: https://example.com paths: /todos: get: operationId: getTodos summary: Get the list of todos responses: "200": description: OK content: application/json: schema: $ref: '#/components/schemas/getTodosResponse' components: schemas: getTodosResponse: type: object properties: todos: type: array items: type: string description: The list of todos.

まず、仕様のバージョン、タイトル、説明、バージョン番号を定義します。ChatGPTでクエリが実行されると、infoセクションで定義されている説明を調べて、そのアクションがユーザークエリに関連しているかどうかを判断します。

OpenAPI仕様では、以下の制限事項に注意してください。これらは変更される可能性があります。
API仕様の各APIエンドポイントの説明/概要フィールドは最大300文字
API仕様の各APIパラメータの説明フィールドは最大700文字


ホストされたOpenAPI仕様
Actionsでは、変更を追跡するために、APIのOpenAPI仕様をホストします。GPTクリエーターのUIを使用して、既存のOpenAPI仕様をインポートしたり、新しい仕様をゼロから作成したりできます。

ファイルを含める
POSTリクエストには、会話から最大10個のファイル(DALL-Eで生成された画像を含む)を含めることができます。それらは5分間有効なURLとして送信されます。

ファイルをPOSTリクエストの一部にするには、パラメータ名をopenaiFileIdRefsにし、説明でAPIが期待しているファイルのタイプと数量をモデルに説明する必要があります。

openaiFileIdRefsパラメータには、JSONオブジェクトの配列が設定されます。各オブジェクトには以下が含まれます。
name
ファイルの名前。DALL-Eで作成された場合は自動生成された名前になります。
id
ファイルの安定した識別子。
mime_type
ファイルのMIMEタイプ。ユーザーがアップロードしたファイルの場合、これはファイル拡張子に基づきます。
download_link
5分間有効なファイルを取得するためのURL。

2つの要素を持つopenaiFileIdRefs配列の例を以下に示します。
json
[ { "name": "dalle-Lh2tg7WuosbyR9hk", "id": "file-XFlOqJYTPBPwMZE3IopCBv1Z", "mime_type": "image/webp", "download_link": "https://files.oaiusercontent.com/file-XFlOqJYTPBPwMZE3IopCBv1Z?se=2024-03-11T20%3A29%3A52Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D31536000%2C%20immutable&rscd=attachment%3B%20filename%3Da580bae6-ea30-478e-a3e2-1f6c06c3e02f.webp&sig=ZPWol5eXACxU1O9azLwRNgKVidCe%2BwgMOc/TdrPGYII%3D" }, { "name": "2023 Benefits Booklet.pdf", "id": "file-s5nX7o4junn2ig0J84r8Q0Ew", "mime_type": "application/pdf", "download_link": "https://files.oaiusercontent.com/file-s5nX7o4junn2ig0J84r8Q0Ew?se=2024-03-11T20%3A29%3A52Z&sp=r&sv=2021-08-06&sr=b&rscc=max-age%3D299%2C%20immutable&rscd=attachment%3B%20filename%3D2023%2520Benefits%2520Booklet.pdf&sig=Ivhviy%2BrgoyUjxZ%2BingpwtUwsA4%2BWaRfXy8ru9AfcII%3D" } ]
アクションには、ユーザーがアップロードしたファイル、DALL-Eで生成された画像、およびCode Interpreterで作成されたファイルを含めることができます。

OpenAPIの例
yaml
/createWidget: post: operationId: createWidget summary: Creates a widget based on an image. description: Uploads a file reference using its file id. This file should be an image created by DALL·E or uploaded by the user. JPG, WEBP, and PNG are supported for widget creation. requestBody: required: true content: application/json: schema: type: object properties: openaiFileIdRefs: <<<<<<<<<<<<<これ type: array items: type: string
このスキーマではopenaiFileIdRefsを文字列の配列として示していますが、実行時には前述のようなJSONオブジェクトの配列が設定されます。

Consequentialフラグ
OpenAPI仕様では、以下に示すように、特定のエンドポイントを「consequential」として設定できるようになりました。

yaml
paths: /todo: get: operationId: getTODOs description: Fetches items in a TODO list from the API. security: [] post: operationId: updateTODOs description: Mutates the TODO list. x-openai-isConsequential: true

consequentialなアクションの良い例は、ホテルの部屋を予約してユーザーに代わって支払うことです。
x-openai-isConsequentialフィールドがtrueの場合、その操作は「実行前に必ずユーザーに確認を求める」ものとして扱われ、 「常に許可」ボタンは表示されません
x-openai-isConsequentialフィールドがfalseの場合、「常に許可」ボタンが表示されます。
このフィールドが存在しない場合、すべてのGET操作はデフォルトでfalse、その他の操作はデフォルトでtrueになります。


複数の認証スキーマ
アクションを定義する際、認証を必要としないエンドポイントとともに、単一の認証タイプ(OAuthまたはAPIキー)を組み合わせることができます。

アクション認証の詳細については、アクション認証のページを参照してください。


アクションのテスト
GPTエディタで、アクションを追加すると、スキーマの下に「利用可能なアクション」という新しいセクションが表示されます。これはスキーマを解析することで生成されます。アクションの名前、メソッド、およびパスをプレビューできます。また、「テスト」ボタンが表示され、アクションを試すことができます。「テスト」を押すと、GPTエディタのプレビューセクションに、アクションの実行を「許可」、「常に許可」、または「拒否」するリクエストが表示されます。これらは、エンドユーザーにアクションの動作をより制御できるようにするためのユーザー確認です。

また、プレビューモードでは、意図しない動作を理解するのに役立つさまざまなデバッグ情報が利用できます。すべてが期待どおりに機能している場合は、右上隅でGPTを保存または更新できます。


説明の書き方
ユーザーがアクションをトリガーする可能性のあるクエリを行うと、モデルはスキーマ内のエンドポイントの説明を調べます。他の言語モデルをプロンプトする場合と同様に、最適な動作を見つけるために複数のプロンプトと説明をテストする必要があります。

スキーマは、利用可能な関数やそのパラメータなど、APIに関する詳細情報をモデルに提供するのに最適な場所です。各フィールドに表現力豊かで有益な名前を使用する以外にも、スキーマにはすべての属性に対して「description」フィールドを含めることができます。これらのフィールドを使用して、各メソッドの機能やクエリフィールドが必要とする情報を説明する自然言語の説明を提供できます。モデルはこれらを見ることができ、APIの使用を導きます。フィールドが特定の値のみに制限されている場合は、説明的なカテゴリ名を持つ「enum」を提供することもできます。
>💡descriptionを書くことで、より正確な動作になる?

GPTの説明では、アクションを一般的にどのように使用するかをGPTに指示する自由があります。全体的に、ChatGPTの背後にある言語モデルは、自然言語を理解し、指示に従う能力が非常に高いです。したがって、これはアクションが何をするのか、GPTがそれを適切に使用する方法に関する一般的な指示を記載するのに適した場所です。自然言語を使用し、できれば簡潔でありながら説明的で客観的な口調で記述してください。これがどのようなものであるべきかを理解するために、いくつかの例を見ることができます。


ベストプラクティス
GPTのインスタクションやスキーマの記述、およびAPI応答の設計時に従うべきベストプラクティスをいくつか紹介します。

説明では、ユーザーがアクションの特定のサービスカテゴリを要求していない場合に、GPTにアクションの使用を促すべきではありません

悪い例:
>ユーザーがタスクの種類を言及するたびに、TODO アクションを使用して TODO リストに追加するかどうかを尋ねます。

良い例:
>TODOリストでは、ユーザーのTODOの追加、削除、表示ができます。

説明では、GPTがアクションを使用するための特定のトリガーを規定すべきではありません。ChatGPTは、必要に応じて自動的にアクションを使用するように設計されています。

悪い例:
>ユーザーがタスクについて言及したら、「これをTODOリストに追加しましょうか?続行するには「はい」と言ってください。」と応答します。

良い例:
>(この部分には指示は不要)


APIからのアクションレスポンスは、必要でない限り、自然言語の応答ではなく生データを返すべきです。GPTは、返されたデータを使用して独自の自然言語応答を提供します。

悪い例:
>TODOリストが見つかりました!あなたには2つのTODOがあります: 食料品を買う、犬の散歩をする。必要であれば、さらにTODOを追加できます!

良い例:
>{ "todos": [ "get groceries", "walk the dog" ] }


制限事項
アクションを使用する際には、いくつかの制限事項に注意する必要があります。

カスタムヘッダーはサポートされていません
Google、Microsoft、AdobeのOAuthドメインを除き、OAuthフローで使用されるすべてのドメインは、プライマリエンドポイントに使用されるドメインと同じでなければなりません
リクエストとレスポンスのペイロードは、それぞれ100,000文字未満でなければなりません
リクエストは45秒後にタイムアウトします