ChatGPTプラグイン の作成方法
「OpenAI」の「ChatGPTプラグイン」の記事が面白かったので、かるくまとめました。
前回
1. ChatGPTプラグインの作成手順
「ChatGPTプラグイン」の作成手順は、次のとおりです。
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"
}
2-2. マニフェストファイルの設定項目
「マニフェストファイル」の設定項目は、次のとおりです。
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;
};
}
2-4. 長さ制限
「マニフェストファイル」には長さ制限もあります。これらは変更される可能性があります。
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ドキュメント」には長さ制限もあります。これらは変更される可能性があります。
4. プラグインの実行
「API」「マニフェストファイル」「OpenAPIドキュメント」が準備できたら、プラグインを実行して動作確認します。
ローカルサーバで実行する場合は、プラグインインターフェイスをローカルサーバーに向けることができます。「ChatGPT」にプラグインを接続するには、プラグインストアで「Install an unverified plugin」を選択します。
リモートサーバで実行する場合は、「Develop your own plugin → Install an unverified plugin」を選択する必要があります。「マニフェストファイル」を「./well-known」に追加するだけで、APIのテストを開始できます。
ただし、「マニフェストファイル」を変更する場合、新しい変更をパブリックサイトにデプロイする必要があり、これには時間がかかる場合があります。そのため、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!"
・良い例
[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.
・良い例
The TODO list can add, remove and view the user's TODOs.
(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."
・良い例
[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!
・良い例
{ "todos": [ "get groceries", "walk the dog" ] }
7. デバッグ
デフォルトでは、「ChatGPU UI」にはプラグインの呼び出しやその他の情報は表示されません。モデルがプラグインとどのように相互作用しているかを把握するには、画面左下の「Debug」ボタンをクリックして、デバッグペインを開きます。
関連
この記事が気に入ったらサポートをしてみませんか?