Tool プラグイン
このドキュメントでは、Difyのツールプラグインを開発する方法を詳しく説明します。Google Searchを例に、プラグインの初期化、テンプレートの選択、ツールプロバイダー設定ファイルの定義、サードパーティサービス認証情報の追加、ツール機能コードの実装、デバッグ、パッケージ化と公開までの完全なツールプラグイン開発フローを紹介します。
ツールとは、Chatflow / Workflow / Agent タイプのアプリケーションから呼び出すことができるサードパーティサービスを指し、Difyアプリケーションの能力を強化するための完全なAPI実装機能を提供します。例えば、アプリケーションにオンライン検索や画像生成などの追加機能を追加します。
この記事では、「ツールプラグイン」 とは、ツールプロバイダーファイル、機能コードなどの構造を含む完全なプロジェクトを指します。1つのツールプロバイダーには複数のツール(個々のツール内で提供される追加機能と理解できます)を含めることができ、構造は以下の通りです。
この記事では、Google Search
を例に、ツールプラグインを迅速に開発する方法を紹介します。
事前準備
- Difyプラグインスキャフォールドツール
- Python環境、バージョン ≥ 3.12
プラグイン開発用のスキャフォールドツールの準備方法については、開発ツールの初期化を参照してください。初めてプラグインを開発する場合は、まずDifyプラグイン開発:Hello Worldガイドを読むことをお勧めします。
新規プロジェクトの作成
スキャフォールドコマンドラインツールを実行し、新しい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_description
LLMに渡す説明。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ボットプラグイン開発例 - より複雑なプラグイン開発事例を見る
- ツールプラグイン - ツールプラグインの高度な機能を探る