この記事では、「ツールプラグイン」 とは、ツールプロバイダーファイル、機能コードなどの構造を含む完全なプロジェクトを指します。1つのツールプロバイダーには複数のツール(個々のツール内で提供される追加機能と理解できます)を含めることができ、構造は以下の通りです。
この記事では、Google Search を例に、ツールプラグインを迅速に開発する方法を紹介します。
事前準備
- Difyプラグインスキャフォールドツール
- Python環境、バージョン ≥ 3.12
新規プロジェクトの作成
スキャフォールドコマンドラインツールを実行し、新しいDifyプラグインプロジェクトを作成します。dify にリネームし、/usr/local/bin パスにコピーした場合、以下のコマンドを実行して新しいプラグインプロジェクトを作成できます。
以下では、コマンドラインの例としてdifyを使用します。問題が発生した場合は、difyコマンドをコマンドラインツールの実際のパスに置き換えてください。
プラグインタイプとテンプレートの選択
スキャフォールドツール内のすべてのテンプレートは、完全なコードプロジェクトを提供しています。この記事の例では、Tool プラグインを選択します。
プラグイン開発に慣れている場合は、テンプレートを使用せずに、一般仕様のガイドラインを参照して、さまざまなタイプのプラグイン開発を完了できます。
プラグイン権限の設定
プラグインはDifyプラットフォームの権限も読み取る必要があり、このサンプルプラグインには以下の権限を付与します。- Tools
- Apps
- 永続ストレージStorageを有効にし、デフォルトサイズのストレージを割り当てる
- Endpointの登録を許可する
ターミナル内で方向キーを使用して権限を選択し、「Tab」キーを使用して権限を付与します。すべての権限項目にチェックを入れた後、Enterキーを押してプラグインの作成を完了します。システムは自動的にプラグインプロジェクトコードを生成します。
ツールプラグインの開発
1. ツールプロバイダーファイルの作成
ツールプロバイダーファイルはYAML形式のファイルで、ツールプラグインの基本設定エントリと理解でき、ツールに必要な認証情報を提供するために使用されます。 プラグインテンプレートプロジェクトの/provider パスに移動し、そこにあるyamlファイルを google.yaml にリネームします。この yaml ファイルには、ツールプロバイダーの情報(プロバイダー名、アイコン、作成者などの詳細)が含まれます。この情報はプラグインのインストール時に表示されます。
コード例
/tools ディレクトリに配置されるようにしてください。完全なパスは次のとおりです。
google.yamlファイルは、プラグインプロジェクトにおける絶対パスを使用する必要があります。この例では、プロジェクトのルートディレクトリにあります。YAMLファイル内のidentityフィールドは次のように説明されます:identityには、作成者、名前、ラベル、説明、アイコンなど、ツールプロバイダーの基本情報が含まれます。
- アイコンは添付リソースに属する必要があり、プロジェクトのルートディレクトリにある
_assetsフォルダに配置する必要があります。 - タグは、ユーザーがカテゴリ別にプラグインをすばやく見つけるのに役立ちます。以下は現在サポートされているすべてのタグです。
2. サードパーティサービス認証情報の補完
開発を容易にするため、サードパーティサービスSerpApi が提供する Google Search API を採用することを選択します。SerpApi は使用にあたって API Key の入力を要求するため、yaml ファイル内に credentials_for_provider フィールドを追加する必要があります。
完全なコードは以下の通りです。
credentials_for_providerの子構造は、一般仕様の要件を満たす必要があります。- このプロバイダーにどのツールが含まれているかを指定する必要があります。この例では、
tools/google_search.yamlファイルのみが含まれています。 - プロバイダーとして、基本情報を定義するだけでなく、そのコードロジックの一部を実装する必要があるため、その実装ロジックを指定する必要があります。この例では、機能のコードファイルを
google.pyに配置しましたが、一時的に実装せず、まずgoogle_searchのコードを作成します。
3. ツールyamlファイルの記入
1つのツールプラグインには複数のツール機能を含めることができ、各ツール機能には、ツール機能の基本情報、パラメータ、出力などを含むyaml ファイルで記述する必要があります。
引き続き GoogleSearch ツールを例に、/tools フォルダ内に新しい google_search.yaml ファイルを作成します。
identityには、ツールの基本情報(名前、作成者、ラベル、説明など)が含まれます。parametersパラメータリストname(必須)パラメータ名、一意であり、他のパラメータと重複することはできません。type(必須)パラメータタイプ。現在、string(文字列)、number(数値)、boolean(ブール値)、select(ドロップダウンリスト)、secret-input(暗号化入力フィールド)の5種類をサポートしています。機密情報にはsecret-inputタイプを使用してください。label(必須)パラメータラベル、フロントエンド表示用。form(必須)フォームタイプ。現在、llm、formの2種類をサポートしています。- Agentアプリケーションでは、
llmはLLMが自身で推論するパラメータを示し、formはこのツールを使用するために事前に設定できるパラメータを示します。 - Workflowアプリケーションでは、
llmとformの両方をフロントエンドで入力する必要がありますが、llmのパラメータはツールノードの入力変数として機能します。
- Agentアプリケーションでは、
required必須かどうかllmモードでは、パラメータが必須の場合、Agentはこのパラメータを推論する必要があります。formモードでは、パラメータが必須の場合、ユーザーは対話開始前にフロントエンドでこのパラメータを入力する必要があります。
optionsパラメータオプションllmモードでは、DifyはすべてのオプションをLLMに渡し、LLMはこれらのオプションに基づいて推論できます。formモードでtypeがselectの場合、フロントエンドはこれらのオプションを表示します。
defaultデフォルト値。min最小値、パラメータタイプがnumberの場合に設定できます。max最大値、パラメータタイプがnumberの場合に設定できます。human_descriptionフロントエンド表示用の説明、多言語対応。placeholderフィールド入力ボックスのヒントテキスト。フォームタイプがformで、パラメータタイプがstring、number、secret-inputの場合に設定でき、多言語対応です。llm_descriptionLLMに渡す説明。LLMがこのパラメータをよりよく理解できるように、ここにこのパラメータに関するできるだけ詳細な情報を記述してください。
4. ツールコードの準備
ツールの設定情報を入力した後、ツールの機能コードの作成を開始し、ツールの論理的な目的を実現できます。/toolsディレクトリにgoogle_search.pyを作成し、内容は以下の通りです。
serpapi にリクエストを送信し、self.create_json_message を使用して json 形式のフォーマット済みデータを返すことです。返されるデータ型の詳細については、プラグインのリモートデバッグおよび永続ストレージKVのドキュメントを参照してください。
4. ツールプロバイダーコードの完成
最後に、認証情報検証ロジックを実装するためのプロバイダーの実装コードを作成する必要があります。認証情報検証が失敗した場合、ToolProviderCredentialValidationError例外がスローされます。検証が成功すると、google_searchツールサービスに正しくリクエストが送信されます。
/provider ディレクトリに google.py ファイルを作成し、コードの内容は以下の通りです。
プラグインのデバッグ
プラグインの開発が完了したら、次にプラグインが正常に動作するかをテストする必要があります。Difyは便利なリモートデバッグ方法を提供し、テスト環境でプラグイン機能を迅速に検証するのに役立ちます。 「プラグイン管理」ページに移動して、リモートサーバーアドレスとデバッグキーを取得します。
プラグインプロジェクトに戻り、.env.example ファイルをコピーして .env にリネームし、取得したリモートサーバーアドレスとデバッグキーなどの情報を入力します。
.env ファイル:
python -m main コマンドを実行してプラグインを起動します。プラグインページで、このプラグインがWorkspaceにインストールされていることが確認でき、チームの他のメンバーもこのプラグインにアクセスできます。
プラグインのパッケージ化(オプション)
プラグインが正常に動作することを確認した後、以下のコマンドラインツールを使用してプラグインをパッケージ化し、名前を付けることができます。実行後、現在のフォルダにgoogle.difypkg ファイルが見つかります。これは最終的なプラグインパッケージです。
プラグインの公開(オプション)
プラグインをDify Marketplaceに公開したい場合は、プラグインがDifyマーケットプレイスへの公開の仕様に従っていることを確認してください。審査に合格すると、コードはメインブランチにマージされ、自動的にDify Marketplaceに公開されます。 公開概要さらに探る
クイックスタート:
プラグインインターフェースドキュメント:
- 一般仕様定義 - Manifest構造とツール仕様
- エンドポイント - Endpoint詳細定義
- リバースコール - Dify機能のリバースコール
- モデルスキーマ - モデル
- Agentプラグイン - Agent戦略の拡張
次のステップ
- プラグインのリモートデバッグ - より高度なデバッグテクニックを学ぶ
- 永続ストレージ - プラグインでデータストレージを使用する方法を学ぶ
- Slackボットプラグイン開発例 - より複雑なプラグイン開発事例を見る
- ツールプラグイン - ツールプラグインの高度な機能を探る
このページを編集する | 問題を報告する