見出し画像

ChatGPTプラグイン の作成方法


「OpenAI」の「ChatGPTプラグイン」の記事が面白かったので、かるくまとめました。

Getting Started - OpenAI API

前回

1. ChatGPTプラグインの作成手順

「ChatGPTプラグイン」の作成手順は、次のとおりです。

(1) APIの実装
(2) マニフェストファイルの作成
(3) OpenAPIドキュメントの作成

2. マニフェストファイルの作成

2-1. マニフェストファイルの基本構成

「マニフェストファイル」は、「ChatGPTプラグイン」のメタデータを記述するファイルです。APIのドメインの「/.well-known/ai-plugin.json」でホストします。

「マニフェストファイル」の基本構成は、次のとおりです。

{
  "schema_version": "v1",
  "name_for_human": "TODO Plugin",
  "name_for_model": "todo",
  "description_for_human": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
  "description_for_model": "Plugin for managing a TODO list. You can add, remove and view your TODOs.",
  "auth": {
    "type": "none"
  },
  "api": {
    "type": "openapi",
    "url": "http://localhost:3333/openapi.yaml",
    "is_user_authenticated": false
  },
  "logo_url": "https://vsq7s0-5001.preview.csb.app/logo.png",
  "contact_email": "support@example.com",
  "legal_info_url": "http://www.example.com/legal"
}

"description_for_human": "TODO リストを管理するためのプラグイン。TODO を追加、削除、表示できます。",
"description_for_model": "TODO リストを管理するためのプラグイン。TODO を追加、削除、表示できます。",

2-2. マニフェストファイルの設定項目

「マニフェストファイル」の設定項目は、次のとおりです。

・schema_version (String) : マニフェストファイルのバージョン
・name_for_model (String) : モデルに提供する名前
・name_for_human (String) : 人間に提供する名前
・description_for_model (String) : モデルに提供する説明
・description_for_human (String) : 人間に提供する説明
・auth (ManifestAuth) : 認証スキーマ
・api (Object) : API仕様
・logo_url (String) : プラグインのロゴのURL
・contact_email (String) : 連絡先
・legal_info_url (String) : プラグインの情報のURL

2-3. 認証スキーマの設定項目

「認証スキーマ」の設定例は、次のとおりです。

# アプリレベルのAPIキー
type ManifestServiceHttpAuth  = BaseManifestAuth & {
  type: 'service_http';
  authorization_type: HttpAuthorizationType;
  verification_tokens: {
    [service: string]?: string;
  };
}

# ユーザーレベルのHTTP認証
type ManifestUserHttpAuth  = BaseManifestAuth & {
  type: 'user_http';
  authorization_type: HttpAuthorizationType;
}

type ManifestOAuthAuth  = BaseManifestAuth & {
  type: 'oauth';

  # OAuth認証フローを開始するためにユーザーが誘導されるOAuthURL
  client_url: string;

  # ユーザーに代わって操作を実行するために必要なOAuthスコープ。
  scope: string;

  # OAuthコードをアクセストークンと交換するために使用されるエンドポイント
  authorization_url: string;

  # OAuthコードをアクセストークンと交換する場合に予測されるcontent-type 
  # 例: content-type: application/json
  authorization_content_type: string;

  # OAuthクライアントIDとシークレットを登録すると、
  # プラグインサービスによって一意のトークンが表示される
  verification_tokens: {
    [service: string]?: string;
  };
}

・HttpAuthorizationType (HttpAuthorizationType) : "bearer", "basic"
・ManifestAuthType (ManifestAuthType) : "none", "user_http", "service_http", "oauth"
・interface BaseManifestAuth (BaseManifestAuth) : type: ManifestAuthType; instructions: string;
・ManifestNoAuth (ManifestNoAuth) : No authentication required: BaseManifestAuth & { type: 'none', }
・ManifestAuth (ManifestAuth) : ManifestNoAuth, ManifestServiceHttpAuth, ManifestUserHttpAuth, ManifestOAuthAuth

2-4. 長さ制限

「マニフェストファイル」には長さ制限もあります。これらは変更される可能性があります。

・name_for_human : 最大50 文字
・name_for_model : 最大50文字
・description_for_human : 最大120文字
・description_for_model : 最大8000文字 (時間の経過とともに減少)
・APIレスポンス : 最大10万文字 (時間の経過とともに減少)

3. OpenAPIドキュメントの作成

3-1. OpenAPIドキュメントの基本構成

「OpenAPIドキュメント」は、RESTful WebサービスのAPIを定義するための仕様書です。APIが多くの機能を提供している場合、モデルにすべての機能を公開する必要はありません。「OpenAPIドキュメント」で必要な機能のみ記述します。

「OpenAPIドキュメント」の基本構成は、次のとおりです。

openapi: 3.0.1
info:
  title: TODO Plugin
  description: A plugin that allows the user to create and manage a TODO list using ChatGPT.
  version: 'v1'
servers:
  - url: http://localhost:3333
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」セクションで定義されている「description」を調べ、プラグインがクエリに関連しているかどうかを判断します。

3-2. 長さ制限

「OpenAPIドキュメント」には長さ制限もあります。これらは変更される可能性があります。

・APIエンドポイントの description / summary フィールドごとに最大200文字
・API パラメータの descriptiobn フィールドは最大200文字

4. プラグインの実行

「API」「マニフェストファイル」「OpenAPIドキュメント」が準備できたら、プラグインを実行して動作確認します。

ローカルサーバで実行する場合は、プラグインインターフェイスをローカルサーバーに向けることができます。「ChatGPT」にプラグインを接続するには、プラグインストアで「Install an unverified plugin」を選択します。

リモートサーバで実行する場合は、「Develop your own plugin → Install an unverified plugin」を選択する必要があります。「マニフェストファイル」を「./well-known」に追加するだけで、APIのテストを開始できます。
ただし、「マニフェストファイル」を変更する場合、新しい変更をパブリックサイトにデプロイする必要があり、これには時間がかかる場合があります。そのため、APIのプロキシとして機能するローカルサーバーを設定することをお勧めします。

Setup a local proxy of your public API

5. 説明の記述

「ChatGPT」でプラグインへのリクエストの可能性があるクエリを実行すると、モデルはマニフェストファイルの「description_for_model」と「OpenAPI ドキュメント」に書かれた説明を読み、プラグインを使うべきかどうかを判断します。

5-1. description_for_model

「description_for_model」は、プラグインの一般的な使用方法をモデルに指示します。全体として、「ChatGPT」の背後にある言語モデルは、自然言語を理解し、指示に従うことができる高い能力を備えています。したがって、プラグインが何をするのか、そしてモデルがどのようにそれを適切に使うべきなのか、一般的な指示を入れるには良い場所です。自然言語を使用し、できれば簡潔でありながら説明的で客観的なトーンで記述してください。どのようなものであるべきかのアイデアを持つために、いくつかの例を見ることができます。
「description_for_model」は、「Plugin for ...」で始め、API が提供するすべての機能を列挙することをお勧めします。

5-2. OpenAPIドキュメント

「OpenAPIドキュメント」は、APIの情報をモデルに提供するのに最適です。各フィールドに情報量の多い名前を使うだけでなく、すべての属性に対して「description」を含めることができます。これは、関数が何をするのか、クエリフィールドがどのような情報を期待するのかについて、自然言語で説明するために使用できます。モデルはこれらを見ることができ、APIを使用する際の指針となります。フィールドが特定の値のみに制限されている場合、「enum」を提供することも可能です。

6. ベストプラクティス

説明の記述のベストプラクティスは、次のとおりです。

(1) 「説明」では、ChatGPTの雰囲気、性格、正確な反応を制御しようとするべきではありません。 ChatGPTは、プラグインに適切な応答を書き込むように設計されています。

・悪い例

When the user asks to see their todo list, always respond with "I was able to find your todo list! You have [x] todos: [list the todos here]. I can add more todos if you'd like!"

ユーザーが「Todoリストを見たい」と言ったら、必ず「あなたのTodoリストを見つけることができました!あなたのTodoリストは[x]件あります。ご希望であれば、さらにTodoを追加することもできますよ!」と答えてください。

・良い例

[no instructions needed for this]

[これについては説明不要]

(2) 「説明」では、ユーザーがプラグインの特定のカテゴリのサービスを要求していない場合、ChatGPTがプラグインを使用することを奨励すべきではありません。

・悪い例

Whenever the user mentions any type of task or plan, ask if they would like to use the TODOs plugin to add something to their todo list.

ユーザーが何らかのタスクや計画を口にするたびに、TODOsプラグインを使って何かをTODOリストに追加したいかどうかを尋ねます。

・良い例

The TODO list can add, remove and view the user's TODOs.

TODOリストは、ユーザーのTODOを追加、削除、閲覧することができます。

(3) 「説明」では、ChatGPTがプラグインを使用するための特定のトリガーを規定するべきではありません。 ChatGPTは、必要に応じてプラグインを自動的に使用するように設計されています。

・悪い例

When the user mentions a task, respond with "Would you like me to add this to your TODO list? Say 'yes' to continue."

ユーザーがタスクに言及したら、「これをあなたのTODOリストに追加しましょうか?続行するには「はい」と答えてください。"

・良い例

[no instructions needed for this]

[これについては説明不要]

(4) 「APIのレスポンス」は、基本的に自然言語応答ではなく生データを返す必要があります。 ChatGPTは、返されたデータを使用して独自の自然言語応答を提供します。

・悪い例

I was able to find your todo list! You have 2 todos: get groceries and walk the dog. I can add more todos if you'd like!

あなたのTodoリストを見つけることができました!食料品の調達と犬の散歩の2つのTodoがあります。ご希望であれば、さらにTodoを追加することもできますよ!

・良い例

{ "todos": [ "get groceries", "walk the dog" ] }

{ "todos": [ "食料品を買う", "犬を散歩させる" ] }.

7. デバッグ

デフォルトでは、「ChatGPU UI」にはプラグインの呼び出しやその他の情報は表示されません。モデルがプラグインとどのように相互作用しているかを把握するには、画面左下の「Debug」ボタンをクリックして、デバッグペインを開きます。

関連



この記事が気に入ったらサポートをしてみませんか?